Skip to content

Commit ec8c989

Browse files
committed
build: convert package manifest libraries to static
Change `PackageDescription`, `CompilerPluginSupport`, and `PackagePlugin` to static which will enable SPM to avoid having to deal with `Path` alteration to execute the manifest on Windows. This also means that we no longer have to worry about the `DT_RUNPATH`/`LC_RPATH` on Linux and Darwin respectively.
1 parent 786c513 commit ec8c989

File tree

5 files changed

+21
-106
lines changed

5 files changed

+21
-106
lines changed

Package.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,12 +98,10 @@ let package = Package(
9898
),
9999
.library(
100100
name: "PackageDescription",
101-
type: .dynamic,
102101
targets: ["PackageDescription", "CompilerPluginSupport"]
103102
),
104103
.library(
105104
name: "PackagePlugin",
106-
type: .dynamic,
107105
targets: ["PackagePlugin"]
108106
),
109107
.library(

Sources/CompilerPluginSupport/CMakeLists.txt

Lines changed: 5 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,45 +6,23 @@
66
# See http://swift.org/LICENSE.txt for license information
77
# See http://swift.org/CONTRIBUTORS.txt for Swift project authors
88

9-
add_library(CompilerPluginSupport
9+
add_library(CompilerPluginSupport STATIC
1010
TargetExtensions.swift)
11+
target_compile_options(CompilerPluginSupport PRIVATE
12+
$<$<COMPILE_LANGUAGE:Swift>:-package-description-version$<SEMICOLON>999.0>)
1113
target_link_libraries(CompilerPluginSupport PRIVATE
1214
PackageDescription)
13-
14-
target_compile_options(CompilerPluginSupport PUBLIC
15-
$<$<COMPILE_LANGUAGE:Swift>:-package-description-version$<SEMICOLON>999.0>)
16-
17-
if(CMAKE_HOST_SYSTEM_NAME STREQUAL Darwin)
18-
target_link_options(CompilerPluginSupport PRIVATE
19-
"SHELL:-Xlinker -install_name -Xlinker @rpath/CompilerPluginSupport.dylib")
20-
endif()
21-
2215
set_target_properties(CompilerPluginSupport PROPERTIES
2316
Swift_MODULE_NAME CompilerPluginSupport
2417
Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI
25-
INSTALL_NAME_DIR \\@rpath
2618
OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI
27-
OUTPUT_NAME CompilerPluginSupport
2819
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI
2920
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI
30-
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI
31-
)
32-
33-
if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
34-
target_link_libraries(CompilerPluginSupport PRIVATE
35-
Foundation)
36-
target_link_options(CompilerPluginSupport PRIVATE
37-
"SHELL:-no-toolchain-stdlib-rpath")
38-
set_target_properties(CompilerPluginSupport PROPERTIES
39-
BUILD_WITH_INSTALL_RPATH TRUE
40-
INSTALL_RPATH "$ORIGIN/../../$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>")
41-
endif()
21+
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI)
4222

4323
install(FILES
4424
${CMAKE_BINARY_DIR}/pm/ManifestAPI/CompilerPluginSupport.swiftmodule
4525
${CMAKE_BINARY_DIR}/pm/ManifestAPI/CompilerPluginSupport.swiftdoc
46-
DESTINATION lib/swift/pm/ManifestAPI
47-
)
48-
26+
DESTINATION lib/swift/pm/ManifestAPI)
4927
install(TARGETS CompilerPluginSupport
5028
DESTINATION lib/swift/pm/ManifestAPI)

Sources/PackageDescription/CMakeLists.txt

Lines changed: 4 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
# See http://swift.org/LICENSE.txt for license information
77
# See http://swift.org/CONTRIBUTORS.txt for Swift project authors
88

9-
add_library(PackageDescription
9+
add_library(PackageDescription STATIC
1010
BuildSettings.swift
1111
Context.swift
1212
ContextModel.swift
@@ -22,41 +22,19 @@ add_library(PackageDescription
2222
Target.swift
2323
Version.swift
2424
Version+StringLiteralConvertible.swift)
25-
26-
target_compile_options(PackageDescription PUBLIC
25+
target_compile_options(PackageDescription PRIVATE
2726
$<$<COMPILE_LANGUAGE:Swift>:-package-description-version$<SEMICOLON>999.0>)
28-
29-
if(CMAKE_HOST_SYSTEM_NAME STREQUAL Darwin)
30-
target_link_options(PackageDescription PRIVATE
31-
"SHELL:-Xlinker -install_name -Xlinker @rpath/libPackageDescription.dylib")
32-
endif()
33-
3427
set_target_properties(PackageDescription PROPERTIES
3528
Swift_MODULE_NAME PackageDescription
3629
Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI
37-
INSTALL_NAME_DIR \\@rpath
3830
OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI
39-
OUTPUT_NAME PackageDescription
4031
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI
4132
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI
42-
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI
43-
)
44-
45-
if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
46-
target_link_libraries(PackageDescription PRIVATE
47-
Foundation)
48-
target_link_options(PackageDescription PRIVATE
49-
"SHELL:-no-toolchain-stdlib-rpath")
50-
set_target_properties(PackageDescription PROPERTIES
51-
BUILD_WITH_INSTALL_RPATH TRUE
52-
INSTALL_RPATH "$ORIGIN/../../$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>")
53-
endif()
33+
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI)
5434

5535
install(FILES
5636
${CMAKE_BINARY_DIR}/pm/ManifestAPI/PackageDescription.swiftmodule
5737
${CMAKE_BINARY_DIR}/pm/ManifestAPI/PackageDescription.swiftdoc
58-
DESTINATION lib/swift/pm/ManifestAPI
59-
)
60-
38+
DESTINATION lib/swift/pm/ManifestAPI)
6139
install(TARGETS PackageDescription
6240
DESTINATION lib/swift/pm/ManifestAPI)

Sources/PackageLoading/ManifestLoader.swift

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -811,11 +811,6 @@ public final class ManifestLoader: ManifestLoaderProtocol {
811811
"-L", runtimePath.pathString,
812812
"-lPackageDescription",
813813
]
814-
#if !os(Windows)
815-
// -rpath argument is not supported on Windows,
816-
// so we add runtimePath to PATH when executing the manifest instead
817-
cmd += ["-Xlinker", "-rpath", "-Xlinker", runtimePath.pathString]
818-
#endif
819814
}
820815

821816
// Use the same minimum deployment target as the PackageDescription library (with a fallback to the default host triple).
@@ -963,14 +958,8 @@ public final class ManifestLoader: ManifestLoaderProtocol {
963958
)
964959
}
965960

966-
var environment = ProcessEnv.vars
967-
#if os(Windows)
968-
let windowsPathComponent = runtimePath.pathString.replacingOccurrences(of: "/", with: "\\")
969-
environment["Path"] = "\(windowsPathComponent);\(environment["Path"] ?? "")"
970-
#endif
971-
972961
let cleanupAfterRunning = cleanupIfError.delay()
973-
TSCBasic.Process.popen(arguments: cmd, environment: environment, queue: callbackQueue) { result in
962+
TSCBasic.Process.popen(arguments: cmd, environment: ProcessEnv.vars, queue: callbackQueue) { result in
974963
dispatchPrecondition(condition: .onQueue(callbackQueue))
975964

976965
defer { cleanupAfterRunning.perform() }

Sources/PackagePlugin/CMakeLists.txt

Lines changed: 11 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
# See http://swift.org/LICENSE.txt for license information
77
# See http://swift.org/CONTRIBUTORS.txt for Swift project authors
88

9-
add_library(PackagePlugin SHARED
9+
add_library(PackagePlugin STATIC
1010
ArgumentExtractor.swift
1111
Command.swift
1212
Context.swift
@@ -20,54 +20,26 @@ add_library(PackagePlugin SHARED
2020
PluginMessages.swift
2121
Protocols.swift
2222
Utilities.swift)
23-
24-
target_compile_options(PackagePlugin PUBLIC
25-
$<$<COMPILE_LANGUAGE:Swift>:-package-description-version$<SEMICOLON>999.0>)
26-
target_compile_options(PackagePlugin PUBLIC
23+
target_compile_options(PackagePlugin PRIVATE
24+
$<$<COMPILE_LANGUAGE:Swift>:-package-description-version$<SEMICOLON>999.0>
2725
$<$<COMPILE_LANGUAGE:Swift>:-enable-library-evolution>)
28-
29-
if(CMAKE_HOST_SYSTEM_NAME STREQUAL Darwin)
30-
set(SWIFT_INTERFACE_PATH ${CMAKE_BINARY_DIR}/pm/PluginAPI/PackagePlugin.swiftinterface)
31-
target_compile_options(PackagePlugin PUBLIC
32-
$<$<COMPILE_LANGUAGE:Swift>:-emit-module-interface-path$<SEMICOLON>${SWIFT_INTERFACE_PATH}>)
33-
target_link_options(PackagePlugin PRIVATE
34-
"SHELL:-Xlinker -install_name -Xlinker @rpath/libPackagePlugin.dylib")
35-
endif()
36-
3726
set_target_properties(PackagePlugin PROPERTIES
3827
Swift_MODULE_NAME PackagePlugin
3928
Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/pm/PluginAPI
40-
INSTALL_NAME_DIR \\@rpath
4129
OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/PluginAPI
42-
OUTPUT_NAME PackagePlugin
4330
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/PluginAPI
4431
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/PluginAPI
45-
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/PluginAPI
46-
)
47-
48-
if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
49-
target_link_libraries(PackagePlugin PRIVATE
50-
Foundation)
51-
target_link_options(PackagePlugin PRIVATE
52-
"SHELL:-no-toolchain-stdlib-rpath")
53-
set_target_properties(PackagePlugin PROPERTIES
54-
BUILD_WITH_INSTALL_RPATH TRUE
55-
INSTALL_RPATH "$ORIGIN/../../$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>")
56-
endif()
32+
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/PluginAPI)
5733

5834
if(CMAKE_HOST_SYSTEM_NAME STREQUAL Darwin)
59-
install(FILES
60-
${CMAKE_BINARY_DIR}/pm/PluginAPI/PackagePlugin.swiftinterface
61-
${CMAKE_BINARY_DIR}/pm/PluginAPI/PackagePlugin.swiftdoc
62-
DESTINATION lib/swift/pm/PluginAPI
63-
)
64-
else()
65-
install(FILES
66-
${CMAKE_BINARY_DIR}/pm/PluginAPI/PackagePlugin.swiftmodule
67-
${CMAKE_BINARY_DIR}/pm/PluginAPI/PackagePlugin.swiftdoc
68-
DESTINATION lib/swift/pm/PluginAPI
69-
)
35+
set(SWIFT_INTERFACE_PATH ${CMAKE_BINARY_DIR}/pm/PluginAPI/PackagePlugin.swiftinterface)
36+
target_compile_options(PackagePlugin PRIVATE
37+
$<$<COMPILE_LANGUAGE:Swift>:-emit-module-interface-path$<SEMICOLON>${SWIFT_INTERFACE_PATH}>)
7038
endif()
7139

40+
install(FILES
41+
${CMAKE_BINARY_DIR}/pm/PluginAPI/PackagePlugin.swift$<IF:$<PLATFORM_ID:Darwin>,interface,module>
42+
${CMAKE_BINARY_DIR}/pm/PluginAPI/PackagePlugin.swiftdoc
43+
DESTINATION lib/swift/pm/PluginAPI)
7244
install(TARGETS PackagePlugin
7345
DESTINATION lib/swift/pm/PluginAPI)

0 commit comments

Comments
 (0)