Files
swift-mirror/stdlib/CMakeLists.txt
Bob Wilson 03ff046afc Replace a cmake option with a preprocessor macro.
When moving to the swift-4.0-branch of LLVM, we started using the
LLVM_DISABLE_ABI_BREAKING_CHECKS_ENFORCING cmake option to turn off those
checks. This was necessary for the stdlib build, where it uses some LLVM
headers without linking libSupport.a, but the cmake option forced us to
disable the checks across the board. It also caused a lot of churn for
people who needed to remove their cmake caches when switching to the new
version of LLVM. This change switches to use a preprocessor macro to
disable the checks only in the context of the stdlib build. It requires
LLVM r295090. rdar://problem/30098953
2017-02-14 11:27:20 -08:00

108 lines
4.7 KiB
CMake

# Create convenience targets for the Swift standard library.
if(SWIFT_BUILD_RUNTIME_WITH_HOST_COMPILER)
if((NOT "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") AND
(NOT "${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang"))
message(FATAL_ERROR "Building the swift runtime is not supported with ${CMAKE_C_COMPILER_ID}. Use the just-built clang instead.")
else()
message(WARNING "Building the swift runtime using the host compiler, and not the just-built clang.")
endif()
else()
# If we use Clang-cl or MSVC, CMake provides default compiler and linker flags that are incompatible
# with the frontend of Clang or Clang++.
if(SWIFT_COMPILER_IS_MSVC_LIKE)
set(CMAKE_CXX_COMPILER "${SWIFT_NATIVE_LLVM_TOOLS_PATH}/clang-cl")
set(CMAKE_C_COMPILER "${SWIFT_NATIVE_LLVM_TOOLS_PATH}/clang-cl")
else()
set(CMAKE_CXX_COMPILER "${SWIFT_NATIVE_LLVM_TOOLS_PATH}/clang++")
set(CMAKE_C_COMPILER "${SWIFT_NATIVE_LLVM_TOOLS_PATH}/clang")
endif()
set(CMAKE_CXX_COMPILER_ARG1 "")
set(CMAKE_C_COMPILER_ARG1 "")
# The sanitizers require using the same version of the compiler for
# everything and there are various places where we link runtime code with
# code built by the host compiler. Disable sanitizers for the runtime for
# now.
append("-fno-sanitize=all" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
endif()
# Do not enforce checks for LLVM's ABI-breaking build settings.
# The Swift runtime uses some header-only code from LLVM's ADT classes,
# but we do not want to link libSupport into the runtime. These checks rely
# on the presence of symbols in libSupport to identify how the code was
# built and cause link failures for mismatches. Without linking that library,
# we get link failures regardless, so instead, this just disables the checks.
append("-DLLVM_DISABLE_ABI_BREAKING_CHECKS_ENFORCING=1" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
set(SWIFT_STDLIB_LIBRARY_BUILD_TYPES)
if(SWIFT_BUILD_DYNAMIC_STDLIB)
list(APPEND SWIFT_STDLIB_LIBRARY_BUILD_TYPES SHARED)
endif()
if(SWIFT_BUILD_STATIC_STDLIB)
list(APPEND SWIFT_STDLIB_LIBRARY_BUILD_TYPES STATIC)
endif()
add_custom_target(swift-stdlib-all)
add_custom_target(swift-stdlib-sib-all)
add_custom_target(swift-stdlib-sibopt-all)
add_custom_target(swift-stdlib-sibgen-all)
foreach(SDK ${SWIFT_SDKS})
add_custom_target("swift-stdlib-${SWIFT_SDK_${SDK}_LIB_SUBDIR}")
add_custom_target("swift-test-stdlib-${SWIFT_SDK_${SDK}_LIB_SUBDIR}")
add_custom_target("swift-stdlib-${SWIFT_SDK_${SDK}_LIB_SUBDIR}-sib")
add_custom_target("swift-stdlib-${SWIFT_SDK_${SDK}_LIB_SUBDIR}-sibopt")
add_custom_target("swift-stdlib-${SWIFT_SDK_${SDK}_LIB_SUBDIR}-sibgen")
foreach(ARCH ${SWIFT_SDK_${SDK}_ARCHITECTURES})
set(VARIANT_SUFFIX "-${SWIFT_SDK_${SDK}_LIB_SUBDIR}-${ARCH}")
add_custom_target("swift-stdlib${VARIANT_SUFFIX}")
add_custom_target("swift-stdlib${VARIANT_SUFFIX}-sib")
add_custom_target("swift-stdlib${VARIANT_SUFFIX}-sibopt")
add_custom_target("swift-stdlib${VARIANT_SUFFIX}-sibgen")
add_custom_target("swift-test-stdlib${VARIANT_SUFFIX}")
add_dependencies(swift-stdlib-all "swift-stdlib${VARIANT_SUFFIX}")
add_dependencies(swift-stdlib-sib-all "swift-stdlib${VARIANT_SUFFIX}-sib")
add_dependencies(swift-stdlib-sibopt-all "swift-stdlib${VARIANT_SUFFIX}-sibopt")
add_dependencies(swift-stdlib-sibgen-all "swift-stdlib${VARIANT_SUFFIX}-sibgen")
add_dependencies("swift-stdlib-${SWIFT_SDK_${SDK}_LIB_SUBDIR}"
"swift-stdlib${VARIANT_SUFFIX}")
add_dependencies("swift-stdlib-${SWIFT_SDK_${SDK}_LIB_SUBDIR}-sib"
"swift-stdlib${VARIANT_SUFFIX}-sib")
add_dependencies("swift-stdlib-${SWIFT_SDK_${SDK}_LIB_SUBDIR}-sibopt"
"swift-stdlib${VARIANT_SUFFIX}-sibopt")
add_dependencies("swift-stdlib-${SWIFT_SDK_${SDK}_LIB_SUBDIR}-sibgen"
"swift-stdlib${VARIANT_SUFFIX}-sibgen")
add_dependencies("swift-test-stdlib-${SWIFT_SDK_${SDK}_LIB_SUBDIR}"
"swift-test-stdlib${VARIANT_SUFFIX}")
endforeach()
endforeach()
add_custom_target(swift-stdlib
DEPENDS "swift-stdlib${SWIFT_PRIMARY_VARIANT_SUFFIX}")
add_custom_target(swift-stdlib-sib
DEPENDS "swift-stdlib${SWIFT_PRIMARY_VARIANT_SUFFIX}-sib")
add_custom_target(swift-stdlib-sibopt
DEPENDS "swift-stdlib${SWIFT_PRIMARY_VARIANT_SUFFIX}-sibopt")
add_custom_target(swift-stdlib-sibgen
DEPENDS "swift-stdlib${SWIFT_PRIMARY_VARIANT_SUFFIX}-sibgen")
add_custom_target(swift-test-stdlib ALL
DEPENDS "swift-test-stdlib${SWIFT_PRIMARY_VARIANT_SUFFIX}")
if(SWIFT_STDLIB_ENABLE_RESILIENCE)
set(STDLIB_SIL_SERIALIZE_ALL)
else()
if(SWIFT_STDLIB_SIL_SERIALIZE_ALL)
set(STDLIB_SIL_SERIALIZE_ALL "-Xfrontend" "-sil-serialize-all")
else()
set(STDLIB_SIL_SERIALIZE_ALL)
endif()
endif()
add_subdirectory(public)
add_subdirectory(internal)
add_subdirectory(private)