Skip to content

Commit 79716ef

Browse files
authored
Merge pull request swiftlang#29960 from compnerd/add-swift-host-library-single-simplifications
`_add_swift_host_library_single` simplifications
2 parents fa2ab3b + 4b2cbd6 commit 79716ef

File tree

1 file changed

+55
-103
lines changed

1 file changed

+55
-103
lines changed

cmake/modules/AddSwift.cmake

Lines changed: 55 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -673,19 +673,12 @@ endfunction()
673673
# Usage:
674674
# _add_swift_host_library_single(
675675
# target
676-
# name
677676
# [SHARED]
678677
# [STATIC]
679-
# [SDK sdk]
680-
# [ARCHITECTURE architecture]
681678
# [LLVM_LINK_COMPONENTS comp1 ...]
682-
# INSTALL_IN_COMPONENT comp
683679
# source1 [source2 source3 ...])
684680
#
685681
# target
686-
# Name of the target (e.g., swiftParse-IOS-armv7).
687-
#
688-
# name
689682
# Name of the library (e.g., swiftParse).
690683
#
691684
# SHARED
@@ -694,123 +687,91 @@ endfunction()
694687
# STATIC
695688
# Build a static library.
696689
#
697-
# SDK sdk
698-
# SDK to build for.
699-
#
700-
# ARCHITECTURE
701-
# Architecture to build for.
702-
#
703690
# LLVM_LINK_COMPONENTS
704691
# LLVM components this library depends on.
705692
#
706-
# INSTALL_IN_COMPONENT comp
707-
# The Swift installation component that this library belongs to.
708-
#
709693
# source1 ...
710694
# Sources to add into this library
711-
function(_add_swift_host_library_single target name)
712-
set(SWIFTLIB_SINGLE_options
695+
function(_add_swift_host_library_single target)
696+
set(options
713697
SHARED
714698
STATIC)
715-
set(SWIFTLIB_SINGLE_single_parameter_options
716-
ARCHITECTURE
717-
INSTALL_IN_COMPONENT
718-
SDK)
719-
set(SWIFTLIB_SINGLE_multiple_parameter_options
699+
set(single_parameter_options)
700+
set(multiple_parameter_options
720701
GYB_SOURCES
721702
LLVM_LINK_COMPONENTS)
722703

723-
cmake_parse_arguments(SWIFTLIB_SINGLE
724-
"${SWIFTLIB_SINGLE_options}"
725-
"${SWIFTLIB_SINGLE_single_parameter_options}"
726-
"${SWIFTLIB_SINGLE_multiple_parameter_options}"
704+
cmake_parse_arguments(ASHLS
705+
"${options}"
706+
"${single_parameter_options}"
707+
"${multiple_parameter_options}"
727708
${ARGN})
709+
set(ASHLS_SOURCES ${ASHLS_UNPARSED_ARGUMENTS})
728710

729-
set(SWIFTLIB_SINGLE_SOURCES ${SWIFTLIB_SINGLE_UNPARSED_ARGUMENTS})
730-
731-
translate_flags(SWIFTLIB_SINGLE "${SWIFTLIB_SINGLE_options}")
732-
733-
# Check arguments.
734-
precondition(SWIFTLIB_SINGLE_SDK MESSAGE "Should specify an SDK")
735-
precondition(SWIFTLIB_SINGLE_ARCHITECTURE MESSAGE "Should specify an architecture")
736-
precondition(SWIFTLIB_SINGLE_INSTALL_IN_COMPONENT MESSAGE "INSTALL_IN_COMPONENT is required")
711+
translate_flags(ASHLS "${options}")
737712

738-
if(NOT SWIFTLIB_SINGLE_SHARED AND NOT SWIFTLIB_SINGLE_STATIC)
713+
if(NOT ASHLS_SHARED AND NOT ASHLS_STATIC)
739714
message(FATAL_ERROR "Either SHARED or STATIC must be specified")
740715
endif()
741716

742717
# Determine the subdirectory where this library will be installed.
743-
set(SWIFTLIB_SINGLE_SUBDIR
744-
"${SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_LIB_SUBDIR}/${SWIFTLIB_SINGLE_ARCHITECTURE}")
718+
set(ASHLS_SUBDIR
719+
"${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}/${SWIFT_HOST_VARIANT_ARCH}")
745720

746721
# Include LLVM Bitcode slices for iOS, Watch OS, and Apple TV OS device libraries.
747722
set(embed_bitcode_arg)
748723
if(SWIFT_EMBED_BITCODE_SECTION)
749-
if("${SWIFTLIB_SINGLE_SDK}" STREQUAL "IOS" OR "${SWIFTLIB_SINGLE_SDK}" STREQUAL "TVOS" OR "${SWIFTLIB_SINGLE_SDK}" STREQUAL "WATCHOS")
750-
list(APPEND SWIFTLIB_SINGLE_C_COMPILE_FLAGS "-fembed-bitcode")
724+
if(SWIFT_HOST_VARIANT_SDK MATCHES "(I|TV|WATCH)OS")
725+
list(APPEND ASHLS_C_COMPILE_FLAGS "-fembed-bitcode")
751726
set(embed_bitcode_arg EMBED_BITCODE)
752727
endif()
753728
endif()
754729

755730
if(XCODE)
756731
string(REGEX MATCHALL "/[^/]+" split_path ${CMAKE_CURRENT_SOURCE_DIR})
757732
list(GET split_path -1 dir)
758-
file(GLOB_RECURSE SWIFTLIB_SINGLE_HEADERS
733+
file(GLOB_RECURSE ASHLS_HEADERS
759734
${SWIFT_SOURCE_DIR}/include/swift${dir}/*.h
760735
${SWIFT_SOURCE_DIR}/include/swift${dir}/*.def
761736
${CMAKE_CURRENT_SOURCE_DIR}/*.def)
762737

763-
file(GLOB_RECURSE SWIFTLIB_SINGLE_TDS
738+
file(GLOB_RECURSE ASHLS_TDS
764739
${SWIFT_SOURCE_DIR}/include/swift${dir}/*.td)
765740

766-
set_source_files_properties(${SWIFTLIB_SINGLE_HEADERS} ${SWIFTLIB_SINGLE_TDS}
741+
set_source_files_properties(${ASHLS_HEADERS} ${ASHLS_TDS}
767742
PROPERTIES
768743
HEADER_FILE_ONLY true)
769-
source_group("TableGen descriptions" FILES ${SWIFTLIB_SINGLE_TDS})
744+
source_group("TableGen descriptions" FILES ${ASHLS_TDS})
770745

771-
set(SWIFTLIB_SINGLE_SOURCES ${SWIFTLIB_SINGLE_SOURCES} ${SWIFTLIB_SINGLE_HEADERS} ${SWIFTLIB_SINGLE_TDS})
746+
set(ASHLS_SOURCES ${ASHLS_SOURCES} ${ASHLS_HEADERS} ${ASHLS_TDS})
772747
endif()
773748

774-
if(SWIFTLIB_SINGLE_SHARED)
749+
if(ASHLS_SHARED)
775750
set(libkind SHARED)
776-
elseif(SWIFTLIB_SINGLE_STATIC)
751+
elseif(ASHLS_STATIC)
777752
set(libkind STATIC)
778753
endif()
779754

780-
if(SWIFTLIB_SINGLE_GYB_SOURCES)
755+
if(ASHLS_GYB_SOURCES)
781756
handle_gyb_sources(
782757
gyb_dependency_targets
783-
SWIFTLIB_SINGLE_GYB_SOURCES
784-
"${SWIFTLIB_SINGLE_ARCHITECTURE}")
785-
set(SWIFTLIB_SINGLE_SOURCES ${SWIFTLIB_SINGLE_SOURCES}
786-
${SWIFTLIB_SINGLE_GYB_SOURCES})
758+
ASHLS_GYB_SOURCES
759+
"${SWIFT_HOST_VARIANT_ARCH}")
760+
set(ASHLS_SOURCES ${ASHLS_SOURCES} ${ASHLS_GYB_SOURCES})
787761
endif()
788762

789-
add_library("${target}" ${libkind}
790-
${SWIFTLIB_SINGLE_SOURCES})
791-
_set_target_prefix_and_suffix("${target}" "${libkind}" "${SWIFTLIB_SINGLE_SDK}")
763+
add_library("${target}" ${libkind} ${ASHLS_SOURCES})
764+
_set_target_prefix_and_suffix("${target}" "${libkind}" "${SWIFT_HOST_VARIANT_SDK}")
792765

793-
if("${SWIFTLIB_SINGLE_SDK}" STREQUAL "WINDOWS")
794-
swift_windows_include_for_arch(${SWIFTLIB_SINGLE_ARCHITECTURE} SWIFTLIB_INCLUDE)
766+
if("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "WINDOWS")
767+
swift_windows_include_for_arch(${SWIFT_HOST_VARIANT_ARCH} SWIFTLIB_INCLUDE)
795768
target_include_directories("${target}" SYSTEM PRIVATE ${SWIFTLIB_INCLUDE})
796769
set_target_properties(${target}
797770
PROPERTIES
798771
CXX_STANDARD 14)
799772
endif()
800773

801-
if("${SWIFTLIB_SINGLE_SDK}" STREQUAL "WINDOWS" AND NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "Windows")
802-
if("${libkind}" STREQUAL "SHARED")
803-
# Each dll has an associated .lib (import library); since we may be
804-
# building on a non-DLL platform (not windows), create an imported target
805-
# for the library which created implicitly by the dll.
806-
add_custom_command_target(${target}_IMPORT_LIBRARY
807-
OUTPUT "${SWIFTLIB_DIR}/${SWIFTLIB_SINGLE_SUBDIR}/${name}.lib"
808-
DEPENDS "${target}")
809-
add_library(${target}_IMPLIB SHARED IMPORTED GLOBAL)
810-
set_property(TARGET "${target}_IMPLIB" PROPERTY
811-
IMPORTED_LOCATION "${SWIFTLIB_DIR}/${SWIFTLIB_SINGLE_SUBDIR}/${name}.lib")
812-
add_dependencies(${target}_IMPLIB ${${target}_IMPORT_LIBRARY})
813-
endif()
774+
if(SWIFT_HOST_VARIANT_SDK STREQUAL WINDOWS)
814775
set_property(TARGET "${target}" PROPERTY NO_SONAME ON)
815776
endif()
816777

@@ -820,19 +781,19 @@ function(_add_swift_host_library_single target name)
820781
BINARY_DIR ${SWIFT_RUNTIME_OUTPUT_INTDIR}
821782
LIBRARY_DIR ${SWIFT_LIBRARY_OUTPUT_INTDIR})
822783

823-
if(SWIFTLIB_SINGLE_SDK IN_LIST SWIFT_APPLE_PLATFORMS)
784+
if(SWIFT_HOST_VARIANT_SDK IN_LIST SWIFT_APPLE_PLATFORMS)
824785
set_target_properties("${target}"
825786
PROPERTIES
826787
INSTALL_NAME_DIR "@rpath")
827-
elseif("${SWIFTLIB_SINGLE_SDK}" STREQUAL "LINUX")
788+
elseif("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "LINUX")
828789
set_target_properties("${target}"
829790
PROPERTIES
830791
INSTALL_RPATH "$ORIGIN:/usr/lib/swift/linux")
831-
elseif("${SWIFTLIB_SINGLE_SDK}" STREQUAL "CYGWIN")
792+
elseif("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "CYGWIN")
832793
set_target_properties("${target}"
833794
PROPERTIES
834795
INSTALL_RPATH "$ORIGIN:/usr/lib/swift/cygwin")
835-
elseif("${SWIFTLIB_SINGLE_SDK}" STREQUAL "ANDROID")
796+
elseif("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "ANDROID")
836797
# Only set the install RPATH if cross-compiling the host tools, in which
837798
# case both the NDK and Sysroot paths must be set.
838799
if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "" AND
@@ -846,11 +807,6 @@ function(_add_swift_host_library_single target name)
846807
set_target_properties("${target}" PROPERTIES BUILD_WITH_INSTALL_RPATH YES)
847808
set_target_properties("${target}" PROPERTIES FOLDER "Swift libraries")
848809

849-
set_target_properties(${target}
850-
PROPERTIES
851-
# Library name (without the variant information)
852-
OUTPUT_NAME ${name})
853-
854810
# Handle linking and dependencies.
855811
add_dependencies_multiple_targets(
856812
TARGETS "${target}"
@@ -859,18 +815,18 @@ function(_add_swift_host_library_single target name)
859815
${LLVM_COMMON_DEPENDS})
860816

861817
# Call llvm_config() only for libraries that are part of the compiler.
862-
swift_common_llvm_config("${target}" ${SWIFTLIB_SINGLE_LLVM_LINK_COMPONENTS})
818+
swift_common_llvm_config("${target}" ${ASHLS_LLVM_LINK_COMPONENTS})
863819

864820
# Collect compile and link flags for the static and non-static targets.
865821
# Don't set PROPERTY COMPILE_FLAGS or LINK_FLAGS directly.
866-
set(c_compile_flags ${SWIFTLIB_SINGLE_C_COMPILE_FLAGS})
822+
set(c_compile_flags ${ASHLS_C_COMPILE_FLAGS})
867823
set(link_flags)
868824

869-
set(library_search_subdir "${SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_LIB_SUBDIR}")
825+
set(library_search_subdir "${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}")
870826
set(library_search_directories
871-
"${SWIFTLIB_DIR}/${SWIFTLIB_SINGLE_SUBDIR}"
872-
"${SWIFT_NATIVE_SWIFT_TOOLS_PATH}/../lib/swift/${SWIFTLIB_SINGLE_SUBDIR}"
873-
"${SWIFT_NATIVE_SWIFT_TOOLS_PATH}/../lib/swift/${SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_LIB_SUBDIR}")
827+
"${SWIFTLIB_DIR}/${ASHLS_SUBDIR}"
828+
"${SWIFT_NATIVE_SWIFT_TOOLS_PATH}/../lib/swift/${ASHLS_SUBDIR}"
829+
"${SWIFT_NATIVE_SWIFT_TOOLS_PATH}/../lib/swift/${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}")
874830

875831
# In certain cases when building, the environment variable SDKROOT is set to override
876832
# where the sdk root is located in the system. If that environment variable has been
@@ -881,43 +837,43 @@ function(_add_swift_host_library_single target name)
881837
endif()
882838

883839
_add_variant_c_compile_flags(
884-
SDK "${SWIFTLIB_SINGLE_SDK}"
885-
ARCH "${SWIFTLIB_SINGLE_ARCHITECTURE}"
840+
SDK "${SWIFT_HOST_VARIANT_SDK}"
841+
ARCH "${SWIFT_HOST_VARIANT_ARCH}"
886842
BUILD_TYPE ${CMAKE_BUILD_TYPE}
887843
ENABLE_ASSERTIONS ${LLVM_ENABLE_ASSERTIONS}
888844
ANALYZE_CODE_COVERAGE ${SWIFT_ANALYZE_CODE_COVERAGE}
889845
ENABLE_LTO ${SWIFT_TOOLS_ENABLE_LTO}
890846
RESULT_VAR_NAME c_compile_flags
891847
)
892848

893-
if(SWIFTLIB_SINGLE_SDK STREQUAL WINDOWS)
849+
if(SWIFT_HOST_VARIANT_SDK STREQUAL WINDOWS)
894850
if(libkind STREQUAL SHARED)
895851
list(APPEND c_compile_flags -D_WINDLL)
896852
endif()
897853
endif()
898854
_add_variant_link_flags(
899-
SDK "${SWIFTLIB_SINGLE_SDK}"
900-
ARCH "${SWIFTLIB_SINGLE_ARCHITECTURE}"
855+
SDK "${SWIFT_HOST_VARIANT_SDK}"
856+
ARCH "${SWIFT_HOST_VARIANT_ARCH}"
901857
BUILD_TYPE ${CMAKE_BUILD_TYPE}
902858
ENABLE_ASSERTIONS ${LLVM_ENABLE_ASSERTIONS}
903859
ANALYZE_CODE_COVERAGE ${SWIFT_ANALYZE_CODE_COVERAGE}
904860
ENABLE_LTO ${SWIFT_TOOLS_ENABLE_LTO}
905-
LTO_OBJECT_NAME "${target}-${SWIFTLIB_SINGLE_SDK}-${SWIFTLIB_SINGLE_ARCHITECTURE}"
861+
LTO_OBJECT_NAME "${target}-${SWIFT_HOST_VARIANT_SDK}-${SWIFT_HOST_VARIANT_ARCH}"
906862
RESULT_VAR_NAME link_flags
907863
LIBRARY_SEARCH_DIRECTORIES_VAR_NAME library_search_directories
908864
)
909865

910866
# Set compilation and link flags.
911-
if(SWIFTLIB_SINGLE_SDK STREQUAL WINDOWS)
912-
swift_windows_include_for_arch(${SWIFTLIB_SINGLE_ARCHITECTURE}
913-
${SWIFTLIB_SINGLE_ARCHITECTURE}_INCLUDE)
867+
if(SWIFT_HOST_VARIANT_SDK STREQUAL WINDOWS)
868+
swift_windows_include_for_arch(${SWIFT_HOST_VARIANT_ARCH}
869+
${SWIFT_HOST_VARIANT_ARCH}_INCLUDE)
914870
target_include_directories(${target} SYSTEM PRIVATE
915-
${${SWIFTLIB_SINGLE_ARCHITECTURE}_INCLUDE})
871+
${${SWIFT_HOST_VARIANT_ARCH}_INCLUDE})
916872

917873
if(NOT ${CMAKE_C_COMPILER_ID} STREQUAL MSVC)
918-
swift_windows_get_sdk_vfs_overlay(SWIFTLIB_SINGLE_VFS_OVERLAY)
874+
swift_windows_get_sdk_vfs_overlay(ASHLS_VFS_OVERLAY)
919875
target_compile_options(${target} PRIVATE
920-
"SHELL:-Xclang -ivfsoverlay -Xclang ${SWIFTLIB_SINGLE_VFS_OVERLAY}")
876+
"SHELL:-Xclang -ivfsoverlay -Xclang ${ASHLS_VFS_OVERLAY}")
921877

922878
# MSVC doesn't support -Xclang. We don't need to manually specify
923879
# the dependent libraries as `cl` does so.
@@ -932,7 +888,7 @@ function(_add_swift_host_library_single target name)
932888
${c_compile_flags})
933889
target_link_options(${target} PRIVATE
934890
${link_flags})
935-
if(${SWIFTLIB_SINGLE_SDK} IN_LIST SWIFT_APPLE_PLATFORMS)
891+
if(${SWIFT_HOST_VARIANT_SDK} IN_LIST SWIFT_APPLE_PLATFORMS)
936892
target_link_options(${target} PRIVATE
937893
"LINKER:-compatibility_version,1")
938894
if(SWIFT_COMPILER_VERSION)
@@ -941,7 +897,7 @@ function(_add_swift_host_library_single target name)
941897
endif()
942898
# Include LLVM Bitcode slices for iOS, Watch OS, and Apple TV OS device libraries.
943899
if(SWIFT_EMBED_BITCODE_SECTION)
944-
if(${SWIFTLIB_SINGLE_SDK} MATCHES "(I|TV|WATCH)OS")
900+
if(${SWIFT_HOST_VARIANT_SDK} MATCHES "(I|TV|WATCH)OS")
945901
# The two branches of this if statement accomplish the same end result
946902
# We are simply accounting for the fact that on CMake < 3.16
947903
# using a generator expression to
@@ -1019,15 +975,11 @@ function(add_swift_host_library name)
1019975
endif()
1020976

1021977
_add_swift_host_library_single(
1022-
${name}
1023978
${name}
1024979
${ASHL_SHARED_keyword}
1025980
${ASHL_STATIC_keyword}
1026981
${ASHL_SOURCES}
1027-
SDK ${SWIFT_HOST_VARIANT_SDK}
1028-
ARCHITECTURE ${SWIFT_HOST_VARIANT_ARCH}
1029982
LLVM_LINK_COMPONENTS ${ASHL_LLVM_LINK_COMPONENTS}
1030-
INSTALL_IN_COMPONENT "dev"
1031983
)
1032984

1033985
add_dependencies(dev ${name})

0 commit comments

Comments
 (0)