Skip to content

build: convert package manifest libraries to static #6817

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -98,12 +98,10 @@ let package = Package(
),
.library(
name: "PackageDescription",
type: .dynamic,
targets: ["PackageDescription", "CompilerPluginSupport"]
),
.library(
name: "PackagePlugin",
type: .dynamic,
targets: ["PackagePlugin"]
),
.library(
Expand Down
32 changes: 5 additions & 27 deletions Sources/CompilerPluginSupport/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,45 +6,23 @@
# See http://swift.org/LICENSE.txt for license information
# See http://swift.org/CONTRIBUTORS.txt for Swift project authors

add_library(CompilerPluginSupport
add_library(CompilerPluginSupport STATIC
TargetExtensions.swift)
target_compile_options(CompilerPluginSupport PRIVATE
$<$<COMPILE_LANGUAGE:Swift>:-package-description-version$<SEMICOLON>999.0>)
target_link_libraries(CompilerPluginSupport PRIVATE
PackageDescription)

target_compile_options(CompilerPluginSupport PUBLIC
$<$<COMPILE_LANGUAGE:Swift>:-package-description-version$<SEMICOLON>999.0>)

if(CMAKE_HOST_SYSTEM_NAME STREQUAL Darwin)
target_link_options(CompilerPluginSupport PRIVATE
"SHELL:-Xlinker -install_name -Xlinker @rpath/CompilerPluginSupport.dylib")
endif()

set_target_properties(CompilerPluginSupport PROPERTIES
Swift_MODULE_NAME CompilerPluginSupport
Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI
INSTALL_NAME_DIR \\@rpath
OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI
OUTPUT_NAME CompilerPluginSupport
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI
)

if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
target_link_libraries(CompilerPluginSupport PRIVATE
Foundation)
target_link_options(CompilerPluginSupport PRIVATE
"SHELL:-no-toolchain-stdlib-rpath")
set_target_properties(CompilerPluginSupport PROPERTIES
BUILD_WITH_INSTALL_RPATH TRUE
INSTALL_RPATH "$ORIGIN/../../$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>")
endif()
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI)

install(FILES
${CMAKE_BINARY_DIR}/pm/ManifestAPI/CompilerPluginSupport.swiftmodule
${CMAKE_BINARY_DIR}/pm/ManifestAPI/CompilerPluginSupport.swiftdoc
DESTINATION lib/swift/pm/ManifestAPI
)

DESTINATION lib/swift/pm/ManifestAPI)
install(TARGETS CompilerPluginSupport
DESTINATION lib/swift/pm/ManifestAPI)
30 changes: 4 additions & 26 deletions Sources/PackageDescription/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
# See http://swift.org/LICENSE.txt for license information
# See http://swift.org/CONTRIBUTORS.txt for Swift project authors

add_library(PackageDescription
add_library(PackageDescription STATIC
BuildSettings.swift
Context.swift
ContextModel.swift
Expand All @@ -22,41 +22,19 @@ add_library(PackageDescription
Target.swift
Version.swift
Version+StringLiteralConvertible.swift)

target_compile_options(PackageDescription PUBLIC
target_compile_options(PackageDescription PRIVATE
$<$<COMPILE_LANGUAGE:Swift>:-package-description-version$<SEMICOLON>999.0>)

if(CMAKE_HOST_SYSTEM_NAME STREQUAL Darwin)
target_link_options(PackageDescription PRIVATE
"SHELL:-Xlinker -install_name -Xlinker @rpath/libPackageDescription.dylib")
endif()

set_target_properties(PackageDescription PROPERTIES
Swift_MODULE_NAME PackageDescription
Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI
INSTALL_NAME_DIR \\@rpath
OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI
OUTPUT_NAME PackageDescription
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI
)

if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
target_link_libraries(PackageDescription PRIVATE
Foundation)
target_link_options(PackageDescription PRIVATE
"SHELL:-no-toolchain-stdlib-rpath")
set_target_properties(PackageDescription PROPERTIES
BUILD_WITH_INSTALL_RPATH TRUE
INSTALL_RPATH "$ORIGIN/../../$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>")
endif()
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/ManifestAPI)

install(FILES
${CMAKE_BINARY_DIR}/pm/ManifestAPI/PackageDescription.swiftmodule
${CMAKE_BINARY_DIR}/pm/ManifestAPI/PackageDescription.swiftdoc
DESTINATION lib/swift/pm/ManifestAPI
)

DESTINATION lib/swift/pm/ManifestAPI)
install(TARGETS PackageDescription
DESTINATION lib/swift/pm/ManifestAPI)
13 changes: 1 addition & 12 deletions Sources/PackageLoading/ManifestLoader.swift
Original file line number Diff line number Diff line change
Expand Up @@ -811,11 +811,6 @@ public final class ManifestLoader: ManifestLoaderProtocol {
"-L", runtimePath.pathString,
"-lPackageDescription",
]
#if !os(Windows)
// -rpath argument is not supported on Windows,
// so we add runtimePath to PATH when executing the manifest instead
cmd += ["-Xlinker", "-rpath", "-Xlinker", runtimePath.pathString]
#endif
}

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

var environment = ProcessEnv.vars
#if os(Windows)
let windowsPathComponent = runtimePath.pathString.replacingOccurrences(of: "/", with: "\\")
environment["Path"] = "\(windowsPathComponent);\(environment["Path"] ?? "")"
#endif

let cleanupAfterRunning = cleanupIfError.delay()
TSCBasic.Process.popen(arguments: cmd, environment: environment, queue: callbackQueue) { result in
TSCBasic.Process.popen(arguments: cmd, environment: ProcessEnv.vars, queue: callbackQueue) { result in
dispatchPrecondition(condition: .onQueue(callbackQueue))

defer { cleanupAfterRunning.perform() }
Expand Down
50 changes: 11 additions & 39 deletions Sources/PackagePlugin/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
# See http://swift.org/LICENSE.txt for license information
# See http://swift.org/CONTRIBUTORS.txt for Swift project authors

add_library(PackagePlugin SHARED
add_library(PackagePlugin STATIC
ArgumentExtractor.swift
Command.swift
Context.swift
Expand All @@ -20,54 +20,26 @@ add_library(PackagePlugin SHARED
PluginMessages.swift
Protocols.swift
Utilities.swift)

target_compile_options(PackagePlugin PUBLIC
$<$<COMPILE_LANGUAGE:Swift>:-package-description-version$<SEMICOLON>999.0>)
target_compile_options(PackagePlugin PUBLIC
target_compile_options(PackagePlugin PRIVATE
$<$<COMPILE_LANGUAGE:Swift>:-package-description-version$<SEMICOLON>999.0>
$<$<COMPILE_LANGUAGE:Swift>:-enable-library-evolution>)

if(CMAKE_HOST_SYSTEM_NAME STREQUAL Darwin)
set(SWIFT_INTERFACE_PATH ${CMAKE_BINARY_DIR}/pm/PluginAPI/PackagePlugin.swiftinterface)
target_compile_options(PackagePlugin PUBLIC
$<$<COMPILE_LANGUAGE:Swift>:-emit-module-interface-path$<SEMICOLON>${SWIFT_INTERFACE_PATH}>)
target_link_options(PackagePlugin PRIVATE
"SHELL:-Xlinker -install_name -Xlinker @rpath/libPackagePlugin.dylib")
endif()

set_target_properties(PackagePlugin PROPERTIES
Swift_MODULE_NAME PackagePlugin
Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/pm/PluginAPI
INSTALL_NAME_DIR \\@rpath
OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/PluginAPI
OUTPUT_NAME PackagePlugin
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/PluginAPI
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/PluginAPI
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/PluginAPI
)

if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
target_link_libraries(PackagePlugin PRIVATE
Foundation)
target_link_options(PackagePlugin PRIVATE
"SHELL:-no-toolchain-stdlib-rpath")
set_target_properties(PackagePlugin PROPERTIES
BUILD_WITH_INSTALL_RPATH TRUE
INSTALL_RPATH "$ORIGIN/../../$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>")
endif()
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/PluginAPI)

if(CMAKE_HOST_SYSTEM_NAME STREQUAL Darwin)
install(FILES
${CMAKE_BINARY_DIR}/pm/PluginAPI/PackagePlugin.swiftinterface
${CMAKE_BINARY_DIR}/pm/PluginAPI/PackagePlugin.swiftdoc
DESTINATION lib/swift/pm/PluginAPI
)
else()
install(FILES
${CMAKE_BINARY_DIR}/pm/PluginAPI/PackagePlugin.swiftmodule
${CMAKE_BINARY_DIR}/pm/PluginAPI/PackagePlugin.swiftdoc
DESTINATION lib/swift/pm/PluginAPI
)
set(SWIFT_INTERFACE_PATH ${CMAKE_BINARY_DIR}/pm/PluginAPI/PackagePlugin.swiftinterface)
target_compile_options(PackagePlugin PRIVATE
$<$<COMPILE_LANGUAGE:Swift>:-emit-module-interface-path$<SEMICOLON>${SWIFT_INTERFACE_PATH}>)
endif()

install(FILES
${CMAKE_BINARY_DIR}/pm/PluginAPI/PackagePlugin.swift$<IF:$<PLATFORM_ID:Darwin>,interface,module>
${CMAKE_BINARY_DIR}/pm/PluginAPI/PackagePlugin.swiftdoc
DESTINATION lib/swift/pm/PluginAPI)
install(TARGETS PackagePlugin
DESTINATION lib/swift/pm/PluginAPI)