1*3cab2bb3Spatrickadd_compiler_rt_component(scudo_standalone) 2*3cab2bb3Spatrick# FIXME: GWP-ASan is temporarily disabled, re-enable once issues are fixed. 3*3cab2bb3Spatrickif (FALSE AND COMPILER_RT_HAS_GWP_ASAN) 4*3cab2bb3Spatrick add_dependencies(scudo_standalone gwp_asan) 5*3cab2bb3Spatrickendif() 6*3cab2bb3Spatrick 7*3cab2bb3Spatrickinclude_directories(../..) 8*3cab2bb3Spatrick 9*3cab2bb3Spatrickset(SCUDO_CFLAGS) 10*3cab2bb3Spatrick 11*3cab2bb3Spatricklist(APPEND SCUDO_CFLAGS 12*3cab2bb3Spatrick -Werror=conversion 13*3cab2bb3Spatrick -Wall 14*3cab2bb3Spatrick -nostdinc++) 15*3cab2bb3Spatrick 16*3cab2bb3Spatrick# Remove -stdlib= which is unused when passing -nostdinc++. 17*3cab2bb3Spatrickstring(REGEX REPLACE "-stdlib=[a-zA-Z+]*" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) 18*3cab2bb3Spatrick 19*3cab2bb3Spatrickappend_list_if(COMPILER_RT_HAS_FFREESTANDING_FLAG -ffreestanding SCUDO_CFLAGS) 20*3cab2bb3Spatrick 21*3cab2bb3Spatrickappend_list_if(COMPILER_RT_HAS_FVISIBILITY_HIDDEN_FLAG -fvisibility=hidden SCUDO_CFLAGS) 22*3cab2bb3Spatrick 23*3cab2bb3Spatrickif(COMPILER_RT_DEBUG) 24*3cab2bb3Spatrick list(APPEND SCUDO_CFLAGS -O0) 25*3cab2bb3Spatrickelse() 26*3cab2bb3Spatrick list(APPEND SCUDO_CFLAGS -O3) 27*3cab2bb3Spatrickendif() 28*3cab2bb3Spatrick 29*3cab2bb3Spatrickset(SCUDO_LINK_FLAGS) 30*3cab2bb3Spatrick 31*3cab2bb3Spatricklist(APPEND SCUDO_LINK_FLAGS -Wl,-z,defs,-z,now,-z,relro) 32*3cab2bb3Spatrick 33*3cab2bb3Spatrickappend_list_if(COMPILER_RT_HAS_NODEFAULTLIBS_FLAG -nodefaultlibs SCUDO_LINK_FLAGS) 34*3cab2bb3Spatrick 35*3cab2bb3Spatrickif(ANDROID) 36*3cab2bb3Spatrick list(APPEND SCUDO_CFLAGS -fno-emulated-tls) 37*3cab2bb3Spatrick 38*3cab2bb3Spatrick# Put the shared library in the global group. For more details, see 39*3cab2bb3Spatrick# android-changes-for-ndk-developers.md#changes-to-library-search-order 40*3cab2bb3Spatrick append_list_if(COMPILER_RT_HAS_Z_GLOBAL -Wl,-z,global SCUDO_LINK_FLAGS) 41*3cab2bb3Spatrickendif() 42*3cab2bb3Spatrick 43*3cab2bb3Spatrickset(SCUDO_HEADERS 44*3cab2bb3Spatrick allocator_config.h 45*3cab2bb3Spatrick atomic_helpers.h 46*3cab2bb3Spatrick bytemap.h 47*3cab2bb3Spatrick checksum.h 48*3cab2bb3Spatrick chunk.h 49*3cab2bb3Spatrick combined.h 50*3cab2bb3Spatrick flags.h 51*3cab2bb3Spatrick flags_parser.h 52*3cab2bb3Spatrick fuchsia.h 53*3cab2bb3Spatrick interface.h 54*3cab2bb3Spatrick internal_defs.h 55*3cab2bb3Spatrick linux.h 56*3cab2bb3Spatrick list.h 57*3cab2bb3Spatrick local_cache.h 58*3cab2bb3Spatrick mutex.h 59*3cab2bb3Spatrick platform.h 60*3cab2bb3Spatrick primary32.h 61*3cab2bb3Spatrick primary64.h 62*3cab2bb3Spatrick quarantine.h 63*3cab2bb3Spatrick release.h 64*3cab2bb3Spatrick report.h 65*3cab2bb3Spatrick secondary.h 66*3cab2bb3Spatrick size_class_map.h 67*3cab2bb3Spatrick stats.h 68*3cab2bb3Spatrick string_utils.h 69*3cab2bb3Spatrick tsd.h 70*3cab2bb3Spatrick tsd_exclusive.h 71*3cab2bb3Spatrick tsd_shared.h 72*3cab2bb3Spatrick vector.h 73*3cab2bb3Spatrick wrappers_c_checks.h 74*3cab2bb3Spatrick wrappers_c.h 75*3cab2bb3Spatrick ) 76*3cab2bb3Spatrick 77*3cab2bb3Spatrickset(SCUDO_SOURCES 78*3cab2bb3Spatrick checksum.cpp 79*3cab2bb3Spatrick crc32_hw.cpp 80*3cab2bb3Spatrick common.cpp 81*3cab2bb3Spatrick flags.cpp 82*3cab2bb3Spatrick flags_parser.cpp 83*3cab2bb3Spatrick fuchsia.cpp 84*3cab2bb3Spatrick linux.cpp 85*3cab2bb3Spatrick report.cpp 86*3cab2bb3Spatrick string_utils.cpp 87*3cab2bb3Spatrick ) 88*3cab2bb3Spatrick 89*3cab2bb3Spatrick# Enable the SSE 4.2 instruction set for crc32_hw.cpp, if available. 90*3cab2bb3Spatrickif (COMPILER_RT_HAS_MSSE4_2_FLAG) 91*3cab2bb3Spatrick set_source_files_properties(crc32_hw.cpp PROPERTIES COMPILE_FLAGS -msse4.2) 92*3cab2bb3Spatrickendif() 93*3cab2bb3Spatrick 94*3cab2bb3Spatrick# Enable the AArch64 CRC32 feature for crc32_hw.cpp, if available. 95*3cab2bb3Spatrick# Note that it is enabled by default starting with armv8.1-a. 96*3cab2bb3Spatrickif (COMPILER_RT_HAS_MCRC_FLAG) 97*3cab2bb3Spatrick set_source_files_properties(crc32_hw.cpp PROPERTIES COMPILE_FLAGS -mcrc) 98*3cab2bb3Spatrickendif() 99*3cab2bb3Spatrick 100*3cab2bb3Spatrickset(SCUDO_SOURCES_C_WRAPPERS 101*3cab2bb3Spatrick wrappers_c.cpp 102*3cab2bb3Spatrick ) 103*3cab2bb3Spatrick 104*3cab2bb3Spatrickset(SCUDO_SOURCES_CXX_WRAPPERS 105*3cab2bb3Spatrick wrappers_cpp.cpp 106*3cab2bb3Spatrick ) 107*3cab2bb3Spatrick 108*3cab2bb3Spatrickset(SCUDO_OBJECT_LIBS) 109*3cab2bb3Spatrick 110*3cab2bb3Spatrickif (FALSE AND COMPILER_RT_HAS_GWP_ASAN) 111*3cab2bb3Spatrick list(APPEND SCUDO_OBJECT_LIBS RTGwpAsan) 112*3cab2bb3Spatrick list(APPEND SCUDO_CFLAGS -DGWP_ASAN_HOOKS) 113*3cab2bb3Spatrickendif() 114*3cab2bb3Spatrick 115*3cab2bb3Spatrickif(COMPILER_RT_HAS_SCUDO_STANDALONE) 116*3cab2bb3Spatrick add_compiler_rt_object_libraries(RTScudoStandalone 117*3cab2bb3Spatrick ARCHS ${SCUDO_STANDALONE_SUPPORTED_ARCH} 118*3cab2bb3Spatrick SOURCES ${SCUDO_SOURCES} 119*3cab2bb3Spatrick ADDITIONAL_HEADERS ${SCUDO_HEADERS} 120*3cab2bb3Spatrick CFLAGS ${SCUDO_CFLAGS}) 121*3cab2bb3Spatrick add_compiler_rt_object_libraries(RTScudoStandaloneCWrappers 122*3cab2bb3Spatrick ARCHS ${SCUDO_STANDALONE_SUPPORTED_ARCH} 123*3cab2bb3Spatrick SOURCES ${SCUDO_SOURCES_C_WRAPPERS} 124*3cab2bb3Spatrick ADDITIONAL_HEADERS ${SCUDO_HEADERS} 125*3cab2bb3Spatrick CFLAGS ${SCUDO_CFLAGS}) 126*3cab2bb3Spatrick add_compiler_rt_object_libraries(RTScudoStandaloneCxxWrappers 127*3cab2bb3Spatrick ARCHS ${SCUDO_STANDALONE_SUPPORTED_ARCH} 128*3cab2bb3Spatrick SOURCES ${SCUDO_SOURCES_CXX_WRAPPERS} 129*3cab2bb3Spatrick ADDITIONAL_HEADERS ${SCUDO_HEADERS} 130*3cab2bb3Spatrick CFLAGS ${SCUDO_CFLAGS}) 131*3cab2bb3Spatrick 132*3cab2bb3Spatrick add_compiler_rt_runtime(clang_rt.scudo_standalone 133*3cab2bb3Spatrick STATIC 134*3cab2bb3Spatrick ARCHS ${SCUDO_STANDALONE_SUPPORTED_ARCH} 135*3cab2bb3Spatrick SOURCES ${SCUDO_SOURCES} ${SCUDO_SOURCES_C_WRAPPERS} 136*3cab2bb3Spatrick ADDITIONAL_HEADERS ${SCUDO_HEADERS} 137*3cab2bb3Spatrick CFLAGS ${SCUDO_CFLAGS} 138*3cab2bb3Spatrick OBJECT_LIBS ${SCUDO_OBJECT_LIBS} 139*3cab2bb3Spatrick PARENT_TARGET scudo_standalone) 140*3cab2bb3Spatrick add_compiler_rt_runtime(clang_rt.scudo_standalone_cxx 141*3cab2bb3Spatrick STATIC 142*3cab2bb3Spatrick ARCHS ${SCUDO_STANDALONE_SUPPORTED_ARCH} 143*3cab2bb3Spatrick SOURCES ${SCUDO_SOURCES_CXX_WRAPPERS} 144*3cab2bb3Spatrick ADDITIONAL_HEADERS ${SCUDO_HEADERS} 145*3cab2bb3Spatrick CFLAGS ${SCUDO_CFLAGS} 146*3cab2bb3Spatrick OBJECT_LIBS ${SCUDO_OBJECT_LIBS} 147*3cab2bb3Spatrick PARENT_TARGET scudo_standalone) 148*3cab2bb3Spatrick 149*3cab2bb3Spatrick add_subdirectory(benchmarks) 150*3cab2bb3Spatrick if(COMPILER_RT_INCLUDE_TESTS) 151*3cab2bb3Spatrick add_subdirectory(tests) 152*3cab2bb3Spatrick endif() 153*3cab2bb3Spatrickendif() 154