mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
CMake: use object libraries instead of repacking static archives
This commit is contained in:
@@ -1,5 +1,9 @@
|
|||||||
cmake_minimum_required(VERSION 2.8.12)
|
cmake_minimum_required(VERSION 2.8.12)
|
||||||
|
|
||||||
|
if(POLICY CMP0051)
|
||||||
|
cmake_policy(SET CMP0051 NEW)
|
||||||
|
endif()
|
||||||
|
|
||||||
# Add path for custom CMake modules.
|
# Add path for custom CMake modules.
|
||||||
list(APPEND CMAKE_MODULE_PATH
|
list(APPEND CMAKE_MODULE_PATH
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
|
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
|
||||||
|
|||||||
@@ -41,6 +41,12 @@ function(add_dependencies_multiple_targets)
|
|||||||
endif()
|
endif()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
function(_require_empty_list the_list the_message)
|
||||||
|
if(the_list)
|
||||||
|
message(FATAL_ERROR "${the_message}")
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
# Compute the library subdirectory to use for the given sdk and
|
# Compute the library subdirectory to use for the given sdk and
|
||||||
# architecture, placing the result in 'result_var_name'.
|
# architecture, placing the result in 'result_var_name'.
|
||||||
function(compute_library_subdir result_var_name sdk arch)
|
function(compute_library_subdir result_var_name sdk arch)
|
||||||
@@ -337,22 +343,6 @@ function(_add_swift_lipo_target target output)
|
|||||||
endif()
|
endif()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
# After target 'dst_target' is built from its own object files, merge the
|
|
||||||
# contents of 'src_target' into it. 'dst_target' and 'src_target' must be
|
|
||||||
# static-library targets.
|
|
||||||
function(_target_merge_static_library dst_target src_target)
|
|
||||||
add_dependencies("${dst_target}" "${src_target}")
|
|
||||||
set(unpack_dir "${CMAKE_BINARY_DIR}/tmp/unpack/${dst_target}")
|
|
||||||
add_custom_command(TARGET "${dst_target}" POST_BUILD
|
|
||||||
COMMAND "${CMAKE_COMMAND}" -E make_directory "${unpack_dir}"
|
|
||||||
COMMAND cd "${unpack_dir}"
|
|
||||||
COMMAND "${CMAKE_AR}" x "$<TARGET_FILE:${src_target}>"
|
|
||||||
COMMAND "${CMAKE_AR}" r "$<TARGET_FILE:${dst_target}>" ./*.o
|
|
||||||
COMMAND cd "${CMAKE_BINARY_DIR}"
|
|
||||||
COMMAND "${CMAKE_COMMAND}" -E remove_directory "${unpack_dir}"
|
|
||||||
)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
# Add a single variant of a new Swift library.
|
# Add a single variant of a new Swift library.
|
||||||
#
|
#
|
||||||
# Usage:
|
# Usage:
|
||||||
@@ -443,13 +433,13 @@ endfunction()
|
|||||||
# Sources to add into this library
|
# Sources to add into this library
|
||||||
function(_add_swift_library_single target name)
|
function(_add_swift_library_single target name)
|
||||||
set(SWIFTLIB_SINGLE_options
|
set(SWIFTLIB_SINGLE_options
|
||||||
SHARED IS_STDLIB IS_STDLIB_CORE IS_SDK_OVERLAY
|
SHARED OBJECT_LIBRARY IS_STDLIB IS_STDLIB_CORE IS_SDK_OVERLAY
|
||||||
TARGET_LIBRARY HOST_LIBRARY
|
TARGET_LIBRARY HOST_LIBRARY
|
||||||
API_NOTES_NON_OVERLAY DONT_EMBED_BITCODE)
|
API_NOTES_NON_OVERLAY DONT_EMBED_BITCODE)
|
||||||
cmake_parse_arguments(SWIFTLIB_SINGLE
|
cmake_parse_arguments(SWIFTLIB_SINGLE
|
||||||
"${SWIFTLIB_SINGLE_options}"
|
"${SWIFTLIB_SINGLE_options}"
|
||||||
"SDK;ARCHITECTURE;INSTALL_IN_COMPONENT;DEPLOYMENT_VERSION_IOS"
|
"SDK;ARCHITECTURE;INSTALL_IN_COMPONENT;DEPLOYMENT_VERSION_IOS"
|
||||||
"DEPENDS;LINK_LIBRARIES;FRAMEWORK_DEPENDS;FRAMEWORK_DEPENDS_WEAK;COMPONENT_DEPENDS;C_COMPILE_FLAGS;SWIFT_COMPILE_FLAGS;LINK_FLAGS;PRIVATE_LINK_LIBRARIES;INTERFACE_LINK_LIBRARIES;FILE_DEPENDS"
|
"DEPENDS;LINK_LIBRARIES;FRAMEWORK_DEPENDS;FRAMEWORK_DEPENDS_WEAK;COMPONENT_DEPENDS;C_COMPILE_FLAGS;SWIFT_COMPILE_FLAGS;LINK_FLAGS;PRIVATE_LINK_LIBRARIES;INTERFACE_LINK_LIBRARIES;INCORPORATE_OBJECT_LIBRARIES;FILE_DEPENDS"
|
||||||
${ARGN})
|
${ARGN})
|
||||||
|
|
||||||
set(SWIFTLIB_SINGLE_SOURCES ${SWIFTLIB_SINGLE_UNPARSED_ARGUMENTS})
|
set(SWIFTLIB_SINGLE_SOURCES ${SWIFTLIB_SINGLE_UNPARSED_ARGUMENTS})
|
||||||
@@ -505,6 +495,8 @@ function(_add_swift_library_single target name)
|
|||||||
|
|
||||||
if(MODULE)
|
if(MODULE)
|
||||||
set(libkind MODULE)
|
set(libkind MODULE)
|
||||||
|
elseif(SWIFTLIB_SINGLE_OBJECT_LIBRARY)
|
||||||
|
set(libkind OBJECT)
|
||||||
elseif(SWIFTLIB_SINGLE_SHARED)
|
elseif(SWIFTLIB_SINGLE_SHARED)
|
||||||
set(libkind SHARED)
|
set(libkind SHARED)
|
||||||
else()
|
else()
|
||||||
@@ -576,10 +568,18 @@ function(_add_swift_library_single target name)
|
|||||||
INSTALL_IN_COMPONENT "${SWIFTLIB_INSTALL_IN_COMPONENT}")
|
INSTALL_IN_COMPONENT "${SWIFTLIB_INSTALL_IN_COMPONENT}")
|
||||||
add_swift_source_group("${SWIFTLIB_SINGLE_EXTERNAL_SOURCES}")
|
add_swift_source_group("${SWIFTLIB_SINGLE_EXTERNAL_SOURCES}")
|
||||||
|
|
||||||
|
set(VARIANT_SUFFIX "-${SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_LIB_SUBDIR}-${SWIFTLIB_SINGLE_ARCHITECTURE}")
|
||||||
|
set(SWIFTLIB_INCORPORATED_OBJECT_LIBRARIES_EXPRESSIONS)
|
||||||
|
foreach(object_library ${SWIFTLIB_SINGLE_INCORPORATE_OBJECT_LIBRARIES})
|
||||||
|
list(APPEND SWIFTLIB_INCORPORATED_OBJECT_LIBRARIES_EXPRESSIONS
|
||||||
|
$<TARGET_OBJECTS:${object_library}${VARIANT_SUFFIX}>)
|
||||||
|
endforeach()
|
||||||
|
|
||||||
add_library("${target}" ${libkind}
|
add_library("${target}" ${libkind}
|
||||||
${SWIFT_SECTIONS_OBJECT_BEGIN}
|
${SWIFT_SECTIONS_OBJECT_BEGIN}
|
||||||
${SWIFTLIB_SINGLE_SOURCES}
|
${SWIFTLIB_SINGLE_SOURCES}
|
||||||
${SWIFTLIB_SINGLE_EXTERNAL_SOURCES}
|
${SWIFTLIB_SINGLE_EXTERNAL_SOURCES}
|
||||||
|
${SWIFTLIB_INCORPORATED_OBJECT_LIBRARIES_EXPRESSIONS}
|
||||||
${SWIFT_SECTIONS_OBJECT_END})
|
${SWIFT_SECTIONS_OBJECT_END})
|
||||||
|
|
||||||
# The section metadata objects are generated sources, and we need to tell CMake
|
# The section metadata objects are generated sources, and we need to tell CMake
|
||||||
@@ -660,6 +660,7 @@ function(_add_swift_library_single target name)
|
|||||||
# library.
|
# library.
|
||||||
add_library(${target_static} STATIC
|
add_library(${target_static} STATIC
|
||||||
${SWIFTLIB_SINGLE_SOURCES}
|
${SWIFTLIB_SINGLE_SOURCES}
|
||||||
|
${SWIFTLIB_INCORPORATED_OBJECT_LIBRARIES_EXPRESSIONS}
|
||||||
|
|
||||||
# Note: the dummy.c source file provides no definitions. However,
|
# Note: the dummy.c source file provides no definitions. However,
|
||||||
# it forces Xcode to properly link the static library.
|
# it forces Xcode to properly link the static library.
|
||||||
@@ -728,6 +729,10 @@ function(_add_swift_library_single target name)
|
|||||||
|
|
||||||
if("${libkind}" STREQUAL "SHARED")
|
if("${libkind}" STREQUAL "SHARED")
|
||||||
target_link_libraries("${target}" PRIVATE ${SWIFTLIB_SINGLE_LINK_LIBRARIES})
|
target_link_libraries("${target}" PRIVATE ${SWIFTLIB_SINGLE_LINK_LIBRARIES})
|
||||||
|
elseif("${libkind}" STREQUAL "OBJECT")
|
||||||
|
_require_empty_list(
|
||||||
|
"${SWIFTLIB_SINGLE_LINK_LIBRARIES}"
|
||||||
|
"OBJECT_LIBRARY may not link to anything")
|
||||||
else()
|
else()
|
||||||
target_link_libraries("${target}" INTERFACE ${SWIFTLIB_SINGLE_LINK_LIBRARIES})
|
target_link_libraries("${target}" INTERFACE ${SWIFTLIB_SINGLE_LINK_LIBRARIES})
|
||||||
endif()
|
endif()
|
||||||
@@ -763,7 +768,10 @@ function(_add_swift_library_single target name)
|
|||||||
endforeach()
|
endforeach()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
swift_common_llvm_config("${target}" ${SWIFTLIB_SINGLE_COMPONENT_DEPENDS})
|
if(NOT SWIFTLIB_SINGLE_TARGET_LIBRARY)
|
||||||
|
# Call llvm_config() only for libraries that are part of the compiler.
|
||||||
|
swift_common_llvm_config("${target}" ${SWIFTLIB_SINGLE_COMPONENT_DEPENDS})
|
||||||
|
endif()
|
||||||
|
|
||||||
# Collect compile and link flags for the static and non-static targets.
|
# Collect compile and link flags for the static and non-static targets.
|
||||||
# Don't set PROPERTY COMPILE_FLAGS or LINK_FLAGS directly.
|
# Don't set PROPERTY COMPILE_FLAGS or LINK_FLAGS directly.
|
||||||
@@ -843,10 +851,23 @@ function(_add_swift_library_single target name)
|
|||||||
COMPILE_FLAGS " ${c_compile_flags}")
|
COMPILE_FLAGS " ${c_compile_flags}")
|
||||||
set_property(TARGET "${target}" APPEND_STRING PROPERTY
|
set_property(TARGET "${target}" APPEND_STRING PROPERTY
|
||||||
LINK_FLAGS " ${link_flags} -L${SWIFTLIB_DIR}/${SWIFTLIB_SINGLE_SUBDIR} -L${SWIFT_NATIVE_SWIFT_TOOLS_PATH}/../lib/swift/${SWIFTLIB_SINGLE_SUBDIR} -L${SWIFT_NATIVE_SWIFT_TOOLS_PATH}/../lib/swift/${SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_LIB_SUBDIR}")
|
LINK_FLAGS " ${link_flags} -L${SWIFTLIB_DIR}/${SWIFTLIB_SINGLE_SUBDIR} -L${SWIFT_NATIVE_SWIFT_TOOLS_PATH}/../lib/swift/${SWIFTLIB_SINGLE_SUBDIR} -L${SWIFT_NATIVE_SWIFT_TOOLS_PATH}/../lib/swift/${SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_LIB_SUBDIR}")
|
||||||
target_link_libraries("${target}" PRIVATE
|
if("${libkind}" STREQUAL "OBJECT")
|
||||||
${SWIFTLIB_SINGLE_PRIVATE_LINK_LIBRARIES})
|
_require_empty_list(
|
||||||
target_link_libraries("${target}" INTERFACE
|
"${SWIFTLIB_SINGLE_PRIVATE_LINK_LIBRARIES}"
|
||||||
${SWIFTLIB_SINGLE_INTERFACE_LINK_LIBRARIES})
|
"OBJECT_LIBRARY may not link to anything")
|
||||||
|
else()
|
||||||
|
target_link_libraries("${target}" PRIVATE
|
||||||
|
${SWIFTLIB_SINGLE_PRIVATE_LINK_LIBRARIES})
|
||||||
|
endif()
|
||||||
|
if("${libkind}" STREQUAL "OBJECT")
|
||||||
|
_require_empty_list(
|
||||||
|
"${SWIFTLIB_SINGLE_INTERFACE_LINK_LIBRARIES}"
|
||||||
|
"OBJECT_LIBRARY may not link to anything")
|
||||||
|
else()
|
||||||
|
target_link_libraries("${target}" INTERFACE
|
||||||
|
${SWIFTLIB_SINGLE_INTERFACE_LINK_LIBRARIES})
|
||||||
|
endif()
|
||||||
|
|
||||||
set_property(TARGET "${target}" PROPERTY
|
set_property(TARGET "${target}" PROPERTY
|
||||||
LINKER_LANGUAGE "CXX")
|
LINKER_LANGUAGE "CXX")
|
||||||
|
|
||||||
@@ -857,17 +878,6 @@ function(_add_swift_library_single target name)
|
|||||||
LINK_FLAGS " ${link_flags} -L${SWIFTSTATICLIB_DIR}/${SWIFTLIB_SINGLE_SUBDIR} -L${SWIFT_NATIVE_SWIFT_TOOLS_PATH}/../lib/swift/${SWIFTLIB_SINGLE_SUBDIR} -L${SWIFT_NATIVE_SWIFT_TOOLS_PATH}/../lib/swift/${SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_LIB_SUBDIR}")
|
LINK_FLAGS " ${link_flags} -L${SWIFTSTATICLIB_DIR}/${SWIFTLIB_SINGLE_SUBDIR} -L${SWIFT_NATIVE_SWIFT_TOOLS_PATH}/../lib/swift/${SWIFTLIB_SINGLE_SUBDIR} -L${SWIFT_NATIVE_SWIFT_TOOLS_PATH}/../lib/swift/${SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_LIB_SUBDIR}")
|
||||||
target_link_libraries("${target_static}" PRIVATE
|
target_link_libraries("${target_static}" PRIVATE
|
||||||
${SWIFTLIB_SINGLE_PRIVATE_LINK_LIBRARIES})
|
${SWIFTLIB_SINGLE_PRIVATE_LINK_LIBRARIES})
|
||||||
|
|
||||||
if("${name}" STREQUAL "swiftCore")
|
|
||||||
# Have libswiftCore.a include the contents of the private Swift libraries
|
|
||||||
# it depends on, so statically linking clients don't have to know about
|
|
||||||
# them.
|
|
||||||
foreach(private_link_library ${SWIFTLIB_SINGLE_PRIVATE_LINK_LIBRARIES})
|
|
||||||
if(TARGET "${private_link_library}")
|
|
||||||
_target_merge_static_library("${target_static}" "${private_link_library}")
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Do not add code here.
|
# Do not add code here.
|
||||||
@@ -982,13 +992,13 @@ endfunction()
|
|||||||
# Sources to add into this library.
|
# Sources to add into this library.
|
||||||
function(add_swift_library name)
|
function(add_swift_library name)
|
||||||
set(SWIFTLIB_options
|
set(SWIFTLIB_options
|
||||||
SHARED IS_STDLIB IS_STDLIB_CORE IS_SDK_OVERLAY
|
SHARED OBJECT_LIBRARY IS_STDLIB IS_STDLIB_CORE IS_SDK_OVERLAY
|
||||||
TARGET_LIBRARY HOST_LIBRARY
|
TARGET_LIBRARY HOST_LIBRARY
|
||||||
API_NOTES_NON_OVERLAY DONT_EMBED_BITCODE HAS_SWIFT_CONTENT)
|
API_NOTES_NON_OVERLAY DONT_EMBED_BITCODE HAS_SWIFT_CONTENT)
|
||||||
cmake_parse_arguments(SWIFTLIB
|
cmake_parse_arguments(SWIFTLIB
|
||||||
"${SWIFTLIB_options}"
|
"${SWIFTLIB_options}"
|
||||||
"INSTALL_IN_COMPONENT;DEPLOYMENT_VERSION_IOS"
|
"INSTALL_IN_COMPONENT;DEPLOYMENT_VERSION_IOS"
|
||||||
"DEPENDS;LINK_LIBRARIES;SWIFT_MODULE_DEPENDS;SWIFT_MODULE_DEPENDS_OSX;SWIFT_MODULE_DEPENDS_IOS;SWIFT_MODULE_DEPENDS_TVOS;SWIFT_MODULE_DEPENDS_WATCHOS;FRAMEWORK_DEPENDS;FRAMEWORK_DEPENDS_WEAK;FRAMEWORK_DEPENDS_OSX;FRAMEWORK_DEPENDS_IOS_TVOS;COMPONENT_DEPENDS;FILE_DEPENDS;TARGET_SDKS;C_COMPILE_FLAGS;SWIFT_COMPILE_FLAGS;SWIFT_COMPILE_FLAGS_OSX;SWIFT_COMPILE_FLAGS_IOS;SWIFT_COMPILE_FLAGS_TVOS;SWIFT_COMPILE_FLAGS_WATCHOS;LINK_FLAGS;PRIVATE_LINK_LIBRARIES;INTERFACE_LINK_LIBRARIES"
|
"DEPENDS;LINK_LIBRARIES;SWIFT_MODULE_DEPENDS;SWIFT_MODULE_DEPENDS_OSX;SWIFT_MODULE_DEPENDS_IOS;SWIFT_MODULE_DEPENDS_TVOS;SWIFT_MODULE_DEPENDS_WATCHOS;FRAMEWORK_DEPENDS;FRAMEWORK_DEPENDS_WEAK;FRAMEWORK_DEPENDS_OSX;FRAMEWORK_DEPENDS_IOS_TVOS;COMPONENT_DEPENDS;FILE_DEPENDS;TARGET_SDKS;C_COMPILE_FLAGS;SWIFT_COMPILE_FLAGS;SWIFT_COMPILE_FLAGS_OSX;SWIFT_COMPILE_FLAGS_IOS;SWIFT_COMPILE_FLAGS_TVOS;SWIFT_COMPILE_FLAGS_WATCHOS;LINK_FLAGS;PRIVATE_LINK_LIBRARIES;INTERFACE_LINK_LIBRARIES;INCORPORATE_OBJECT_LIBRARIES"
|
||||||
${ARGN})
|
${ARGN})
|
||||||
set(SWIFTLIB_SOURCES ${SWIFTLIB_UNPARSED_ARGUMENTS})
|
set(SWIFTLIB_SOURCES ${SWIFTLIB_UNPARSED_ARGUMENTS})
|
||||||
|
|
||||||
@@ -1150,6 +1160,7 @@ function(add_swift_library name)
|
|||||||
${VARIANT_NAME}
|
${VARIANT_NAME}
|
||||||
${name}
|
${name}
|
||||||
${SWIFTLIB_SHARED_keyword}
|
${SWIFTLIB_SHARED_keyword}
|
||||||
|
${SWIFTLIB_OBJECT_LIBRARY_keyword}
|
||||||
${SWIFTLIB_SOURCES}
|
${SWIFTLIB_SOURCES}
|
||||||
SDK ${sdk}
|
SDK ${sdk}
|
||||||
ARCHITECTURE ${arch}
|
ARCHITECTURE ${arch}
|
||||||
@@ -1163,6 +1174,7 @@ function(add_swift_library name)
|
|||||||
SWIFT_COMPILE_FLAGS ${swiftlib_swift_compile_flags_all}
|
SWIFT_COMPILE_FLAGS ${swiftlib_swift_compile_flags_all}
|
||||||
LINK_FLAGS ${SWIFTLIB_LINK_FLAGS}
|
LINK_FLAGS ${SWIFTLIB_LINK_FLAGS}
|
||||||
PRIVATE_LINK_LIBRARIES ${swiftlib_private_link_libraries_targets}
|
PRIVATE_LINK_LIBRARIES ${swiftlib_private_link_libraries_targets}
|
||||||
|
INCORPORATE_OBJECT_LIBRARIES ${SWIFTLIB_INCORPORATE_OBJECT_LIBRARIES}
|
||||||
${SWIFTLIB_DONT_EMBED_BITCODE_keyword}
|
${SWIFTLIB_DONT_EMBED_BITCODE_keyword}
|
||||||
${SWIFTLIB_API_NOTES_NON_OVERLAY_keyword}
|
${SWIFTLIB_API_NOTES_NON_OVERLAY_keyword}
|
||||||
${SWIFTLIB_IS_STDLIB_keyword}
|
${SWIFTLIB_IS_STDLIB_keyword}
|
||||||
@@ -1174,120 +1186,124 @@ function(add_swift_library name)
|
|||||||
DEPLOYMENT_VERSION_IOS "${SWIFTLIB_DEPLOYMENT_VERSION_IOS}"
|
DEPLOYMENT_VERSION_IOS "${SWIFTLIB_DEPLOYMENT_VERSION_IOS}"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Add dependencies on the (not-yet-created) custom lipo target.
|
if(NOT SWIFTLIB_OBJECT_LIBRARY)
|
||||||
foreach(DEP ${SWIFTLIB_LINK_LIBRARIES})
|
|
||||||
if (NOT "${DEP}" STREQUAL "icucore")
|
|
||||||
add_dependencies(${VARIANT_NAME}
|
|
||||||
"${DEP}-${SWIFT_SDK_${sdk}_LIB_SUBDIR}")
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
if (SWIFT_BUILD_STATIC_STDLIB AND SWIFTLIB_IS_STDLIB)
|
|
||||||
# Add dependencies on the (not-yet-created) custom lipo target.
|
# Add dependencies on the (not-yet-created) custom lipo target.
|
||||||
foreach(DEP ${SWIFTLIB_LINK_LIBRARIES})
|
foreach(DEP ${SWIFTLIB_LINK_LIBRARIES})
|
||||||
if (NOT "${DEP}" STREQUAL "icucore")
|
if (NOT "${DEP}" STREQUAL "icucore")
|
||||||
add_dependencies("${VARIANT_NAME}-static"
|
add_dependencies(${VARIANT_NAME}
|
||||||
"${DEP}-${SWIFT_SDK_${sdk}_LIB_SUBDIR}-static")
|
"${DEP}-${SWIFT_SDK_${sdk}_LIB_SUBDIR}")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
if (SWIFT_BUILD_STATIC_STDLIB AND SWIFTLIB_IS_STDLIB)
|
||||||
|
# Add dependencies on the (not-yet-created) custom lipo target.
|
||||||
|
foreach(DEP ${SWIFTLIB_LINK_LIBRARIES})
|
||||||
|
if (NOT "${DEP}" STREQUAL "icucore")
|
||||||
|
add_dependencies("${VARIANT_NAME}-static"
|
||||||
|
"${DEP}-${SWIFT_SDK_${sdk}_LIB_SUBDIR}-static")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Note this thin library.
|
||||||
|
list(APPEND THIN_INPUT_TARGETS ${VARIANT_NAME})
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
if(NOT SWIFTLIB_OBJECT_LIBRARY)
|
||||||
|
# Determine the name of the universal library.
|
||||||
|
if(SWIFTLIB_SHARED)
|
||||||
|
set(UNIVERSAL_LIBRARY_NAME
|
||||||
|
"${SWIFTLIB_DIR}/${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${CMAKE_SHARED_LIBRARY_PREFIX}${name}${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
||||||
|
else()
|
||||||
|
set(UNIVERSAL_LIBRARY_NAME
|
||||||
|
"${SWIFTLIB_DIR}/${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}${name}${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
set(lipo_target "${name}-${SWIFT_SDK_${sdk}_LIB_SUBDIR}")
|
||||||
|
_add_swift_lipo_target(
|
||||||
|
${lipo_target}
|
||||||
|
"${UNIVERSAL_LIBRARY_NAME}"
|
||||||
|
${THIN_INPUT_TARGETS})
|
||||||
|
|
||||||
|
# Cache universal libraries for dependency purposes
|
||||||
|
set(UNIVERSAL_LIBRARY_NAMES_${SWIFT_SDK_${sdk}_LIB_SUBDIR}
|
||||||
|
${UNIVERSAL_LIBRARY_NAMES_${SWIFT_SDK_${sdk}_LIB_SUBDIR}}
|
||||||
|
${lipo_target}
|
||||||
|
CACHE INTERNAL "UNIVERSAL_LIBRARY_NAMES_${SWIFT_SDK_${sdk}_LIB_SUBDIR}")
|
||||||
|
|
||||||
|
# Determine the subdirectory where this library will be installed.
|
||||||
|
set(resource_dir_sdk_subdir "${SWIFT_SDK_${sdk}_LIB_SUBDIR}")
|
||||||
|
|
||||||
|
if("${resource_dir_sdk_subdir}" STREQUAL "")
|
||||||
|
message(FATAL_ERROR "internal error: the variable should be non-empty")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(SWIFTLIB_TARGET_LIBRARY)
|
||||||
|
if(SWIFTLIB_SHARED)
|
||||||
|
set(resource_dir "swift")
|
||||||
|
set(file_permissions
|
||||||
|
OWNER_READ OWNER_WRITE OWNER_EXECUTE
|
||||||
|
GROUP_READ GROUP_EXECUTE
|
||||||
|
WORLD_READ WORLD_EXECUTE)
|
||||||
|
else()
|
||||||
|
set(resource_dir "swift_static")
|
||||||
|
set(file_permissions
|
||||||
|
OWNER_READ OWNER_WRITE
|
||||||
|
GROUP_READ
|
||||||
|
WORLD_READ)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
swift_install_in_component("${SWIFTLIB_INSTALL_IN_COMPONENT}"
|
||||||
|
FILES "${UNIVERSAL_LIBRARY_NAME}"
|
||||||
|
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/${resource_dir}/${resource_dir_sdk_subdir}"
|
||||||
|
PERMISSIONS ${file_permissions})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# If we built static variants of the library, create a lipo target for
|
||||||
|
# them.
|
||||||
|
set(lipo_target_static)
|
||||||
|
if (SWIFT_BUILD_STATIC_STDLIB AND SWIFTLIB_IS_STDLIB)
|
||||||
|
set(THIN_INPUT_TARGETS_STATIC)
|
||||||
|
foreach(TARGET ${THIN_INPUT_TARGETS})
|
||||||
|
list(APPEND THIN_INPUT_TARGETS_STATIC "${TARGET}-static")
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
set(lipo_target_static
|
||||||
|
"${name}-${SWIFT_SDK_${sdk}_LIB_SUBDIR}-static")
|
||||||
|
set(UNIVERSAL_LIBRARY_NAME
|
||||||
|
"${SWIFTSTATICLIB_DIR}/${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}${name}${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
||||||
|
_add_swift_lipo_target(
|
||||||
|
${lipo_target_static}
|
||||||
|
"${UNIVERSAL_LIBRARY_NAME}"
|
||||||
|
${THIN_INPUT_TARGETS_STATIC})
|
||||||
|
swift_install_in_component("${SWIFTLIB_INSTALL_IN_COMPONENT}"
|
||||||
|
FILES "${UNIVERSAL_LIBRARY_NAME}"
|
||||||
|
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/swift_static/${resource_dir_sdk_subdir}"
|
||||||
|
PERMISSIONS
|
||||||
|
OWNER_READ OWNER_WRITE
|
||||||
|
GROUP_READ
|
||||||
|
WORLD_READ)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Add Swift standard library targets as dependencies to the top-level
|
||||||
|
# convenience target.
|
||||||
|
if(SWIFTLIB_TARGET_LIBRARY)
|
||||||
|
foreach(arch ${SWIFT_SDK_${sdk}_ARCHITECTURES})
|
||||||
|
set(VARIANT_SUFFIX "-${SWIFT_SDK_${sdk}_LIB_SUBDIR}-${arch}")
|
||||||
|
if(TARGET "swift-stdlib${VARIANT_SUFFIX}" AND TARGET "swift-test-stdlib${VARIANT_SUFFIX}")
|
||||||
|
add_dependencies("swift-stdlib${VARIANT_SUFFIX}"
|
||||||
|
${lipo_target}
|
||||||
|
${lipo_target_static})
|
||||||
|
if(NOT "${name}" STREQUAL "swiftStdlibCollectionUnittest")
|
||||||
|
add_dependencies("swift-test-stdlib${VARIANT_SUFFIX}"
|
||||||
|
${lipo_target}
|
||||||
|
${lipo_target_static})
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Note this thin library.
|
|
||||||
list(APPEND THIN_INPUT_TARGETS ${VARIANT_NAME})
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
# Determine the name of the universal library.
|
|
||||||
if(SWIFTLIB_SHARED)
|
|
||||||
set(UNIVERSAL_LIBRARY_NAME
|
|
||||||
"${SWIFTLIB_DIR}/${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${CMAKE_SHARED_LIBRARY_PREFIX}${name}${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
|
||||||
else()
|
|
||||||
set(UNIVERSAL_LIBRARY_NAME
|
|
||||||
"${SWIFTLIB_DIR}/${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}${name}${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
|
|
||||||
set(lipo_target "${name}-${SWIFT_SDK_${sdk}_LIB_SUBDIR}")
|
|
||||||
_add_swift_lipo_target(
|
|
||||||
${lipo_target}
|
|
||||||
"${UNIVERSAL_LIBRARY_NAME}"
|
|
||||||
${THIN_INPUT_TARGETS})
|
|
||||||
|
|
||||||
# Cache universal libraries for dependency purposes
|
|
||||||
set(UNIVERSAL_LIBRARY_NAMES_${SWIFT_SDK_${sdk}_LIB_SUBDIR}
|
|
||||||
${UNIVERSAL_LIBRARY_NAMES_${SWIFT_SDK_${sdk}_LIB_SUBDIR}}
|
|
||||||
${lipo_target}
|
|
||||||
CACHE INTERNAL "UNIVERSAL_LIBRARY_NAMES_${SWIFT_SDK_${sdk}_LIB_SUBDIR}")
|
|
||||||
|
|
||||||
# Determine the subdirectory where this library will be installed.
|
|
||||||
set(resource_dir_sdk_subdir "${SWIFT_SDK_${sdk}_LIB_SUBDIR}")
|
|
||||||
|
|
||||||
if("${resource_dir_sdk_subdir}" STREQUAL "")
|
|
||||||
message(FATAL_ERROR "internal error: the variable should be non-empty")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(SWIFTLIB_TARGET_LIBRARY)
|
|
||||||
if(SWIFTLIB_SHARED)
|
|
||||||
set(resource_dir "swift")
|
|
||||||
set(file_permissions
|
|
||||||
OWNER_READ OWNER_WRITE OWNER_EXECUTE
|
|
||||||
GROUP_READ GROUP_EXECUTE
|
|
||||||
WORLD_READ WORLD_EXECUTE)
|
|
||||||
else()
|
|
||||||
set(resource_dir "swift_static")
|
|
||||||
set(file_permissions
|
|
||||||
OWNER_READ OWNER_WRITE
|
|
||||||
GROUP_READ
|
|
||||||
WORLD_READ)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
swift_install_in_component("${SWIFTLIB_INSTALL_IN_COMPONENT}"
|
|
||||||
FILES "${UNIVERSAL_LIBRARY_NAME}"
|
|
||||||
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/${resource_dir}/${resource_dir_sdk_subdir}"
|
|
||||||
PERMISSIONS ${file_permissions})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# If we built static variants of the library, create a lipo target for
|
|
||||||
# them.
|
|
||||||
set(lipo_target_static)
|
|
||||||
if (SWIFT_BUILD_STATIC_STDLIB AND SWIFTLIB_IS_STDLIB)
|
|
||||||
set(THIN_INPUT_TARGETS_STATIC)
|
|
||||||
foreach(TARGET ${THIN_INPUT_TARGETS})
|
|
||||||
list(APPEND THIN_INPUT_TARGETS_STATIC "${TARGET}-static")
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
set(lipo_target_static
|
|
||||||
"${name}-${SWIFT_SDK_${sdk}_LIB_SUBDIR}-static")
|
|
||||||
set(UNIVERSAL_LIBRARY_NAME
|
|
||||||
"${SWIFTSTATICLIB_DIR}/${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}${name}${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
|
||||||
_add_swift_lipo_target(
|
|
||||||
${lipo_target_static}
|
|
||||||
"${UNIVERSAL_LIBRARY_NAME}"
|
|
||||||
${THIN_INPUT_TARGETS_STATIC})
|
|
||||||
swift_install_in_component("${SWIFTLIB_INSTALL_IN_COMPONENT}"
|
|
||||||
FILES "${UNIVERSAL_LIBRARY_NAME}"
|
|
||||||
DESTINATION "lib${LLVM_LIBDIR_SUFFIX}/swift_static/${resource_dir_sdk_subdir}"
|
|
||||||
PERMISSIONS
|
|
||||||
OWNER_READ OWNER_WRITE
|
|
||||||
GROUP_READ
|
|
||||||
WORLD_READ)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Add Swift standard library targets as dependencies to the top-level
|
|
||||||
# convenience target.
|
|
||||||
if(SWIFTLIB_TARGET_LIBRARY)
|
|
||||||
foreach(arch ${SWIFT_SDK_${sdk}_ARCHITECTURES})
|
|
||||||
set(VARIANT_SUFFIX "-${SWIFT_SDK_${sdk}_LIB_SUBDIR}-${arch}")
|
|
||||||
if(TARGET "swift-stdlib${VARIANT_SUFFIX}" AND TARGET "swift-test-stdlib${VARIANT_SUFFIX}")
|
|
||||||
add_dependencies("swift-stdlib${VARIANT_SUFFIX}"
|
|
||||||
${lipo_target}
|
|
||||||
${lipo_target_static})
|
|
||||||
if(NOT "${name}" STREQUAL "swiftStdlibCollectionUnittest")
|
|
||||||
add_dependencies("swift-test-stdlib${VARIANT_SUFFIX}"
|
|
||||||
${lipo_target}
|
|
||||||
${lipo_target_static})
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
else()
|
else()
|
||||||
@@ -1328,6 +1344,7 @@ function(add_swift_library name)
|
|||||||
LINK_FLAGS ${SWIFTLIB_LINK_FLAGS}
|
LINK_FLAGS ${SWIFTLIB_LINK_FLAGS}
|
||||||
PRIVATE_LINK_LIBRARIES ${SWIFTLIB_PRIVATE_LINK_LIBRARIES}
|
PRIVATE_LINK_LIBRARIES ${SWIFTLIB_PRIVATE_LINK_LIBRARIES}
|
||||||
INTERFACE_LINK_LIBRARIES ${SWIFTLIB_INTERFACE_LINK_LIBRARIES}
|
INTERFACE_LINK_LIBRARIES ${SWIFTLIB_INTERFACE_LINK_LIBRARIES}
|
||||||
|
INCORPORATE_OBJECT_LIBRARIES ${SWIFTLIB_INCORPORATE_OBJECT_LIBRARIES}
|
||||||
${SWIFTLIB_DONT_EMBED_BITCODE_keyword}
|
${SWIFTLIB_DONT_EMBED_BITCODE_keyword}
|
||||||
${SWIFTLIB_API_NOTES_NON_OVERLAY_keyword}
|
${SWIFTLIB_API_NOTES_NON_OVERLAY_keyword}
|
||||||
${SWIFTLIB_IS_STDLIB_keyword}
|
${SWIFTLIB_IS_STDLIB_keyword}
|
||||||
|
|||||||
@@ -143,7 +143,6 @@ set(swift_core_private_link_libraries)
|
|||||||
set(swift_stdlib_compile_flags)
|
set(swift_stdlib_compile_flags)
|
||||||
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
||||||
list(APPEND swift_core_link_flags "-all_load")
|
list(APPEND swift_core_link_flags "-all_load")
|
||||||
list(APPEND swift_core_private_link_libraries swiftRuntime swiftStdlibStubs)
|
|
||||||
list(APPEND swift_core_framework_depends Foundation)
|
list(APPEND swift_core_framework_depends Foundation)
|
||||||
list(APPEND swift_core_framework_depends CoreFoundation)
|
list(APPEND swift_core_framework_depends CoreFoundation)
|
||||||
else()
|
else()
|
||||||
@@ -158,10 +157,11 @@ else()
|
|||||||
# effort has been completed.
|
# effort has been completed.
|
||||||
#set(LINK_FLAGS
|
#set(LINK_FLAGS
|
||||||
# -Wl,--whole-archive swiftRuntime -Wl,--no-whole-archive)
|
# -Wl,--whole-archive swiftRuntime -Wl,--no-whole-archive)
|
||||||
list(APPEND swift_core_private_link_libraries swiftRuntime swiftStdlibStubs)
|
|
||||||
find_package(ICU REQUIRED COMPONENTS uc i18n)
|
find_package(ICU REQUIRED COMPONENTS uc i18n)
|
||||||
list(APPEND swift_core_private_link_libraries
|
list(APPEND swift_core_private_link_libraries
|
||||||
${ICU_UC_LIBRARY} ${ICU_I18N_LIBRARY})
|
${ICU_UC_LIBRARY} ${ICU_I18N_LIBRARY})
|
||||||
|
include_directories(
|
||||||
|
${ICU_UC_INCLUDE_DIR} ${ICU_I18N_INCLUDE_DIR})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CMAKE_SYSTEM_NAME STREQUAL "CYGWIN")
|
if(CMAKE_SYSTEM_NAME STREQUAL "CYGWIN")
|
||||||
@@ -205,5 +205,6 @@ add_swift_library(swiftCore SHARED IS_STDLIB IS_STDLIB_CORE
|
|||||||
SWIFT_COMPILE_FLAGS ${swift_stdlib_compile_flags}
|
SWIFT_COMPILE_FLAGS ${swift_stdlib_compile_flags}
|
||||||
LINK_FLAGS ${swift_core_link_flags}
|
LINK_FLAGS ${swift_core_link_flags}
|
||||||
PRIVATE_LINK_LIBRARIES ${swift_core_private_link_libraries}
|
PRIVATE_LINK_LIBRARIES ${swift_core_private_link_libraries}
|
||||||
|
INCORPORATE_OBJECT_LIBRARIES swiftRuntime swiftStdlibStubs
|
||||||
FRAMEWORK_DEPENDS ${swift_core_framework_depends}
|
FRAMEWORK_DEPENDS ${swift_core_framework_depends}
|
||||||
INSTALL_IN_COMPONENT stdlib)
|
INSTALL_IN_COMPONENT stdlib)
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ set(LLVM_OPTIONAL_SOURCES
|
|||||||
${swift_runtime_objc_sources}
|
${swift_runtime_objc_sources}
|
||||||
${swift_runtime_leaks_sources})
|
${swift_runtime_leaks_sources})
|
||||||
|
|
||||||
add_swift_library(swiftRuntime IS_STDLIB IS_STDLIB_CORE
|
add_swift_library(swiftRuntime OBJECT_LIBRARY TARGET_LIBRARY
|
||||||
${swift_runtime_sources}
|
${swift_runtime_sources}
|
||||||
${swift_runtime_objc_sources}
|
${swift_runtime_objc_sources}
|
||||||
${swift_runtime_leaks_sources}
|
${swift_runtime_leaks_sources}
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
set(swift_stubs_objc_sources)
|
set(swift_stubs_objc_sources)
|
||||||
set(swift_stubs_unicode_normalization_sources)
|
set(swift_stubs_unicode_normalization_sources)
|
||||||
set(swift_stubs_link_libraries)
|
|
||||||
|
|
||||||
if(SWIFT_HOST_VARIANT MATCHES "${SWIFT_DARWIN_VARIANTS}")
|
if(SWIFT_HOST_VARIANT MATCHES "${SWIFT_DARWIN_VARIANTS}")
|
||||||
set(swift_stubs_objc_sources
|
set(swift_stubs_objc_sources
|
||||||
@@ -10,16 +9,11 @@ if(SWIFT_HOST_VARIANT MATCHES "${SWIFT_DARWIN_VARIANTS}")
|
|||||||
set(LLVM_OPTIONAL_SOURCES
|
set(LLVM_OPTIONAL_SOURCES
|
||||||
UnicodeNormalization.cpp)
|
UnicodeNormalization.cpp)
|
||||||
else()
|
else()
|
||||||
find_package(ICU REQUIRED COMPONENTS uc i18n)
|
|
||||||
set(swift_stubs_unicode_normalization_sources
|
set(swift_stubs_unicode_normalization_sources
|
||||||
UnicodeNormalization.cpp)
|
UnicodeNormalization.cpp)
|
||||||
set(swift_stubs_link_libraries
|
|
||||||
${ICU_UC_LIBRARY} ${ICU_I18N_LIBRARY})
|
|
||||||
include_directories(
|
|
||||||
${ICU_UC_INCLUDE_DIR} ${ICU_I18N_INCLUDE_DIR})
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_swift_library(swiftStdlibStubs IS_STDLIB IS_STDLIB_CORE
|
add_swift_library(swiftStdlibStubs OBJECT_LIBRARY TARGET_LIBRARY
|
||||||
Assert.cpp
|
Assert.cpp
|
||||||
GlobalObjects.cpp
|
GlobalObjects.cpp
|
||||||
LibcShims.cpp
|
LibcShims.cpp
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ if(("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "${SWIFT_PRIMARY_VARIANT_SDK}") AND
|
|||||||
# some stdlib hooks to implement SwiftObject.
|
# some stdlib hooks to implement SwiftObject.
|
||||||
list(APPEND PLATFORM_TARGET_LINK_LIBRARIES
|
list(APPEND PLATFORM_TARGET_LINK_LIBRARIES
|
||||||
${FOUNDATION_LIBRARY}
|
${FOUNDATION_LIBRARY}
|
||||||
swiftCore${SWIFT_PRIMARY_VARIANT_SUFFIX}
|
|
||||||
swiftStdlibUnittest${SWIFT_PRIMARY_VARIANT_SUFFIX}
|
swiftStdlibUnittest${SWIFT_PRIMARY_VARIANT_SUFFIX}
|
||||||
)
|
)
|
||||||
elseif(SWIFT_HOST_VARIANT STREQUAL "freebsd")
|
elseif(SWIFT_HOST_VARIANT STREQUAL "freebsd")
|
||||||
@@ -29,14 +28,16 @@ if(("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "${SWIFT_PRIMARY_VARIANT_SDK}") AND
|
|||||||
Enum.cpp
|
Enum.cpp
|
||||||
Refcounting.cpp
|
Refcounting.cpp
|
||||||
${PLATFORM_SOURCES}
|
${PLATFORM_SOURCES}
|
||||||
|
|
||||||
|
# The runtime tests link to internal runtime symbols, which aren't exported
|
||||||
|
# from the swiftCore dylib, so we need to link to both the runtime archive
|
||||||
|
# and the stdlib.
|
||||||
|
$<TARGET_OBJECTS:swiftRuntime${SWIFT_PRIMARY_VARIANT_SUFFIX}>
|
||||||
)
|
)
|
||||||
|
|
||||||
# The runtime tests link to internal runtime symbols, which aren't exported
|
|
||||||
# from the swiftCore dylib, so we need to link to both the runtime archive
|
|
||||||
# and the stdlib.
|
|
||||||
# FIXME: cross-compile for all variants.
|
# FIXME: cross-compile for all variants.
|
||||||
target_link_libraries(SwiftRuntimeTests
|
target_link_libraries(SwiftRuntimeTests
|
||||||
swiftRuntime${SWIFT_PRIMARY_VARIANT_SUFFIX}
|
swiftCore${SWIFT_PRIMARY_VARIANT_SUFFIX}
|
||||||
${PLATFORM_TARGET_LINK_LIBRARIES}
|
${PLATFORM_TARGET_LINK_LIBRARIES}
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
Reference in New Issue
Block a user