diff --git a/Sources/SwiftSDKGenerator/SwiftSDKRecipes/LinuxRecipe.swift b/Sources/SwiftSDKGenerator/SwiftSDKRecipes/LinuxRecipe.swift index 9af0afc..c215b37 100644 --- a/Sources/SwiftSDKGenerator/SwiftSDKRecipes/LinuxRecipe.swift +++ b/Sources/SwiftSDKGenerator/SwiftSDKRecipes/LinuxRecipe.swift @@ -128,6 +128,11 @@ public struct LinuxRecipe: SwiftSDKRecipe { } else { swiftCompilerOptions.append("-use-ld=lld") + // 32-bit architectures require libatomic + if let arch = targetTriple.arch, arch.is32Bit { + swiftCompilerOptions.append("-latomic") + } + if self.hostSwiftSource != .preinstalled { toolset.linker = Toolset.ToolProperties(path: "ld.lld") } diff --git a/Tests/SwiftSDKGeneratorTests/SwiftSDKRecipes/LinuxRecipeTests.swift b/Tests/SwiftSDKGeneratorTests/SwiftSDKRecipes/LinuxRecipeTests.swift index 436b705..3c21f0d 100644 --- a/Tests/SwiftSDKGeneratorTests/SwiftSDKRecipes/LinuxRecipeTests.swift +++ b/Tests/SwiftSDKGeneratorTests/SwiftSDKRecipes/LinuxRecipeTests.swift @@ -45,6 +45,7 @@ final class LinuxRecipeTests: XCTestCase { let testCases = [ ( swiftVersion: "5.9.2", + targetTriple: Triple("x86_64-unknown-linux-gnu"), expectedSwiftCompilerOptions: [ "-Xlinker", "-R/usr/lib/swift/linux/", "-Xclang-linker", "--ld-path=ld.lld" @@ -53,11 +54,22 @@ final class LinuxRecipeTests: XCTestCase { ), ( swiftVersion: "6.0.2", + targetTriple: Triple("aarch64-unknown-linux-gnu"), expectedSwiftCompilerOptions: [ "-Xlinker", "-R/usr/lib/swift/linux/", "-use-ld=lld" ], expectedLinkerPath: "ld.lld" + ), + ( + swiftVersion: "6.0.3", + targetTriple: Triple("armv7-unknown-linux-gnueabihf"), + expectedSwiftCompilerOptions: [ + "-Xlinker", "-R/usr/lib/swift/linux/", + "-use-ld=lld", + "-latomic" + ], + expectedLinkerPath: "ld.lld" ) ] @@ -65,7 +77,7 @@ final class LinuxRecipeTests: XCTestCase { let recipe = try self.createRecipe(swiftVersion: testCase.swiftVersion) var toolset = Toolset(rootPath: nil) recipe.applyPlatformOptions( - toolset: &toolset, targetTriple: Triple("aarch64-unknown-linux-gnu") + toolset: &toolset, targetTriple: testCase.targetTriple ) XCTAssertEqual(toolset.swiftCompiler?.extraCLIOptions, testCase.expectedSwiftCompilerOptions) XCTAssertEqual(toolset.linker?.path, testCase.expectedLinkerPath)