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" <[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 | 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()); _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
