Static linking on Linux in Swift 5.3.1

Yes, you can define a computed property in your Package.swift that produces different settings based on the platform and then just reference that in your package description:

// swift-tools-version:5.3
import PackageDescription

var linkerSettings: [LinkerSetting]? {
  #if os(Linux)
  return [
    .linkedLibrary("icui18n"),
    .linkedLibrary("icuuc"),
    .linkedLibrary("icudata"),
    .linkedLibrary("z"),
    .linkedLibrary("lzma")
  ]
  #else
  return nil
  #endif
}

let package = Package(
   name: "MyApp",
   dependencies: [],
   targets: [
       .target(
           name: "MyApp",
           dependencies: [],
           linkerSettings: linkerSettings
       )
   ]
)
4 Likes