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