1include_directories(..)
2
3set(LSAN_CFLAGS ${SANITIZER_COMMON_CFLAGS})
4append_rtti_flag(OFF LSAN_CFLAGS)
5
6set(LSAN_COMMON_SOURCES
7  lsan_common.cpp
8  lsan_common_fuchsia.cpp
9  lsan_common_linux.cpp
10  lsan_common_mac.cpp
11  )
12
13set(LSAN_SOURCES
14  lsan.cpp
15  lsan_allocator.cpp
16  lsan_fuchsia.cpp
17  lsan_interceptors.cpp
18  lsan_linux.cpp
19  lsan_mac.cpp
20  lsan_malloc_mac.cpp
21  lsan_posix.cpp
22  lsan_preinit.cpp
23  lsan_thread.cpp
24  )
25
26set(LSAN_HEADERS
27  lsan.h
28  lsan_allocator.h
29  lsan_common.h
30  lsan_flags.inc
31  lsan_thread.h
32  )
33
34set(LSAN_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR})
35
36add_compiler_rt_object_libraries(RTLSanCommon
37    OS ${SANITIZER_COMMON_SUPPORTED_OS}
38    ARCHS ${LSAN_COMMON_SUPPORTED_ARCH}
39    SOURCES ${LSAN_COMMON_SOURCES}
40    ADDITIONAL_HEADERS ${LSAN_HEADERS}
41    CFLAGS ${LSAN_CFLAGS})
42
43if(COMPILER_RT_HAS_LSAN)
44  add_compiler_rt_component(lsan)
45  if(APPLE)
46    set(LSAN_LINK_LIBS ${SANITIZER_COMMON_LINK_LIBS})
47
48    add_weak_symbols("lsan" WEAK_SYMBOL_LINK_FLAGS)
49    add_weak_symbols("sanitizer_common" WEAK_SYMBOL_LINK_FLAGS)
50
51    add_compiler_rt_runtime(clang_rt.lsan
52      SHARED
53      OS ${SANITIZER_COMMON_SUPPORTED_OS}
54      ARCHS ${LSAN_SUPPORTED_ARCH}
55      SOURCES ${LSAN_SOURCES}
56      ADDITIONAL_HEADERS ${LSAN_HEADERS}
57      OBJECT_LIBS RTLSanCommon
58                  RTInterception
59                  RTSanitizerCommon
60                  RTSanitizerCommonLibc
61                  RTSanitizerCommonCoverage
62                  RTSanitizerCommonSymbolizer
63      CFLAGS ${LSAN_CFLAGS}
64      LINK_FLAGS ${SANITIZER_COMMON_LINK_FLAGS} ${WEAK_SYMBOL_LINK_FLAGS}
65      LINK_LIBS ${LSAN_LINK_LIBS}
66      PARENT_TARGET lsan)
67  else()
68    foreach(arch ${LSAN_SUPPORTED_ARCH})
69      add_compiler_rt_runtime(clang_rt.lsan
70        STATIC
71        ARCHS ${arch}
72        SOURCES ${LSAN_SOURCES}
73                $<TARGET_OBJECTS:RTInterception.${arch}>
74                $<TARGET_OBJECTS:RTSanitizerCommon.${arch}>
75                $<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}>
76                $<TARGET_OBJECTS:RTSanitizerCommonCoverage.${arch}>
77                $<TARGET_OBJECTS:RTSanitizerCommonSymbolizer.${arch}>
78                $<TARGET_OBJECTS:RTLSanCommon.${arch}>
79        ADDITIONAL_HEADERS ${LSAN_HEADERS}
80        CFLAGS ${LSAN_CFLAGS}
81        PARENT_TARGET lsan)
82    endforeach()
83  endif()
84endif()
85