Skip to content

Commit 19c7bb5

Browse files
committed
Driver: add support for baremetal targets
This allows building the Swift standard library for targets which may not have an actual OS running. This is identified by the OS field in the target triple being set to `none`.
1 parent 93e25d2 commit 19c7bb5

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)