mirror of
https://github.com/mirror/tinycc.git
synced 2025-01-03 04:30:08 +08:00
41d76e1fcb
I really should do this when less tired; I keep breaking one platform while fixing another. I've also fixed some Windows issues with tcctest since Windows printf() uses different format flags to those on Linux, and removed some conditional compilation tests in tcctest since they now should work.
134 lines
4.7 KiB
CMake
134 lines
4.7 KiB
CMake
include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR})
|
|
|
|
set(TCC_CFLAGS -I${CMAKE_SOURCE_DIR} -I${CMAKE_SOURCE_DIR}/include -B${CMAKE_BINARY_DIR})
|
|
if(WIN32)
|
|
set(TCC_CFLAGS ${TCC_CFLAGS} -I${CMAKE_SOURCE_DIR}/win32/include)
|
|
else()
|
|
set(TCC_MATH_LDFLAGS -lm)
|
|
set(LIBTCC_EXTRA_LIBS dl)
|
|
set(LIBTCC_LDFLAGS -ldl -lm -Wl,-rpath=${CMAKE_BINARY_DIR})
|
|
endif()
|
|
|
|
add_executable(abitest-cc abitest.c)
|
|
target_link_libraries(abitest-cc libtcc ${LIBTCC_EXTRA_LIBS})
|
|
add_test(NAME abitest-cc WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMAND abitest-cc lib_path=${CMAKE_BINARY_DIR} include=${CMAKE_SOURCE_DIR}/include)
|
|
|
|
set(ABITEST_TCC abitest-tcc${CMAKE_EXECUTABLE_SUFFIX})
|
|
get_property(LIBTCC_LIB TARGET libtcc PROPERTY LOCATION)
|
|
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)
|
|
add_custom_target(abitest-tcc-exe ALL DEPENDS ${ABITEST_TCC})
|
|
|
|
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)
|
|
|
|
add_executable(tcctest-cc tcctest.c)
|
|
target_link_libraries(tcctest-cc libtcc)
|
|
set_target_properties(tcctest-cc PROPERTIES COMPILE_FLAGS -std=gnu99)
|
|
|
|
find_package(PythonInterp)
|
|
if(PYTHONINTERP_FOUND)
|
|
set(TCC_TEST_CFLAGS ${TCC_CFLAGS} -B${CMAKE_BINARY_DIR} -I${CMAKE_BINARY_DIR})
|
|
if(WIN32)
|
|
set(TCC_TEST_CFLAGS ${TCC_TEST_CFLAGS} -I${CMAKE_SOURCE_DIR}/win32/include/winapi)
|
|
endif()
|
|
set(TCC_TEST_SOURCE ${TCC_TEST_CFLAGS} ${TCC_MATH_LDFLAGS} -run ${CMAKE_CURRENT_SOURCE_DIR}/tcctest.c)
|
|
set(TCC_TEST_RUN ${TCC_TEST_CFLAGS} ${TCC_NATIVE_FLAGS} -DONE_SOURCE -run ${CMAKE_SOURCE_DIR}/tcc.c)
|
|
get_property(TCC TARGET tcc PROPERTY LOCATION)
|
|
get_property(TCCTESTCC TARGET tcctest-cc PROPERTY LOCATION)
|
|
set(TCCTEST_PY ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tcctest.py ${TCCTESTCC})
|
|
add_test(test1 ${TCCTEST_PY} ${TCC} ${TCC_TEST_SOURCE})
|
|
add_test(test2 ${TCCTEST_PY} ${TCC} ${TCC_TEST_RUN} ${TCC_TEST_SOURCE})
|
|
add_test(test3 ${TCCTEST_PY} ${TCC} ${TCC_TEST_RUN} ${TCC_TEST_RUN} ${TCC_TEST_SOURCE})
|
|
|
|
# Object + link output
|
|
set(TEST4 test4${CMAKE_EXECUTABLE_SUFFIX})
|
|
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)
|
|
add_custom_command(OUTPUT ${TEST4} COMMAND tcc ${TCC_TEST_CFLAGS} test4.o -o ${TEST4} DEPENDS tcc test4.o)
|
|
add_custom_target(test4-exe ALL DEPENDS ${TEST4})
|
|
add_test(test4 ${TCCTEST_PY} ${CMAKE_CURRENT_BINARY_DIR}/${TEST4})
|
|
|
|
# Dynamic output
|
|
set(TEST5 test5${CMAKE_EXECUTABLE_SUFFIX})
|
|
add_custom_command(OUTPUT ${TEST5} COMMAND tcc ${TCC_TEST_CFLAGS} ${CMAKE_CURRENT_SOURCE_DIR}/tcctest.c -o ${TEST5} DEPENDS tcc tcctest.c)
|
|
add_custom_target(test5-exe ALL DEPENDS ${TEST5})
|
|
add_test(test5 ${TCCTEST_PY} ${CMAKE_CURRENT_BINARY_DIR}/${TEST5})
|
|
|
|
if(TCC_BCHECK)
|
|
# Dynamic output + bound check
|
|
set(TEST6 test6${CMAKE_EXECUTABLE_SUFFIX})
|
|
add_custom_command(OUTPUT ${TEST5} COMMAND tcc ${TCC_TEST_CFLAGS} ${CMAKE_CURRENT_SOURCE_DIR}/tcctest.c -b -o ${TEST6} DEPENDS tcc tcctest.c)
|
|
add_custom_target(test6-exe ALL DEPENDS ${TEST6})
|
|
add_test(test6 ${TCCTEST_PY} ${CMAKE_CURRENT_BINARY_DIR}/${TEST6})
|
|
endif()
|
|
|
|
if(0)
|
|
# Static output
|
|
set(TEST7 test7${CMAKE_EXECUTABLE_SUFFIX})
|
|
add_custom_command(OUTPUT ${TEST7} COMMAND tcc ${TCC_TEST_CFLAGS} ${CMAKE_CURRENT_SOURCE_DIR}/tcctest.c -static -o ${TEST7} DEPENDS tcc tcctest.c)
|
|
add_custom_target(test7-exe ALL DEPENDS ${TEST7})
|
|
add_test(test7 ${TCCTEST_PY} ${CMAKE_CURRENT_BINARY_DIR}/${TEST7})
|
|
endif()
|
|
endif()
|
|
|
|
set(MORETESTS
|
|
00_assignment
|
|
01_comment
|
|
02_printf
|
|
03_struct
|
|
04_for
|
|
05_array
|
|
06_case
|
|
07_function
|
|
08_while
|
|
09_do_while
|
|
10_pointer
|
|
11_precedence
|
|
12_hashdefine
|
|
13_integer_literals
|
|
14_if
|
|
15_recursion
|
|
16_nesting
|
|
17_enum
|
|
18_include
|
|
19_pointer_arithmetic
|
|
20_pointer_comparison
|
|
21_char_array
|
|
22_floating_point
|
|
23_type_coercion
|
|
24_math_library
|
|
25_quicksort
|
|
26_character_constants
|
|
27_sizeof
|
|
28_strings
|
|
29_array_address
|
|
31_args
|
|
32_led
|
|
33_ternary_op
|
|
35_sizeof
|
|
36_array_initialisers
|
|
37_sprintf
|
|
38_multiple_array_index
|
|
39_typedef
|
|
40_stdio
|
|
41_hashif
|
|
42_function_pointer
|
|
43_void_param
|
|
44_scoped_declarations
|
|
45_empty_for
|
|
47_switch_return
|
|
48_nested_break
|
|
49_bracket_evaluation
|
|
50_logical_second_arg
|
|
51_static
|
|
52_unnamed_enum
|
|
54_goto
|
|
55_lshift_type
|
|
)
|
|
if(WIN32)
|
|
list(REMOVE_ITEM MORETESTS 24_math_library)
|
|
list(REMOVE_ITEM MORETESTS 28_strings)
|
|
endif()
|
|
foreach(testfile ${MORETESTS})
|
|
add_test(NAME ${testfile} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/tests2
|
|
COMMAND tcc ${TCC_CFLAGS} ${TCC_MATH_LDFLAGS} -run ${testfile}.c - arg1 arg2 arg3 arg4 | ${DIFF} - ${testfile}.expect)
|
|
endforeach()
|