Skip to content

Commit 295b23e

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 8e51230 commit 295b23e

File tree

4 files changed

+23
-100
lines changed

4 files changed

+23
-100
lines changed

Sources/CompilerPluginSupport/CMakeLists.txt

Lines changed: 6 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,45 +6,25 @@
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)
1315

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-
16+
# TODO(compnerd) use lib prefix on Windows
2217
set_target_properties(CompilerPluginSupport PROPERTIES
2318
Swift_MODULE_NAME CompilerPluginSupport
2419
Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI
25-
INSTALL_NAME_DIR \\@rpath
2620
OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI
27-
OUTPUT_NAME CompilerPluginSupport
2821
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI
2922
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()
23+
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI)
4224

4325
install(FILES
4426
${CMAKE_BINARY_DIR}/pm/ManifestAPI/CompilerPluginSupport.swiftmodule
4527
${CMAKE_BINARY_DIR}/pm/ManifestAPI/CompilerPluginSupport.swiftdoc
46-
DESTINATION lib/swift/pm/ManifestAPI
47-
)
48-
28+
DESTINATION lib/swift/pm/ManifestAPI)
4929
install(TARGETS CompilerPluginSupport
5030
DESTINATION lib/swift/pm/ManifestAPI)

Sources/PackageDescription/CMakeLists.txt

Lines changed: 5 additions & 25 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,21 @@ 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>)
2827

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-
28+
# TODO(compnerd) use lib prefix on Windows
3429
set_target_properties(PackageDescription PROPERTIES
3530
Swift_MODULE_NAME PackageDescription
3631
Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI
37-
INSTALL_NAME_DIR \\@rpath
3832
OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI
39-
OUTPUT_NAME PackageDescription
4033
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI
4134
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()
35+
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI)
5436

5537
install(FILES
5638
${CMAKE_BINARY_DIR}/pm/ManifestAPI/PackageDescription.swiftmodule
5739
${CMAKE_BINARY_DIR}/pm/ManifestAPI/PackageDescription.swiftdoc
58-
DESTINATION lib/swift/pm/ManifestAPI
59-
)
60-
40+
DESTINATION lib/swift/pm/ManifestAPI)
6141
install(TARGETS PackageDescription
6242
DESTINATION lib/swift/pm/ManifestAPI)

Sources/PackageLoading/ManifestLoader.swift

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -657,11 +657,6 @@ public final class ManifestLoader: ManifestLoaderProtocol {
657657
"-L", runtimePath.pathString,
658658
"-lPackageDescription",
659659
]
660-
#if !os(Windows)
661-
// -rpath argument is not supported on Windows,
662-
// so we add runtimePath to PATH when executing the manifest instead
663-
cmd += ["-Xlinker", "-rpath", "-Xlinker", runtimePath.pathString]
664-
#endif
665660
}
666661

667662
// Use the same minimum deployment target as the PackageDescription library (with a fallback to the default host triple).
@@ -782,14 +777,8 @@ public final class ManifestLoader: ManifestLoaderProtocol {
782777
}
783778

784779
// Run the compiled manifest.
785-
var environment = ProcessEnv.vars
786-
#if os(Windows)
787-
let windowsPathComponent = runtimePath.pathString.replacingOccurrences(of: "/", with: "\\")
788-
environment["Path"] = "\(windowsPathComponent);\(environment["Path"] ?? "")"
789-
#endif
790-
791780
let cleanupAfterRunning = cleanupIfError.delay()
792-
TSCBasic.Process.popen(arguments: cmd, environment: environment, queue: callbackQueue) { result in
781+
TSCBasic.Process.popen(arguments: cmd, environment: ProcessEnv.vars, queue: callbackQueue) { result in
793782
dispatchPrecondition(condition: .onQueue(callbackQueue))
794783

795784
defer { cleanupAfterRunning.perform() }

Sources/PackagePlugin/CMakeLists.txt

Lines changed: 11 additions & 37 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,28 @@ add_library(PackagePlugin SHARED
2020
PluginMessages.swift
2121
Protocols.swift
2222
Utilities.swift)
23-
24-
target_compile_options(PackagePlugin PUBLIC
23+
target_compile_options(PackagePlugin PRIVATE
24+
$<$<COMPILE_LANGUAGE:Swift>:-lFoundation>
25+
$<$<COMPILE_LANGUAGE:Swift>:-enable-library-evolution>
2526
$<$<COMPILE_LANGUAGE:Swift>:-package-description-version$<SEMICOLON>999.0>)
26-
target_compile_options(PackagePlugin PUBLIC
27-
$<$<COMPILE_LANGUAGE:Swift>:-enable-library-evolution>)
28-
2927
if(CMAKE_HOST_SYSTEM_NAME STREQUAL Darwin)
3028
set(SWIFT_INTERFACE_PATH ${CMAKE_BINARY_DIR}/pm/PluginAPI/PackagePlugin.swiftinterface)
31-
target_compile_options(PackagePlugin PUBLIC
29+
target_compile_options(PackagePlugin PRIVATE
3230
$<$<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")
3531
endif()
3632

33+
# TODO(compnerd) use lib prefix on Windows
3734
set_target_properties(PackagePlugin PROPERTIES
3835
Swift_MODULE_NAME PackagePlugin
3936
Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/pm/PluginAPI
40-
INSTALL_NAME_DIR \\@rpath
4137
OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/PluginAPI
42-
OUTPUT_NAME PackagePlugin
4338
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/PluginAPI
4439
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()
57-
58-
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-
)
70-
endif()
40+
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/PluginAPI)
7141

42+
install(FILES
43+
${CMAKE_BINARY_DIR}/pm/PluginAPI/PackagePlugin.swift$<IF:$<PLATFORM_ID:Darwin>,interface,module>
44+
${CMAKE_BINARY_DIR}/pm/PluginAPI/PackagePlugin.swiftdoc
45+
DESTINATION lib/swift/pm/PluginAPI)
7246
install(TARGETS PackagePlugin
7347
DESTINATION lib/swift/pm/PluginAPI)

0 commit comments

Comments
 (0)