Skip to content

Commit 9b55509

Browse files
committed
[clang][driver] Cleanup UEFI toolchain driver
UEFI toolchain predefines clean up. Introducing new __PECOFF__ predefine for targets that produce PE COFF binaries. Updating UEFI header includes to not include system include directories.
1 parent d1335fb commit 9b55509

File tree

7 files changed

+31
-6
lines changed

7 files changed

+31
-6
lines changed

clang/lib/Basic/Targets/OSTargets.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,7 @@ static void addVisualCDefines(const LangOptions &Opts, MacroBuilder &Builder) {
260260
void addWindowsDefines(const llvm::Triple &Triple, const LangOptions &Opts,
261261
MacroBuilder &Builder) {
262262
Builder.defineMacro("_WIN32");
263+
Builder.defineMacro("__PECOFF__");
263264
if (Triple.isArch64Bit())
264265
Builder.defineMacro("_WIN64");
265266
if (Triple.isWindowsGNUEnvironment())

clang/lib/Basic/Targets/OSTargets.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -783,7 +783,11 @@ template <typename Target>
783783
class LLVM_LIBRARY_VISIBILITY UEFITargetInfo : public OSTargetInfo<Target> {
784784
protected:
785785
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
786-
MacroBuilder &Builder) const override {}
786+
MacroBuilder &Builder) const override {
787+
Builder.defineMacro("__PECOFF__");
788+
Builder.defineMacro("__UEFI__");
789+
// Builder.defineMacro("_WIN32");
790+
}
787791

788792
public:
789793
UEFITargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)

clang/lib/Basic/Targets/X86.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -826,11 +826,6 @@ class LLVM_LIBRARY_VISIBILITY UEFIX86_64TargetInfo
826826
"i64:64-i128:128-f80:128-n8:16:32:64-S128");
827827
}
828828

829-
void getTargetDefines(const LangOptions &Opts,
830-
MacroBuilder &Builder) const override {
831-
getOSDefines(Opts, X86TargetInfo::getTriple(), Builder);
832-
}
833-
834829
BuiltinVaListKind getBuiltinVaListKind() const override {
835830
return TargetInfo::CharPtrBuiltinVaList;
836831
}

clang/lib/Driver/ToolChains/UEFI.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,24 @@ UEFI::UEFI(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
3535

3636
Tool *UEFI::buildLinker() const { return new tools::uefi::Linker(*this); }
3737

38+
void UEFI::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
39+
ArgStringList &CC1Args) const {
40+
if (DriverArgs.hasArg(options::OPT_nostdinc))
41+
return;
42+
43+
if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) {
44+
SmallString<128> Dir(getDriver().ResourceDir);
45+
llvm::sys::path::append(Dir, "include");
46+
addSystemInclude(DriverArgs, CC1Args, Dir.str());
47+
}
48+
49+
if (DriverArgs.hasArg(options::OPT_nostdlibinc))
50+
return;
51+
52+
if (std::optional<std::string> Path = getStdlibIncludePath())
53+
addSystemInclude(DriverArgs, CC1Args, *Path);
54+
}
55+
3856
void tools::uefi::Linker::ConstructJob(Compilation &C, const JobAction &JA,
3957
const InputInfo &Output,
4058
const InputInfoList &Inputs,

clang/lib/Driver/ToolChains/UEFI.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ class LLVM_LIBRARY_VISIBILITY UEFI : public ToolChain {
5151
return false;
5252
}
5353
bool isPICDefaultForced() const override { return true; }
54+
55+
void
56+
AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
57+
llvm::opt::ArgStringList &CC1Args) const override;
5458
};
5559

5660
} // namespace toolchains

clang/lib/Lex/InitHeaderSearch.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,7 @@ bool InitHeaderSearch::ShouldAddDefaultIncludePaths(
305305
case llvm::Triple::PS5:
306306
case llvm::Triple::RTEMS:
307307
case llvm::Triple::Solaris:
308+
case llvm::Triple::UEFI:
308309
case llvm::Triple::WASI:
309310
case llvm::Triple::ZOS:
310311
return false;

libcxx/include/__configuration/platform.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
# define _LIBCPP_OBJECT_FORMAT_MACHO 1
2323
#elif defined(_WIN32)
2424
# define _LIBCPP_OBJECT_FORMAT_COFF 1
25+
#elif defined(__UEFI__)
26+
# define _LIBCPP_OBJECT_FORMAT_COFF 1
2527
#elif defined(__wasm__)
2628
# define _LIBCPP_OBJECT_FORMAT_WASM 1
2729
#elif defined(_AIX)

0 commit comments

Comments
 (0)