13cab2bb3Spatrick# First, add the subdirectories which contain feature-based runtime libraries 23cab2bb3Spatrick# and several convenience helper libraries. 33cab2bb3Spatrick 43cab2bb3Spatrickinclude(AddCompilerRT) 53cab2bb3Spatrickinclude(SanitizerUtils) 63cab2bb3Spatrick 73cab2bb3Spatrick# Hoist the building of sanitizer_common on whether we're building either the 83cab2bb3Spatrick# sanitizers or xray (or both). 93cab2bb3Spatrick# 103cab2bb3Spatrick#TODO: Refactor sanitizer_common into smaller pieces (e.g. flag parsing, utils). 113cab2bb3Spatrickif (COMPILER_RT_HAS_SANITIZER_COMMON AND 12d89ec533Spatrick (COMPILER_RT_BUILD_SANITIZERS OR COMPILER_RT_BUILD_XRAY OR COMPILER_RT_BUILD_MEMPROF)) 133cab2bb3Spatrick add_subdirectory(sanitizer_common) 143cab2bb3Spatrickendif() 153cab2bb3Spatrick 163cab2bb3Spatrickif(COMPILER_RT_BUILD_BUILTINS) 173cab2bb3Spatrick add_subdirectory(builtins) 183cab2bb3Spatrickendif() 193cab2bb3Spatrick 20*810390e3Srobertif(COMPILER_RT_BUILD_CRT) 213cab2bb3Spatrick add_subdirectory(crt) 223cab2bb3Spatrickendif() 233cab2bb3Spatrick 243cab2bb3Spatrickfunction(compiler_rt_build_runtime runtime) 253cab2bb3Spatrick string(TOUPPER ${runtime} runtime_uppercase) 263cab2bb3Spatrick if(COMPILER_RT_HAS_${runtime_uppercase}) 273cab2bb3Spatrick if(${runtime} STREQUAL tsan) 283cab2bb3Spatrick add_subdirectory(tsan/dd) 293cab2bb3Spatrick endif() 30*810390e3Srobert if(${runtime} STREQUAL scudo_standalone) 313cab2bb3Spatrick add_subdirectory(scudo/standalone) 32*810390e3Srobert else() 33*810390e3Srobert add_subdirectory(${runtime}) 343cab2bb3Spatrick endif() 353cab2bb3Spatrick endif() 363cab2bb3Spatrickendfunction() 373cab2bb3Spatrick 38d89ec533Spatrickif(COMPILER_RT_BUILD_SANITIZERS OR COMPILER_RT_BUILD_MEMPROF) 393cab2bb3Spatrick compiler_rt_build_runtime(interception) 40d89ec533Spatrickendif() 413cab2bb3Spatrick 42d89ec533Spatrickif(COMPILER_RT_BUILD_SANITIZERS) 433cab2bb3Spatrick if(COMPILER_RT_HAS_SANITIZER_COMMON) 443cab2bb3Spatrick add_subdirectory(stats) 453cab2bb3Spatrick add_subdirectory(lsan) 463cab2bb3Spatrick add_subdirectory(ubsan) 473cab2bb3Spatrick endif() 483cab2bb3Spatrick 493cab2bb3Spatrick foreach(sanitizer ${COMPILER_RT_SANITIZERS_TO_BUILD}) 503cab2bb3Spatrick compiler_rt_build_runtime(${sanitizer}) 513cab2bb3Spatrick endforeach() 523cab2bb3Spatrickendif() 533cab2bb3Spatrick 543cab2bb3Spatrickif(COMPILER_RT_BUILD_PROFILE AND COMPILER_RT_HAS_PROFILE) 553cab2bb3Spatrick compiler_rt_build_runtime(profile) 563cab2bb3Spatrickendif() 573cab2bb3Spatrick 583cab2bb3Spatrickif(COMPILER_RT_BUILD_XRAY) 593cab2bb3Spatrick compiler_rt_build_runtime(xray) 603cab2bb3Spatrickendif() 613cab2bb3Spatrick 623cab2bb3Spatrickif(COMPILER_RT_BUILD_LIBFUZZER) 633cab2bb3Spatrick compiler_rt_build_runtime(fuzzer) 643cab2bb3Spatrickendif() 651f9cb04fSpatrick 66d89ec533Spatrickif(COMPILER_RT_BUILD_MEMPROF AND COMPILER_RT_HAS_SANITIZER_COMMON) 67d89ec533Spatrick compiler_rt_build_runtime(memprof) 68d89ec533Spatrickendif() 69d89ec533Spatrick 70d89ec533Spatrickif(COMPILER_RT_BUILD_ORC) 71d89ec533Spatrick compiler_rt_build_runtime(orc) 72d89ec533Spatrickendif() 73d89ec533Spatrick 741f9cb04fSpatrick# It doesn't normally make sense to build runtimes when a sanitizer is enabled, 751f9cb04fSpatrick# so we don't add_subdirectory the runtimes in that case. However, the opposite 761f9cb04fSpatrick# is true for fuzzers that exercise parts of the runtime. So we add the fuzzer 771f9cb04fSpatrick# directories explicitly here. 781f9cb04fSpatrickadd_subdirectory(scudo/standalone/fuzz) 79