Allow building products as dynamic libraries via environment variable - #132
Open
colemancda wants to merge 1 commit into
Open
Allow building products as dynamic libraries via environment variable#132colemancda wants to merge 1 commit into
colemancda wants to merge 1 commit into
Conversation
Add an opt-in SWIFT_HTTP_TYPES_DYNAMIC_LIBRARY environment variable that switches the HTTPTypes and HTTPTypesFoundation products to explicit dynamic linkage. Distributions that ship Swift modules as shared libraries in a common location (e.g. the Swift resource directory on embedded Linux images) need a dynamic product to install a stable .so; SwiftPM's default automatic linkage otherwise builds them statically. The default behavior is unchanged: without the environment variable the products keep automatic linkage.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Motivation:
Distributions that ship Swift modules as shared libraries in a common location (for example the Swift resource directory on embedded Linux images, where multiple executables import the same prebuilt module) need the
HTTPTypes/HTTPTypesFoundationproducts built as dynamic libraries so a stable.socan be installed and linked against. With SwiftPM's default automatic linkage the products are built statically, and there is currently no way to request dynamic linkage without patchingPackage.swift.Modifications:
Add an opt-in
SWIFT_HTTP_TYPES_DYNAMIC_LIBRARYenvironment variable, read viaContext.environment, that switches both library products to explicit.dynamiclinkage. Without the variable the products keep automatic linkage, so default behavior for existing consumers is completely unchanged.Result:
SWIFT_HTTP_TYPES_DYNAMIC_LIBRARY=1 swift buildproduceslibHTTPTypes.so/libHTTPTypesFoundation.so(verified withswift package dump-package, which reportsdynamicwith the variable set andautomaticwithout), letting downstream distributions build and install shared libraries without carrying a manifest patch.