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