CMakeLists.txt revision 392c50d4a56557a51a353509c665188aef115f74
1583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oinclude(CompilerRTCompile) 2583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 3583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oset(SANITIZER_UNITTESTS 4583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sanitizer_allocator_test.cc 5583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sanitizer_common_test.cc 6583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sanitizer_flags_test.cc 7583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sanitizer_libc_test.cc 8583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sanitizer_list_test.cc 9583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sanitizer_mutex_test.cc 10583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sanitizer_printf_test.cc 11583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sanitizer_scanf_interceptor_test.cc 12583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sanitizer_stackdepot_test.cc 13583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sanitizer_test_main.cc 14583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ) 15583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 16583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oset(SANITIZER_TEST_HEADERS) 17583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oforeach(header ${SANITIZER_HEADERS}) 18583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o list(APPEND SANITIZER_TEST_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/../${header}) 19583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oendforeach() 20583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 21583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oinclude_directories(..) 22583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oinclude_directories(../..) 23583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 24583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o# Adds static library which contains sanitizer_common object file 25583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o# (universal binary on Mac and arch-specific object files on Linux). 26583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'omacro(add_sanitizer_common_lib library) 27583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o add_library(${library} STATIC ${ARGN}) 28583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o set_target_properties(${library} PROPERTIES 29583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) 30583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oendmacro() 31b5ffeadece25f7dca04847dfc013e979fe36e3a6Theodore Ts'o 32b5ffeadece25f7dca04847dfc013e979fe36e3a6Theodore Ts'ofunction(get_sanitizer_common_lib_for_arch arch lib lib_name) 33583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if(APPLE) 34583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o set(tgt_name "RTSanitizerCommon.test.osx") 35583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else() 36583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o set(tgt_name "RTSanitizerCommon.test.${arch}") 37cd668fdd11c7dd9607fdd5bb1e8a65e2e120e05fTheodore Ts'o endif() 380f31c737dbf999c90a0842e6a499416b8e1f0cb4Theodore Ts'o set(${lib} "${tgt_name}" PARENT_SCOPE) 39583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o set(${lib_name} "lib${tgt_name}.a" PARENT_SCOPE) 40b5ffeadece25f7dca04847dfc013e979fe36e3a6Theodore Ts'oendfunction() 41583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 42583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o# Sanitizer_common unit tests testsuite. 43583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oadd_custom_target(SanitizerUnitTests) 44583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oset_target_properties(SanitizerUnitTests PROPERTIES 45583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o FOLDER "Sanitizer unittests") 46583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 47583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o# Adds sanitizer tests for architecture. 48efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'omacro(add_sanitizer_tests_for_arch arch) 49583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o get_target_flags_for_arch(${arch} TARGET_FLAGS) 50583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o set(SANITIZER_TEST_SOURCES ${SANITIZER_UNITTESTS} 51583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ${COMPILER_RT_GTEST_SOURCE}) 52583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o set(SANITIZER_TEST_CFLAGS ${COMPILER_RT_GTEST_INCLUDE_CFLAGS} 53583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o -I${COMPILER_RT_SOURCE_DIR}/include 54583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o -I${COMPILER_RT_SOURCE_DIR}/lib 55efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o -I${COMPILER_RT_SOURCE_DIR}/lib/sanitizer_common 56583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o -O2 -g ${TARGET_FLAGS}) 57583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o set(SANITIZER_TEST_LINK_FLAGS -lstdc++ -lpthread ${TARGET_FLAGS}) 58583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o set(SANITIZER_TEST_OBJECTS) 59583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o foreach(source ${SANITIZER_TEST_SOURCES}) 60583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o get_filename_component(basename ${source} NAME) 61583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o set(output_obj "${basename}.${arch}.o") 62583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o clang_compile(${output_obj} ${source} 63583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o CFLAGS ${SANITIZER_TEST_CFLAGS} 64583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o DEPS gtest ${SANITIZER_RUNTIME_LIBRARIES} 65583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ${SANITIZER_TEST_HEADERS}) 66583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o list(APPEND SANITIZER_TEST_OBJECTS ${output_obj}) 67583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o endforeach() 68583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o get_sanitizer_common_lib_for_arch(${arch} SANITIZER_COMMON_LIB 69583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o SANITIZER_COMMON_LIB_NAME) 70583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o # Add unittest target. 71583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o set(SANITIZER_TEST_NAME "Sanitizer-${arch}-Test") 72583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o add_compiler_rt_test(SanitizerUnitTests ${SANITIZER_TEST_NAME} 73583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o OBJECTS ${SANITIZER_TEST_OBJECTS} 74583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ${SANITIZER_COMMON_LIB_NAME} 75583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o DEPS ${SANITIZER_TEST_OBJECTS} ${SANITIZER_COMMON_LIB} 76583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o LINK_FLAGS ${SANITIZER_TEST_LINK_FLAGS}) 77583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oendmacro() 78583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 79583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oif(COMPILER_RT_CAN_EXECUTE_TESTS) 80583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o # We use just-built clang to build sanitizer_common unittests, so we must 81583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o # be sure that produced binaries would work. 82583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if(APPLE) 83583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o add_sanitizer_common_lib("RTSanitizerCommon.test.osx" 84583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o $<TARGET_OBJECTS:RTSanitizerCommon.osx>) 85583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else() 86583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if(CAN_TARGET_x86_64) 87583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o add_sanitizer_common_lib("RTSanitizerCommon.test.x86_64" 88583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o $<TARGET_OBJECTS:RTSanitizerCommon.x86_64>) 89583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o endif() 90583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if(CAN_TARGET_i386) 91583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o add_sanitizer_common_lib("RTSanitizerCommon.test.i386" 92583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o $<TARGET_OBJECTS:RTSanitizerCommon.i386>) 93583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o endif() 94583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o endif() 95583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if(CAN_TARGET_x86_64) 967c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o add_sanitizer_tests_for_arch(x86_64) 97583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o endif() 98583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if(CAN_TARGET_i386) 99583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o add_sanitizer_tests_for_arch(i386) 100583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o endif() 101583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 102583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o # Run unittests as a part of lit testsuite. 1037c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o configure_lit_site_cfg( 1047c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in 1057c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg 1067c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o ) 107583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 108583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o add_lit_testsuite(check-sanitizer "Running sanitizer library unittests" 109583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ${CMAKE_CURRENT_BINARY_DIR} 110583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o DEPENDS SanitizerUnitTests 111583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ) 112583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o set_target_properties(check-sanitizer PROPERTIES FOLDER "Sanitizer unittests") 113583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oendif() 114583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 115583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oif(ANDROID) 116583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o # We assume that unit tests on Android are built in a build 117583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o # tree with fresh Clang as a host compiler. 118583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o add_executable(SanitizerTest 119583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ${SANITIZER_UNITTESTS} 120583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ${COMPILER_RT_GTEST_SOURCE} 121583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o $<TARGET_OBJECTS:RTSanitizerCommon.arm.android> 122583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ) 123583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o set_target_compile_flags(SanitizerTest 124583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ${SANITIZER_COMMON_CFLAGS} 125583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ${COMPILER_RT_GTEST_INCLUDE_CFLAGS} 126583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o -I${COMPILER_RT_SOURCE_DIR}/include 127583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o -I${COMPILER_RT_SOURCE_DIR}/lib 128583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o -I${COMPILER_RT_SOURCE_DIR}/lib/sanitizer_common 129583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o -O2 -g 130583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ) 131583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o # Setup correct output directory and link flags. 132583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o get_unittest_directory(OUTPUT_DIR) 133583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o set_target_properties(SanitizerTest PROPERTIES 134583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_DIR}) 135583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o set_target_link_flags(SanitizerTest ${SANITIZER_TEST_LINK_FLAGS}) 136efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o # Add unit test to test suite. 137583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o add_dependencies(SanitizerUnitTests SanitizerTest) 138583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oendif() 139583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o