Skip to content

Commit 2b37174

Browse files
committed
[clang][Driver] Implement AddClangSystemIncludeArgs and HasNativeLLVMSupport for the OpenBSD clang driver.
If not overridden, AddClangSystemIncludeArgs's implementation is empty, so by default, no system include args are added to the Clang driver. This means that invoking Clang without the frontend must include a manual -I/usr/include flag, which is inconsistent behavior. Therefore, override and implement this method to match. Some boilerplate is also borrowed for handling of the other driver flags. While we are here, also override and enable HasNativeLLVMSupport. Patch by: 3405691582 (dana koch) Differential Revision: https://reviews.llvm.org/D86412
1 parent 86bbf8e commit 2b37174

File tree

3 files changed

+45
-0
lines changed

3 files changed

+45
-0
lines changed

clang/lib/Driver/ToolChains/OpenBSD.cpp

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
1010
#include "Arch/Mips.h"
1111
#include "Arch/Sparc.h"
1212
#include "CommonArgs.h"
13+
#include "clang/Config/config.h"
1314
#include "clang/Driver/Compilation.h"
1415
#include "clang/Driver/Options.h"
1516
#include "clang/Driver/SanitizerArgs.h"
1617
#include "llvm/Option/ArgList.h"
18+
#include "llvm/Support/Path.h"
1719

1820
using namespace clang::driver;
1921
using namespace clang::driver::tools;
@@ -278,3 +280,38 @@ void OpenBSD::addClangTargetOptions(const ArgList &DriverArgs,
278280
options::OPT_fno_use_init_array, false))
279281
CC1Args.push_back("-fno-use-init-array");
280282
}
283+
284+
void OpenBSD::AddClangSystemIncludeArgs(
285+
const llvm::opt::ArgList &DriverArgs,
286+
llvm::opt::ArgStringList &CC1Args) const {
287+
const Driver &D = getDriver();
288+
289+
if (DriverArgs.hasArg(clang::driver::options::OPT_nostdinc))
290+
return;
291+
292+
if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) {
293+
SmallString<128> Dir(D.ResourceDir);
294+
llvm::sys::path::append(Dir, "include");
295+
addSystemInclude(DriverArgs, CC1Args, Dir.str());
296+
}
297+
298+
if (DriverArgs.hasArg(options::OPT_nostdlibinc))
299+
return;
300+
301+
// Check for configure-time C include directories.
302+
StringRef CIncludeDirs(C_INCLUDE_DIRS);
303+
if (CIncludeDirs != "") {
304+
SmallVector<StringRef, 5> dirs;
305+
CIncludeDirs.split(dirs, ":");
306+
for (StringRef dir : dirs) {
307+
StringRef Prefix =
308+
llvm::sys::path::is_absolute(dir) ? StringRef(D.SysRoot) : "";
309+
addExternCSystemInclude(DriverArgs, CC1Args, Prefix + dir);
310+
}
311+
return;
312+
}
313+
314+
addExternCSystemInclude(DriverArgs, CC1Args, D.SysRoot + "/usr/include");
315+
}
316+
317+
bool OpenBSD::HasNativeLLVMSupport() const { return true; }

clang/lib/Driver/ToolChains/OpenBSD.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,12 @@ class LLVM_LIBRARY_VISIBILITY OpenBSD : public Generic_ELF {
6565
return ToolChain::CST_Libcxx;
6666
}
6767

68+
void
69+
AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
70+
llvm::opt::ArgStringList &CC1Args) const override;
71+
72+
bool HasNativeLLVMSupport() const override;
73+
6874
void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args,
6975
llvm::opt::ArgStringList &CmdArgs) const override;
7076

clang/lib/Frontend/InitHeaderSearch.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,7 @@ void InitHeaderSearch::AddDefaultCIncludePaths(const llvm::Triple &triple,
270270
case llvm::Triple::Linux:
271271
case llvm::Triple::Hurd:
272272
case llvm::Triple::Solaris:
273+
case llvm::Triple::OpenBSD:
273274
llvm_unreachable("Include management is handled in the driver.");
274275

275276
case llvm::Triple::CloudABI: {
@@ -423,6 +424,7 @@ void InitHeaderSearch::AddDefaultIncludePaths(const LangOptions &Lang,
423424
case llvm::Triple::Emscripten:
424425
case llvm::Triple::Linux:
425426
case llvm::Triple::Hurd:
427+
case llvm::Triple::OpenBSD:
426428
case llvm::Triple::Solaris:
427429
case llvm::Triple::WASI:
428430
case llvm::Triple::AIX:

0 commit comments

Comments
 (0)