[clang] [llvm] [Triple] Add target triple support for Motor OS. (PR #207103)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 1 18:05:45 PDT 2026
https://github.com/lasiotus updated https://github.com/llvm/llvm-project/pull/207103
>From 41cb5179ddf0fe737d4676d5cf900621fd0fc953 Mon Sep 17 00:00:00 2001
From: "U. Lasiotus" <lasiotus at motor-os.org>
Date: Wed, 1 Jul 2026 23:47:52 +0000
Subject: [PATCH] [Triple] Add target triple support for Motor OS.
Motor OS https://github.com/moturus/motor-os already has
x86_64-unknown-motor triple in Rust:
https://doc.rust-lang.org/rustc/platform-support/motor.html
So the same triple is used here.
---
clang/lib/Basic/Targets.cpp | 2 ++
clang/lib/Basic/Targets/OSTargets.h | 15 +++++++++++++++
llvm/include/llvm/TargetParser/Triple.h | 7 +++++--
llvm/lib/TargetParser/Triple.cpp | 3 +++
llvm/unittests/TargetParser/TripleTest.cpp | 5 +++++
5 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp
index ed88ae7173bad..7f4a2daaefea9 100644
--- a/clang/lib/Basic/Targets.cpp
+++ b/clang/lib/Basic/Targets.cpp
@@ -681,6 +681,8 @@ std::unique_ptr<TargetInfo> AllocateTarget(const llvm::Triple &Triple,
}
case llvm::Triple::Haiku:
return std::make_unique<HaikuTargetInfo<X86_64TargetInfo>>(Triple, Opts);
+ case llvm::Triple::Motor:
+ return std::make_unique<MotorTargetInfo<X86_64TargetInfo>>(Triple, Opts);
case llvm::Triple::PS4:
return std::make_unique<PS4OSTargetInfo<X86_64TargetInfo>>(Triple, Opts);
case llvm::Triple::PS5:
diff --git a/clang/lib/Basic/Targets/OSTargets.h b/clang/lib/Basic/Targets/OSTargets.h
index 9461680df8bdb..0b95552748a1e 100644
--- a/clang/lib/Basic/Targets/OSTargets.h
+++ b/clang/lib/Basic/Targets/OSTargets.h
@@ -1115,6 +1115,21 @@ class LLVM_LIBRARY_VISIBILITY H2TargetInfo : public OSTargetInfo<Target> {
using OSTargetInfo<Target>::OSTargetInfo;
};
+// Motor OS Target
+template <typename Target>
+class LLVM_LIBRARY_VISIBILITY MotorTargetInfo : public OSTargetInfo<Target> {
+protected:
+ void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
+ MacroBuilder &Builder) const override {
+ Builder.defineMacro("__motor__");
+ if (Opts.POSIXThreads)
+ Builder.defineMacro("_REENTRANT");
+ }
+
+public:
+ using OSTargetInfo<Target>::OSTargetInfo;
+};
+
// SerenityOS target
template <typename Target>
class LLVM_LIBRARY_VISIBILITY SerenityTargetInfo : public OSTargetInfo<Target> {
diff --git a/llvm/include/llvm/TargetParser/Triple.h b/llvm/include/llvm/TargetParser/Triple.h
index 4cf54022c5c32..a230090eaacbd 100644
--- a/llvm/include/llvm/TargetParser/Triple.h
+++ b/llvm/include/llvm/TargetParser/Triple.h
@@ -261,7 +261,8 @@ class Triple {
Firmware,
QURT,
H2,
- LastOSType = H2
+ Motor, // Motor OS
+ LastOSType = Motor
};
enum EnvironmentType {
UnknownEnvironment,
@@ -660,6 +661,8 @@ class Triple {
bool isOSFuchsia() const { return getOS() == Triple::Fuchsia; }
+ bool isOSMotor() const { return getOS() == Triple::Motor; }
+
bool isOSDragonFly() const { return getOS() == Triple::DragonFly; }
bool isOSSolaris() const { return getOS() == Triple::Solaris; }
@@ -1180,7 +1183,7 @@ class Triple {
/// Note: Android API level 29 (10) introduced ELF TLS.
bool hasDefaultEmulatedTLS() const {
return (isAndroid() && isAndroidVersionLT(29)) || isOSOpenBSD() ||
- isWindowsCygwinEnvironment() || isOHOSFamily();
+ isWindowsCygwinEnvironment() || isOHOSFamily() || isOSMotor();
}
/// True if the target uses TLSDESC by default.
diff --git a/llvm/lib/TargetParser/Triple.cpp b/llvm/lib/TargetParser/Triple.cpp
index 603227e891d4b..ceb560b530d43 100644
--- a/llvm/lib/TargetParser/Triple.cpp
+++ b/llvm/lib/TargetParser/Triple.cpp
@@ -509,6 +509,8 @@ StringRef Triple::getOSTypeName(OSType Kind) {
return "qurt";
case H2:
return "h2";
+ case Motor:
+ return "motor";
}
llvm_unreachable("Invalid OSType");
@@ -980,6 +982,7 @@ static Triple::OSType parseOS(StringRef OSName) {
.StartsWith("firmware", Triple::Firmware)
.StartsWith("qurt", Triple::QURT)
.StartsWith("h2", Triple::H2)
+ .StartsWith("motor", Triple::Motor)
.Default(Triple::UnknownOS);
}
diff --git a/llvm/unittests/TargetParser/TripleTest.cpp b/llvm/unittests/TargetParser/TripleTest.cpp
index 0486b113e9354..d1f56cd9488a4 100644
--- a/llvm/unittests/TargetParser/TripleTest.cpp
+++ b/llvm/unittests/TargetParser/TripleTest.cpp
@@ -1471,6 +1471,11 @@ TEST(TripleTest, ParsedIDs) {
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
EXPECT_EQ(Triple::CheriotRTOS, T.getOS());
+ T = Triple("x86_64-unknown-motor");
+ EXPECT_EQ(Triple::x86_64, T.getArch());
+ EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
+ EXPECT_EQ(Triple::Motor, T.getOS());
+
T = Triple("spirv64-unknown-chipstar");
EXPECT_EQ(Triple::spirv64, T.getArch());
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
More information about the llvm-commits
mailing list