[clang] c1ee4fb - [clang][AVR] Add avr-libc/include to clang system include paths
Ben Shi via cfe-commits
cfe-commits at lists.llvm.org
Sun May 30 07:39:18 PDT 2021
Author: Ben Shi
Date: 2021-05-30T22:39:07+08:00
New Revision: c1ee4fb5af49af5911ad7dc7932d975073030ec3
URL: https://github.com/llvm/llvm-project/commit/c1ee4fb5af49af5911ad7dc7932d975073030ec3
DIFF: https://github.com/llvm/llvm-project/commit/c1ee4fb5af49af5911ad7dc7932d975073030ec3.diff
LOG: [clang][AVR] Add avr-libc/include to clang system include paths
Reviewed By: dylanmckay
Differential Revision: https://reviews.llvm.org/D97669
Added:
clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/include/.keep
Modified:
clang/lib/Driver/ToolChains/AVR.cpp
clang/lib/Driver/ToolChains/AVR.h
clang/test/Driver/avr-toolchain.c
Removed:
################################################################################
diff --git a/clang/lib/Driver/ToolChains/AVR.cpp b/clang/lib/Driver/ToolChains/AVR.cpp
index f4f8014ff3872..ea35abb86f45d 100644
--- a/clang/lib/Driver/ToolChains/AVR.cpp
+++ b/clang/lib/Driver/ToolChains/AVR.cpp
@@ -353,6 +353,23 @@ AVRToolChain::AVRToolChain(const Driver &D, const llvm::Triple &Triple,
}
}
+void AVRToolChain::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
+ ArgStringList &CC1Args) const {
+ if (DriverArgs.hasArg(options::OPT_nostdinc) ||
+ DriverArgs.hasArg(options::OPT_nostdlibinc))
+ return;
+
+ // Omit if there is no avr-libc installed.
+ Optional<std::string> AVRLibcRoot = findAVRLibcInstallation();
+ if (!AVRLibcRoot.hasValue())
+ return;
+
+ // Add 'avr-libc/include' to clang system include paths if applicable.
+ std::string AVRInc = AVRLibcRoot.getValue() + "/include";
+ if (llvm::sys::fs::is_directory(AVRInc))
+ addSystemInclude(DriverArgs, CC1Args, AVRInc);
+}
+
Tool *AVRToolChain::buildLinker() const {
return new tools::AVR::Linker(getTriple(), *this, LinkStdlib);
}
diff --git a/clang/lib/Driver/ToolChains/AVR.h b/clang/lib/Driver/ToolChains/AVR.h
index a3198b2495803..1b3b2035add2d 100644
--- a/clang/lib/Driver/ToolChains/AVR.h
+++ b/clang/lib/Driver/ToolChains/AVR.h
@@ -22,6 +22,9 @@ class LLVM_LIBRARY_VISIBILITY AVRToolChain : public Generic_ELF {
public:
AVRToolChain(const Driver &D, const llvm::Triple &Triple,
const llvm::opt::ArgList &Args);
+ void
+ AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
+ llvm::opt::ArgStringList &CC1Args) const override;
protected:
Tool *buildLinker() const override;
diff --git a/clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/include/.keep b/clang/test/Driver/Inputs/basic_avr_tree/usr/lib/avr/include/.keep
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/avr-toolchain.c b/clang/test/Driver/avr-toolchain.c
index 46a3c10fa3a15..b9ca1777a7d69 100644
--- a/clang/test/Driver/avr-toolchain.c
+++ b/clang/test/Driver/avr-toolchain.c
@@ -2,3 +2,12 @@
// RUN: %clang %s -### -no-canonical-prefixes -target avr 2>&1 | FileCheck -check-prefix=CC1 %s
// CC1: clang{{.*}} "-cc1" "-triple" "avr"
+
+// RUN: %clang %s -### -target avr --sysroot %S/Inputs/basic_avr_tree 2>&1 | FileCheck -check-prefix CC1A %s
+// CC1A: clang{{.*}} "-cc1" "-triple" "avr" {{.*}} "-internal-isystem" {{".*avr/include"}}
+
+// RUN: %clang %s -### -target avr --sysroot %S/Inputs/basic_avr_tree 2>&1 -nostdinc | FileCheck -check-prefix CC1B %s
+// CC1B-NOT: "-internal-isystem" {{".*avr/include"}}
+
+// RUN: %clang %s -### -target avr --sysroot %S/Inputs/basic_avr_tree 2>&1 -nostdlibinc | FileCheck -check-prefix CC1C %s
+// CC1C-NOT: "-internal-isystem" {{".*avr/include"}}
More information about the cfe-commits
mailing list