diff --git a/Sources/SwiftDriver/Driver/Driver.swift b/Sources/SwiftDriver/Driver/Driver.swift index fddeefa70..03e8d392e 100644 --- a/Sources/SwiftDriver/Driver/Driver.swift +++ b/Sources/SwiftDriver/Driver/Driver.swift @@ -2936,7 +2936,7 @@ extension Triple { return DarwinToolchain.self case .linux: return GenericUnixToolchain.self - case .freeBSD, .haiku, .openbsd: + case .freeBSD, .haiku, .openbsd, .noneOS: return GenericUnixToolchain.self case .wasi: return WebAssemblyToolchain.self diff --git a/Sources/SwiftDriver/Utilities/Triple+Platforms.swift b/Sources/SwiftDriver/Utilities/Triple+Platforms.swift index 972f901ed..17be46928 100644 --- a/Sources/SwiftDriver/Utilities/Triple+Platforms.swift +++ b/Sources/SwiftDriver/Utilities/Triple+Platforms.swift @@ -314,6 +314,8 @@ extension Triple { return "haiku" case .wasi: return "wasi" + case .noneOS: + return nil // Explicitly spell out the remaining cases to force a compile error when // Triple updates diff --git a/Sources/SwiftDriver/Utilities/Triple.swift b/Sources/SwiftDriver/Utilities/Triple.swift index 0441f846a..f49ea78e7 100644 --- a/Sources/SwiftDriver/Utilities/Triple.swift +++ b/Sources/SwiftDriver/Utilities/Triple.swift @@ -1109,6 +1109,7 @@ extension Triple { case hurd case wasi case emscripten + case noneOS // 'OS' suffix purely to avoid name clash with Optional.none var name: String { return rawValue @@ -1188,6 +1189,8 @@ extension Triple { return .wasi case _ where os.hasPrefix("emscripten"): return .emscripten + case _ where os.hasPrefix("none"): + return .noneOS default: return nil } diff --git a/Tests/SwiftDriverTests/TripleTests.swift b/Tests/SwiftDriverTests/TripleTests.swift index 272ab732c..bc51e46a2 100644 --- a/Tests/SwiftDriverTests/TripleTests.swift +++ b/Tests/SwiftDriverTests/TripleTests.swift @@ -32,6 +32,18 @@ final class TripleTests: XCTestCase { XCTAssertEqual(Triple("x86_64-apple-macosx10.13").osVersion, "10.13.0") XCTAssertEqual(Triple("x86_64-apple-macosx1x.13").osVersion, "0.13.0") XCTAssertEqual(Triple("x86_64-apple-macosx10.13.5-abi").osVersion, "10.13.5") + + XCTAssertEqual(Triple("arm64-unknown-none").arch, .aarch64) + XCTAssertEqual(Triple("arm64-unknown-none").vendor, nil) + XCTAssertEqual(Triple("arm64-unknown-none").os, .noneOS) + XCTAssertEqual(Triple("arm64-unknown-none").environment, nil) + XCTAssertEqual(Triple("arm64-unknown-none").objectFormat, .elf) + + XCTAssertEqual(Triple("arm64-apple-none-macho").arch, .aarch64) + XCTAssertEqual(Triple("arm64-apple-none-macho").vendor, .apple) + XCTAssertEqual(Triple("arm64-apple-none-macho").os, .noneOS) + XCTAssertEqual(Triple("arm64-apple-none-macho").environment, nil) + XCTAssertEqual(Triple("arm64-apple-none-macho").objectFormat, .macho) } func testBasicParsing() { @@ -187,6 +199,12 @@ final class TripleTests: XCTestCase { T = Triple("arm-none-none-eabi") XCTAssertEqual(T.arch, Triple.Arch.arm) XCTAssertEqual(T.vendor, nil) + XCTAssertEqual(T.os, .noneOS) + XCTAssertEqual(T.environment, Triple.Environment.eabi) + + T = Triple("arm-none-unknown-eabi") + XCTAssertEqual(T.arch, Triple.Arch.arm) + XCTAssertEqual(T.vendor, nil) XCTAssertEqual(T.os, nil) XCTAssertEqual(T.environment, Triple.Environment.eabi) @@ -723,7 +741,7 @@ final class TripleTests: XCTestCase { assertNormalizesEqual("i686-linux", "i686-unknown-linux") // i686-pc-linux-gnu assertNormalizesEqual("arm-none-eabi", - "arm-none-unknown-eabi") // arm-none-eabi + "arm-unknown-none-eabi") // arm-none-eabi assertNormalizesEqual("wasm32-wasi", "wasm32-unknown-wasi") // wasm32-unknown-wasi assertNormalizesEqual("wasm64-wasi",