Files
swift-mirror/stdlib/public/SwiftShims/swift/shims/CMakeLists.txt

279 lines
10 KiB
CMake

set(sources
AssertionReporting.h
CoreFoundationShims.h
EmbeddedShims.h
FoundationShims.h
GlobalObjects.h
HeapObject.h
KeyPath.h
LibcOverlayShims.h
LibcShims.h
MetadataSections.h
ObjCShims.h
Random.h
RefCount.h
Reflection.h
RuntimeShims.h
RuntimeStubs.h
SwiftStdbool.h
SwiftStddef.h
SwiftStdint.h
System.h
Target.h
ThreadLocalStorage.h
UnicodeData.h
Visibility.h
_SwiftConcurrency.h
_SwiftDistributed.h
_SynchronizationShims.h
module.modulemap
)
set(output_dir "${SWIFTLIB_DIR}/shims")
set(output_dir_static "${SWIFTSTATICLIB_DIR}/shims")
add_custom_command(
OUTPUT "${output_dir}"
COMMAND ${CMAKE_COMMAND} "-E" "make_directory" "${output_dir}")
add_custom_command(
OUTPUT "${output_dir_static}"
COMMAND ${CMAKE_COMMAND} "-E" "make_directory" "${output_dir_static}")
set(outputs)
foreach(input ${sources})
add_custom_command(
OUTPUT "${output_dir}/${input}"
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${input}"
COMMAND
"${CMAKE_COMMAND}" "-E" "copy_if_different"
"${CMAKE_CURRENT_SOURCE_DIR}/${input}"
"${output_dir}/${input}"
COMMENT "Copying ${input} to ${output_dir}")
list(APPEND outputs "${output_dir}/${input}")
add_custom_command(
OUTPUT "${output_dir_static}/${input}"
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${input}"
COMMAND
"${CMAKE_COMMAND}" "-E" "copy_if_different"
"${CMAKE_CURRENT_SOURCE_DIR}/${input}"
"${output_dir_static}/${input}"
COMMENT "Copying ${input} to ${output_dir_static}")
list(APPEND outputs "${output_dir_static}/${input}")
endforeach()
if (SWIFT_STDLIB_INSTALL_PARENT_MODULE_FOR_SHIMS)
# Copy the module map into the parent directory. Using "parent.modulemap"
# instead of putting "module.modulemap" into the parent module to avoid
# module redefinition conflicts with the toolchain.
add_custom_command(
OUTPUT "${output_dir}/../module.modulemap"
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/parent.modulemap"
COMMAND
"${CMAKE_COMMAND}" "-E" "copy_if_different"
"${CMAKE_CURRENT_SOURCE_DIR}/parent.modulemap"
"${output_dir}/../module.modulemap"
COMMENT "Copying parent.modulemap to ${output_dir}")
list(APPEND outputs "${output_dir}/../module.modulemap")
if(SWIFT_BUILD_STATIC_STDLIB)
add_custom_command(
OUTPUT "${output_dir_static}/../module.modulemap"
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/parent.modulemap"
COMMAND
"${CMAKE_COMMAND}" "-E" "copy_if_different"
"${CMAKE_CURRENT_SOURCE_DIR}/parent.modulemap"
"${output_dir_static}/../module.modulemap"
COMMENT "Copying parent.modulemap to ${output_dir_static}")
list(APPEND outputs "${output_dir_static}/../module.modulemap")
endif()
endif()
# Put the output dir itself last so that it isn't considered the primary output.
list(APPEND outputs "${output_dir}")
add_custom_target("copy_shim_headers" ALL
DEPENDS "${outputs}"
COMMENT "Copying SwiftShims module to ${output_dir}")
if (NOT CLANG_VERSION_MAJOR)
if (NOT LLVM_VERSION_MAJOR)
message(FATAL_ERROR
"CLANG_VERSION_MAJOR or LLVM_VERSION_MAJOR must be set \
in order to infer the path to clang headers")
else()
message(WARNING
"CLANG_VERSION_MAJOR is not defined, falling back to \
LLVM_VERSION_MAJOR to infer the path to clang headers")
set(CLANG_VERSION_MAJOR "${LLVM_VERSION_MAJOR}")
endif()
endif()
# Symlink in the Clang headers from either the provided clang...
if(NOT SWIFT_INCLUDE_TOOLS AND
(SWIFT_BUILD_RUNTIME_WITH_HOST_COMPILER OR SWIFT_PREBUILT_CLANG))
if(SWIFT_COMPILER_IS_MSVC_LIKE)
execute_process(COMMAND ${CMAKE_C_COMPILER} /clang:-print-resource-dir
OUTPUT_VARIABLE clang_headers_location
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET)
else()
execute_process(COMMAND ${CMAKE_C_COMPILER} -print-resource-dir
OUTPUT_VARIABLE clang_headers_location
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET)
endif()
message(STATUS "Using clang Resource Directory: ${clang_headers_location}")
else()
# ... or the one we just built
set(clang_headers_location "${LLVM_LIBRARY_OUTPUT_INTDIR}/clang/${CLANG_VERSION_MAJOR}")
endif()
add_custom_command_target(unused_var
COMMAND
"${CMAKE_COMMAND}" "-E" "make_directory" "${SWIFTLIB_DIR}"
COMMAND
"${CMAKE_COMMAND}" "-E" "${SWIFT_COPY_OR_SYMLINK_DIR}"
"${clang_headers_location}"
"${SWIFTLIB_DIR}/clang"
CUSTOM_TARGET_NAME "symlink_clang_headers"
OUTPUT "${SWIFTLIB_DIR}/clang"
COMMENT "Symlinking Clang resource headers into ${SWIFTLIB_DIR}/clang")
add_dependencies(copy_shim_headers symlink_clang_headers)
add_custom_command_target(unused_var
COMMAND
"${CMAKE_COMMAND}" "-E" "make_directory" "${SWIFTSTATICLIB_DIR}"
COMMAND
"${CMAKE_COMMAND}" "-E" "${SWIFT_COPY_OR_SYMLINK_DIR}"
"${clang_headers_location}"
"${SWIFTSTATICLIB_DIR}/clang"
CUSTOM_TARGET_NAME "symlink_clang_headers_static"
OUTPUT "${SWIFTSTATICLIB_DIR}/clang"
COMMENT "Symlinking Clang resource headers into ${SWIFTSTATICLIB_DIR}/clang")
add_dependencies(copy_shim_headers symlink_clang_headers_static)
if(NOT SWIFT_BUILT_STANDALONE)
if(TARGET clang-resource-headers) # LLVM > 8
set(clang_resource_headers clang-resource-headers)
elseif(TARGET clang-headers) # LLVM <= 8
set(clang_resource_headers clang-headers)
else()
message(SEND_ERROR
"Unable to determine clang resource headers target in unified build")
endif()
foreach(target
symlink_clang_headers
clang-builtin-headers
clang-resource-dir-symlink
clang-builtin-headers-in-clang-resource-dir)
add_dependencies(${target} ${clang_resource_headers})
endforeach()
endif()
if(BOOTSTRAPPING_MODE MATCHES "BOOTSTRAPPING.*")
foreach(bootstrapping "0" "1")
get_bootstrapping_path(outdir ${SWIFTLIB_DIR} ${bootstrapping})
set(target_name "symlink-headers-bootstrapping${bootstrapping}")
add_custom_command_target(unused_var
COMMAND
"${CMAKE_COMMAND}" "-E" "make_directory" "${outdir}"
COMMAND
"${CMAKE_COMMAND}" "-E" ${SWIFT_COPY_OR_SYMLINK_DIR}
${output_dir} "${outdir}/shims"
COMMAND
"${CMAKE_COMMAND}" "-E" "${SWIFT_COPY_OR_SYMLINK_DIR}"
"${clang_headers_location}"
"${outdir}/clang"
CUSTOM_TARGET_NAME ${target_name}
OUTPUT "${outdir}/shims" "${outdir}/clang"
COMMENT "Symlinking headers for bootstrapping0")
add_dependencies(${target_name} copy_shim_headers)
if (SWIFT_STDLIB_INSTALL_PARENT_MODULE_FOR_SHIMS)
set(modulemap_target_name "symlink-modulemap-bootstrapping${bootstrapping}")
add_custom_command_target(unused_var
COMMAND
"${CMAKE_COMMAND}" "-E" "make_directory" "${outdir}"
COMMAND
"${CMAKE_COMMAND}" "-E" ${SWIFT_COPY_OR_SYMLINK_DIR}
"${output_dir}/../module.modulemap" "${outdir}/module.modulemap"
CUSTOM_TARGET_NAME ${modulemap_target_name}
OUTPUT "${outdir}/module.modulemap"
COMMENT "Symlinking shims modulemap for bootstrapping0")
add_dependencies(${modulemap_target_name} copy_shim_headers)
add_dependencies(${target_name} ${modulemap_target_name})
endif()
endforeach()
endif()
swift_install_in_component(FILES ${sources}
DESTINATION "lib/swift/shims"
COMPONENT stdlib)
if (SWIFT_STDLIB_INSTALL_PARENT_MODULE_FOR_SHIMS)
swift_install_in_component(FILES "${output_dir}/../module.modulemap"
DESTINATION "lib/swift"
COMPONENT stdlib)
endif()
if (SWIFT_BUILD_STATIC_STDLIB)
swift_install_in_component(FILES ${sources}
DESTINATION "lib/swift_static/shims"
COMPONENT stdlib)
if (SWIFT_STDLIB_INSTALL_PARENT_MODULE_FOR_SHIMS)
swift_install_in_component(FILES "${output_dir_static}/../module.modulemap"
DESTINATION "lib/swift_static"
COMPONENT stdlib)
endif()
endif()
# Install Clang headers under the Swift library so that an installed Swift's
# module importer can find the compiler headers corresponding to its Clang.
swift_install_in_component(DIRECTORY "${clang_headers_location}/"
DESTINATION "lib/swift/clang"
COMPONENT clang-builtin-headers
REGEX "\.(h|modulemap)$")
swift_install_in_component(DIRECTORY "${clang_headers_location}/"
DESTINATION "lib/swift_static/clang"
COMPONENT clang-builtin-headers
REGEX "\.(h|modulemap)$")
if(SWIFT_BUILD_RUNTIME_WITH_HOST_COMPILER OR SWIFT_PREBUILT_CLANG)
# This will still link against the Swift-forked clang headers if the Swift
# toolchain was built with SWIFT_INCLUDE_TOOLS.
set(SWIFT_CLANG_RESOURCE_DIR_SYMLINK_INSTALL_TARGET_default ${clang_headers_location})
else()
set(SWIFT_CLANG_RESOURCE_DIR_SYMLINK_INSTALL_TARGET_default "../clang/${CLANG_VERSION_MAJOR}")
endif()
set(SWIFT_CLANG_RESOURCE_DIR_SYMLINK_INSTALL_TARGET
${SWIFT_CLANG_RESOURCE_DIR_SYMLINK_INSTALL_TARGET_default} CACHE STRING "The target of the installed symlink at lib/swift/clang")
swift_install_symlink_component(clang-resource-dir-symlink
LINK_NAME clang
TARGET ${SWIFT_CLANG_RESOURCE_DIR_SYMLINK_INSTALL_TARGET}
DESTINATION "lib/swift")
swift_install_symlink_component(clang-resource-dir-symlink
LINK_NAME clang
TARGET ${SWIFT_CLANG_RESOURCE_DIR_SYMLINK_INSTALL_TARGET}
DESTINATION "lib/swift_static")
# Possibly install Clang headers under Clang's resource directory in case we
# need to use a different version of the headers than the installed Clang. This
# should be used in conjunction with clang-resource-dir-symlink.
file(TO_CMAKE_PATH "${LLVM_LIBRARY_OUTPUT_INTDIR}"
_SWIFT_SHIMS_PATH_TO_CLANG_LIB_BUILD)
swift_install_in_component(DIRECTORY "${_SWIFT_SHIMS_PATH_TO_CLANG_LIB_BUILD}/clang"
DESTINATION "lib"
COMPONENT clang-builtin-headers-in-clang-resource-dir
REGEX "\.(h|modulemap)$")