diff --git a/Sources/SwiftSDKGenerator/Generator/SwiftSDKGenerator+Fixup.swift b/Sources/SwiftSDKGenerator/Generator/SwiftSDKGenerator+Fixup.swift index ea587cb..94df821 100644 --- a/Sources/SwiftSDKGenerator/Generator/SwiftSDKGenerator+Fixup.swift +++ b/Sources/SwiftSDKGenerator/Generator/SwiftSDKGenerator+Fixup.swift @@ -16,6 +16,14 @@ import SystemPackage import struct Foundation.Data extension SwiftSDKGenerator { + func createLibSymlink(sdkDirPath: FilePath) throws { + let libPath = sdkDirPath.appending("lib") + if !doesFileExist(at: libPath) { + logger.info("Adding lib symlink to usr/lib...") + try createSymlink(at: libPath, pointingTo: "usr/lib") + } + } + func fixAbsoluteSymlinks(sdkDirPath: FilePath) throws { logger.info("Fixing up absolute symlinks...") diff --git a/Sources/SwiftSDKGenerator/SwiftSDKRecipes/LinuxRecipe.swift b/Sources/SwiftSDKGenerator/SwiftSDKRecipes/LinuxRecipe.swift index c215b37..66a4dfe 100644 --- a/Sources/SwiftSDKGenerator/SwiftSDKRecipes/LinuxRecipe.swift +++ b/Sources/SwiftSDKGenerator/SwiftSDKRecipes/LinuxRecipe.swift @@ -294,6 +294,15 @@ public struct LinuxRecipe: SwiftSDKRecipe { ) } + logger.info("Removing unused toolchain components from target SDK...") + try await generator.removeToolchainComponents( + sdkDirPath, + platforms: unusedTargetPlatforms, + libraries: unusedHostLibraries, + binaries: unusedHostBinaries + ) + + try await generator.createLibSymlink(sdkDirPath: sdkDirPath) try await generator.fixAbsoluteSymlinks(sdkDirPath: sdkDirPath) // Swift 6.1 and later do not throw warnings about the SDKSettings.json file missing, diff --git a/Tests/SwiftSDKGeneratorTests/EndToEndTests.swift b/Tests/SwiftSDKGeneratorTests/EndToEndTests.swift index ffbfc26..15b19c9 100644 --- a/Tests/SwiftSDKGeneratorTests/EndToEndTests.swift +++ b/Tests/SwiftSDKGeneratorTests/EndToEndTests.swift @@ -151,10 +151,11 @@ final class RepeatedBuildTests: XCTestCase { struct SDKConfiguration { var swiftVersion: String var linuxDistributionName: String + var linuxDistributionVersion: String var architecture: String var withDocker: Bool - var bundleName: String { "\(linuxDistributionName)_\(architecture)_\(swiftVersion)-RELEASE\(withDocker ? "_with-docker" : "")" } + var bundleName: String { "\(linuxDistributionName)_\(linuxDistributionVersion)_\(architecture)_\(swiftVersion)-RELEASE\(withDocker ? "_with-docker" : "")" } func withDocker(_ enabled: Bool = true) -> SDKConfiguration { var res = self @@ -308,6 +309,7 @@ final class Swift59_UbuntuEndToEndTests: XCTestCase { let config = SDKConfiguration( swiftVersion: "5.9.2", linuxDistributionName: "ubuntu", + linuxDistributionVersion: "22.04", architecture: "aarch64", withDocker: false ) @@ -337,6 +339,7 @@ final class Swift510_UbuntuEndToEndTests: XCTestCase { let config = SDKConfiguration( swiftVersion: "5.10.1", linuxDistributionName: "ubuntu", + linuxDistributionVersion: "22.04", architecture: "aarch64", withDocker: false ) @@ -366,6 +369,7 @@ final class Swift60_UbuntuEndToEndTests: XCTestCase { let config = SDKConfiguration( swiftVersion: "6.0.3", linuxDistributionName: "ubuntu", + linuxDistributionVersion: "24.04", architecture: "aarch64", withDocker: false ) @@ -395,6 +399,7 @@ final class Swift59_RHELEndToEndTests: XCTestCase { let config = SDKConfiguration( swiftVersion: "5.9.2", linuxDistributionName: "rhel", + linuxDistributionVersion: "ubi9", architecture: "aarch64", withDocker: true // RHEL-based SDKs can only be built from containers ) @@ -414,6 +419,7 @@ final class Swift510_RHELEndToEndTests: XCTestCase { let config = SDKConfiguration( swiftVersion: "5.10.1", linuxDistributionName: "rhel", + linuxDistributionVersion: "ubi9", architecture: "aarch64", withDocker: true // RHEL-based SDKs can only be built from containers ) @@ -433,6 +439,7 @@ final class Swift60_RHELEndToEndTests: XCTestCase { let config = SDKConfiguration( swiftVersion: "6.0.3", linuxDistributionName: "rhel", + linuxDistributionVersion: "ubi9", architecture: "aarch64", withDocker: true // RHEL-based SDKs can only be built from containers )