xref: /aosp_15_r20/external/compiler-rt/lib/ubsan/CMakeLists.txt (revision 7c3d14c8b49c529e04be81a3ce6f5cc23712e4c6)
1*7c3d14c8STreehugger Robot# Build for the undefined behavior sanitizer runtime support library.
2*7c3d14c8STreehugger Robot
3*7c3d14c8STreehugger Robotset(UBSAN_SOURCES
4*7c3d14c8STreehugger Robot  ubsan_diag.cc
5*7c3d14c8STreehugger Robot  ubsan_init.cc
6*7c3d14c8STreehugger Robot  ubsan_flags.cc
7*7c3d14c8STreehugger Robot  ubsan_handlers.cc
8*7c3d14c8STreehugger Robot  ubsan_value.cc
9*7c3d14c8STreehugger Robot  )
10*7c3d14c8STreehugger Robot
11*7c3d14c8STreehugger Robotset(UBSAN_STANDALONE_SOURCES
12*7c3d14c8STreehugger Robot  ubsan_init_standalone.cc
13*7c3d14c8STreehugger Robot  )
14*7c3d14c8STreehugger Robot
15*7c3d14c8STreehugger Robotset(UBSAN_CXX_SOURCES
16*7c3d14c8STreehugger Robot  ubsan_handlers_cxx.cc
17*7c3d14c8STreehugger Robot  ubsan_type_hash.cc
18*7c3d14c8STreehugger Robot  ubsan_type_hash_itanium.cc
19*7c3d14c8STreehugger Robot  ubsan_type_hash_win.cc
20*7c3d14c8STreehugger Robot  )
21*7c3d14c8STreehugger Robot
22*7c3d14c8STreehugger Robotinclude_directories(..)
23*7c3d14c8STreehugger Robot
24*7c3d14c8STreehugger Robotset(UBSAN_CFLAGS ${SANITIZER_COMMON_CFLAGS})
25*7c3d14c8STreehugger Robotappend_rtti_flag(OFF UBSAN_CFLAGS)
26*7c3d14c8STreehugger Robotappend_list_if(SANITIZER_CAN_USE_CXXABI -DUBSAN_CAN_USE_CXXABI UBSAN_CFLAGS)
27*7c3d14c8STreehugger Robot
28*7c3d14c8STreehugger Robotset(UBSAN_STANDALONE_CFLAGS ${SANITIZER_COMMON_CFLAGS})
29*7c3d14c8STreehugger Robotappend_rtti_flag(OFF UBSAN_STANDALONE_CFLAGS)
30*7c3d14c8STreehugger Robotappend_list_if(SANITIZER_CAN_USE_CXXABI -DUBSAN_CAN_USE_CXXABI UBSAN_STANDALONE_CFLAGS)
31*7c3d14c8STreehugger Robot
32*7c3d14c8STreehugger Robotset(UBSAN_CXXFLAGS ${SANITIZER_COMMON_CFLAGS})
33*7c3d14c8STreehugger Robotappend_rtti_flag(ON UBSAN_STANDALONE_CXXFLAGS)
34*7c3d14c8STreehugger Robotappend_list_if(SANITIZER_CAN_USE_CXXABI -DUBSAN_CAN_USE_CXXABI UBSAN_CXXFLAGS)
35*7c3d14c8STreehugger Robot
36*7c3d14c8STreehugger Robotadd_custom_target(ubsan)
37*7c3d14c8STreehugger Robotset_target_properties(ubsan PROPERTIES FOLDER "Compiler-RT Misc")
38*7c3d14c8STreehugger Robot
39*7c3d14c8STreehugger Robotif(APPLE)
40*7c3d14c8STreehugger Robot  set(UBSAN_COMMON_SOURCES ${UBSAN_SOURCES})
41*7c3d14c8STreehugger Robot  if(SANITIZER_CAN_USE_CXXABI)
42*7c3d14c8STreehugger Robot    list(APPEND UBSAN_COMMON_SOURCES ${UBSAN_CXX_SOURCES})
43*7c3d14c8STreehugger Robot  endif()
44*7c3d14c8STreehugger Robot
45*7c3d14c8STreehugger Robot  # Common parts of UBSan runtime.
46*7c3d14c8STreehugger Robot  add_compiler_rt_object_libraries(RTUbsan
47*7c3d14c8STreehugger Robot    OS ${SANITIZER_COMMON_SUPPORTED_OS}
48*7c3d14c8STreehugger Robot    ARCHS ${UBSAN_COMMON_SUPPORTED_ARCH}
49*7c3d14c8STreehugger Robot    SOURCES ${UBSAN_COMMON_SOURCES}
50*7c3d14c8STreehugger Robot    CFLAGS ${UBSAN_CXXFLAGS})
51*7c3d14c8STreehugger Robot
52*7c3d14c8STreehugger Robot  if(COMPILER_RT_HAS_UBSAN)
53*7c3d14c8STreehugger Robot    # Initializer of standalone UBSan runtime.
54*7c3d14c8STreehugger Robot    add_compiler_rt_object_libraries(RTUbsan_standalone
55*7c3d14c8STreehugger Robot      OS ${SANITIZER_COMMON_SUPPORTED_OS}
56*7c3d14c8STreehugger Robot      ARCHS ${UBSAN_SUPPORTED_ARCH}
57*7c3d14c8STreehugger Robot      SOURCES ${UBSAN_STANDALONE_SOURCES}
58*7c3d14c8STreehugger Robot      CFLAGS ${UBSAN_STANDALONE_CFLAGS})
59*7c3d14c8STreehugger Robot
60*7c3d14c8STreehugger Robot    add_compiler_rt_runtime(clang_rt.ubsan
61*7c3d14c8STreehugger Robot      SHARED
62*7c3d14c8STreehugger Robot      OS ${SANITIZER_COMMON_SUPPORTED_OS}
63*7c3d14c8STreehugger Robot      ARCHS ${UBSAN_SUPPORTED_ARCH}
64*7c3d14c8STreehugger Robot      OBJECT_LIBS RTUbsan
65*7c3d14c8STreehugger Robot                  RTUbsan_standalone
66*7c3d14c8STreehugger Robot                  RTSanitizerCommon
67*7c3d14c8STreehugger Robot                  RTSanitizerCommonLibc
68*7c3d14c8STreehugger Robot      PARENT_TARGET ubsan)
69*7c3d14c8STreehugger Robot  endif()
70*7c3d14c8STreehugger Robot
71*7c3d14c8STreehugger Robotelse()
72*7c3d14c8STreehugger Robot  # Common parts of UBSan runtime.
73*7c3d14c8STreehugger Robot  add_compiler_rt_object_libraries(RTUbsan
74*7c3d14c8STreehugger Robot    ARCHS ${UBSAN_COMMON_SUPPORTED_ARCH}
75*7c3d14c8STreehugger Robot    SOURCES ${UBSAN_SOURCES} CFLAGS ${UBSAN_CFLAGS})
76*7c3d14c8STreehugger Robot  # C++-specific parts of UBSan runtime. Requires a C++ ABI library.
77*7c3d14c8STreehugger Robot  add_compiler_rt_object_libraries(RTUbsan_cxx
78*7c3d14c8STreehugger Robot    ARCHS ${UBSAN_COMMON_SUPPORTED_ARCH}
79*7c3d14c8STreehugger Robot    SOURCES ${UBSAN_CXX_SOURCES} CFLAGS ${UBSAN_CXXFLAGS})
80*7c3d14c8STreehugger Robot
81*7c3d14c8STreehugger Robot  if(COMPILER_RT_HAS_UBSAN)
82*7c3d14c8STreehugger Robot    # Initializer of standalone UBSan runtime.
83*7c3d14c8STreehugger Robot    add_compiler_rt_object_libraries(RTUbsan_standalone
84*7c3d14c8STreehugger Robot      ARCHS ${UBSAN_SUPPORTED_ARCH}
85*7c3d14c8STreehugger Robot      SOURCES ${UBSAN_STANDALONE_SOURCES} CFLAGS ${UBSAN_STANDALONE_CFLAGS})
86*7c3d14c8STreehugger Robot
87*7c3d14c8STreehugger Robot    # Standalone UBSan runtimes.
88*7c3d14c8STreehugger Robot    add_compiler_rt_runtime(clang_rt.ubsan_standalone
89*7c3d14c8STreehugger Robot      STATIC
90*7c3d14c8STreehugger Robot      ARCHS ${UBSAN_SUPPORTED_ARCH}
91*7c3d14c8STreehugger Robot      OBJECT_LIBS RTSanitizerCommon
92*7c3d14c8STreehugger Robot              RTSanitizerCommonLibc
93*7c3d14c8STreehugger Robot              RTUbsan
94*7c3d14c8STreehugger Robot              RTUbsan_standalone
95*7c3d14c8STreehugger Robot      CFLAGS ${UBSAN_CFLAGS}
96*7c3d14c8STreehugger Robot      PARENT_TARGET ubsan)
97*7c3d14c8STreehugger Robot
98*7c3d14c8STreehugger Robot    add_compiler_rt_runtime(clang_rt.ubsan_standalone_cxx
99*7c3d14c8STreehugger Robot      STATIC
100*7c3d14c8STreehugger Robot      ARCHS ${UBSAN_SUPPORTED_ARCH}
101*7c3d14c8STreehugger Robot      OBJECT_LIBS RTUbsan_cxx
102*7c3d14c8STreehugger Robot      CFLAGS ${UBSAN_CXXFLAGS}
103*7c3d14c8STreehugger Robot      PARENT_TARGET ubsan)
104*7c3d14c8STreehugger Robot
105*7c3d14c8STreehugger Robot    if (UNIX)
106*7c3d14c8STreehugger Robot      set(ARCHS_FOR_SYMBOLS ${UBSAN_SUPPORTED_ARCH})
107*7c3d14c8STreehugger Robot      list(REMOVE_ITEM ARCHS_FOR_SYMBOLS i386 i686)
108*7c3d14c8STreehugger Robot      add_sanitizer_rt_symbols(clang_rt.ubsan_standalone
109*7c3d14c8STreehugger Robot        ARCHS ${ARCHS_FOR_SYMBOLS}
110*7c3d14c8STreehugger Robot        PARENT_TARGET ubsan
111*7c3d14c8STreehugger Robot        EXTRA ubsan.syms.extra)
112*7c3d14c8STreehugger Robot      add_sanitizer_rt_symbols(clang_rt.ubsan_standalone_cxx
113*7c3d14c8STreehugger Robot        ARCHS ${ARCHS_FOR_SYMBOLS}
114*7c3d14c8STreehugger Robot        PARENT_TARGET ubsan
115*7c3d14c8STreehugger Robot        EXTRA ubsan.syms.extra)
116*7c3d14c8STreehugger Robot    endif()
117*7c3d14c8STreehugger Robot  endif()
118*7c3d14c8STreehugger Robotendif()
119*7c3d14c8STreehugger Robot
120*7c3d14c8STreehugger Robotadd_dependencies(compiler-rt ubsan)
121