Browse Source

ENH: add a simple assembler test

Alex
Alexander Neundorf 18 năm trước cách đây
mục cha
commit
5021eb90b9

+ 22 - 0
Tests/Assembler/CMakeLists.txt

@@ -0,0 +1,22 @@
+project(Assembler)
+
+set(SRCS)
+
+# if no file has been set as source and we are on linux with an x86 processor try to use the gas/as assembler
+if(NOT SRCS AND CMAKE_SYSTEM_NAME MATCHES Linux AND CMAKE_SYSTEM_PROCESSOR MATCHES "[ix].?86$")
+  message(STATUS "Trying to enable ASM-ATT for Linux/x86")
+  enable_language(ASM-ATT)
+  if(CMAKE_ASM-ATT_COMPILER_WORKS)
+    message(STATUS "Trying to enable ASM-ATT for Linux/x86 - succeeded")
+    # this assembler file was created using gcc -S main.c
+    set(SRCS main-linux-x86-gas.s)
+  endif(CMAKE_ASM-ATT_COMPILER_WORKS)
+endif(NOT SRCS AND CMAKE_SYSTEM_NAME MATCHES Linux AND CMAKE_SYSTEM_PROCESSOR MATCHES "[ix].?86$")
+
+if(NOT SRCS)
+  message(STATUS "No assembler enabled, using C")
+  set(SRCS main.c)
+endif(NOT SRCS)
+
+add_executable(HelloAsm ${SRCS})
+set_target_properties(HelloAsm PROPERTIES LINKER_LANGUAGE C)

+ 29 - 0
Tests/Assembler/main-linux-x86-gas.s

@@ -0,0 +1,29 @@
+	.file	"main.c"
+	.section	.rodata
+	.align 4
+.LC0:
+	.string	"hello assembler world, %d arguments  given\n"
+	.text
+.globl main
+	.type	main, @function
+main:
+	leal	4(%esp), %ecx
+	andl	$-16, %esp
+	pushl	-4(%ecx)
+	pushl	%ebp
+	movl	%esp, %ebp
+	pushl	%ecx
+	subl	$20, %esp
+	movl	(%ecx), %eax
+	movl	%eax, 4(%esp)
+	movl	$.LC0, (%esp)
+	call	printf
+	movl	$0, %eax
+	addl	$20, %esp
+	popl	%ecx
+	popl	%ebp
+	leal	-4(%ecx), %esp
+	ret
+	.size	main, .-main
+	.ident	"GCC: (GNU) 4.1.2 20060928 (prerelease) (Ubuntu 4.1.1-13ubuntu5)"
+	.section	.note.GNU-stack,"",@progbits

+ 7 - 0
Tests/Assembler/main.c

@@ -0,0 +1,7 @@
+#include <stdio.h>
+
+int main(int argc, char** argv)
+{
+  printf("hello assembler world, %d arguments  given\n", argc);
+  return 0;
+}

+ 1 - 0
Tests/CMakeLists.txt

@@ -47,6 +47,7 @@ IF(BUILD_TESTING)
   ADD_TEST_MACRO(MacroTest miniMacroTest)
   ADD_TEST_MACRO(Framework bar)
   ADD_TEST_MACRO(Properties Properties)
+  ADD_TEST_MACRO(Assembler HelloAsm)
 
   # add tests with more complex invocations
   ADD_TEST(TargetName ${CMAKE_CTEST_COMMAND}