Skip to content

Commit 6f67a3c

Browse files
authored
Merge pull request #35970 from compnerd/baremetal
Driver: add support for baremetal targets
2 parents 40a85f7 + 19c7bb5 commit 6f67a3c

File tree

5 files changed

+16
-4
lines changed

5 files changed

+16
-4
lines changed

lib/Basic/LangOptions.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,12 @@ std::pair<bool, bool> LangOptions::setTarget(llvm::Triple triple) {
327327
case llvm::Triple::WASI:
328328
addPlatformConditionValue(PlatformConditionKind::OS, "WASI");
329329
break;
330+
case llvm::Triple::UnknownOS:
331+
if (Target.getOSName() == "none") {
332+
addPlatformConditionValue(PlatformConditionKind::OS, "none");
333+
break;
334+
}
335+
LLVM_FALLTHROUGH;
330336
default:
331337
UnsupportedOS = true;
332338
break;

lib/Basic/Platform.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -175,8 +175,6 @@ static StringRef getPlatformNameForDarwin(const DarwinPlatformKind platform) {
175175

176176
StringRef swift::getPlatformNameForTriple(const llvm::Triple &triple) {
177177
switch (triple.getOS()) {
178-
case llvm::Triple::UnknownOS:
179-
llvm_unreachable("unknown OS");
180178
case llvm::Triple::ZOS:
181179
case llvm::Triple::Ananas:
182180
case llvm::Triple::CloudABI:
@@ -234,6 +232,8 @@ StringRef swift::getPlatformNameForTriple(const llvm::Triple &triple) {
234232
return "haiku";
235233
case llvm::Triple::WASI:
236234
return "wasi";
235+
case llvm::Triple::UnknownOS:
236+
return "none";
237237
}
238238
llvm_unreachable("unsupported OS");
239239
}

lib/Driver/Driver.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,8 @@ Driver::buildToolChain(const llvm::opt::InputArgList &ArgList) {
368368
return std::make_unique<toolchains::GenericUnix>(*this, target);
369369
case llvm::Triple::WASI:
370370
return std::make_unique<toolchains::GenericUnix>(*this, target);
371+
case llvm::Triple::UnknownOS:
372+
return std::make_unique<toolchains::GenericUnix>(*this, target);
371373
default:
372374
Diags.diagnose(SourceLoc(), diag::error_unknown_target,
373375
ArgList.getLastArg(options::OPT_target)->getValue());

test/Driver/baremetal-target.swift

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
// RUN: %swiftc_driver_plain -target aarch64-unknwon-none-none -driver-print-jobs %s 2>&1 | %FileCheck %s
2+
3+
// CHECK: {{.*}}swift{{c|-frontend}}{{(.exe)?"?}} -frontend -c
4+
// CHECK: {{.*}}clang{{(.exe)?"?}} -fuse-ld=gold

test/Driver/options.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,8 @@
8080
// RUN: %swift_driver -g -### %s 2>&1 | %FileCheck -check-prefix=OPTIONS_BEFORE_FILE %s
8181
// OPTIONS_BEFORE_FILE: -g
8282

83-
// RUN: not %swift_driver -target abc -### %s 2>&1 | %FileCheck -check-prefix=BAD_TARGET %s
84-
// BAD_TARGET: error: unknown target 'abc'
83+
// RUN: not %swiftc_driver_plain -target x86_64-unknown-hurd -### %s 2>&1 | %FileCheck -check-prefix=BAD_TARGET %s
84+
// BAD_TARGET: error: unknown target 'x86_64-unknown-hurd'
8585

8686
// RUN: %swiftc_driver -incremental %s -### 2>&1 | %FileCheck -check-prefix=INCREMENTAL_WITHOUT_OFM %s
8787
// INCREMENTAL_WITHOUT_OFM: warning: ignoring -incremental (currently requires an output file map)

0 commit comments

Comments
 (0)