diff --git a/cmake/modules/HandleLLVMOptions.cmake b/cmake/modules/HandleLLVMOptions.cmake index 49db3088bbc..32ffed3cb2e 100644 --- a/cmake/modules/HandleLLVMOptions.cmake +++ b/cmake/modules/HandleLLVMOptions.cmake @@ -107,7 +107,7 @@ if(WIN32) set(LLVM_ON_UNIX 0) endif(CYGWIN) else(WIN32) - if(FUCHSIA OR UNIX) + if(FUCHSIA OR GENODE OR UNIX) set(LLVM_ON_WIN32 0) set(LLVM_ON_UNIX 1) if(APPLE OR ${CMAKE_SYSTEM_NAME} MATCHES "AIX") @@ -115,9 +115,9 @@ else(WIN32) else() set(LLVM_HAVE_LINK_VERSION_SCRIPT 1) endif() - else(FUCHSIA OR UNIX) + else(FUCHSIA OR GENODE OR UNIX) MESSAGE(SEND_ERROR "Unable to determine platform") - endif(FUCHSIA OR UNIX) + endif(FUCHSIA OR GENODE OR UNIX) endif(WIN32) set(EXEEXT ${CMAKE_EXECUTABLE_SUFFIX}) diff --git a/include/llvm/ADT/Triple.h b/include/llvm/ADT/Triple.h index e06a68e2731..7da3d5d29bc 100644 --- a/include/llvm/ADT/Triple.h +++ b/include/llvm/ADT/Triple.h @@ -159,6 +159,7 @@ public: DragonFly, FreeBSD, Fuchsia, + Genode, IOS, KFreeBSD, Linux, @@ -498,6 +499,8 @@ public: bool isOSDragonFly() const { return getOS() == Triple::DragonFly; } + bool isOSGenode() const { return getOS() == Triple::Genode; } + bool isOSSolaris() const { return getOS() == Triple::Solaris; } diff --git a/include/llvm/BinaryFormat/ELF.h b/include/llvm/BinaryFormat/ELF.h index ce35d127d43..d7a589057db 100644 --- a/include/llvm/BinaryFormat/ELF.h +++ b/include/llvm/BinaryFormat/ELF.h @@ -348,6 +348,7 @@ enum { ELFOSABI_AROS = 15, // AROS ELFOSABI_FENIXOS = 16, // FenixOS ELFOSABI_CLOUDABI = 17, // Nuxi CloudABI + ELFOSABI_GENODE = 18, // Genode ELFOSABI_FIRST_ARCH = 64, // First architecture-specific OS ABI ELFOSABI_AMDGPU_HSA = 64, // AMD HSA runtime ELFOSABI_AMDGPU_PAL = 65, // AMD PAL runtime diff --git a/include/llvm/MC/MCELFObjectWriter.h b/include/llvm/MC/MCELFObjectWriter.h index f226d6a45a5..91efe079d20 100644 --- a/include/llvm/MC/MCELFObjectWriter.h +++ b/include/llvm/MC/MCELFObjectWriter.h @@ -74,6 +74,8 @@ public: switch (OSType) { case Triple::CloudABI: return ELF::ELFOSABI_CLOUDABI; + case Triple::Genode: + return ELF::ELFOSABI_GENODE; case Triple::HermitCore: return ELF::ELFOSABI_STANDALONE; case Triple::PS4: diff --git a/lib/ObjectYAML/ELFYAML.cpp b/lib/ObjectYAML/ELFYAML.cpp index 215d6bdd091..0d3f5eaf032 100644 --- a/lib/ObjectYAML/ELFYAML.cpp +++ b/lib/ObjectYAML/ELFYAML.cpp @@ -260,6 +260,7 @@ void ScalarEnumerationTraits::enumeration( ECase(ELFOSABI_AROS); ECase(ELFOSABI_FENIXOS); ECase(ELFOSABI_CLOUDABI); + ECase(ELFOSABI_GENODE); ECase(ELFOSABI_AMDGPU_HSA); ECase(ELFOSABI_AMDGPU_PAL); ECase(ELFOSABI_AMDGPU_MESA3D); diff --git a/lib/Support/Triple.cpp b/lib/Support/Triple.cpp index 26d9327f620..1866b07ac68 100644 --- a/lib/Support/Triple.cpp +++ b/lib/Support/Triple.cpp @@ -181,6 +181,7 @@ StringRef Triple::getOSTypeName(OSType Kind) { case DragonFly: return "dragonfly"; case FreeBSD: return "freebsd"; case Fuchsia: return "fuchsia"; + case Genode: return "genode"; case IOS: return "ios"; case KFreeBSD: return "kfreebsd"; case Linux: return "linux"; @@ -478,6 +479,7 @@ static Triple::OSType parseOS(StringRef OSName) { .StartsWith("dragonfly", Triple::DragonFly) .StartsWith("freebsd", Triple::FreeBSD) .StartsWith("fuchsia", Triple::Fuchsia) + .StartsWith("genode", Triple::Genode) .StartsWith("ios", Triple::IOS) .StartsWith("kfreebsd", Triple::KFreeBSD) .StartsWith("linux", Triple::Linux) diff --git a/tools/llvm-readobj/ELFDumper.cpp b/tools/llvm-readobj/ELFDumper.cpp index 93254717e92..3d96ff9332a 100644 --- a/tools/llvm-readobj/ELFDumper.cpp +++ b/tools/llvm-readobj/ELFDumper.cpp @@ -911,6 +911,7 @@ static const EnumEntry ElfOSABI[] = { {"AROS", "AROS", ELF::ELFOSABI_AROS}, {"FenixOS", "FenixOS", ELF::ELFOSABI_FENIXOS}, {"CloudABI", "CloudABI", ELF::ELFOSABI_CLOUDABI}, + {"Genode", "Genode", ELF::ELFOSABI_GENODE}, {"Standalone", "Standalone App", ELF::ELFOSABI_STANDALONE} }; diff --git a/unittests/ADT/TripleTest.cpp b/unittests/ADT/TripleTest.cpp index bc7f9321caa..5d6a56d7723 100644 --- a/unittests/ADT/TripleTest.cpp +++ b/unittests/ADT/TripleTest.cpp @@ -241,6 +241,12 @@ TEST(TripleTest, ParsedIDs) { EXPECT_EQ(Triple::Fuchsia, T.getOS()); EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); + T = Triple("x86_64-unknown-genode"); + EXPECT_EQ(Triple::x86_64, T.getArch()); + EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); + EXPECT_EQ(Triple::Genode, T.getOS()); + EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); + T = Triple("x86_64-unknown-hermit"); EXPECT_EQ(Triple::x86_64, T.getArch()); EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); diff --git a/utils/benchmark/src/internal_macros.h b/utils/benchmark/src/internal_macros.h index f2d54bfcbd9..e20f891d435 100644 --- a/utils/benchmark/src/internal_macros.h +++ b/utils/benchmark/src/internal_macros.h @@ -65,6 +65,8 @@ #define BENCHMARK_OS_FUCHSIA 1 #elif defined (__SVR4) && defined (__sun) #define BENCHMARK_OS_SOLARIS 1 +#elif defined(__GENODE__) + #define BENCHMARK_OS_GENODE 1 #endif #if !__has_feature(cxx_exceptions) && !defined(__cpp_exceptions) \ diff --git a/utils/gn/secondary/clang/lib/Driver/BUILD.gn b/utils/gn/secondary/clang/lib/Driver/BUILD.gn index 1f07a6272d8..74eefe63b01 100644 --- a/utils/gn/secondary/clang/lib/Driver/BUILD.gn +++ b/utils/gn/secondary/clang/lib/Driver/BUILD.gn @@ -62,6 +62,7 @@ static_library("Driver") { "ToolChains/DragonFly.cpp", "ToolChains/FreeBSD.cpp", "ToolChains/Fuchsia.cpp", + "ToolChains/Genode.cpp", "ToolChains/Gnu.cpp", "ToolChains/HIP.cpp", "ToolChains/Haiku.cpp",