scudo: Only add no-omit-frame-pointer flags when the compiler supports them
[llvm-project.git] / compiler-rt / lib / scudo / standalone / CMakeLists.txt
blob739f131bdefdf82ca3ccfcd1511628f9378b9e5f
1 add_compiler_rt_component(scudo_standalone)
3 include_directories(../.. include)
5 set(SCUDO_CFLAGS)
7 list(APPEND SCUDO_CFLAGS
8   -Werror=conversion
9   -Wall
10   -g
11   -nostdinc++)
13 # Remove -stdlib= which is unused when passing -nostdinc++.
14 string(REGEX REPLACE "-stdlib=[a-zA-Z+]*" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
16 append_list_if(COMPILER_RT_HAS_FVISIBILITY_HIDDEN_FLAG -fvisibility=hidden SCUDO_CFLAGS)
18 append_list_if(COMPILER_RT_HAS_FNO_EXCEPTIONS_FLAG -fno-exceptions SCUDO_CFLAGS)
20 append_list_if(COMPILER_RT_HAS_WNO_PEDANTIC -Wno-pedantic SCUDO_CFLAGS)
22 # FIXME: find cleaner way to agree with GWPAsan flags
23 append_list_if(COMPILER_RT_HAS_FNO_LTO_FLAG -fno-lto SCUDO_CFLAGS)
25 if(COMPILER_RT_DEBUG)
26   list(APPEND SCUDO_CFLAGS -O0 -DSCUDO_DEBUG=1)
27 else()
28   list(APPEND SCUDO_CFLAGS -O3)
29 endif()
31 set(SCUDO_LINK_FLAGS)
33 list(APPEND SCUDO_LINK_FLAGS -Wl,-z,defs,-z,now,-z,relro)
35 list(APPEND SCUDO_LINK_FLAGS -ffunction-sections -fdata-sections -Wl,--gc-sections)
37 # We don't use the C++ standard library, so avoid including it by mistake.
38 append_list_if(COMPILER_RT_HAS_NOSTDLIBXX_FLAG -nostdlib++ SCUDO_LINK_FLAGS)
40 if(ANDROID)
41   list(APPEND SCUDO_CFLAGS -fno-emulated-tls)
43 # Put the shared library in the global group. For more details, see
44 # android-changes-for-ndk-developers.md#changes-to-library-search-order
45   append_list_if(COMPILER_RT_HAS_Z_GLOBAL -Wl,-z,global SCUDO_LINK_FLAGS)
46 endif()
48 set(SCUDO_HEADERS
49   allocator_config.h
50   atomic_helpers.h
51   bytemap.h
52   checksum.h
53   chunk.h
54   combined.h
55   common.h
56   flags_parser.h
57   flags.h
58   fuchsia.h
59   internal_defs.h
60   linux.h
61   list.h
62   local_cache.h
63   memtag.h
64   mutex.h
65   options.h
66   platform.h
67   primary32.h
68   primary64.h
69   quarantine.h
70   release.h
71   report.h
72   secondary.h
73   size_class_map.h
74   stack_depot.h
75   stats.h
76   string_utils.h
77   tsd_exclusive.h
78   tsd_shared.h
79   tsd.h
80   vector.h
81   wrappers_c_checks.h
82   wrappers_c.h
84   include/scudo/interface.h
85   )
87 set(SCUDO_SOURCES
88   checksum.cpp
89   common.cpp
90   crc32_hw.cpp
91   flags_parser.cpp
92   flags.cpp
93   fuchsia.cpp
94   linux.cpp
95   release.cpp
96   report.cpp
97   string_utils.cpp
98   )
100 # Enable the SSE 4.2 instruction set for crc32_hw.cpp, if available.
101 if (COMPILER_RT_HAS_MSSE4_2_FLAG)
102   set_source_files_properties(crc32_hw.cpp PROPERTIES COMPILE_FLAGS -msse4.2)
103 endif()
105 # Enable the AArch64 CRC32 feature for crc32_hw.cpp, if available.
106 # Note that it is enabled by default starting with armv8.1-a.
107 if (COMPILER_RT_HAS_MCRC_FLAG)
108   set_source_files_properties(crc32_hw.cpp PROPERTIES COMPILE_FLAGS -mcrc)
109 endif()
111 set(SCUDO_SOURCES_C_WRAPPERS
112   wrappers_c.cpp
113   )
115 set(SCUDO_SOURCES_CXX_WRAPPERS
116   wrappers_cpp.cpp
117   )
119 set(SCUDO_OBJECT_LIBS)
121 if (COMPILER_RT_HAS_GWP_ASAN)
122   add_dependencies(scudo_standalone gwp_asan)
123   list(APPEND SCUDO_OBJECT_LIBS
124        RTGwpAsan RTGwpAsanBacktraceLibc RTGwpAsanSegvHandler
125        RTGwpAsanOptionsParser)
127   append_list_if(COMPILER_RT_HAS_OMIT_FRAME_POINTER_FLAG -fno-omit-frame-pointer
128                                                          -mno-omit-leaf-frame-pointer
129                  SCUDO_CFLAGS)
130   list(APPEND SCUDO_CFLAGS -DGWP_ASAN_HOOKS)
132 endif()
134 set(SCUDO_LINK_LIBS)
136 append_list_if(COMPILER_RT_HAS_LIBPTHREAD -pthread SCUDO_LINK_FLAGS)
138 append_list_if(FUCHSIA zircon SCUDO_LINK_LIBS)
140 if(COMPILER_RT_HAS_SCUDO_STANDALONE)
141   add_compiler_rt_object_libraries(RTScudoStandalone
142     ARCHS ${SCUDO_STANDALONE_SUPPORTED_ARCH}
143     SOURCES ${SCUDO_SOURCES}
144     ADDITIONAL_HEADERS ${SCUDO_HEADERS}
145     CFLAGS ${SCUDO_CFLAGS})
146   add_compiler_rt_object_libraries(RTScudoStandaloneCWrappers
147     ARCHS ${SCUDO_STANDALONE_SUPPORTED_ARCH}
148     SOURCES ${SCUDO_SOURCES_C_WRAPPERS}
149     ADDITIONAL_HEADERS ${SCUDO_HEADERS}
150     CFLAGS ${SCUDO_CFLAGS})
151   add_compiler_rt_object_libraries(RTScudoStandaloneCxxWrappers
152     ARCHS ${SCUDO_STANDALONE_SUPPORTED_ARCH}
153     SOURCES ${SCUDO_SOURCES_CXX_WRAPPERS}
154     ADDITIONAL_HEADERS ${SCUDO_HEADERS}
155     CFLAGS ${SCUDO_CFLAGS})
157   add_compiler_rt_runtime(clang_rt.scudo_standalone
158     STATIC
159     ARCHS ${SCUDO_STANDALONE_SUPPORTED_ARCH}
160     SOURCES ${SCUDO_SOURCES} ${SCUDO_SOURCES_C_WRAPPERS}
161     ADDITIONAL_HEADERS ${SCUDO_HEADERS}
162     CFLAGS ${SCUDO_CFLAGS}
163     OBJECT_LIBS ${SCUDO_OBJECT_LIBS}
164     PARENT_TARGET scudo_standalone)
165   add_compiler_rt_runtime(clang_rt.scudo_standalone_cxx
166     STATIC
167     ARCHS ${SCUDO_STANDALONE_SUPPORTED_ARCH}
168     SOURCES ${SCUDO_SOURCES_CXX_WRAPPERS}
169     ADDITIONAL_HEADERS ${SCUDO_HEADERS}
170     CFLAGS ${SCUDO_CFLAGS}
171     PARENT_TARGET scudo_standalone)
173   add_compiler_rt_runtime(clang_rt.scudo_standalone
174     SHARED
175     ARCHS ${SCUDO_STANDALONE_SUPPORTED_ARCH}
176     SOURCES ${SCUDO_SOURCES} ${SCUDO_SOURCES_C_WRAPPERS} ${SCUDO_SOURCES_CXX_WRAPPERS}
177     ADDITIONAL_HEADERS ${SCUDO_HEADERS}
178     CFLAGS ${SCUDO_CFLAGS}
179     OBJECT_LIBS ${SCUDO_OBJECT_LIBS}
180     LINK_FLAGS ${SCUDO_LINK_FLAGS}
181     LINK_LIBS ${SCUDO_LINK_LIBS}
182     PARENT_TARGET scudo_standalone)
184   add_subdirectory(benchmarks)
185   if(COMPILER_RT_INCLUDE_TESTS)
186     add_subdirectory(tests)
187   endif()
188 endif()