https://github.com/lasiotus updated 
https://github.com/llvm/llvm-project/pull/207103

>From 6d1ca7202ffffa0144764e6dafa077f1a2cc20c2 Mon Sep 17 00:00:00 2001
From: "U. Lasiotus" <[email protected]>
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    |  9 +++++++--
 llvm/lib/TargetParser/Triple.cpp           |  3 +++
 llvm/unittests/TargetParser/TripleTest.cpp |  5 +++++
 5 files changed, 32 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..1587266fa8398 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,10 @@ 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 +1185,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());

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to