CMakeLists.txt revision 5e5be21cc6165ae16a3002f0c3bace10c493491b
14a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org# Build for the AddressSanitizer runtime support library.
243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenset(ASAN_SOURCES
443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  asan_allocator.cc
543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  asan_allocator2.cc
643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  asan_fake_stack.cc
743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  asan_globals.cc
843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  asan_interceptors.cc
943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  asan_linux.cc
1043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  asan_mac.cc
1143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  asan_malloc_linux.cc
1243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  asan_malloc_mac.cc
1343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  asan_malloc_win.cc
1443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  asan_new_delete.cc
1543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  asan_poisoning.cc
1643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  asan_posix.cc
1743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  asan_report.cc
1843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  asan_rtl.cc
1943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  asan_stack.cc
2043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  asan_stats.cc
2143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  asan_thread.cc
2243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  asan_thread_registry.cc
2343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  asan_win.cc
2443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  )
2543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
2643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenset(ASAN_DYLIB_SOURCES
2743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  ${ASAN_SOURCES}
2843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  dynamic/asan_interceptors_dynamic.cc
2943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  )
305323a9c29497eb5a52821d396990c6d75a37baf7jkummerow@chromium.org
31b4968bea48ba224f54110f626278e2c04649dd5bmstarzinger@chromium.orginclude_directories(..)
3243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
33c514574143c1bf74d4fb6e7dccb175fe9ff2f5d3sgjesse@chromium.orgset(ASAN_CFLAGS ${SANITIZER_COMMON_CFLAGS})
3443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
35a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgset(ASAN_COMMON_DEFINITIONS
3690dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org  ASAN_HAS_EXCEPTIONS=1)
372c9426bdda5e95459527292063d885c98180cb0fjkummerow@chromium.org
3843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenif(ANDROID)
39a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  list(APPEND ASAN_COMMON_DEFINITIONS
404efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    ASAN_FLEXIBLE_MAPPING_AND_OFFSET=0
417c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org    ASAN_NEEDS_SEGV=0
4243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    ASAN_LOW_MEMORY=1)
43a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgelse()
44a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  list(APPEND ASAN_COMMON_DEFINITIONS
45c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org    ASAN_FLEXIBLE_MAPPING_AND_OFFSET=1
462c9426bdda5e95459527292063d885c98180cb0fjkummerow@chromium.org    ASAN_NEEDS_SEGV=1)
4743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenendif()
48c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com
4943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenset(ASAN_DYLIB_DEFINITIONS
50c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com  ${ASAN_COMMON_DEFINITIONS}
51a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  MAC_INTERPOSE_FUNCTIONS=1)
5243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
53ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org# Architectures supported by ASan.
5443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenfilter_available_targets(ASAN_SUPPORTED_ARCH
5531e7138e1a05e29ceefa8919ae12cb621a48ca7fmads.s.ager  x86_64 i386 powerpc64 powerpc)
56a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
5731e7138e1a05e29ceefa8919ae12cb621a48ca7fmads.s.agerset(ASAN_RUNTIME_LIBRARIES)
5831e7138e1a05e29ceefa8919ae12cb621a48ca7fmads.s.agerif(APPLE)
5931e7138e1a05e29ceefa8919ae12cb621a48ca7fmads.s.ager  # Build universal binary on APPLE.
6071affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org  add_compiler_rt_osx_static_runtime(clang_rt.asan_osx
6171affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org    ARCH ${ASAN_SUPPORTED_ARCH}
6243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    SOURCES ${ASAN_SOURCES}
63394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com            $<TARGET_OBJECTS:RTInterception.osx>
64303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org            $<TARGET_OBJECTS:RTSanitizerCommon.osx>
65303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org    CFLAGS ${ASAN_CFLAGS}
66303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org    DEFS ${ASAN_COMMON_DEFINITIONS})
67ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org  list(APPEND ASAN_RUNTIME_LIBRARIES clang_rt.asan_osx)
68ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgelseif(ANDROID)
69303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org  add_library(clang_rt.asan-arm-android SHARED
70303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org    ${ASAN_SOURCES}
7143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    $<TARGET_OBJECTS:RTInterception.arm.android>
7243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    $<TARGET_OBJECTS:RTSanitizerCommon.arm.android>
7343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    )
7443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  set_target_compile_flags(clang_rt.asan-arm-android
7543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    ${ASAN_CFLAGS})
7646839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org  set_property(TARGET clang_rt.asan-arm-android APPEND PROPERTY
7743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    COMPILE_DEFINITIONS ${ASAN_COMMON_DEFINITIONS})
7846839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org  target_link_libraries(clang_rt.asan-arm-android dl)
7943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  list(APPEND ASAN_RUNTIME_LIBRARIES clang_rt.asan-arm-android)
8046839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.orgelse()
8143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  # Otherwise, build separate libraries for each target.
8246839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org  foreach(arch ${ASAN_SUPPORTED_ARCH})
83f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org    add_compiler_rt_static_runtime(clang_rt.asan-${arch} ${arch}
84f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org      SOURCES ${ASAN_SOURCES}
8543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen              $<TARGET_OBJECTS:RTInterception.${arch}>
8643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen              $<TARGET_OBJECTS:RTSanitizerCommon.${arch}>
8743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      CFLAGS ${ASAN_CFLAGS}
8843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      DEFS ${ASAN_COMMON_DEFINITIONS})
8943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    list(APPEND ASAN_RUNTIME_LIBRARIES clang_rt.asan-${arch})
9043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  endforeach()
913d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.orgendif()
9234e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org
9343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenset(ASAN_DYNAMIC_RUNTIME_LIBRARIES)
9443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenif(APPLE)
9546839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org  # Build universal binary on APPLE.
9646839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org  add_compiler_rt_osx_dynamic_runtime(clang_rt.asan_osx_dynamic
9743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    ARCH ${ASAN_SUPPORTED_ARCH}
9846839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org    SOURCES ${ASAN_DYLIB_SOURCES}
9946839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org            $<TARGET_OBJECTS:RTInterception.osx>
10043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen            $<TARGET_OBJECTS:RTSanitizerCommon.osx>
10146839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org    CFLAGS ${ASAN_CFLAGS}
10246839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org    DEFS ${ASAN_DYLIB_DEFINITIONS}
103f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org    # Dynamic lookup is needed because shadow scale and offset are
104f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org    # provided by the instrumented modules.
105f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org    LINKFLAGS "-framework Foundation"
10643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen              "-undefined dynamic_lookup")
10743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  list(APPEND ASAN_DYNAMIC_RUNTIME_LIBRARIES clang_rt.asan_osx_dynamic)
10843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenendif()
10943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
11043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenif(LLVM_INCLUDE_TESTS)
11143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  add_subdirectory(tests)
11243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenendif()
1139faefa4670e0c454c6e56bb87b4410d73828e84fsvenpanne@chromium.org
1149faefa4670e0c454c6e56bb87b4410d73828e84fsvenpanne@chromium.orgadd_subdirectory(lit_tests)
1159faefa4670e0c454c6e56bb87b4410d73828e84fsvenpanne@chromium.org