agvallejo created this revision.
Herald added subscribers: pengfei, s.egerton, abidh, simoncook.
agvallejo requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

x86_64-unknown-elf should provide an freestanding environment usable
in kernel development. Currently it defaults to Generic_ELF, which
inherits from Generic_GCC, which is tied to the host platform. The
Baremetal toolchain seems like a better choice to add support for
x86 kernel cross-compilation without adding a lot of overrides on
the command line


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D105414

Files:
  clang/lib/Driver/ToolChains/BareMetal.cpp


Index: clang/lib/Driver/ToolChains/BareMetal.cpp
===================================================================
--- clang/lib/Driver/ToolChains/BareMetal.cpp
+++ clang/lib/Driver/ToolChains/BareMetal.cpp
@@ -139,6 +139,20 @@
   return Triple.getEnvironmentName() == "elf";
 }
 
+static bool isX86BareMetal(const llvm::Triple &Triple) {
+  if (Triple.getArch() != llvm::Triple::x86 &&
+      Triple.getArch() != llvm::Triple::x86_64)
+    return false;
+
+  if (Triple.getVendor() != llvm::Triple::UnknownVendor)
+    return false;
+
+  if (Triple.getOS() != llvm::Triple::UnknownOS)
+    return false;
+
+  return Triple.getEnvironmentName() == "elf";
+}
+
 void BareMetal::findMultilibs(const Driver &D, const llvm::Triple &Triple,
                               const ArgList &Args) {
   DetectedMultilibs Result;
@@ -151,7 +165,9 @@
 }
 
 bool BareMetal::handlesTarget(const llvm::Triple &Triple) {
-  return isARMBareMetal(Triple) || isRISCVBareMetal(Triple);
+  return isARMBareMetal(Triple)   ||
+         isRISCVBareMetal(Triple) ||
+         isX86BareMetal(Triple);
 }
 
 Tool *BareMetal::buildLinker() const {


Index: clang/lib/Driver/ToolChains/BareMetal.cpp
===================================================================
--- clang/lib/Driver/ToolChains/BareMetal.cpp
+++ clang/lib/Driver/ToolChains/BareMetal.cpp
@@ -139,6 +139,20 @@
   return Triple.getEnvironmentName() == "elf";
 }
 
+static bool isX86BareMetal(const llvm::Triple &Triple) {
+  if (Triple.getArch() != llvm::Triple::x86 &&
+      Triple.getArch() != llvm::Triple::x86_64)
+    return false;
+
+  if (Triple.getVendor() != llvm::Triple::UnknownVendor)
+    return false;
+
+  if (Triple.getOS() != llvm::Triple::UnknownOS)
+    return false;
+
+  return Triple.getEnvironmentName() == "elf";
+}
+
 void BareMetal::findMultilibs(const Driver &D, const llvm::Triple &Triple,
                               const ArgList &Args) {
   DetectedMultilibs Result;
@@ -151,7 +165,9 @@
 }
 
 bool BareMetal::handlesTarget(const llvm::Triple &Triple) {
-  return isARMBareMetal(Triple) || isRISCVBareMetal(Triple);
+  return isARMBareMetal(Triple)   ||
+         isRISCVBareMetal(Triple) ||
+         isX86BareMetal(Triple);
 }
 
 Tool *BareMetal::buildLinker() const {
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to