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"}} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits