diff --git a/cmake/modules/AddSwift.cmake b/cmake/modules/AddSwift.cmake index dc59e57379d02..7e857740ebbe3 100644 --- a/cmake/modules/AddSwift.cmake +++ b/cmake/modules/AddSwift.cmake @@ -2546,9 +2546,9 @@ function(_add_swift_executable_single name) set(SWIFTEXE_SINGLE_SOURCES ${SWIFTEXE_SINGLE_UNPARSED_ARGUMENTS}) - translate_flag(${SWIFTEXE_SINGLE_EXCLUDE_FROM_ALL} - "EXCLUDE_FROM_ALL" - SWIFTEXE_SINGLE_EXCLUDE_FROM_ALL_FLAG) + if(SWIFTEXE_SINGLE_EXCLUDE_FROM_ALL) + message(SEND_ERROR "${name} is using EXCLUDE_FROM_ALL option which is deprecated.") + endif() # Check arguments. precondition(SWIFTEXE_SINGLE_SDK MESSAGE "Should specify an SDK") @@ -2583,12 +2583,6 @@ function(_add_swift_executable_single name) LINK_LIBRARIES_VAR_NAME link_libraries LIBRARY_SEARCH_DIRECTORIES_VAR_NAME library_search_directories) - if(${SWIFTEXE_SINGLE_SDK} IN_LIST SWIFT_APPLE_PLATFORMS) - list(APPEND link_flags - "-Xlinker" "-rpath" - "-Xlinker" "@executable_path/../lib/swift/${SWIFT_SDK_${SWIFTEXE_SINGLE_SDK}_LIB_SUBDIR}") - endif() - _list_add_string_suffix( "${SWIFTEXE_SINGLE_LINK_LIBRARIES}" "-${SWIFT_SDK_${SWIFTEXE_SINGLE_SDK}_LIB_SUBDIR}-${SWIFTEXE_SINGLE_ARCHITECTURE}" @@ -2612,7 +2606,6 @@ function(_add_swift_executable_single name) add_swift_source_group("${SWIFTEXE_SINGLE_EXTERNAL_SOURCES}") add_executable(${name} - ${SWIFTEXE_SINGLE_EXCLUDE_FROM_ALL_FLAG} ${SWIFTEXE_SINGLE_SOURCES} ${SWIFTEXE_SINGLE_EXTERNAL_SOURCES}) @@ -2637,6 +2630,11 @@ function(_add_swift_executable_single name) if (SWIFT_PARALLEL_LINK_JOBS) set_property(TARGET ${name} PROPERTY JOB_POOL_LINK swift_link_job_pool) endif() + if(${SWIFTEXE_SINGLE_SDK} IN_LIST SWIFT_APPLE_PLATFORMS) + set_target_properties(${name} PROPERTIES + BUILD_WITH_INSTALL_RPATH YES + INSTALL_RPATH "@executable_path/../lib/swift/${SWIFT_SDK_${SWIFTEXE_SINGLE_SDK}_LIB_SUBDIR}") + endif() set_output_directory(${name} BINARY_DIR ${SWIFT_RUNTIME_OUTPUT_INTDIR} LIBRARY_DIR ${SWIFT_LIBRARY_OUTPUT_INTDIR}) diff --git a/cmake/modules/AddSwiftUnittests.cmake b/cmake/modules/AddSwiftUnittests.cmake index 635253a448f6e..5da0ae3ac44e3 100644 --- a/cmake/modules/AddSwiftUnittests.cmake +++ b/cmake/modules/AddSwiftUnittests.cmake @@ -40,8 +40,8 @@ function(add_swift_unittest test_dirname) endif() if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") - set_property(TARGET "${test_dirname}" APPEND_STRING PROPERTY - LINK_FLAGS " -Xlinker -rpath -Xlinker ${SWIFT_LIBRARY_OUTPUT_INTDIR}/swift/macosx") + set_target_properties(${test_dirname} PROPERTIES + BUILD_RPATH ${SWIFT_LIBRARY_OUTPUT_INTDIR}/swift/macosx) elseif("${SWIFT_HOST_VARIANT}" STREQUAL "android") swift_android_lib_for_arch(${SWIFT_HOST_VARIANT_ARCH} android_system_libs) set_property(TARGET "${test_dirname}" APPEND PROPERTY LINK_DIRECTORIES diff --git a/stdlib/cmake/modules/AddSwiftStdlib.cmake b/stdlib/cmake/modules/AddSwiftStdlib.cmake index 52fce52ee4938..a80005624d4ec 100644 --- a/stdlib/cmake/modules/AddSwiftStdlib.cmake +++ b/stdlib/cmake/modules/AddSwiftStdlib.cmake @@ -15,9 +15,9 @@ function(add_swift_target_executable name) set(SWIFTEXE_TARGET_SOURCES ${SWIFTEXE_TARGET_UNPARSED_ARGUMENTS}) - translate_flag(${SWIFTEXE_TARGET_EXCLUDE_FROM_ALL} - "EXCLUDE_FROM_ALL" - SWIFTEXE_TARGET_EXCLUDE_FROM_ALL_FLAG) + if(SWIFTEXE_TARGET_EXCLUDE_FROM_ALL) + message(SEND_ERROR "${name} is using EXCLUDE_FROM_ALL which is deprecated.") + endif() # All Swift executables depend on the standard library. list(APPEND SWIFTEXE_TARGET_LINK_LIBRARIES swiftCore) @@ -29,14 +29,6 @@ function(add_swift_target_executable name) set(VARIANT_SUFFIX "-${SWIFT_SDK_${sdk}_LIB_SUBDIR}-${arch}") set(VARIANT_NAME "${name}${VARIANT_SUFFIX}") - set(SWIFTEXE_TARGET_EXCLUDE_FROM_ALL_FLAG_CURRENT - ${SWIFTEXE_TARGET_EXCLUDE_FROM_ALL_FLAG}) - if(NOT "${VARIANT_SUFFIX}" STREQUAL "${SWIFT_PRIMARY_VARIANT_SUFFIX}") - # By default, don't build executables for target SDKs to avoid building - # target stdlibs. - set(SWIFTEXE_TARGET_EXCLUDE_FROM_ALL_FLAG_CURRENT "EXCLUDE_FROM_ALL") - endif() - if(SWIFTEXE_TARGET_BUILD_WITH_STDLIB) add_dependencies("swift-test-stdlib${VARIANT_SUFFIX}" ${VARIANT_NAME}) endif() @@ -54,8 +46,14 @@ function(add_swift_target_executable name) LLVM_LINK_COMPONENTS ${SWIFTEXE_TARGET_LLVM_LINK_COMPONENTS} SDK "${sdk}" ARCHITECTURE "${arch}" - LINK_LIBRARIES ${SWIFTEXE_TARGET_LINK_LIBRARIES} - ${SWIFTEXE_TARGET_EXCLUDE_FROM_ALL_FLAG_CURRENT}) + LINK_LIBRARIES ${SWIFTEXE_TARGET_LINK_LIBRARIES}) + + if(NOT "${VARIANT_SUFFIX}" STREQUAL "${SWIFT_PRIMARY_VARIANT_SUFFIX}") + # By default, don't build executables for target SDKs to avoid building + # target stdlibs. + set_target_properties(${VARIANT_NAME} PROPERTIES + EXCLUDE_FROM_ALL TRUE) + endif() if(${sdk} IN_LIST SWIFT_APPLE_PLATFORMS) add_custom_command_target(unused_var2 diff --git a/tools/swift-syntax-parser-test/CMakeLists.txt b/tools/swift-syntax-parser-test/CMakeLists.txt index e5cdd6d5b83dc..cd4019c273aae 100644 --- a/tools/swift-syntax-parser-test/CMakeLists.txt +++ b/tools/swift-syntax-parser-test/CMakeLists.txt @@ -15,14 +15,10 @@ target_link_libraries(swift-syntax-parser-test libSwiftSyntaxParser ) -if(APPLE) - # Prioritize finding the parser library from the build/lib directory. - # Otherwise it may find it from the 'lib/swift/macosx' directory which could - # be out-of-date. - get_target_property(link_flags swift-syntax-parser-test LINK_FLAGS) - set(link_flags "-Xlinker -rpath -Xlinker @executable_path/../lib ${link_flags}") - set_property(TARGET swift-syntax-parser-test PROPERTY - LINK_FLAGS "${link_flags}") +if(CMAKE_SYSTEM_NAME STREQUAL Darwin) + set_target_properties(swift-syntax-parser-test PROPERTIES + BUILD_WITH_INSTALL_RPATH YES + INSTALL_RPATH @executable_path/../lib) endif() set_property(TARGET swift-syntax-parser-test APPEND_STRING PROPERTY diff --git a/unittests/SyntaxParser/CMakeLists.txt b/unittests/SyntaxParser/CMakeLists.txt index a6c372bca1e4b..e74178e182b5b 100644 --- a/unittests/SyntaxParser/CMakeLists.txt +++ b/unittests/SyntaxParser/CMakeLists.txt @@ -12,14 +12,9 @@ target_link_libraries(SwiftSyntaxParserTests PRIVATE libSwiftSyntaxParser) -if(APPLE) - # Prioritize finding the parser library from the build/lib directory. - # Otherwise it may find it from the 'lib/swift/macosx' directory which could - # be out-of-date. - get_target_property(link_flags SwiftSyntaxParserTests LINK_FLAGS) - set(link_flags "-Xlinker -rpath -Xlinker ${SWIFT_LIBRARY_OUTPUT_INTDIR} ${link_flags}") - set_property(TARGET SwiftSyntaxParserTests PROPERTY - LINK_FLAGS "${link_flags}") +if(CMAKE_SYSTEM_NAME STREQUAL Darwin) + set_target_properties(SwiftSyntaxParserTests PROPERTIES + BUILD_RPATH ${SWIFT_LIBRARY_OUTPUT_INTDIR}) endif() set_property(TARGET SwiftSyntaxParserTests APPEND_STRING PROPERTY