Index: cmake/Modules/AddCompilerRT.cmake =================================================================== --- cmake/Modules/AddCompilerRT.cmake +++ cmake/Modules/AddCompilerRT.cmake @@ -46,83 +46,106 @@ endforeach() endfunction() -# Adds static or shared runtime for a given architecture and puts it in the -# proper directory in the build and install trees. -# add_compiler_rt_runtime( {STATIC,SHARED} +# Adds static or shared runtime for a list of architectures and operating +# systems and puts it in the proper directory in the build and install trees. +# add_compiler_rt_runtime( +# {STATIC|SHARED} +# ARCHS +# OS # SOURCES # CFLAGS +# LINKFLAGS # DEFS -# OUTPUT_NAME ) -macro(add_compiler_rt_runtime name arch type) - if(CAN_TARGET_${arch}) - cmake_parse_arguments(LIB "" "OUTPUT_NAME" "SOURCES;CFLAGS;LINKFLAGS;DEFS" ${ARGN}) - add_library(${name} ${type} ${LIB_SOURCES}) - # Setup compile flags and definitions. - set_target_compile_flags(${name} - ${TARGET_${arch}_CFLAGS} ${LIB_CFLAGS}) - set_target_link_flags(${name} - ${TARGET_${arch}_CFLAGS} ${LIB_CFLAGS} ${LIB_LINKFLAGS}) - set_property(TARGET ${name} APPEND PROPERTY - COMPILE_DEFINITIONS ${LIB_DEFS}) - # Setup correct output directory in the build tree. - set_target_properties(${name} PROPERTIES - ARCHIVE_OUTPUT_DIRECTORY ${COMPILER_RT_LIBRARY_OUTPUT_DIR} - LIBRARY_OUTPUT_DIRECTORY ${COMPILER_RT_LIBRARY_OUTPUT_DIR} - RUNTIME_OUTPUT_DIRECTORY ${COMPILER_RT_LIBRARY_OUTPUT_DIR}) - if ("${LIB_OUTPUT_NAME}" STREQUAL "") - set_target_properties(${name} PROPERTIES - OUTPUT_NAME ${name}${COMPILER_RT_OS_SUFFIX}) - else() - set_target_properties(${name} PROPERTIES - OUTPUT_NAME ${LIB_OUTPUT_NAME}) - endif() - # Add installation command. - install(TARGETS ${name} - ARCHIVE DESTINATION ${COMPILER_RT_LIBRARY_INSTALL_DIR} - LIBRARY DESTINATION ${COMPILER_RT_LIBRARY_INSTALL_DIR} - RUNTIME DESTINATION ${COMPILER_RT_LIBRARY_INSTALL_DIR}) +# LINK_LIBS (only for shared library) +# OUTPUT_NAME +# PARENT_TARGET ) +function(add_compiler_rt_runtime name type) + if(NOT type MATCHES "^(STATIC|SHARED)$") + message(FATAL_ERROR "type argument must be STATIC or SHARED") + return() + endif() + cmake_parse_arguments(LIB + "" + "PARENT_TARGET" + "OS;ARCHS;SOURCES;CFLAGS;LINKFLAGS;DEFS;LINK_LIBS" + ${ARGN}) + set(libnames) + if(APPLE) + foreach(os ${LIB_OS}) + if(type STREQUAL "STATIC") + set(libname "${name}_${os}") + else() + set(libname "${name}_${os}_dynamic") + set(extra_linkflags_${libname} ${DARWIN_${os}_LINKFLAGS} ${LIB_CFLAGS} ${LIB_LINKFLAGS}) + endif() + list_union(LIB_ARCHS_${libname} DARWIN_${os}_ARCHS LIB_ARCHS) + if(LIB_ARCHS_${libname}) + list(APPEND libnames ${libname}) + set(extra_cflags_${libname} ${DARWIN_${os}_CFLAGS} ${LIB_CFLAGS}) + endif() + endforeach() else() - message(FATAL_ERROR "Architecture ${arch} can't be targeted") + foreach(arch ${LIB_ARCHS}) + if(NOT CAN_TARGET_${arch}) + message(FATAL_ERROR "Architecture ${arch} can't be targeted") + return() + endif() + if(type STREQUAL "STATIC") + set(libname "${name}-${arch}") + else() + set(libname "${name}-dynamic-${arch}") + set(extra_linkflags_${libname} ${TARGET_${arch}_CFLAGS} ${LIB_CFLAGS} ${LIB_LINKFLAGS}) + if(WIN32) + set(output_name_${libname} ${name}_dynamic-${arch}${COMPILER_RT_OS_SUFFIX}) + endif() + endif() + set(libnames ${libnames} ${libname}) + set(extra_cflags_${libname} ${TARGET_${arch}_CFLAGS} ${LIB_CFLAGS}) + endforeach() + endif() + + if(NOT libnames) + return() endif() -endmacro() -# Adds runtime library for darwin platforms, which supports multiple -# architectures. -# add_compiler_rt_darwin_runtime( -# STATIC|SHARED -# ARCHS -# SOURCES -# CFLAGS -# DEFS -# LINKFLAGS ) -function(add_compiler_rt_darwin_runtime name os) - cmake_parse_arguments(LIB "SHARED;STATIC" "" "ARCHS;SOURCES;CFLAGS;DEFS;LINKFLAGS" ${ARGN}) - list_union(filtered_arches DARWIN_${os}_ARCHS LIB_ARCHS) - # if there are no supported architectures, don't create the library - if(filtered_arches) - if(LIB_SHARED) - add_library(${name} SHARED ${LIB_SOURCES}) - set_target_properties(${name} PROPERTIES - LIBRARY_OUTPUT_DIRECTORY ${COMPILER_RT_LIBRARY_OUTPUT_DIR}) - install(TARGETS ${name} - LIBRARY DESTINATION ${COMPILER_RT_LIBRARY_INSTALL_DIR}) - elseif(LIB_STATIC) - add_library(${name} STATIC ${LIB_SOURCES}) - set_target_properties(${name} PROPERTIES - ARCHIVE_OUTPUT_DIRECTORY ${COMPILER_RT_LIBRARY_OUTPUT_DIR}) - install(TARGETS ${name} - ARCHIVE DESTINATION ${COMPILER_RT_LIBRARY_INSTALL_DIR}) + if(LIB_PARENT_TARGET) + set(COMPONENT_OPTION COMPONENT ${LIB_PARENT_TARGET}) + endif() + + foreach(libname ${libnames}) + add_library(${libname} ${type} ${LIB_SOURCES}) + set_target_compile_flags(${libname} ${extra_cflags_${libname}}) + set_target_link_flags(${libname} ${extra_linkflags_${libname}}) + set_property(TARGET ${libname} APPEND PROPERTY + COMPILE_DEFINITIONS ${LIB_DEFS}) + set_target_properties(${libname} PROPERTIES + ARCHIVE_OUTPUT_DIRECTORY ${COMPILER_RT_LIBRARY_OUTPUT_DIR} + LIBRARY_OUTPUT_DIRECTORY ${COMPILER_RT_LIBRARY_OUTPUT_DIR} + RUNTIME_OUTPUT_DIRECTORY ${COMPILER_RT_LIBRARY_OUTPUT_DIR}) + if (output_name_${libname}) + set_target_properties(${libname} PROPERTIES + OUTPUT_NAME ${output_name_${libname}}) else() - message(FATAL_ERROR "Must specified SHARED|STATIC to add_compiler_rt_darwin_runtime") + set_target_properties(${libname} PROPERTIES + OUTPUT_NAME ${libname}${COMPILER_RT_OS_SUFFIX}) endif() - - set_target_compile_flags(${name} ${LIB_CFLAGS} ${DARWIN_${os}_CFLAGS}) - set_target_link_flags(${name} ${LIB_LINKFLAGS} ${DARWIN_${os}_LINKFLAGS}) - set_property(TARGET ${name} APPEND PROPERTY - COMPILE_DEFINITIONS ${LIB_DEFS}) - - set_target_properties(${name} PROPERTIES - OSX_ARCHITECTURES "${filtered_arches}") + if(LIB_LINK_LIBS AND ${type} STREQUAL "SHARED") + target_link_libraries(${libname} ${LIB_LINK_LIBS}) + endif() + install(TARGETS ${libname} + ARCHIVE DESTINATION ${COMPILER_RT_LIBRARY_INSTALL_DIR} + ${COMPONENT_OPTION} + LIBRARY DESTINATION ${COMPILER_RT_LIBRARY_INSTALL_DIR} + ${COMPONENT_OPTION} + RUNTIME DESTINATION ${COMPILER_RT_LIBRARY_INSTALL_DIR} + ${COMPONENT_OPTION}) + if(APPLE) + set_target_properties(${libname} PROPERTIES + OSX_ARCHITECTURES "${LIB_ARCHS_${libname}}") + endif() + endforeach() + if(LIB_PARENT_TARGET) + add_dependencies(${LIB_PARENT_TARGET} ${libnames}) endif() endfunction() Index: lib/asan/CMakeLists.txt =================================================================== --- lib/asan/CMakeLists.txt +++ lib/asan/CMakeLists.txt @@ -111,8 +111,9 @@ add_custom_target(asan) if(APPLE) foreach (os ${SANITIZER_COMMON_SUPPORTED_OS}) - add_compiler_rt_darwin_runtime(clang_rt.asan_${os}_dynamic ${os} + add_compiler_rt_runtime(clang_rt.asan SHARED + OS ${os} ARCHS ${ASAN_SUPPORTED_ARCH} SOURCES $ $ @@ -120,8 +121,8 @@ $ $ CFLAGS ${ASAN_DYNAMIC_CFLAGS} - DEFS ${ASAN_DYNAMIC_DEFINITIONS}) - add_dependencies(asan clang_rt.asan_${os}_dynamic) + DEFS ${ASAN_DYNAMIC_DEFINITIONS} + PARENT_TARGET asan) endforeach() else() # Build separate libraries for each target. @@ -133,26 +134,32 @@ $ $) - add_compiler_rt_runtime(clang_rt.asan-${arch} ${arch} STATIC + add_compiler_rt_runtime(clang_rt.asan + STATIC + ARCHS ${arch} SOURCES $ $ ${ASAN_COMMON_RUNTIME_OBJECTS} CFLAGS ${ASAN_CFLAGS} - DEFS ${ASAN_COMMON_DEFINITIONS}) - add_dependencies(asan clang_rt.asan-${arch}) + DEFS ${ASAN_COMMON_DEFINITIONS} + PARENT_TARGET asan) - add_compiler_rt_runtime(clang_rt.asan_cxx-${arch} ${arch} STATIC + add_compiler_rt_runtime(clang_rt.asan_cxx + STATIC + ARCHS ${arch} SOURCES $ $ CFLAGS ${ASAN_CFLAGS} - DEFS ${ASAN_COMMON_DEFINITIONS}) - add_dependencies(asan clang_rt.asan_cxx-${arch}) + DEFS ${ASAN_COMMON_DEFINITIONS} + PARENT_TARGET asan) - add_compiler_rt_runtime(clang_rt.asan-preinit-${arch} ${arch} STATIC + add_compiler_rt_runtime(clang_rt.asan-preinit + STATIC + ARCHS ${arch} SOURCES $ CFLAGS ${ASAN_CFLAGS} - DEFS ${ASAN_COMMON_DEFINITIONS}) - add_dependencies(asan clang_rt.asan-preinit-${arch}) + DEFS ${ASAN_COMMON_DEFINITIONS} + PARENT_TARGET asan) if (UNIX AND NOT ${arch} MATCHES "i386|i686") add_sanitizer_rt_version_list(clang_rt.asan-dynamic-${arch} @@ -168,13 +175,9 @@ set(VERSION_SCRIPT_FLAG) endif() - if (WIN32) - set(SHARED_ASAN_NAME clang_rt.asan_dynamic-${arch}${COMPILER_RT_OS_SUFFIX}) - else() - set(SHARED_ASAN_NAME clang_rt.asan-${arch}${COMPILER_RT_OS_SUFFIX}) - endif() - add_compiler_rt_runtime(clang_rt.asan-dynamic-${arch} ${arch} SHARED - OUTPUT_NAME ${SHARED_ASAN_NAME} + add_compiler_rt_runtime(clang_rt.asan + SHARED + ARCHS ${arch} SOURCES $ # The only purpose of RTAsan_dynamic_version_script_dummy is to carry # a dependency of the shared runtime on the version script. With CMake @@ -186,9 +189,9 @@ CFLAGS ${ASAN_DYNAMIC_CFLAGS} LINKFLAGS ${ASAN_DYNAMIC_LINK_FLAGS} ${VERSION_SCRIPT_FLAG} - DEFS ${ASAN_DYNAMIC_DEFINITIONS}) + DEFS ${ASAN_DYNAMIC_DEFINITIONS} + PARENT_TARGET asan) target_link_libraries(clang_rt.asan-dynamic-${arch} ${ASAN_DYNAMIC_LIBS}) - add_dependencies(asan clang_rt.asan-dynamic-${arch}) if (UNIX AND NOT ${arch} MATCHES "i386|i686") add_sanitizer_rt_symbols(clang_rt.asan_cxx-${arch}) @@ -198,18 +201,21 @@ endif() if (WIN32) - add_compiler_rt_runtime(clang_rt.asan_dll_thunk-${arch} ${arch} STATIC + add_compiler_rt_runtime(clang_rt.asan_dll_thunk + STATIC + ARCHS ${arch} SOURCES asan_win_dll_thunk.cc $ CFLAGS ${ASAN_CFLAGS} -DASAN_DLL_THUNK - DEFS ${ASAN_COMMON_DEFINITIONS}) - add_dependencies(asan clang_rt.asan_dll_thunk-${arch}) - add_compiler_rt_runtime(clang_rt.asan_dynamic_runtime_thunk-${arch} ${arch} + DEFS ${ASAN_COMMON_DEFINITIONS} + PARENT_TARGET asan) + add_compiler_rt_runtime(clang_rt.asan_dynamic_runtime_thunk STATIC + ARCHS ${arch} SOURCES asan_win_dynamic_runtime_thunk.cc CFLAGS ${ASAN_CFLAGS} -DASAN_DYNAMIC_RUNTIME_THUNK -Zl - DEFS ${ASAN_COMMON_DEFINITIONS}) - add_dependencies(asan clang_rt.asan_dynamic_runtime_thunk-${arch}) + DEFS ${ASAN_COMMON_DEFINITIONS} + PARENT_TARGET asan) endif() endforeach() endif() Index: lib/builtins/CMakeLists.txt =================================================================== --- lib/builtins/CMakeLists.txt +++ lib/builtins/CMakeLists.txt @@ -297,6 +297,10 @@ add_custom_target(builtins) +if(APPLE) + set(OS_OPTION OS osx) +endif() + if (NOT WIN32 OR MINGW) foreach (arch x86_64 i386 i686 arm aarch64) if (CAN_TARGET_${arch}) @@ -311,10 +315,13 @@ endif () endforeach () - add_compiler_rt_runtime(clang_rt.builtins-${arch} ${arch} STATIC + add_compiler_rt_runtime(clang_rt.builtins + STATIC + ARCH ${arch} + ${OS_OPTION} SOURCES ${${arch}_SOURCES} - CFLAGS "-std=c99") - add_dependencies(builtins clang_rt.builtins-${arch}) + CFLAGS "-std=c99" + PARENT_TARGET builtins) endif () endforeach () endif () Index: lib/dfsan/CMakeLists.txt =================================================================== --- lib/dfsan/CMakeLists.txt +++ lib/dfsan/CMakeLists.txt @@ -15,15 +15,17 @@ foreach(arch ${DFSAN_SUPPORTED_ARCH}) set(DFSAN_CFLAGS ${DFSAN_COMMON_CFLAGS}) append_list_if(COMPILER_RT_HAS_FPIE_FLAG -fPIE DFSAN_CFLAGS) - add_compiler_rt_runtime(clang_rt.dfsan-${arch} ${arch} STATIC + add_compiler_rt_runtime(clang_rt.dfsan + STATIC + ARCHS ${arch} SOURCES ${DFSAN_RTL_SOURCES} $ $ $ - CFLAGS ${DFSAN_CFLAGS}) + CFLAGS ${DFSAN_CFLAGS} + PARENT_TARGET dfsan) add_sanitizer_rt_symbols(clang_rt.dfsan-${arch} dfsan.syms.extra) add_dependencies(dfsan - clang_rt.dfsan-${arch} clang_rt.dfsan-${arch}-symbols) endforeach() Index: lib/lsan/CMakeLists.txt =================================================================== --- lib/lsan/CMakeLists.txt +++ lib/lsan/CMakeLists.txt @@ -26,14 +26,16 @@ if(COMPILER_RT_HAS_LSAN) foreach(arch ${LSAN_SUPPORTED_ARCH}) - add_compiler_rt_runtime(clang_rt.lsan-${arch} ${arch} STATIC + add_compiler_rt_runtime(clang_rt.lsan + STATIC + ARCHS ${arch} SOURCES ${LSAN_SOURCES} $ $ $ $ - CFLAGS ${LSAN_CFLAGS}) - add_dependencies(lsan clang_rt.lsan-${arch}) + CFLAGS ${LSAN_CFLAGS} + PARENT_TARGET lsan) endforeach() endif() Index: lib/msan/CMakeLists.txt =================================================================== --- lib/msan/CMakeLists.txt +++ lib/msan/CMakeLists.txt @@ -27,19 +27,23 @@ # Static runtime library. add_custom_target(msan) foreach(arch ${MSAN_SUPPORTED_ARCH}) - add_compiler_rt_runtime(clang_rt.msan-${arch} ${arch} STATIC + add_compiler_rt_runtime(clang_rt.msan + STATIC + ARCHS ${arch} SOURCES ${MSAN_RTL_SOURCES} $ $ $ $ - CFLAGS ${MSAN_RTL_CFLAGS}) - add_compiler_rt_runtime(clang_rt.msan_cxx-${arch} ${arch} STATIC + CFLAGS ${MSAN_RTL_CFLAGS} + PARENT_TARGET msan) + add_compiler_rt_runtime(clang_rt.msan_cxx + STATIC + ARCHS ${arch} SOURCES ${MSAN_RTL_CXX_SOURCES} $ - CFLAGS ${MSAN_RTL_CFLAGS}) - add_dependencies(msan clang_rt.msan-${arch} - clang_rt.msan_cxx-${arch}) + CFLAGS ${MSAN_RTL_CFLAGS} + PARENT_TARGET msan) list(APPEND MSAN_RUNTIME_LIBRARIES clang_rt.msan-${arch} clang_rt.msan_cxx-${arch}) if(UNIX) Index: lib/profile/CMakeLists.txt =================================================================== --- lib/profile/CMakeLists.txt +++ lib/profile/CMakeLists.txt @@ -11,20 +11,19 @@ InstrProfilingUtil.c) if(APPLE) - foreach (os osx) - add_compiler_rt_darwin_runtime(clang_rt.profile_${os} ${os} - STATIC - ARCHS ${PROFILE_SUPPORTED_ARCH} - SOURCES ${PROFILE_SOURCES}) - add_dependencies(profile clang_rt.profile_${os}) - endforeach() + add_compiler_rt_runtime(clang_rt.profile + STATIC + OS osx + ARCHS ${PROFILE_SUPPORTED_ARCH} + SOURCES ${PROFILE_SOURCES} + PARENT_TARGET profile) else() - foreach(arch ${PROFILE_SUPPORTED_ARCH}) - add_compiler_rt_runtime(clang_rt.profile-${arch} ${arch} STATIC - CFLAGS -fPIC - SOURCES ${PROFILE_SOURCES}) - add_dependencies(profile clang_rt.profile-${arch}) - endforeach() + add_compiler_rt_runtime(clang_rt.profile + STATIC + ARCHS ${PROFILE_SUPPORTED_ARCH} + CFLAGS -fPIC + SOURCES ${PROFILE_SOURCES} + PARENT_TARGET profile) endif() add_dependencies(compiler-rt profile) Index: lib/safestack/CMakeLists.txt =================================================================== --- lib/safestack/CMakeLists.txt +++ lib/safestack/CMakeLists.txt @@ -8,25 +8,26 @@ if(APPLE) # Build universal binary on APPLE. - foreach (os osx) - add_compiler_rt_darwin_runtime(clang_rt.safestack_${os} ${os} - STATIC - ARCHS ${SAFESTACK_SUPPORTED_ARCH} - SOURCES ${SAFESTACK_SOURCES} - $ - $ - CFLAGS ${SAFESTACK_CFLAGS}) - add_dependencies(safestack clang_rt.safestack_${os}) - endforeach() + add_compiler_rt_runtime(clang_rt.safestack + STATIC + OS osx + ARCHS ${SAFESTACK_SUPPORTED_ARCH} + SOURCES ${SAFESTACK_SOURCES} + $ + $ + CFLAGS ${SAFESTACK_CFLAGS} + PARENT_TARGET safestack) else() # Otherwise, build separate libraries for each target. foreach(arch ${SAFESTACK_SUPPORTED_ARCH}) - add_compiler_rt_runtime(clang_rt.safestack-${arch} ${arch} STATIC + add_compiler_rt_runtime(clang_rt.safestack + STATIC + ARCHS ${arch} SOURCES ${SAFESTACK_SOURCES} $ $ $ - CFLAGS ${SAFESTACK_CFLAGS}) - add_dependencies(safestack clang_rt.safestack-${arch}) + CFLAGS ${SAFESTACK_CFLAGS} + PARENT_TARGET safestack) endforeach() endif() Index: lib/tsan/CMakeLists.txt =================================================================== --- lib/tsan/CMakeLists.txt +++ lib/tsan/CMakeLists.txt @@ -101,14 +101,18 @@ else() set(TSAN_ASM_SOURCES) endif() - add_compiler_rt_runtime(clang_rt.tsan-${arch} ${arch} STATIC + add_compiler_rt_runtime(clang_rt.tsan + STATIC + ARCHS ${arch} SOURCES ${TSAN_SOURCES} ${TSAN_ASM_SOURCES} $ $ $ $ CFLAGS ${TSAN_RTL_CFLAGS}) - add_compiler_rt_runtime(clang_rt.tsan_cxx-${arch} ${arch} STATIC + add_compiler_rt_runtime(clang_rt.tsan_cxx + STATIC + ARCHS ${arch} SOURCES ${TSAN_CXX_SOURCES} $ CFLAGS ${TSAN_RTL_CFLAGS}) Index: lib/tsan/dd/CMakeLists.txt =================================================================== --- lib/tsan/dd/CMakeLists.txt +++ lib/tsan/dd/CMakeLists.txt @@ -19,25 +19,29 @@ # Deadlock detector is currently supported on 64-bit Linux only. if(CAN_TARGET_x86_64 AND UNIX AND NOT APPLE AND NOT ANDROID) set(arch "x86_64") - add_compiler_rt_runtime(clang_rt.dd-${arch} ${arch} STATIC + add_compiler_rt_runtime(clang_rt.dd + STATIC + ARCHS ${arch} SOURCES ${DD_SOURCES} $ $ $ - CFLAGS ${DD_CFLAGS}) - add_dependencies(dd clang_rt.dd-${arch}) + CFLAGS ${DD_CFLAGS} + PARENT_TARGET dd) add_compiler_rt_object_libraries(RTDD ARCHS ${arch} SOURCES ${DD_SOURCES} CFLAGS ${DD_CFLAGS}) - add_compiler_rt_runtime(clang_rt.dyndd-${arch} ${arch} SHARED + add_compiler_rt_runtime(clang_rt.dyndd + SHARED + ARCHS ${arch} SOURCES $ $ $ - $) - target_link_libraries(clang_rt.dyndd-${arch} ${DD_LINKLIBS}) - add_dependencies(dd clang_rt.dyndd-${arch}) + $ + LIBS ${DD_LINKLIBS} + PARENT_TARGET dd) endif() add_dependencies(compiler-rt dd) Index: lib/ubsan/CMakeLists.txt =================================================================== --- lib/ubsan/CMakeLists.txt +++ lib/ubsan/CMakeLists.txt @@ -50,14 +50,14 @@ SOURCES ${UBSAN_STANDALONE_SOURCES} CFLAGS ${UBSAN_STANDALONE_CFLAGS}) foreach(os ${SANITIZER_COMMON_SUPPORTED_OS}) - add_compiler_rt_darwin_runtime(clang_rt.ubsan_${os}_dynamic ${os} + add_compiler_rt_runtime(clang_rt.ubsan SHARED + OS ${os} ARCHS ${UBSAN_SUPPORTED_ARCH} SOURCES $ $ - $) - - add_dependencies(ubsan clang_rt.ubsan_${os}_dynamic) + $ + PARENT_TARGET ubsan) endforeach() endif() @@ -79,19 +79,22 @@ foreach(arch ${UBSAN_SUPPORTED_ARCH}) # Standalone UBSan runtimes. - add_compiler_rt_runtime(clang_rt.ubsan_standalone-${arch} ${arch} STATIC + add_compiler_rt_runtime(clang_rt.ubsan_standalone + STATIC + ARCHS ${arch} SOURCES $ $ $ $ - CFLAGS ${UBSAN_CFLAGS}) - add_compiler_rt_runtime(clang_rt.ubsan_standalone_cxx-${arch} ${arch} STATIC + CFLAGS ${UBSAN_CFLAGS} + PARENT_TARGET ubsan) + add_compiler_rt_runtime(clang_rt.ubsan_standalone_cxx + STATIC + ARCHS ${arch} SOURCES $ - CFLAGS ${UBSAN_CXXFLAGS}) + CFLAGS ${UBSAN_CXXFLAGS} + PARENT_TARGET ubsan) - add_dependencies(ubsan - clang_rt.ubsan_standalone-${arch} - clang_rt.ubsan_standalone_cxx-${arch}) if (UNIX AND NOT ${arch} MATCHES "i386|i686") add_sanitizer_rt_symbols(clang_rt.ubsan_standalone-${arch} ubsan.syms.extra) add_sanitizer_rt_symbols(clang_rt.ubsan_standalone_cxx-${arch} ubsan.syms.extra)