Skip to content

Commit cf1f240

Browse files
committed
build: cleanup some of the organization in add_swift_host_library
This is just a cleanup of the implementation of `add_swift_host_library`, reorganizing the flag computation and application as well as the property setting.
1 parent 62a4bd6 commit cf1f240

File tree

1 file changed

+50
-76
lines changed

1 file changed

+50
-76
lines changed

cmake/modules/AddSwift.cmake

Lines changed: 50 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -481,28 +481,17 @@ function(add_swift_host_library name)
481481
message(FATAL_ERROR "Either SHARED or STATIC must be specified")
482482
endif()
483483

484-
# Include LLVM Bitcode slices for iOS, Watch OS, and Apple TV OS device libraries.
485-
set(embed_bitcode_arg)
486-
if(SWIFT_EMBED_BITCODE_SECTION)
487-
if(SWIFT_HOST_VARIANT_SDK MATCHES "(I|TV|WATCH)OS")
488-
list(APPEND ASHL_C_COMPILE_FLAGS "-fembed-bitcode")
489-
set(embed_bitcode_arg EMBED_BITCODE)
490-
endif()
491-
endif()
492-
493484
if(XCODE)
494-
string(REGEX MATCHALL "/[^/]+" split_path ${CMAKE_CURRENT_SOURCE_DIR})
495-
list(GET split_path -1 dir)
485+
get_filename_component(dir ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY)
486+
496487
file(GLOB_RECURSE ASHL_HEADERS
497488
${SWIFT_SOURCE_DIR}/include/swift${dir}/*.h
498489
${SWIFT_SOURCE_DIR}/include/swift${dir}/*.def
499490
${CMAKE_CURRENT_SOURCE_DIR}/*.def)
500-
501491
file(GLOB_RECURSE ASHL_TDS
502492
${SWIFT_SOURCE_DIR}/include/swift${dir}/*.td)
503493

504-
set_source_files_properties(${ASHL_HEADERS} ${ASHL_TDS}
505-
PROPERTIES
494+
set_source_files_properties(${ASHL_HEADERS} ${ASHL_TDS} PROPERTIES
506495
HEADER_FILE_ONLY true)
507496
source_group("TableGen descriptions" FILES ${ASHL_TDS})
508497

@@ -515,110 +504,95 @@ function(add_swift_host_library name)
515504
set(libkind STATIC)
516505
endif()
517506

518-
add_library("${target}" ${libkind} ${ASHL_SOURCES})
519-
_set_target_prefix_and_suffix("${target}" "${libkind}" "${SWIFT_HOST_VARIANT_SDK}")
520-
add_dependencies(${target} ${LLVM_COMMON_DEPENDS})
521-
522-
if(SWIFT_HOST_VARIANT_SDK STREQUAL WINDOWS)
523-
swift_windows_include_for_arch(${SWIFT_HOST_VARIANT_ARCH} SWIFTLIB_INCLUDE)
524-
target_include_directories("${target}" SYSTEM PRIVATE ${SWIFTLIB_INCLUDE})
525-
set_target_properties(${target}
526-
PROPERTIES
527-
CXX_STANDARD 14)
528-
endif()
529-
530-
if(SWIFT_HOST_VARIANT_SDK STREQUAL WINDOWS)
531-
set_property(TARGET "${target}" PROPERTY NO_SONAME ON)
532-
endif()
533-
534-
llvm_update_compile_flags(${target})
535-
536-
set_output_directory(${target}
507+
add_library(${name} ${libkind} ${ASHL_SOURCES})
508+
add_dependencies(${name} ${LLVM_COMMON_DEPENDS})
509+
llvm_update_compile_flags(${name})
510+
swift_common_llvm_config(${name} ${ASHL_LLVM_LINK_COMPONENTS})
511+
set_output_directory(${name}
537512
BINARY_DIR ${SWIFT_RUNTIME_OUTPUT_INTDIR}
538513
LIBRARY_DIR ${SWIFT_LIBRARY_OUTPUT_INTDIR})
539514

540515
if(SWIFT_HOST_VARIANT_SDK IN_LIST SWIFT_APPLE_PLATFORMS)
541-
set_target_properties("${target}"
516+
set_target_properties(${name}
542517
PROPERTIES
543518
INSTALL_NAME_DIR "@rpath")
544519
elseif(SWIFT_HOST_VARIANT_SDK STREQUAL LINUX)
545-
set_target_properties("${target}"
520+
set_target_properties(${name}
546521
PROPERTIES
547522
INSTALL_RPATH "$ORIGIN:/usr/lib/swift/linux")
548523
elseif(SWIFT_HOST_VARIANT_SDK STREQUAL CYGWIN)
549-
set_target_properties("${target}"
524+
set_target_properties(${name}
550525
PROPERTIES
551526
INSTALL_RPATH "$ORIGIN:/usr/lib/swift/cygwin")
552527
elseif(SWIFT_HOST_VARIANT_SDK STREQUAL "ANDROID")
553-
set_target_properties("${target}"
528+
set_target_properties(${name}
554529
PROPERTIES
555530
INSTALL_RPATH "$ORIGIN")
556531
endif()
557532

558-
set_target_properties("${target}" PROPERTIES BUILD_WITH_INSTALL_RPATH YES)
559-
set_target_properties("${target}" PROPERTIES FOLDER "Swift libraries")
533+
set_target_properties(${name} PROPERTIES
534+
BUILD_WITH_INSTALL_RPATH YES
535+
FOLDER "Swift libraries")
560536

561-
# Call llvm_config() only for libraries that are part of the compiler.
562-
swift_common_llvm_config("${target}" ${ASHL_LLVM_LINK_COMPONENTS})
563-
564-
target_compile_options(${target} PRIVATE
565-
${ASHL_C_COMPILE_FLAGS})
566-
if(SWIFT_HOST_VARIANT_SDK STREQUAL WINDOWS)
567-
if(libkind STREQUAL SHARED)
568-
target_compile_definitions(${target} PRIVATE
569-
_WINDLL)
570-
endif()
571-
endif()
572-
573-
_add_host_variant_c_compile_flags(${target})
574-
_add_host_variant_link_flags(${target})
537+
_add_host_variant_c_compile_flags(${name})
538+
_add_host_variant_link_flags(${name})
539+
_set_target_prefix_and_suffix(${name} "${libkind}" "${SWIFT_HOST_VARIANT_SDK}")
575540

576541
# Set compilation and link flags.
577542
if(SWIFT_HOST_VARIANT_SDK STREQUAL WINDOWS)
578543
swift_windows_include_for_arch(${SWIFT_HOST_VARIANT_ARCH}
579544
${SWIFT_HOST_VARIANT_ARCH}_INCLUDE)
580-
target_include_directories(${target} SYSTEM PRIVATE
545+
target_include_directories(${name} SYSTEM PRIVATE
581546
${${SWIFT_HOST_VARIANT_ARCH}_INCLUDE})
582547

548+
if(libkind STREQUAL SHARED)
549+
target_compile_definitions(${name} PRIVATE
550+
_WINDLL)
551+
endif()
552+
583553
if(NOT ${CMAKE_C_COMPILER_ID} STREQUAL MSVC)
584554
swift_windows_get_sdk_vfs_overlay(ASHL_VFS_OVERLAY)
585-
target_compile_options(${target} PRIVATE
555+
target_compile_options(${name} PRIVATE
586556
"SHELL:-Xclang -ivfsoverlay -Xclang ${ASHL_VFS_OVERLAY}")
587557

588558
# MSVC doesn't support -Xclang. We don't need to manually specify
589559
# the dependent libraries as `cl` does so.
590-
target_compile_options(${target} PRIVATE
560+
target_compile_options(${name} PRIVATE
591561
"SHELL:-Xclang --dependent-lib=oldnames"
592562
# TODO(compnerd) handle /MT, /MTd
593563
"SHELL:-Xclang --dependent-lib=msvcrt$<$<CONFIG:Debug>:d>")
594564
endif()
565+
566+
set_target_properties(${name} PROPERTIES
567+
CXX_STANDARD 14
568+
NO_SONAME YES)
595569
endif()
596570

597571
if(${SWIFT_HOST_VARIANT_SDK} IN_LIST SWIFT_APPLE_PLATFORMS)
598-
target_link_options(${target} PRIVATE
599-
"LINKER:-compatibility_version,1")
600-
if(SWIFT_COMPILER_VERSION)
601-
target_link_options(${target} PRIVATE
602-
"LINKER:-current_version,${SWIFT_COMPILER_VERSION}")
603-
endif()
604572
# Include LLVM Bitcode slices for iOS, Watch OS, and Apple TV OS device libraries.
605573
if(SWIFT_EMBED_BITCODE_SECTION)
606-
if(${SWIFT_HOST_VARIANT_SDK} MATCHES "(I|TV|WATCH)OS")
607-
target_link_options(${target} PRIVATE
608-
"LINKER:-bitcode_bundle"
609-
"LINKER:-lto_library,${LLVM_LIBRARY_DIR}/libLTO.dylib")
610-
611-
# Please note that using a generator expression to fit
612-
# this in a single target_link_options does not work
613-
# (at least in CMake 3.15 and 3.16),
614-
# since that seems not to allow the LINKER: prefix to be
615-
# evaluated (i.e. it will be added as-is to the linker parameters)
616-
if(SWIFT_EMBED_BITCODE_SECTION_HIDE_SYMBOLS)
617-
target_link_options(${target} PRIVATE
618-
"LINKER:-bitcode_hide_symbols")
619-
endif()
574+
target_compile_options(${name} PRIVATE
575+
-fembed-bitcode)
576+
target_link_options(${name} PRIVATE
577+
"LINKER:-bitcode_bundle"
578+
"LINKER:-lto_library,${LLVM_LIBRARY_DIR}/libLTO.dylib")
579+
580+
# Please note that using a generator expression to fit this in a single
581+
# target_link_options does not work (at least in CMake 3.15 and 3.16),
582+
# since that seems not to allow the LINKER: prefix to be evaluated (i.e.
583+
# it will be added as-is to the linker parameters)
584+
if(SWIFT_EMBED_BITCODE_SECTION_HIDE_SYMBOLS)
585+
target_link_options(${name} PRIVATE
586+
"LINKER:-bitcode_hide_symbols")
620587
endif()
621588
endif()
589+
590+
target_link_options(${name} PRIVATE
591+
"LINKER:-compatibility_version,1")
592+
if(SWIFT_COMPILER_VERSION)
593+
target_link_options(${name} PRIVATE
594+
"LINKER:-current_version,${SWIFT_COMPILER_VERSION}")
595+
endif()
622596
endif()
623597

624598
add_dependencies(dev ${name})

0 commit comments

Comments
 (0)