13cab2bb3Spatrickinclude_directories(..) 23cab2bb3Spatrick 33cab2bb3Spatrickadd_custom_target(ScudoUnitTests) 43cab2bb3Spatrickset_target_properties(ScudoUnitTests PROPERTIES 53cab2bb3Spatrick FOLDER "Compiler-RT Tests") 63cab2bb3Spatrick 73cab2bb3Spatrickset(SCUDO_UNITTEST_CFLAGS 83cab2bb3Spatrick ${COMPILER_RT_UNITTEST_CFLAGS} 93cab2bb3Spatrick ${COMPILER_RT_GTEST_CFLAGS} 10*810390e3Srobert ${SANITIZER_TEST_CXX_CFLAGS} 113cab2bb3Spatrick -I${COMPILER_RT_SOURCE_DIR}/include 123cab2bb3Spatrick -I${COMPILER_RT_SOURCE_DIR}/lib 133cab2bb3Spatrick -I${COMPILER_RT_SOURCE_DIR}/lib/scudo/standalone 141f9cb04fSpatrick -I${COMPILER_RT_SOURCE_DIR}/lib/scudo/standalone/include 153cab2bb3Spatrick -DGTEST_HAS_RTTI=0 16d89ec533Spatrick -g 173cab2bb3Spatrick # Extra flags for the C++ tests 183cab2bb3Spatrick # TODO(kostyak): find a way to make -fsized-deallocation work 193cab2bb3Spatrick -Wno-mismatched-new-delete) 203cab2bb3Spatrick 21d89ec533Spatrickif(COMPILER_RT_DEBUG) 22d89ec533Spatrick list(APPEND SCUDO_UNITTEST_CFLAGS -DSCUDO_DEBUG=1) 23d89ec533Spatrickendif() 24d89ec533Spatrick 253cab2bb3Spatrickif(ANDROID) 263cab2bb3Spatrick list(APPEND SCUDO_UNITTEST_CFLAGS -fno-emulated-tls) 273cab2bb3Spatrickendif() 283cab2bb3Spatrick 291f9cb04fSpatrickif (COMPILER_RT_HAS_GWP_ASAN) 30d89ec533Spatrick list(APPEND SCUDO_UNITTEST_CFLAGS -DGWP_ASAN_HOOKS -fno-omit-frame-pointer 31d89ec533Spatrick -mno-omit-leaf-frame-pointer) 323cab2bb3Spatrickendif() 333cab2bb3Spatrick 343cab2bb3Spatrickset(SCUDO_TEST_ARCH ${SCUDO_STANDALONE_SUPPORTED_ARCH}) 353cab2bb3Spatrick 363cab2bb3Spatrick# gtests requires c++ 37*810390e3Srobertset(SCUDO_UNITTEST_LINK_FLAGS 38*810390e3Srobert ${COMPILER_RT_UNITTEST_LINK_FLAGS} 39*810390e3Srobert ${COMPILER_RT_UNWINDER_LINK_LIBS} 40*810390e3Srobert ${SANITIZER_TEST_CXX_LIBRARIES}) 41*810390e3Srobertlist(APPEND SCUDO_UNITTEST_LINK_FLAGS -pthread -no-pie) 423cab2bb3Spatrick# Linking against libatomic is required with some compilers 43d89ec533Spatrickcheck_library_exists(atomic __atomic_load_8 "" COMPILER_RT_HAS_LIBATOMIC) 44d89ec533Spatrickif (COMPILER_RT_HAS_LIBATOMIC) 45*810390e3Srobert list(APPEND SCUDO_UNITTEST_LINK_FLAGS -latomic) 46d89ec533Spatrickendif() 473cab2bb3Spatrick 48d89ec533Spatrickset(SCUDO_TEST_HEADERS 49d89ec533Spatrick scudo_unit_test.h 50d89ec533Spatrick ) 513cab2bb3Spatrickforeach (header ${SCUDO_HEADERS}) 523cab2bb3Spatrick list(APPEND SCUDO_TEST_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/../${header}) 533cab2bb3Spatrickendforeach() 543cab2bb3Spatrick 553cab2bb3Spatrickmacro(add_scudo_unittest testname) 563cab2bb3Spatrick cmake_parse_arguments(TEST "" "" "SOURCES;ADDITIONAL_RTOBJECTS" ${ARGN}) 571f9cb04fSpatrick if (COMPILER_RT_HAS_GWP_ASAN) 581f9cb04fSpatrick list(APPEND TEST_ADDITIONAL_RTOBJECTS 591f9cb04fSpatrick RTGwpAsan RTGwpAsanBacktraceLibc RTGwpAsanSegvHandler) 603cab2bb3Spatrick endif() 613cab2bb3Spatrick 623cab2bb3Spatrick if(COMPILER_RT_HAS_SCUDO_STANDALONE) 633cab2bb3Spatrick foreach(arch ${SCUDO_TEST_ARCH}) 643cab2bb3Spatrick # Additional runtime objects get added along RTScudoStandalone 653cab2bb3Spatrick set(SCUDO_TEST_RTOBJECTS $<TARGET_OBJECTS:RTScudoStandalone.${arch}>) 663cab2bb3Spatrick foreach(rtobject ${TEST_ADDITIONAL_RTOBJECTS}) 673cab2bb3Spatrick list(APPEND SCUDO_TEST_RTOBJECTS $<TARGET_OBJECTS:${rtobject}.${arch}>) 683cab2bb3Spatrick endforeach() 693cab2bb3Spatrick # Add the static runtime library made of all the runtime objects 703cab2bb3Spatrick set(RUNTIME RT${testname}.${arch}) 713cab2bb3Spatrick add_library(${RUNTIME} STATIC ${SCUDO_TEST_RTOBJECTS}) 723cab2bb3Spatrick set(ScudoUnitTestsObjects) 733cab2bb3Spatrick generate_compiler_rt_tests(ScudoUnitTestsObjects ScudoUnitTests 743cab2bb3Spatrick "${testname}-${arch}-Test" ${arch} 753cab2bb3Spatrick SOURCES ${TEST_SOURCES} ${COMPILER_RT_GTEST_SOURCE} 763cab2bb3Spatrick COMPILE_DEPS ${SCUDO_TEST_HEADERS} 77*810390e3Srobert DEPS llvm_gtest scudo_standalone 783cab2bb3Spatrick RUNTIME ${RUNTIME} 793cab2bb3Spatrick CFLAGS ${SCUDO_UNITTEST_CFLAGS} 80*810390e3Srobert LINK_FLAGS ${SCUDO_UNITTEST_LINK_FLAGS}) 813cab2bb3Spatrick endforeach() 823cab2bb3Spatrick endif() 833cab2bb3Spatrickendmacro() 843cab2bb3Spatrick 853cab2bb3Spatrickset(SCUDO_UNIT_TEST_SOURCES 863cab2bb3Spatrick atomic_test.cpp 873cab2bb3Spatrick bytemap_test.cpp 883cab2bb3Spatrick checksum_test.cpp 893cab2bb3Spatrick chunk_test.cpp 903cab2bb3Spatrick combined_test.cpp 91d89ec533Spatrick common_test.cpp 923cab2bb3Spatrick flags_test.cpp 933cab2bb3Spatrick list_test.cpp 943cab2bb3Spatrick map_test.cpp 95d89ec533Spatrick memtag_test.cpp 963cab2bb3Spatrick mutex_test.cpp 973cab2bb3Spatrick primary_test.cpp 983cab2bb3Spatrick quarantine_test.cpp 993cab2bb3Spatrick release_test.cpp 1003cab2bb3Spatrick report_test.cpp 1013cab2bb3Spatrick secondary_test.cpp 1023cab2bb3Spatrick size_class_map_test.cpp 1033cab2bb3Spatrick stats_test.cpp 1043cab2bb3Spatrick strings_test.cpp 1053cab2bb3Spatrick tsd_test.cpp 1063cab2bb3Spatrick vector_test.cpp 1073cab2bb3Spatrick scudo_unit_test_main.cpp 1083cab2bb3Spatrick ) 1093cab2bb3Spatrick 1103cab2bb3Spatrickadd_scudo_unittest(ScudoUnitTest 1113cab2bb3Spatrick SOURCES ${SCUDO_UNIT_TEST_SOURCES}) 1123cab2bb3Spatrick 1133cab2bb3Spatrickset(SCUDO_C_UNIT_TEST_SOURCES 1143cab2bb3Spatrick wrappers_c_test.cpp 1153cab2bb3Spatrick scudo_unit_test_main.cpp 1163cab2bb3Spatrick ) 1173cab2bb3Spatrick 1183cab2bb3Spatrickadd_scudo_unittest(ScudoCUnitTest 1193cab2bb3Spatrick SOURCES ${SCUDO_C_UNIT_TEST_SOURCES} 1203cab2bb3Spatrick ADDITIONAL_RTOBJECTS RTScudoStandaloneCWrappers) 1213cab2bb3Spatrick 1223cab2bb3Spatrickset(SCUDO_CXX_UNIT_TEST_SOURCES 1233cab2bb3Spatrick wrappers_cpp_test.cpp 1243cab2bb3Spatrick scudo_unit_test_main.cpp 1253cab2bb3Spatrick ) 1263cab2bb3Spatrick 1273cab2bb3Spatrickadd_scudo_unittest(ScudoCxxUnitTest 1283cab2bb3Spatrick SOURCES ${SCUDO_CXX_UNIT_TEST_SOURCES} 1293cab2bb3Spatrick ADDITIONAL_RTOBJECTS RTScudoStandaloneCWrappers RTScudoStandaloneCxxWrappers) 130