diff --git a/cmake/modules/AddSwift.cmake b/cmake/modules/AddSwift.cmake index dc59e57379d02..9caf6b793b03d 100644 --- a/cmake/modules/AddSwift.cmake +++ b/cmake/modules/AddSwift.cmake @@ -702,14 +702,6 @@ function(_add_swift_lipo_target) endif() endfunction() -function(swift_target_link_search_directories target directories) - set(STLD_FLAGS "") - foreach(directory ${directories}) - set(STLD_FLAGS "${STLD_FLAGS} \"${CMAKE_LIBRARY_PATH_FLAG}${directory}\"") - endforeach() - set_property(TARGET ${target} APPEND_STRING PROPERTY LINK_FLAGS ${STLD_FLAGS}) -endfunction() - # Add a single variant of a new Swift library. # # Usage: @@ -886,22 +878,10 @@ function(_add_swift_library_single target name) if(SWIFT_EMBED_BITCODE_SECTION AND NOT SWIFTLIB_SINGLE_DONT_EMBED_BITCODE) if("${SWIFTLIB_SINGLE_SDK}" STREQUAL "IOS" OR "${SWIFTLIB_SINGLE_SDK}" STREQUAL "TVOS" OR "${SWIFTLIB_SINGLE_SDK}" STREQUAL "WATCHOS") list(APPEND SWIFTLIB_SINGLE_C_COMPILE_FLAGS "-fembed-bitcode") - list(APPEND SWIFTLIB_SINGLE_LINK_FLAGS "-Xlinker" "-bitcode_bundle" "-Xlinker" "-lto_library" "-Xlinker" "${LLVM_LIBRARY_DIR}/libLTO.dylib") - # If we are asked to hide symbols, pass the obfuscation flag to libLTO. - if (SWIFT_EMBED_BITCODE_SECTION_HIDE_SYMBOLS) - list(APPEND SWIFTLIB_SINGLE_LINK_FLAGS "-Xlinker" "-bitcode_hide_symbols") - endif() set(embed_bitcode_arg EMBED_BITCODE) endif() endif() - if(${SWIFTLIB_SINGLE_SDK} IN_LIST SWIFT_APPLE_PLATFORMS) - list(APPEND SWIFTLIB_SINGLE_LINK_FLAGS "-Xlinker" "-compatibility_version" "-Xlinker" "1") - if (SWIFT_COMPILER_VERSION) - list(APPEND SWIFTLIB_SINGLE_LINK_FLAGS "-Xlinker" "-current_version" "-Xlinker" "${SWIFT_COMPILER_VERSION}" ) - endif() - endif() - if(XCODE) string(REGEX MATCHALL "/[^/]+" split_path ${CMAKE_CURRENT_SOURCE_DIR}) list(GET split_path -1 dir) @@ -1450,17 +1430,32 @@ function(_add_swift_library_single target name) set(PLIST_INFO_BUILD_VERSION) endif() - # Convert variables to space-separated strings. - _list_escape_for_shell("${c_compile_flags}" c_compile_flags) - _list_escape_for_shell("${link_flags}" link_flags) - # Set compilation and link flags. - set_property(TARGET "${target}" APPEND_STRING PROPERTY - COMPILE_FLAGS " ${c_compile_flags}") - set_property(TARGET "${target}" APPEND_STRING PROPERTY - LINK_FLAGS " ${link_flags}") - set_property(TARGET "${target}" APPEND PROPERTY LINK_LIBRARIES ${link_libraries}) - swift_target_link_search_directories("${target}" "${library_search_directories}") + target_compile_options(${target} PRIVATE + ${c_compile_flags}) + target_link_options(${target} PRIVATE + ${link_flags}) + if(${SWIFTLIB_SINGLE_SDK} IN_LIST SWIFT_APPLE_PLATFORMS) + target_link_options(${target} PRIVATE + "LINKER:-compatibility_version,1") + if(SWIFT_COMPILER_VERSION) + target_link_options(${target} PRIVATE + "LINKER:-current_version,${SWIFT_COMPILER_VERSION}") + endif() + # Include LLVM Bitcode slices for iOS, Watch OS, and Apple TV OS device libraries. + if(SWIFT_EMBED_BITCODE_SECTION AND NOT SWIFTLIB_SINGLE_DONT_EMBED_BITCODE) + if(${SWIFTLIB_SINGLE_SDK} MATCHES "(I|TV|WATCH)OS") + target_link_options(${target} PRIVATE + "LINKER:-bitcode_bundle" + $<$:"LINKER:-bitcode_hide_symbols"> + "LINKER:-lto_library,${LLVM_LIBRARY_DIR}/libLTO.dylib") + endif() + endif() + endif() + target_link_libraries(${target} PRIVATE + ${link_libraries}) + target_link_directories(${target} PRIVATE + ${library_search_directories}) # Adjust the linked libraries for windows targets. On Windows, the link is # performed against the import library, and the runtime uses the dll. Not @@ -1510,8 +1505,8 @@ function(_add_swift_library_single target name) endif() if(target_static) - set_property(TARGET "${target_static}" APPEND_STRING PROPERTY - COMPILE_FLAGS " ${c_compile_flags}") + target_link_options(${target_static} PRIVATE + ${c_compile_flags}) # FIXME: The fallback paths here are going to be dynamic libraries. if(SWIFTLIB_INSTALL_WITH_SHARED) @@ -1523,7 +1518,8 @@ function(_add_swift_library_single target name) "${search_base_dir}/${SWIFTLIB_SINGLE_SUBDIR}" "${SWIFT_NATIVE_SWIFT_TOOLS_PATH}/../lib/swift/${SWIFTLIB_SINGLE_SUBDIR}" "${SWIFT_NATIVE_SWIFT_TOOLS_PATH}/../lib/swift/${SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_LIB_SUBDIR}") - swift_target_link_search_directories("${target_static}" "${library_search_directories}") + target_link_directories(${target_static} PRIVATE + ${library_search_directories}) target_link_libraries("${target_static}" PRIVATE ${SWIFTLIB_SINGLE_PRIVATE_LINK_LIBRARIES}) endif() @@ -2624,16 +2620,14 @@ function(_add_swift_executable_single name) ${SWIFTEXE_SINGLE_DEPENDS}) llvm_update_compile_flags("${name}") - # Convert variables to space-separated strings. - _list_escape_for_shell("${c_compile_flags}" c_compile_flags) - _list_escape_for_shell("${link_flags}" link_flags) - - set_property(TARGET ${name} APPEND_STRING PROPERTY - COMPILE_FLAGS " ${c_compile_flags}") - swift_target_link_search_directories("${name}" "${library_search_directories}") - set_property(TARGET ${name} APPEND_STRING PROPERTY - LINK_FLAGS " ${link_flags}") - set_property(TARGET ${name} APPEND PROPERTY LINK_LIBRARIES ${link_libraries}) + target_compile_options(${name} PRIVATE + ${c_compile_flags}) + target_link_directories(${name} PRIVATE + ${library_search_directories}) + target_link_options(${name} PRIVATE + ${link_flags}) + target_link_libraries(${name} PRIVATE + ${link_libraries}) if (SWIFT_PARALLEL_LINK_JOBS) set_property(TARGET ${name} PROPERTY JOB_POOL_LINK swift_link_job_pool) endif() diff --git a/cmake/modules/SwiftList.cmake b/cmake/modules/SwiftList.cmake index 68708e242f35d..c2b1043ff9ec6 100644 --- a/cmake/modules/SwiftList.cmake +++ b/cmake/modules/SwiftList.cmake @@ -38,15 +38,6 @@ function(_list_add_string_suffix input_list suffix result_var_name) set("${result_var_name}" "${result}" PARENT_SCOPE) endfunction() -function(_list_escape_for_shell input_list result_var_name) - set(result "") - foreach(element ${input_list}) - string(REPLACE " " "\\ " element "${element}") - set(result "${result}${element} ") - endforeach() - set("${result_var_name}" "${result}" PARENT_SCOPE) -endfunction() - function(list_replace input_list old new) set(replaced_list) foreach(item ${${input_list}}) diff --git a/lib/SymbolGraphGen/CMakeLists.txt b/lib/SymbolGraphGen/CMakeLists.txt index 2780330587fb2..64f34c90254b7 100644 --- a/lib/SymbolGraphGen/CMakeLists.txt +++ b/lib/SymbolGraphGen/CMakeLists.txt @@ -7,7 +7,7 @@ add_swift_host_library(swiftSymbolGraphGen STATIC SymbolGraphGen.cpp SymbolGraphASTWalker.cpp) -target_link_libraries(swiftSymbolGraphGen +target_link_libraries(swiftSymbolGraphGen PRIVATE swiftAST swiftFrontend swiftMarkup) diff --git a/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake b/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake index b33c54d66f70b..4f88629516aa4 100644 --- a/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake +++ b/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake @@ -70,17 +70,15 @@ function(add_sourcekit_default_compiler_flags target) LINK_LIBRARIES_VAR_NAME link_libraries LIBRARY_SEARCH_DIRECTORIES_VAR_NAME library_search_directories) - # Convert variables to space-separated strings. - _list_escape_for_shell("${c_compile_flags}" c_compile_flags) - _list_escape_for_shell("${link_flags}" link_flags) - # Set compilation and link flags. - set_property(TARGET "${target}" APPEND_STRING PROPERTY - COMPILE_FLAGS " ${c_compile_flags} -fblocks") - set_property(TARGET "${target}" APPEND_STRING PROPERTY - LINK_FLAGS " ${link_flags}") - set_property(TARGET "${target}" APPEND PROPERTY LINK_LIBRARIES ${link_libraries}) - swift_target_link_search_directories("${target}" "${library_search_directories}") + target_compile_options(${target} PRIVATE + -fblocks) + target_link_options(${target} PRIVATE + ${link_flags}) + target_link_directories(${target} PRIVATE + ${library_search_directories}) + target_link_libraries(${target} PRIVATE + ${link_libraries}) endfunction() # Add a new SourceKit library.