13cab2bb3Spatrickadd_compiler_rt_component(scudo_standalone) 23cab2bb3Spatrick 31f9cb04fSpatrickinclude_directories(../.. include) 43cab2bb3Spatrick 53cab2bb3Spatrickset(SCUDO_CFLAGS) 63cab2bb3Spatrick 73cab2bb3Spatricklist(APPEND SCUDO_CFLAGS 83cab2bb3Spatrick -Werror=conversion 93cab2bb3Spatrick -Wall 10*810390e3Srobert -Wextra 11*810390e3Srobert -pedantic 12d89ec533Spatrick -g 133cab2bb3Spatrick -nostdinc++) 143cab2bb3Spatrick 153cab2bb3Spatrick# Remove -stdlib= which is unused when passing -nostdinc++. 16*810390e3Srobertstring(REGEX REPLACE "-stdlib=[a-zA-Z+]*" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") 173cab2bb3Spatrick 183cab2bb3Spatrickappend_list_if(COMPILER_RT_HAS_FVISIBILITY_HIDDEN_FLAG -fvisibility=hidden SCUDO_CFLAGS) 193cab2bb3Spatrick 20d89ec533Spatrickappend_list_if(COMPILER_RT_HAS_FNO_EXCEPTIONS_FLAG -fno-exceptions SCUDO_CFLAGS) 21d89ec533Spatrick 22d89ec533Spatrickappend_list_if(COMPILER_RT_HAS_WNO_PEDANTIC -Wno-pedantic SCUDO_CFLAGS) 23d89ec533Spatrick 24d89ec533Spatrick# FIXME: find cleaner way to agree with GWPAsan flags 25d89ec533Spatrickappend_list_if(COMPILER_RT_HAS_FNO_LTO_FLAG -fno-lto SCUDO_CFLAGS) 261f9cb04fSpatrick 273cab2bb3Spatrickif(COMPILER_RT_DEBUG) 28d89ec533Spatrick list(APPEND SCUDO_CFLAGS -O0 -DSCUDO_DEBUG=1) 293cab2bb3Spatrickelse() 303cab2bb3Spatrick list(APPEND SCUDO_CFLAGS -O3) 313cab2bb3Spatrickendif() 323cab2bb3Spatrick 333cab2bb3Spatrickset(SCUDO_LINK_FLAGS) 343cab2bb3Spatrick 353cab2bb3Spatricklist(APPEND SCUDO_LINK_FLAGS -Wl,-z,defs,-z,now,-z,relro) 363cab2bb3Spatrick 37d89ec533Spatricklist(APPEND SCUDO_LINK_FLAGS -ffunction-sections -fdata-sections -Wl,--gc-sections) 38d89ec533Spatrick 39d89ec533Spatrick# We don't use the C++ standard library, so avoid including it by mistake. 40d89ec533Spatrickappend_list_if(COMPILER_RT_HAS_NOSTDLIBXX_FLAG -nostdlib++ SCUDO_LINK_FLAGS) 41*810390e3Srobertappend_list_if(CXX_SUPPORTS_UNWINDLIB_NONE_FLAG --unwindlib=none SCUDO_LINK_FLAGS) 42*810390e3Srobert 43*810390e3Srobertif(COMPILER_RT_SCUDO_STANDALONE_SYSROOT_PATH) 44*810390e3Srobert list(APPEND SCUDO_CFLAGS "--sysroot=${COMPILER_RT_SCUDO_STANDALONE_SYSROOT_PATH}") 45*810390e3Srobertendif() 463cab2bb3Spatrick 473cab2bb3Spatrickif(ANDROID) 483cab2bb3Spatrick list(APPEND SCUDO_CFLAGS -fno-emulated-tls) 493cab2bb3Spatrick 503cab2bb3Spatrick# Put the shared library in the global group. For more details, see 513cab2bb3Spatrick# android-changes-for-ndk-developers.md#changes-to-library-search-order 523cab2bb3Spatrick append_list_if(COMPILER_RT_HAS_Z_GLOBAL -Wl,-z,global SCUDO_LINK_FLAGS) 533cab2bb3Spatrickendif() 543cab2bb3Spatrick 553cab2bb3Spatrickset(SCUDO_HEADERS 563cab2bb3Spatrick allocator_config.h 573cab2bb3Spatrick atomic_helpers.h 583cab2bb3Spatrick bytemap.h 593cab2bb3Spatrick checksum.h 603cab2bb3Spatrick chunk.h 613cab2bb3Spatrick combined.h 62d89ec533Spatrick common.h 633cab2bb3Spatrick flags_parser.h 64d89ec533Spatrick flags.h 653cab2bb3Spatrick fuchsia.h 663cab2bb3Spatrick internal_defs.h 673cab2bb3Spatrick linux.h 683cab2bb3Spatrick list.h 693cab2bb3Spatrick local_cache.h 70d89ec533Spatrick memtag.h 713cab2bb3Spatrick mutex.h 72d89ec533Spatrick options.h 733cab2bb3Spatrick platform.h 743cab2bb3Spatrick primary32.h 753cab2bb3Spatrick primary64.h 763cab2bb3Spatrick quarantine.h 773cab2bb3Spatrick release.h 783cab2bb3Spatrick report.h 79*810390e3Srobert rss_limit_checker.h 803cab2bb3Spatrick secondary.h 813cab2bb3Spatrick size_class_map.h 82d89ec533Spatrick stack_depot.h 833cab2bb3Spatrick stats.h 843cab2bb3Spatrick string_utils.h 853cab2bb3Spatrick tsd_exclusive.h 863cab2bb3Spatrick tsd_shared.h 87d89ec533Spatrick tsd.h 883cab2bb3Spatrick vector.h 893cab2bb3Spatrick wrappers_c_checks.h 903cab2bb3Spatrick wrappers_c.h 911f9cb04fSpatrick 921f9cb04fSpatrick include/scudo/interface.h 933cab2bb3Spatrick ) 943cab2bb3Spatrick 953cab2bb3Spatrickset(SCUDO_SOURCES 963cab2bb3Spatrick checksum.cpp 973cab2bb3Spatrick common.cpp 98d89ec533Spatrick crc32_hw.cpp 993cab2bb3Spatrick flags_parser.cpp 100d89ec533Spatrick flags.cpp 1013cab2bb3Spatrick fuchsia.cpp 1023cab2bb3Spatrick linux.cpp 1031f9cb04fSpatrick release.cpp 1043cab2bb3Spatrick report.cpp 105*810390e3Srobert rss_limit_checker.cpp 1063cab2bb3Spatrick string_utils.cpp 1073cab2bb3Spatrick ) 1083cab2bb3Spatrick 109*810390e3Srobert# Enable the necessary instruction set for scudo_crc32.cpp, if available. 110*810390e3Srobert# Newer compiler versions use -mcrc32 rather than -msse4.2. 111*810390e3Srobertif (COMPILER_RT_HAS_MCRC32_FLAG) 112*810390e3Srobert set_source_files_properties(crc32_hw.cpp PROPERTIES COMPILE_FLAGS -mcrc32) 113*810390e3Srobertelseif (COMPILER_RT_HAS_MSSE4_2_FLAG) 1143cab2bb3Spatrick set_source_files_properties(crc32_hw.cpp PROPERTIES COMPILE_FLAGS -msse4.2) 1153cab2bb3Spatrickendif() 1163cab2bb3Spatrick 1173cab2bb3Spatrick# Enable the AArch64 CRC32 feature for crc32_hw.cpp, if available. 1183cab2bb3Spatrick# Note that it is enabled by default starting with armv8.1-a. 1193cab2bb3Spatrickif (COMPILER_RT_HAS_MCRC_FLAG) 1203cab2bb3Spatrick set_source_files_properties(crc32_hw.cpp PROPERTIES COMPILE_FLAGS -mcrc) 1213cab2bb3Spatrickendif() 1223cab2bb3Spatrick 1233cab2bb3Spatrickset(SCUDO_SOURCES_C_WRAPPERS 1243cab2bb3Spatrick wrappers_c.cpp 1253cab2bb3Spatrick ) 1263cab2bb3Spatrick 1273cab2bb3Spatrickset(SCUDO_SOURCES_CXX_WRAPPERS 1283cab2bb3Spatrick wrappers_cpp.cpp 1293cab2bb3Spatrick ) 1303cab2bb3Spatrick 1313cab2bb3Spatrickset(SCUDO_OBJECT_LIBS) 132*810390e3Srobertset(SCUDO_LINK_LIBS) 1333cab2bb3Spatrick 1341f9cb04fSpatrickif (COMPILER_RT_HAS_GWP_ASAN) 135*810390e3Srobert if(COMPILER_RT_USE_LLVM_UNWINDER) 136*810390e3Srobert list(APPEND SCUDO_LINK_LIBS ${COMPILER_RT_UNWINDER_LINK_LIBS} dl) 137*810390e3Srobert elseif (COMPILER_RT_HAS_GCC_S_LIB) 138*810390e3Srobert list(APPEND SCUDO_LINK_LIBS gcc_s) 139*810390e3Srobert elseif (COMPILER_RT_HAS_GCC_LIB) 140*810390e3Srobert list(APPEND SCUDO_LINK_LIBS gcc) 141*810390e3Srobert elseif (NOT COMPILER_RT_USE_BUILTINS_LIBRARY) 142*810390e3Srobert message(FATAL_ERROR "No suitable unwinder library") 143*810390e3Srobert endif() 144*810390e3Srobert 145d89ec533Spatrick add_dependencies(scudo_standalone gwp_asan) 1461f9cb04fSpatrick list(APPEND SCUDO_OBJECT_LIBS 147d89ec533Spatrick RTGwpAsan RTGwpAsanBacktraceLibc RTGwpAsanSegvHandler 148d89ec533Spatrick RTGwpAsanOptionsParser) 149d89ec533Spatrick 150d89ec533Spatrick append_list_if(COMPILER_RT_HAS_OMIT_FRAME_POINTER_FLAG -fno-omit-frame-pointer 151d89ec533Spatrick -mno-omit-leaf-frame-pointer 152d89ec533Spatrick SCUDO_CFLAGS) 1533cab2bb3Spatrick list(APPEND SCUDO_CFLAGS -DGWP_ASAN_HOOKS) 154d89ec533Spatrick 1553cab2bb3Spatrickendif() 1563cab2bb3Spatrick 157*810390e3Srobertif(COMPILER_RT_BUILD_SCUDO_STANDALONE_WITH_LLVM_LIBC) 158*810390e3Srobert include_directories(${COMPILER_RT_BINARY_DIR}/../libc/include/) 159*810390e3Srobert 160*810390e3Srobert set(SCUDO_DEPS libc-headers) 161*810390e3Srobert 162*810390e3Srobert list(APPEND SCUDO_CFLAGS "-ffreestanding") 163*810390e3Srobertendif() 164d89ec533Spatrick 165d89ec533Spatrickappend_list_if(COMPILER_RT_HAS_LIBPTHREAD -pthread SCUDO_LINK_FLAGS) 166d89ec533Spatrick 167d89ec533Spatrickappend_list_if(FUCHSIA zircon SCUDO_LINK_LIBS) 168d89ec533Spatrick 169*810390e3Srobertif(COMPILER_RT_DEFAULT_TARGET_ARCH MATCHES "mips|mips64|mipsel|mips64el") 170*810390e3Srobert list(APPEND SCUDO_LINK_LIBS atomic) 171*810390e3Srobertendif() 172*810390e3Srobert 1733cab2bb3Spatrickif(COMPILER_RT_HAS_SCUDO_STANDALONE) 1743cab2bb3Spatrick add_compiler_rt_object_libraries(RTScudoStandalone 1753cab2bb3Spatrick ARCHS ${SCUDO_STANDALONE_SUPPORTED_ARCH} 1763cab2bb3Spatrick SOURCES ${SCUDO_SOURCES} 1773cab2bb3Spatrick ADDITIONAL_HEADERS ${SCUDO_HEADERS} 178*810390e3Srobert CFLAGS ${SCUDO_CFLAGS} 179*810390e3Srobert DEPS ${SCUDO_DEPS}) 1803cab2bb3Spatrick add_compiler_rt_object_libraries(RTScudoStandaloneCWrappers 1813cab2bb3Spatrick ARCHS ${SCUDO_STANDALONE_SUPPORTED_ARCH} 1823cab2bb3Spatrick SOURCES ${SCUDO_SOURCES_C_WRAPPERS} 1833cab2bb3Spatrick ADDITIONAL_HEADERS ${SCUDO_HEADERS} 184*810390e3Srobert CFLAGS ${SCUDO_CFLAGS} 185*810390e3Srobert DEPS ${SCUDO_DEPS}) 1863cab2bb3Spatrick add_compiler_rt_object_libraries(RTScudoStandaloneCxxWrappers 1873cab2bb3Spatrick ARCHS ${SCUDO_STANDALONE_SUPPORTED_ARCH} 1883cab2bb3Spatrick SOURCES ${SCUDO_SOURCES_CXX_WRAPPERS} 1893cab2bb3Spatrick ADDITIONAL_HEADERS ${SCUDO_HEADERS} 190*810390e3Srobert CFLAGS ${SCUDO_CFLAGS} 191*810390e3Srobert DEPS ${SCUDO_DEPS}) 1923cab2bb3Spatrick 1933cab2bb3Spatrick add_compiler_rt_runtime(clang_rt.scudo_standalone 1943cab2bb3Spatrick STATIC 1953cab2bb3Spatrick ARCHS ${SCUDO_STANDALONE_SUPPORTED_ARCH} 1963cab2bb3Spatrick SOURCES ${SCUDO_SOURCES} ${SCUDO_SOURCES_C_WRAPPERS} 1973cab2bb3Spatrick ADDITIONAL_HEADERS ${SCUDO_HEADERS} 1983cab2bb3Spatrick CFLAGS ${SCUDO_CFLAGS} 199*810390e3Srobert DEPS ${SCUDO_DEPS} 2003cab2bb3Spatrick OBJECT_LIBS ${SCUDO_OBJECT_LIBS} 2013cab2bb3Spatrick PARENT_TARGET scudo_standalone) 2023cab2bb3Spatrick add_compiler_rt_runtime(clang_rt.scudo_standalone_cxx 2033cab2bb3Spatrick STATIC 2043cab2bb3Spatrick ARCHS ${SCUDO_STANDALONE_SUPPORTED_ARCH} 2053cab2bb3Spatrick SOURCES ${SCUDO_SOURCES_CXX_WRAPPERS} 2063cab2bb3Spatrick ADDITIONAL_HEADERS ${SCUDO_HEADERS} 2073cab2bb3Spatrick CFLAGS ${SCUDO_CFLAGS} 208*810390e3Srobert DEPS ${SCUDO_DEPS} 209d89ec533Spatrick PARENT_TARGET scudo_standalone) 210d89ec533Spatrick 211*810390e3Srobert if(COMPILER_RT_SCUDO_STANDALONE_BUILD_SHARED) 212d89ec533Spatrick add_compiler_rt_runtime(clang_rt.scudo_standalone 213d89ec533Spatrick SHARED 214d89ec533Spatrick ARCHS ${SCUDO_STANDALONE_SUPPORTED_ARCH} 215d89ec533Spatrick SOURCES ${SCUDO_SOURCES} ${SCUDO_SOURCES_C_WRAPPERS} ${SCUDO_SOURCES_CXX_WRAPPERS} 216d89ec533Spatrick ADDITIONAL_HEADERS ${SCUDO_HEADERS} 217d89ec533Spatrick CFLAGS ${SCUDO_CFLAGS} 218*810390e3Srobert DEPS ${SCUDO_DEPS} 2193cab2bb3Spatrick OBJECT_LIBS ${SCUDO_OBJECT_LIBS} 220d89ec533Spatrick LINK_FLAGS ${SCUDO_LINK_FLAGS} 221d89ec533Spatrick LINK_LIBS ${SCUDO_LINK_LIBS} 2223cab2bb3Spatrick PARENT_TARGET scudo_standalone) 223*810390e3Srobert endif() 2243cab2bb3Spatrick 2253cab2bb3Spatrick add_subdirectory(benchmarks) 2263cab2bb3Spatrick if(COMPILER_RT_INCLUDE_TESTS) 2273cab2bb3Spatrick add_subdirectory(tests) 2283cab2bb3Spatrick endif() 2293cab2bb3Spatrickendif() 230