2a095477fd46a07d9da47ad05802dc8b1c6b3a26
[tinycc.git] / tests / CMakeLists.txt
blob2a095477fd46a07d9da47ad05802dc8b1c6b3a26
1 include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR})
3 set(TCC_CFLAGS -I${CMAKE_SOURCE_DIR} -I${CMAKE_SOURCE_DIR}/include -B${CMAKE_BINARY_DIR})
4 if(WIN32)
5   set(TCC_CFLAGS ${TCC_CFLAGS} -I${CMAKE_SOURCE_DIR}/win32/include)
6 else()
7   set(TCC_MATH_LDFLAGS -lm)
8   set(LIBTCC_LDFLAGS -ldl -lm -Wl,-rpath=${CMAKE_BINARY_DIR})
9 endif()
11 add_executable(abitest-cc abitest.c)
12 if(NOT WIN32)
13   target_link_libraries(abitest-cc libtcc dl)
14 endif()
15 add_test(NAME abitest-cc WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMAND abitest-cc lib_path=${CMAKE_BINARY_DIR} include=${CMAKE_SOURCE_DIR}/include)
17 set(ABITEST_TCC abitest-tcc${CMAKE_EXECUTABLE_SUFFIX})
18 get_property(LIBTCC_LIB TARGET libtcc PROPERTY LOCATION)
19 add_custom_command(OUTPUT ${ABITEST_TCC} COMMAND tcc ${TCC_CFLAGS} -g ${CMAKE_CURRENT_SOURCE_DIR}/abitest.c ${LIBTCC_LDFLAGS} ${LIBTCC_LIB} -o ${ABITEST_TCC} DEPENDS tcc abitest.c)
20 add_custom_target(abitest-tcc-exe ALL DEPENDS ${ABITEST_TCC})
22 add_test(NAME abitest-tcc WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${ABITEST_TCC} lib_path=${CMAKE_BINARY_DIR} include=${CMAKE_SOURCE_DIR}/include)
24 add_executable(tcctest-cc tcctest.c)
25 target_link_libraries(tcctest-cc libtcc)
26 set_target_properties(tcctest-cc PROPERTIES COMPILE_FLAGS -std=gnu99)
28 find_package(PythonInterp)
29 if(PYTHONINTERP_FOUND)
30   set(TCC_TEST_CFLAGS ${TCC_CFLAGS} -B${CMAKE_BINARY_DIR} -I${CMAKE_BINARY_DIR})
31   if(WIN32)
32     set(TCC_TEST_CFLAGS ${TCC_TEST_CFLAGS} -I${CMAKE_SOURCE_DIR}/win32/include/winapi)
33   endif()
34   set(TCC_TEST_SOURCE ${TCC_TEST_CFLAGS} ${TCC_MATH_LDFLAGS} -run ${CMAKE_CURRENT_SOURCE_DIR}/tcctest.c)
35   set(TCC_TEST_RUN ${TCC_TEST_CFLAGS} ${TCC_NATIVE_FLAGS} -DONE_SOURCE -run ${CMAKE_SOURCE_DIR}/tcc.c)
36   get_property(TCC TARGET tcc PROPERTY LOCATION)
37   get_property(TCCTESTCC TARGET tcctest-cc PROPERTY LOCATION)
38   set(TCCTEST_PY ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tcctest.py ${TCCTESTCC})
39   add_test(test1 ${TCCTEST_PY} ${TCC} ${TCC_TEST_SOURCE})
40   add_test(test2 ${TCCTEST_PY} ${TCC} ${TCC_TEST_RUN} ${TCC_TEST_SOURCE})
41   add_test(test3 ${TCCTEST_PY} ${TCC} ${TCC_TEST_RUN} ${TCC_TEST_RUN} ${TCC_TEST_SOURCE})
43   # Object + link output
44   set(TEST4 test4${CMAKE_EXECUTABLE_SUFFIX})
45   add_custom_command(OUTPUT test4.o COMMAND tcc ${TCC_TEST_CFLAGS} ${CMAKE_CURRENT_SOURCE_DIR}/tcctest.c -c -o test4.o DEPENDS tcc tcctest.c)
46   add_custom_command(OUTPUT ${TEST4} COMMAND tcc ${TCC_TEST_CFLAGS} test4.o -o ${TEST4} DEPENDS tcc test4.o)
47   add_custom_target(test4-exe ALL DEPENDS ${TEST4})
48   add_test(test4 ${TCCTEST_PY} ${CMAKE_CURRENT_BINARY_DIR}/${TEST4})
50   # Dynamic output
51   set(TEST5 test5${CMAKE_EXECUTABLE_SUFFIX})
52   add_custom_command(OUTPUT ${TEST5} COMMAND tcc ${TCC_TEST_CFLAGS} ${CMAKE_CURRENT_SOURCE_DIR}/tcctest.c -o ${TEST5} DEPENDS tcc tcctest.c)
53   add_custom_target(test5-exe ALL DEPENDS ${TEST5})
54   add_test(test5 ${TCCTEST_PY} ${CMAKE_CURRENT_BINARY_DIR}/${TEST5})
56   if(TCC_BCHECK)
57     # Dynamic output + bound check
58     set(TEST6 test6${CMAKE_EXECUTABLE_SUFFIX})
59     add_custom_command(OUTPUT ${TEST5} COMMAND tcc ${TCC_TEST_CFLAGS} ${CMAKE_CURRENT_SOURCE_DIR}/tcctest.c -b -o ${TEST6} DEPENDS tcc tcctest.c)
60     add_custom_target(test6-exe ALL DEPENDS ${TEST6})
61     add_test(test6 ${TCCTEST_PY} ${CMAKE_CURRENT_BINARY_DIR}/${TEST6})
62   endif()
64   if(0)
65     # Static output
66     set(TEST7 test7${CMAKE_EXECUTABLE_SUFFIX})
67     add_custom_command(OUTPUT ${TEST7} COMMAND tcc ${TCC_TEST_CFLAGS} ${CMAKE_CURRENT_SOURCE_DIR}/tcctest.c -static -o ${TEST7} DEPENDS tcc tcctest.c)
68     add_custom_target(test7-exe ALL DEPENDS ${TEST7})
69     add_test(test7 ${TCCTEST_PY} ${CMAKE_CURRENT_BINARY_DIR}/${TEST7})
70   endif()
71 endif()
73 set(MORETESTS
74  00_assignment
75  01_comment
76  02_printf
77  03_struct
78  04_for
79  05_array
80  06_case
81  07_function
82  08_while
83  09_do_while
84  10_pointer
85  11_precedence
86  12_hashdefine
87  13_integer_literals
88  14_if
89  15_recursion
90  16_nesting
91  17_enum
92  18_include
93  19_pointer_arithmetic
94  20_pointer_comparison
95  21_char_array
96  22_floating_point
97  23_type_coercion
98  24_math_library
99  25_quicksort
100  26_character_constants
101  27_sizeof
102  28_strings
103  29_array_address
104  31_args
105  32_led
106  33_ternary_op
107  35_sizeof
108  36_array_initialisers
109  37_sprintf
110  38_multiple_array_index
111  39_typedef
112  40_stdio
113  41_hashif
114  42_function_pointer
115  43_void_param
116  44_scoped_declarations
117  45_empty_for
118  47_switch_return
119  48_nested_break
120  49_bracket_evaluation
121  50_logical_second_arg
122  51_static
123  52_unnamed_enum
124  54_goto
125  55_lshift_type
127 if(WIN32)
128   list(REMOVE_ITEM MORETESTS 24_math_library)
129   list(REMOVE_ITEM MORETESTS 28_strings)
130 endif()
131 foreach(testfile ${MORETESTS})
132   add_test(NAME ${testfile} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/tests2
133            COMMAND tcc ${TCC_CFLAGS} ${TCC_MATH_LDFLAGS} -run ${testfile}.c - arg1 arg2 arg3 arg4 | ${DIFF} - ${testfile}.expect)
134 endforeach()