Skip to content

Commit fd400b1

Browse files
Merge branch 'main' into #116-support-debian-distributions
2 parents 8f00942 + a3e3c73 commit fd400b1

File tree

5 files changed

+168
-10
lines changed

5 files changed

+168
-10
lines changed

Sources/GeneratorCLI/GeneratorCLI.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ extension GeneratorCLI {
114114
var swiftBranch: String? = nil
115115

116116
@Option(help: "Version of Swift to supply in the bundle.")
117-
var swiftVersion = "6.0.3-RELEASE"
117+
var swiftVersion = "6.1-RELEASE"
118118

119119
@Option(
120120
help: """

Sources/SwiftSDKGenerator/Generator/SwiftSDKGenerator+Download.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,17 @@ extension SwiftSDKGenerator {
207207
try await fs.unpack(file: tmpDir.appending(fileName), into: sdkDirPath)
208208
}
209209
}
210+
211+
// Make sure we have /lib and /lib64, and if not symlink from /usr
212+
// This makes building from packages more consistent with copying from the Docker container
213+
let libDirectories = ["lib", "lib64"]
214+
for dir in libDirectories {
215+
let sdkLibPath = sdkDirPath.appending(dir)
216+
let sdkUsrLibPath = sdkDirPath.appending("usr/\(dir)")
217+
if !doesFileExist(at: sdkLibPath) && doesFileExist(at: sdkUsrLibPath) {
218+
try createSymlink(at: sdkLibPath, pointingTo: FilePath("./usr/\(dir)"))
219+
}
220+
}
210221
}
211222

212223
private func parseDebianPackageList(

Sources/SwiftSDKGenerator/PlatformModels/LinuxDistribution.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,9 @@ public enum LinuxDistribution: Hashable, Sendable {
108108
case "12": self = .bookworm
109109
default:
110110
throw GeneratorError.unknownLinuxDistribution(
111-
name: LinuxDistribution.Name.debian.rawValue, version: version)
111+
name: LinuxDistribution.Name.debian.rawValue,
112+
version: version
113+
)
112114
}
113115
}
114116

Sources/SwiftSDKGenerator/SwiftSDKRecipes/LinuxRecipe.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ public struct LinuxRecipe: SwiftSDKRecipe {
179179
var items: [DownloadableArtifacts.Item] = []
180180
if self.hostSwiftSource != .preinstalled
181181
&& self.mainHostTriple.os != .linux
182-
&& !self.versionsConfiguration.swiftVersion.hasPrefix("6.0")
182+
&& !self.versionsConfiguration.swiftVersion.hasPrefix("6.")
183183
{
184184
items.append(artifacts.hostLLVM)
185185
}
@@ -334,7 +334,7 @@ public struct LinuxRecipe: SwiftSDKRecipe {
334334

335335
if self.hostSwiftSource != .preinstalled {
336336
if self.mainHostTriple.os != .linux
337-
&& !self.versionsConfiguration.swiftVersion.hasPrefix("6.0")
337+
&& !self.versionsConfiguration.swiftVersion.hasPrefix("6.")
338338
{
339339
try await generator.prepareLLDLinker(engine, llvmArtifact: downloadableArtifacts.hostLLVM)
340340
}

Tests/SwiftSDKGeneratorTests/EndToEndTests.swift

Lines changed: 151 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,64 @@ final class Swift60_UbuntuEndToEndTests: XCTestCase {
468468
}
469469
}
470470

471+
final class Swift61_UbuntuEndToEndTests: XCTestCase {
472+
let config = SDKConfiguration(
473+
swiftVersion: "6.1",
474+
linuxDistributionName: "ubuntu",
475+
linuxDistributionVersion: "24.04",
476+
architecture: "aarch64",
477+
withDocker: false
478+
)
479+
480+
func testAarch64Direct() async throws {
481+
try skipSlow()
482+
try await buildTestcases(config: config.withArchitecture("aarch64"))
483+
}
484+
485+
func testX86_64Direct() async throws {
486+
try skipSlow()
487+
try await buildTestcases(config: config.withArchitecture("x86_64"))
488+
}
489+
490+
func testAarch64FromContainer() async throws {
491+
try skipSlow()
492+
try await buildTestcases(config: config.withArchitecture("aarch64").withDocker())
493+
}
494+
495+
func testX86_64FromContainer() async throws {
496+
try skipSlow()
497+
try await buildTestcases(config: config.withArchitecture("x86_64").withDocker())
498+
}
499+
500+
func testJammyAarch64Direct() async throws {
501+
try skipSlow()
502+
try await buildTestcases(
503+
config: config.withArchitecture("aarch64").withLinuxDistributionVersion("22.04")
504+
)
505+
}
506+
507+
func testJammyX86_64Direct() async throws {
508+
try skipSlow()
509+
try await buildTestcases(
510+
config: config.withArchitecture("x86_64").withLinuxDistributionVersion("22.04")
511+
)
512+
}
513+
514+
func testJammyAarch64FromContainer() async throws {
515+
try skipSlow()
516+
try await buildTestcases(
517+
config: config.withArchitecture("aarch64").withLinuxDistributionVersion("22.04").withDocker()
518+
)
519+
}
520+
521+
func testJammyX86_64FromContainer() async throws {
522+
try skipSlow()
523+
try await buildTestcases(
524+
config: config.withArchitecture("x86_64").withLinuxDistributionVersion("22.04").withDocker()
525+
)
526+
}
527+
}
528+
471529
final class Swift59_DebianEndToEndTests: XCTestCase {
472530
let config = SDKConfiguration(
473531
swiftVersion: "5.9.2",
@@ -490,13 +548,15 @@ final class Swift59_DebianEndToEndTests: XCTestCase {
490548
func testBookwormAarch64Direct() async throws {
491549
try skipSlow()
492550
try await buildTestcases(
493-
config: config.withLinuxDistributionVersion("12").withArchitecture("aarch64"))
551+
config: config.withLinuxDistributionVersion("12").withArchitecture("aarch64")
552+
)
494553
}
495554

496555
func testBookwormX86_64Direct() async throws {
497556
try skipSlow()
498557
try await buildTestcases(
499-
config: config.withLinuxDistributionVersion("12").withArchitecture("x86_64"))
558+
config: config.withLinuxDistributionVersion("12").withArchitecture("x86_64")
559+
)
500560
}
501561

502562
// NOTE: the generator does not support building a Debian 11/Debian 12 Swift SDK with Docker
@@ -535,13 +595,15 @@ final class Swift510_DebianEndToEndTests: XCTestCase {
535595
func testBullseyeAarch64Direct() async throws {
536596
try skipSlow()
537597
try await buildTestcases(
538-
config: config.withLinuxDistributionVersion("11").withArchitecture("aarch64"))
598+
config: config.withLinuxDistributionVersion("11").withArchitecture("aarch64")
599+
)
539600
}
540601

541602
func testBullseyeX86_64Direct() async throws {
542603
try skipSlow()
543604
try await buildTestcases(
544-
config: config.withLinuxDistributionVersion("11").withArchitecture("x86_64"))
605+
config: config.withLinuxDistributionVersion("11").withArchitecture("x86_64")
606+
)
545607
}
546608

547609
// NOTE: Debian 11 containers do not exist for Swift, and the generator does not support
@@ -580,13 +642,62 @@ final class Swift60_DebianEndToEndTests: XCTestCase {
580642
func testBullseyeAarch64Direct() async throws {
581643
try skipSlow()
582644
try await buildTestcases(
583-
config: config.withLinuxDistributionVersion("11").withArchitecture("aarch64"))
645+
config: config.withLinuxDistributionVersion("11").withArchitecture("aarch64")
646+
)
584647
}
585648

586649
func testBullseyeX86_64Direct() async throws {
587650
try skipSlow()
588651
try await buildTestcases(
589-
config: config.withLinuxDistributionVersion("11").withArchitecture("x86_64"))
652+
config: config.withLinuxDistributionVersion("11").withArchitecture("x86_64")
653+
)
654+
}
655+
656+
// NOTE: Debian 11 containers do not exist for Swift, and the generator does not support
657+
// generating this container for you automatically, so we do not test this scenario.
658+
}
659+
660+
final class Swift61_DebianEndToEndTests: XCTestCase {
661+
let config = SDKConfiguration(
662+
swiftVersion: "6.1",
663+
linuxDistributionName: "debian",
664+
linuxDistributionVersion: "12",
665+
architecture: "aarch64",
666+
withDocker: false
667+
)
668+
669+
func testBookwormAarch64Direct() async throws {
670+
try skipSlow()
671+
try await buildTestcases(config: config.withArchitecture("aarch64"))
672+
}
673+
674+
func testBookwormX86_64Direct() async throws {
675+
try skipSlow()
676+
try await buildTestcases(config: config.withArchitecture("x86_64"))
677+
}
678+
679+
func testBookwormAarch64FromContainer() async throws {
680+
try skipSlow()
681+
try await buildTestcases(config: config.withArchitecture("aarch64").withDocker())
682+
}
683+
684+
func testBookwormX86_64FromContainer() async throws {
685+
try skipSlow()
686+
try await buildTestcases(config: config.withArchitecture("x86_64").withDocker())
687+
}
688+
689+
func testBullseyeAarch64Direct() async throws {
690+
try skipSlow()
691+
try await buildTestcases(
692+
config: config.withLinuxDistributionVersion("11").withArchitecture("aarch64")
693+
)
694+
}
695+
696+
func testBullseyeX86_64Direct() async throws {
697+
try skipSlow()
698+
try await buildTestcases(
699+
config: config.withLinuxDistributionVersion("11").withArchitecture("x86_64")
700+
)
590701
}
591702

592703
// NOTE: Debian 11 containers do not exist for Swift, and the generator does not support
@@ -722,3 +833,37 @@ final class Swift60_RHELEndToEndTests: XCTestCase {
722833
)
723834
}
724835
}
836+
837+
final class Swift61_RHELEndToEndTests: XCTestCase {
838+
let config = SDKConfiguration(
839+
swiftVersion: "6.1",
840+
linuxDistributionName: "rhel",
841+
linuxDistributionVersion: "ubi9",
842+
architecture: "aarch64",
843+
withDocker: true // RHEL-based SDKs can only be built from containers
844+
)
845+
846+
func testAarch64FromContainer() async throws {
847+
try skipSlow()
848+
try await buildTestcases(config: config.withArchitecture("aarch64"))
849+
}
850+
851+
func testX86_64FromContainer() async throws {
852+
try skipSlow()
853+
try await buildTestcases(config: config.withArchitecture("x86_64"))
854+
}
855+
856+
func testAmazonLinux2Aarch64FromContainer() async throws {
857+
try skipSlow()
858+
try await buildTestcases(
859+
config: config.withArchitecture("aarch64").withContainerImageSuffix("amazonlinux2")
860+
)
861+
}
862+
863+
func testAmazonLinux2X86_64FromContainer() async throws {
864+
try skipSlow()
865+
try await buildTestcases(
866+
config: config.withArchitecture("x86_64").withContainerImageSuffix("amazonlinux2")
867+
)
868+
}
869+
}

0 commit comments

Comments
 (0)