[clang] [clang] Introduce a new UEFI target predefine. (PR #111719)

via cfe-commits cfe-commits at lists.llvm.org
Sat Dec 21 14:09:23 PST 2024


https://github.com/Prabhuk updated https://github.com/llvm/llvm-project/pull/111719

>From 05eab970b59c61b22e8afa1ed9381906ae925c03 Mon Sep 17 00:00:00 2001
From: prabhukr <prabhukr at google.com>
Date: Wed, 9 Oct 2024 10:16:58 -0700
Subject: [PATCH 1/6] [clang] Introduce a new UEFI target predefine.

---
 clang/lib/Basic/Targets/OSTargets.h | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/clang/lib/Basic/Targets/OSTargets.h b/clang/lib/Basic/Targets/OSTargets.h
index a83d6464e789d6..92c76b303def65 100644
--- a/clang/lib/Basic/Targets/OSTargets.h
+++ b/clang/lib/Basic/Targets/OSTargets.h
@@ -783,7 +783,10 @@ template <typename Target>
 class LLVM_LIBRARY_VISIBILITY UEFITargetInfo : public OSTargetInfo<Target> {
 protected:
   void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
-                    MacroBuilder &Builder) const override {}
+                    MacroBuilder &Builder) const override {
+    Builder.defineMacro("__UEFI__");
+    Builder.defineMacro("__PECOFF__");
+  }
 
 public:
   UEFITargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)

>From 4ef8bcd3a9019299145b59d4f26cd4307171bed5 Mon Sep 17 00:00:00 2001
From: Prabhuk <prabhukrllvm at gmail.com>
Date: Wed, 13 Nov 2024 10:30:50 -0800
Subject: [PATCH 2/6] Update OSTargets.h

Remove PE_COFF
---
 clang/lib/Basic/Targets/OSTargets.h | 1 -
 1 file changed, 1 deletion(-)

diff --git a/clang/lib/Basic/Targets/OSTargets.h b/clang/lib/Basic/Targets/OSTargets.h
index 92c76b303def65..5a23eef0117294 100644
--- a/clang/lib/Basic/Targets/OSTargets.h
+++ b/clang/lib/Basic/Targets/OSTargets.h
@@ -785,7 +785,6 @@ class LLVM_LIBRARY_VISIBILITY UEFITargetInfo : public OSTargetInfo<Target> {
   void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
                     MacroBuilder &Builder) const override {
     Builder.defineMacro("__UEFI__");
-    Builder.defineMacro("__PECOFF__");
   }
 
 public:

>From bcccf1f86609a828130c1a9474d10b78c8f212c9 Mon Sep 17 00:00:00 2001
From: Prabhuk <prabhukrllvm at gmail.com>
Date: Wed, 13 Nov 2024 10:36:15 -0800
Subject: [PATCH 3/6] add __UEFI__ to windows predefines

Updating the PE COFF generating windows code path to predefine the new __UEFI__ macro.
---
 clang/lib/Basic/Targets/OSTargets.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/clang/lib/Basic/Targets/OSTargets.cpp b/clang/lib/Basic/Targets/OSTargets.cpp
index b56e2c7ca9c494..b9edeefa60148e 100644
--- a/clang/lib/Basic/Targets/OSTargets.cpp
+++ b/clang/lib/Basic/Targets/OSTargets.cpp
@@ -259,6 +259,7 @@ static void addVisualCDefines(const LangOptions &Opts, MacroBuilder &Builder) {
 
 void addWindowsDefines(const llvm::Triple &Triple, const LangOptions &Opts,
                        MacroBuilder &Builder) {
+  Builder.defineMacro("__UEFI__");
   Builder.defineMacro("_WIN32");
   if (Triple.isArch64Bit())
     Builder.defineMacro("_WIN64");

>From 2f6af5664bbd6f3cc01dfb7b46f67190dc4efba4 Mon Sep 17 00:00:00 2001
From: prabhukr <prabhukr at google.com>
Date: Fri, 20 Dec 2024 10:18:18 -0800
Subject: [PATCH 4/6] Removing the predefine from Windows targets. Keeping it
 only on UEFI.

---
 clang/lib/Basic/Targets/OSTargets.cpp | 1 -
 1 file changed, 1 deletion(-)

diff --git a/clang/lib/Basic/Targets/OSTargets.cpp b/clang/lib/Basic/Targets/OSTargets.cpp
index b9edeefa60148e..b56e2c7ca9c494 100644
--- a/clang/lib/Basic/Targets/OSTargets.cpp
+++ b/clang/lib/Basic/Targets/OSTargets.cpp
@@ -259,7 +259,6 @@ static void addVisualCDefines(const LangOptions &Opts, MacroBuilder &Builder) {
 
 void addWindowsDefines(const llvm::Triple &Triple, const LangOptions &Opts,
                        MacroBuilder &Builder) {
-  Builder.defineMacro("__UEFI__");
   Builder.defineMacro("_WIN32");
   if (Triple.isArch64Bit())
     Builder.defineMacro("_WIN64");

>From 4c96e0d1bbae207301aacaee9044f3da7dc8bd3f Mon Sep 17 00:00:00 2001
From: prabhukr <prabhukr at google.com>
Date: Sat, 21 Dec 2024 13:16:38 -0800
Subject: [PATCH 5/6] Add a test to check if __UEFI__ is defined for UEFI
 targets.

---
 clang/test/Driver/uefi-defines.c | 6 ++++++
 1 file changed, 6 insertions(+)
 create mode 100644 clang/test/Driver/uefi-defines.c

diff --git a/clang/test/Driver/uefi-defines.c b/clang/test/Driver/uefi-defines.c
new file mode 100644
index 00000000000000..45f27bfdb9fa98
--- /dev/null
+++ b/clang/test/Driver/uefi-defines.c
@@ -0,0 +1,6 @@
+// RUN: %clang -target x86_64-unknown-uefi %s -emit-llvm -S -c -o - | FileCheck %s
+
+// CHECK: __UEFI__defined
+#ifdef __UEFI__
+void __UEFI__defined() {}
+#endif

>From 2bdba34c073852622a5adef9147c4c3fbc6e3562 Mon Sep 17 00:00:00 2001
From: prabhukr <prabhukr at google.com>
Date: Sat, 21 Dec 2024 14:09:00 -0800
Subject: [PATCH 6/6] Add a second test for __UEFI__ predefine.

---
 clang/test/Preprocessor/init.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/clang/test/Preprocessor/init.c b/clang/test/Preprocessor/init.c
index 05225c120b13de..3b99204acd7a44 100644
--- a/clang/test/Preprocessor/init.c
+++ b/clang/test/Preprocessor/init.c
@@ -2742,3 +2742,7 @@
 // RISCV64-LINUX: #define __unix__ 1
 // RISCV64-LINUX: #define linux 1
 // RISCV64-LINUX: #define unix 1
+
+// RUN: %clang_cc1 -dM -triple=x86_64-uefi -E /dev/null | FileCheck -match-full-lines -check-prefix UEFI %s
+
+// UEFI: #define __UEFI__ 1



More information about the cfe-commits mailing list