ShuhongL updated this revision to Diff 275221. Repository: rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION https://reviews.llvm.org/D82677/new/ https://reviews.llvm.org/D82677 Files: clang/lib/Driver/ToolChains/AIX.cpp clang/lib/Driver/ToolChains/AIX.h clang/lib/Frontend/InitHeaderSearch.cpp clang/test/Driver/aix-toolchain-include.cpp
Index: clang/test/Driver/aix-toolchain-include.cpp =================================================================== --- /dev/null +++ clang/test/Driver/aix-toolchain-include.cpp @@ -0,0 +1,40 @@ +// Tests that AIX toolchain adds system includes to its search path. + +// Check powerpc-ibm-aix, 32-bit/ 64-bit. +// RUN: %clangxx -### -no-canonical-prefixes %s 2>&1 \ +// RUN: -target powerpc-ibm-aix \ +// RUN: -resource-dir=%S/Inputs/resource_dir \ +// RUN: --sysroot=%S/Inputs/basic_aix_tree \ +// RUN: | FileCheck -check-prefix=CHECK-INTERNAL-INCLUDE %s + +// RUN: %clangxx -### -no-canonical-prefixes %s 2>&1 \ +// RUN: -target powerpc64-ibm-aix \ +// RUN: -resource-dir=%S/Inputs/resource_dir \ +// RUN: --sysroot=%S/Inputs/basic_aix_tree \ +// RUN: | FileCheck -check-prefix=CHECK-INTERNAL-INCLUDE %s + +// CHECK-INTERNAL-INCLUDE: {{.*}}clang{{.*}}" "-cc1" +// CHECK-INTERNAL-INCLUDE: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" +// CHECK-INTERNAL-INCLUDE: "-isysroot" "[[SYSROOT:[^"]+]]" +// CHECK-INTERNAL-INCLUDE: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include" +// CHECK-INTERNAL-INCLUDE: "-internal-isystem" "[[SYSROOT]]/usr/include" + +// Check powerpc-ibm-aix, 32-bit/64-bit. -nostdinc option. +// RUN: %clangxx -### -no-canonical-prefixes %s 2>&1 \ +// RUN: -target powerpc-ibm-aix \ +// RUN: -resource-dir=%S/Inputs/resource_dir \ +// RUN: --sysroot=%S/Inputs/basic_aix_tree \ +// RUN: -nostdinc \ +// RUN: | FileCheck -check-prefix=CHECK-NOSTDINC-INCLUDE %s + +// RUN: %clangxx -### -no-canonical-prefixes %s 2>&1 \ +// RUN: -target powerpc64-ibm-aix \ +// RUN: -resource-dir=%S/Inputs/resource_dir \ +// RUN: --sysroot=%S/Inputs/basic_aix_tree \ +// RUN: -nostdinc \ +// RUN: | FileCheck -check-prefix=CHECK-NOSTDINC-INCLUDE %s + +// CHECK-NOSTDINC-INCLUDE: {{.*}}clang{{.*}}" "-cc1" +// CHECK-NOSTDINC-INCLUDE: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" +// CHECK-NOSTDINC-INCLUDE: "-isysroot" "[[SYSROOT:[^"]+]]" +// CHECK-NOSTDINC-INCLUDE-NOT: "-internal-isystem" Index: clang/lib/Frontend/InitHeaderSearch.cpp =================================================================== --- clang/lib/Frontend/InitHeaderSearch.cpp +++ clang/lib/Frontend/InitHeaderSearch.cpp @@ -381,6 +381,7 @@ case llvm::Triple::Linux: case llvm::Triple::Hurd: case llvm::Triple::Solaris: + case llvm::Triple::AIX: llvm_unreachable("Include management is handled in the driver."); break; case llvm::Triple::Win32: @@ -424,6 +425,7 @@ case llvm::Triple::Hurd: case llvm::Triple::Solaris: case llvm::Triple::WASI: + case llvm::Triple::AIX: return; case llvm::Triple::Win32: Index: clang/lib/Driver/ToolChains/AIX.h =================================================================== --- clang/lib/Driver/ToolChains/AIX.h +++ clang/lib/Driver/ToolChains/AIX.h @@ -63,9 +63,16 @@ bool isPIEDefault() const override { return false; } bool isPICDefaultForced() const override { return true; } + void + AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs, + llvm::opt::ArgStringList &CC1Args) const override; + protected: Tool *buildAssembler() const override; Tool *buildLinker() const override; + +private: + llvm::StringRef GetHeaderSysroot(const llvm::opt::ArgList &DriverArgs) const; }; } // end namespace toolchains Index: clang/lib/Driver/ToolChains/AIX.cpp =================================================================== --- clang/lib/Driver/ToolChains/AIX.cpp +++ clang/lib/Driver/ToolChains/AIX.cpp @@ -13,12 +13,15 @@ #include "clang/Driver/Options.h" #include "clang/Driver/SanitizerArgs.h" #include "llvm/Option/ArgList.h" +#include "llvm/Support/Path.h" using AIX = clang::driver::toolchains::AIX; using namespace clang::driver; using namespace clang::driver::tools; +using namespace clang::driver::toolchains; using namespace llvm::opt; +using namespace llvm::sys; void aix::Assembler::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, @@ -161,6 +164,39 @@ getFilePaths().push_back(getDriver().SysRoot + "/usr/lib"); } +// Returns the effective header sysroot path to use. +// This comes from either -isysroot or --sysroot. +llvm::StringRef AIX::GetHeaderSysroot(const llvm::opt::ArgList &DriverArgs) const { + if (DriverArgs.hasArg(options::OPT_isysroot)) + return DriverArgs.getLastArgValue(options::OPT_isysroot); + if (!getDriver().SysRoot.empty()) + return getDriver().SysRoot; + return "/"; +} + +void AIX::AddClangSystemIncludeArgs(const ArgList &DriverArgs, + ArgStringList &CC1Args) const { + // return if -nostdinc/-nostdlibinc is specified as a driver option. + if (DriverArgs.hasArg(options::OPT_nostdinc) || + DriverArgs.hasArg(options::OPT_nostdlibinc)) + return; + + llvm::StringRef Sysroot = GetHeaderSysroot(DriverArgs); + const Driver &D = getDriver(); + + // Add the Clang builtin headers (<resource>/include). + if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) { + SmallString<128> P(D.ResourceDir); + path::append(P, "/include"); + addSystemInclude(DriverArgs, CC1Args, P.str()); + } + + // Add <sysroot>/usr/include. + SmallString<128> UP(Sysroot); + path::append(UP, "/usr/include"); + addSystemInclude(DriverArgs, CC1Args, UP.str()); +} + auto AIX::buildAssembler() const -> Tool * { return new aix::Assembler(*this); } auto AIX::buildLinker() const -> Tool * { return new aix::Linker(*this); }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits