yaxunl updated this revision to Diff 411150. yaxunl edited the summary of this revision. yaxunl added a reviewer: linjamaki. yaxunl added a comment. Herald added subscribers: mstorsjo, emaste.
add HIP include path after adding other system include paths CHANGES SINCE LAST ACTION https://reviews.llvm.org/D120132/new/ https://reviews.llvm.org/D120132 Files: clang/include/clang/Driver/ToolChain.h clang/lib/Driver/ToolChain.cpp clang/lib/Driver/ToolChains/AMDGPU.cpp clang/lib/Driver/ToolChains/Clang.cpp clang/lib/Driver/ToolChains/Darwin.cpp clang/lib/Driver/ToolChains/Darwin.h clang/lib/Driver/ToolChains/FreeBSD.cpp clang/lib/Driver/ToolChains/FreeBSD.h clang/lib/Driver/ToolChains/HIPAMD.cpp clang/lib/Driver/ToolChains/HIPAMD.h clang/lib/Driver/ToolChains/HIPSPV.cpp clang/lib/Driver/ToolChains/HIPSPV.h clang/lib/Driver/ToolChains/Linux.cpp clang/lib/Driver/ToolChains/Linux.h clang/lib/Driver/ToolChains/MSVC.cpp clang/lib/Driver/ToolChains/MSVC.h clang/lib/Driver/ToolChains/MinGW.cpp clang/lib/Driver/ToolChains/MinGW.h clang/lib/Driver/ToolChains/ROCm.h clang/test/Driver/hip-include-path.hip clang/test/Driver/hipspv-toolchain.hip
Index: clang/test/Driver/hipspv-toolchain.hip =================================================================== --- clang/test/Driver/hipspv-toolchain.hip +++ clang/test/Driver/hipspv-toolchain.hip @@ -11,7 +11,7 @@ // CHECK-SAME: "-fcuda-is-device" // CHECK-SAME: "-fcuda-allow-variadic-functions" // CHECK-SAME: "-mlink-builtin-bitcode" {{".*/hipspv/lib/hip-device-lib/hipspv-spirv64.bc"}} -// CHECK-SAME: "-isystem" {{".*/hipspv/include"}} +// CHECK-SAME: "-internal-isystem" {{".*/hipspv/include"}} // CHECK-SAME: "-fhip-new-launch-api" // CHECK-SAME: "-o" [[DEV_BC:".*bc"]] // CHECK-SAME: "-x" "hip" Index: clang/test/Driver/hip-include-path.hip =================================================================== --- clang/test/Driver/hip-include-path.hip +++ clang/test/Driver/hip-include-path.hip @@ -19,24 +19,24 @@ // COMMON-LABEL: "{{[^"]*}}clang{{[^"]*}}" "-cc1" // CLANG-SAME: "-internal-isystem" "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}/include/cuda_wrappers" // NOCLANG-NOT: "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}/include/cuda_wrappers" -// HIP-SAME: "-internal-isystem" "{{[^"]*}}Inputs/rocm/include" -// NOHIP-NOT: "{{.*}}Inputs/rocm/include" // HIP-SAME: "-include" "__clang_hip_runtime_wrapper.h" // NOHIP-NOT: "-include" "__clang_hip_runtime_wrapper.h" // skip check of standard C++ include path // CLANG-SAME: "-internal-isystem" "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}/include" // NOCLANG-NOT: "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}/include" +// HIP-SAME: "-internal-isystem" "{{[^"]*}}Inputs/rocm/include" +// NOHIP-NOT: "{{.*}}Inputs/rocm/include" // COMMON-LABEL: "{{[^"]*}}clang{{[^"]*}}" "-cc1" // CLANG-SAME: "-internal-isystem" "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}/include/cuda_wrappers" // NOCLANG-NOT: "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}/include/cuda_wrappers" -// HIP-SAME: "-internal-isystem" "{{[^"]*}}Inputs/rocm/include" -// NOHIP-NOT: "{{.*}}Inputs/rocm/include" // HIP-SAME: "-include" "__clang_hip_runtime_wrapper.h" // NOHIP-NOT: "-include" "__clang_hip_runtime_wrapper.h" // skip check of standard C++ include path // CLANG-SAME: "-internal-isystem" "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}/include" // NOCLANG-NOT: "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}/include" +// HIP-SAME: "-internal-isystem" "{{[^"]*}}Inputs/rocm/include" +// NOHIP-NOT: "{{.*}}Inputs/rocm/include" // RUN: %clang -c -### -target x86_64-unknown-linux-gnu --cuda-gpu-arch=gfx900 \ // RUN: -std=c++11 --rocm-path=%S/Inputs/rocm -nogpulib %s 2>&1 \ @@ -45,7 +45,7 @@ // ROCM35-LABEL: "{{[^"]*}}clang{{[^"]*}}" "-cc1" // ROCM35-NOT: "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}/include/cuda_wrappers" // ROCM35-SAME: "-internal-isystem" "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}" -// ROCM35-SAME: "-internal-isystem" "{{[^"]*}}Inputs/rocm/include" // ROCM35-NOT: "-include" "__clang_hip_runtime_wrapper.h" // skip check of standard C++ include path // ROCM35-SAME: "-internal-isystem" "{{[^"]*}}/lib{{[^"]*}}/clang/{{[^"]*}}/include" +// ROCM35-SAME: "-internal-isystem" "{{[^"]*}}Inputs/rocm/include" Index: clang/lib/Driver/ToolChains/ROCm.h =================================================================== --- clang/lib/Driver/ToolChains/ROCm.h +++ clang/lib/Driver/ToolChains/ROCm.h @@ -255,8 +255,9 @@ return LibDeviceMap.lookup(Gpu); } - void AddHIPIncludeArgs(const llvm::opt::ArgList &DriverArgs, - llvm::opt::ArgStringList &CC1Args) const; + std::string + AddHIPWrapperArgsAndGetIncludePath(const llvm::opt::ArgList &DriverArgs, + llvm::opt::ArgStringList &CC1Args) const; void detectDeviceLibrary(); void detectHIPRuntime(); Index: clang/lib/Driver/ToolChains/MinGW.h =================================================================== --- clang/lib/Driver/ToolChains/MinGW.h +++ clang/lib/Driver/ToolChains/MinGW.h @@ -85,8 +85,9 @@ void AddCudaIncludeArgs(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const override; - void AddHIPIncludeArgs(const llvm::opt::ArgList &DriverArgs, - llvm::opt::ArgStringList &CC1Args) const override; + std::string AddHIPWrapperArgsAndGetIncludePath( + const llvm::opt::ArgList &DriverArgs, + llvm::opt::ArgStringList &CC1Args) const override; void printVerboseInfo(raw_ostream &OS) const override; Index: clang/lib/Driver/ToolChains/MinGW.cpp =================================================================== --- clang/lib/Driver/ToolChains/MinGW.cpp +++ clang/lib/Driver/ToolChains/MinGW.cpp @@ -514,9 +514,10 @@ CudaInstallation.AddCudaIncludeArgs(DriverArgs, CC1Args); } -void toolchains::MinGW::AddHIPIncludeArgs(const ArgList &DriverArgs, - ArgStringList &CC1Args) const { - RocmInstallation.AddHIPIncludeArgs(DriverArgs, CC1Args); +std::string toolchains::MinGW::AddHIPWrapperArgsAndGetIncludePath( + const ArgList &DriverArgs, ArgStringList &CC1Args) const { + return RocmInstallation.AddHIPWrapperArgsAndGetIncludePath(DriverArgs, + CC1Args); } void toolchains::MinGW::printVerboseInfo(raw_ostream &OS) const { Index: clang/lib/Driver/ToolChains/MSVC.h =================================================================== --- clang/lib/Driver/ToolChains/MSVC.h +++ clang/lib/Driver/ToolChains/MSVC.h @@ -93,8 +93,9 @@ void AddCudaIncludeArgs(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const override; - void AddHIPIncludeArgs(const llvm::opt::ArgList &DriverArgs, - llvm::opt::ArgStringList &CC1Args) const override; + std::string AddHIPWrapperArgsAndGetIncludePath( + const llvm::opt::ArgList &DriverArgs, + llvm::opt::ArgStringList &CC1Args) const override; bool getWindowsSDKLibraryPath( const llvm::opt::ArgList &Args, std::string &path) const; Index: clang/lib/Driver/ToolChains/MSVC.cpp =================================================================== --- clang/lib/Driver/ToolChains/MSVC.cpp +++ clang/lib/Driver/ToolChains/MSVC.cpp @@ -470,9 +470,10 @@ CudaInstallation.AddCudaIncludeArgs(DriverArgs, CC1Args); } -void MSVCToolChain::AddHIPIncludeArgs(const ArgList &DriverArgs, - ArgStringList &CC1Args) const { - RocmInstallation.AddHIPIncludeArgs(DriverArgs, CC1Args); +std::string MSVCToolChain::AddHIPWrapperArgsAndGetIncludePath( + const ArgList &DriverArgs, ArgStringList &CC1Args) const { + return RocmInstallation.AddHIPWrapperArgsAndGetIncludePath(DriverArgs, + CC1Args); } void MSVCToolChain::printVerboseInfo(raw_ostream &OS) const { Index: clang/lib/Driver/ToolChains/Linux.h =================================================================== --- clang/lib/Driver/ToolChains/Linux.h +++ clang/lib/Driver/ToolChains/Linux.h @@ -35,8 +35,9 @@ llvm::opt::ArgStringList &CC1Args) const override; void AddCudaIncludeArgs(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const override; - void AddHIPIncludeArgs(const llvm::opt::ArgList &DriverArgs, - llvm::opt::ArgStringList &CC1Args) const override; + std::string AddHIPWrapperArgsAndGetIncludePath( + const llvm::opt::ArgList &DriverArgs, + llvm::opt::ArgStringList &CC1Args) const override; void AddIAMCUIncludeArgs(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const override; RuntimeLibType GetDefaultRuntimeLibType() const override; Index: clang/lib/Driver/ToolChains/Linux.cpp =================================================================== --- clang/lib/Driver/ToolChains/Linux.cpp +++ clang/lib/Driver/ToolChains/Linux.cpp @@ -653,9 +653,11 @@ CudaInstallation.AddCudaIncludeArgs(DriverArgs, CC1Args); } -void Linux::AddHIPIncludeArgs(const ArgList &DriverArgs, - ArgStringList &CC1Args) const { - RocmInstallation.AddHIPIncludeArgs(DriverArgs, CC1Args); +std::string +Linux::AddHIPWrapperArgsAndGetIncludePath(const ArgList &DriverArgs, + ArgStringList &CC1Args) const { + return RocmInstallation.AddHIPWrapperArgsAndGetIncludePath(DriverArgs, + CC1Args); } void Linux::AddIAMCUIncludeArgs(const ArgList &DriverArgs, Index: clang/lib/Driver/ToolChains/HIPSPV.h =================================================================== --- clang/lib/Driver/ToolChains/HIPSPV.h +++ clang/lib/Driver/ToolChains/HIPSPV.h @@ -66,8 +66,9 @@ llvm::opt::ArgStringList &CC1Args) const override; void AddIAMCUIncludeArgs(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const override; - void AddHIPIncludeArgs(const llvm::opt::ArgList &DriverArgs, - llvm::opt::ArgStringList &CC1Args) const override; + std::string AddHIPWrapperArgsAndGetIncludePath( + const llvm::opt::ArgList &DriverArgs, + llvm::opt::ArgStringList &CC1Args) const override; llvm::SmallVector<BitCodeLibraryInfo, 12> getHIPDeviceLibs(const llvm::opt::ArgList &Args) const override; Index: clang/lib/Driver/ToolChains/HIPSPV.cpp =================================================================== --- clang/lib/Driver/ToolChains/HIPSPV.cpp +++ clang/lib/Driver/ToolChains/HIPSPV.cpp @@ -190,19 +190,21 @@ HostTC.AddIAMCUIncludeArgs(Args, CC1Args); } -void HIPSPVToolChain::AddHIPIncludeArgs(const ArgList &DriverArgs, - ArgStringList &CC1Args) const { +std::string HIPSPVToolChain::AddHIPWrapperArgsAndGetIncludePath( + const ArgList &DriverArgs, ArgStringList &CC1Args) const { if (DriverArgs.hasArg(options::OPT_nogpuinc)) - return; + return ""; StringRef hipPath = DriverArgs.getLastArgValue(options::OPT_hip_path_EQ); if (hipPath.empty()) { getDriver().Diag(diag::err_drv_hipspv_no_hip_path) << 1 << "'-nogpuinc'"; - return; + return ""; } + SmallString<128> P(hipPath); llvm::sys::path::append(P, "include"); - CC1Args.append({"-isystem", DriverArgs.MakeArgString(P)}); + + return P.c_str(); } llvm::SmallVector<ToolChain::BitCodeLibraryInfo, 12> Index: clang/lib/Driver/ToolChains/HIPAMD.h =================================================================== --- clang/lib/Driver/ToolChains/HIPAMD.h +++ clang/lib/Driver/ToolChains/HIPAMD.h @@ -69,8 +69,9 @@ llvm::opt::ArgStringList &CC1Args) const override; void AddIAMCUIncludeArgs(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const override; - void AddHIPIncludeArgs(const llvm::opt::ArgList &DriverArgs, - llvm::opt::ArgStringList &CC1Args) const override; + std::string AddHIPWrapperArgsAndGetIncludePath( + const llvm::opt::ArgList &DriverArgs, + llvm::opt::ArgStringList &CC1Args) const override; llvm::SmallVector<BitCodeLibraryInfo, 12> getHIPDeviceLibs(const llvm::opt::ArgList &Args) const override; Index: clang/lib/Driver/ToolChains/HIPAMD.cpp =================================================================== --- clang/lib/Driver/ToolChains/HIPAMD.cpp +++ clang/lib/Driver/ToolChains/HIPAMD.cpp @@ -268,9 +268,10 @@ HostTC.AddIAMCUIncludeArgs(Args, CC1Args); } -void HIPAMDToolChain::AddHIPIncludeArgs(const ArgList &DriverArgs, - ArgStringList &CC1Args) const { - RocmInstallation.AddHIPIncludeArgs(DriverArgs, CC1Args); +std::string HIPAMDToolChain::AddHIPWrapperArgsAndGetIncludePath( + const ArgList &DriverArgs, ArgStringList &CC1Args) const { + return RocmInstallation.AddHIPWrapperArgsAndGetIncludePath(DriverArgs, + CC1Args); } SanitizerMask HIPAMDToolChain::getSupportedSanitizers() const { Index: clang/lib/Driver/ToolChains/FreeBSD.h =================================================================== --- clang/lib/Driver/ToolChains/FreeBSD.h +++ clang/lib/Driver/ToolChains/FreeBSD.h @@ -68,8 +68,9 @@ llvm::opt::ArgStringList &CmdArgs) const override; void AddCudaIncludeArgs(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const override; - void AddHIPIncludeArgs(const llvm::opt::ArgList &DriverArgs, - llvm::opt::ArgStringList &CC1Args) const override; + std::string AddHIPWrapperArgsAndGetIncludePath( + const llvm::opt::ArgList &DriverArgs, + llvm::opt::ArgStringList &CC1Args) const override; llvm::ExceptionHandling GetExceptionModel(const llvm::opt::ArgList &Args) const override; Index: clang/lib/Driver/ToolChains/FreeBSD.cpp =================================================================== --- clang/lib/Driver/ToolChains/FreeBSD.cpp +++ clang/lib/Driver/ToolChains/FreeBSD.cpp @@ -441,9 +441,11 @@ CudaInstallation.AddCudaIncludeArgs(DriverArgs, CC1Args); } -void FreeBSD::AddHIPIncludeArgs(const ArgList &DriverArgs, - ArgStringList &CC1Args) const { - RocmInstallation.AddHIPIncludeArgs(DriverArgs, CC1Args); +std::string +FreeBSD::AddHIPWrapperArgsAndGetIncludePath(const ArgList &DriverArgs, + ArgStringList &CC1Args) const { + return RocmInstallation.AddHIPWrapperArgsAndGetIncludePath(DriverArgs, + CC1Args); } Tool *FreeBSD::buildAssembler() const { Index: clang/lib/Driver/ToolChains/Darwin.h =================================================================== --- clang/lib/Driver/ToolChains/Darwin.h +++ clang/lib/Driver/ToolChains/Darwin.h @@ -524,8 +524,9 @@ void AddCudaIncludeArgs(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const override; - void AddHIPIncludeArgs(const llvm::opt::ArgList &DriverArgs, - llvm::opt::ArgStringList &CC1Args) const override; + std::string AddHIPWrapperArgsAndGetIncludePath( + const llvm::opt::ArgList &DriverArgs, + llvm::opt::ArgStringList &CC1Args) const override; bool UseObjCMixedDispatch() const override { // This is only used with the non-fragile ABI and non-legacy dispatch. Index: clang/lib/Driver/ToolChains/Darwin.cpp =================================================================== --- clang/lib/Driver/ToolChains/Darwin.cpp +++ clang/lib/Driver/ToolChains/Darwin.cpp @@ -906,9 +906,11 @@ CudaInstallation.AddCudaIncludeArgs(DriverArgs, CC1Args); } -void Darwin::AddHIPIncludeArgs(const ArgList &DriverArgs, - ArgStringList &CC1Args) const { - RocmInstallation.AddHIPIncludeArgs(DriverArgs, CC1Args); +std::string +Darwin::AddHIPWrapperArgsAndGetIncludePath(const ArgList &DriverArgs, + ArgStringList &CC1Args) const { + return RocmInstallation.AddHIPWrapperArgsAndGetIncludePath(DriverArgs, + CC1Args); } // This is just a MachO name translation routine and there's no Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -1283,8 +1283,10 @@ // from e.g. /usr/local/include. if (JA.isOffloading(Action::OFK_Cuda)) getToolChain().AddCudaIncludeArgs(Args, CmdArgs); + std::string HIPIncludePath; if (JA.isOffloading(Action::OFK_HIP)) - getToolChain().AddHIPIncludeArgs(Args, CmdArgs); + HIPIncludePath = + getToolChain().AddHIPWrapperArgsAndGetIncludePath(Args, CmdArgs); // If we are offloading to a target via OpenMP we need to include the // openmp_wrappers folder which contains alternative system headers. @@ -1463,6 +1465,11 @@ getToolChain().AddIAMCUIncludeArgs(Args, CmdArgs); } + if (!HIPIncludePath.empty()) { + CmdArgs.push_back("-internal-isystem"); + CmdArgs.push_back(Args.MakeArgString(HIPIncludePath)); + } + addMacroPrefixMapArg(D, Args, CmdArgs); addCoveragePrefixMapArg(D, Args, CmdArgs); } Index: clang/lib/Driver/ToolChains/AMDGPU.cpp =================================================================== --- clang/lib/Driver/ToolChains/AMDGPU.cpp +++ clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -483,8 +483,8 @@ << DetectedVersion << '\n'; } -void RocmInstallationDetector::AddHIPIncludeArgs(const ArgList &DriverArgs, - ArgStringList &CC1Args) const { +std::string RocmInstallationDetector::AddHIPWrapperArgsAndGetIncludePath( + const ArgList &DriverArgs, ArgStringList &CC1Args) const { bool UsesRuntimeWrapper = VersionMajorMinor > llvm::VersionTuple(3, 5) && !DriverArgs.hasArg(options::OPT_nohipwrapperinc); @@ -510,17 +510,17 @@ } if (DriverArgs.hasArg(options::OPT_nogpuinc)) - return; + return ""; if (!hasHIPRuntime()) { D.Diag(diag::err_drv_no_hip_runtime); - return; + return ""; } - CC1Args.push_back("-internal-isystem"); - CC1Args.push_back(DriverArgs.MakeArgString(getIncludePath())); if (UsesRuntimeWrapper) CC1Args.append({"-include", "__clang_hip_runtime_wrapper.h"}); + + return getIncludePath().str(); } void amdgpu::Linker::ConstructJob(Compilation &C, const JobAction &JA, Index: clang/lib/Driver/ToolChain.cpp =================================================================== --- clang/lib/Driver/ToolChain.cpp +++ clang/lib/Driver/ToolChain.cpp @@ -1045,8 +1045,11 @@ void ToolChain::AddCudaIncludeArgs(const ArgList &DriverArgs, ArgStringList &CC1Args) const {} -void ToolChain::AddHIPIncludeArgs(const ArgList &DriverArgs, - ArgStringList &CC1Args) const {} +std::string +ToolChain::AddHIPWrapperArgsAndGetIncludePath(const ArgList &DriverArgs, + ArgStringList &CC1Args) const { + return ""; +} llvm::SmallVector<ToolChain::BitCodeLibraryInfo, 12> ToolChain::getHIPDeviceLibs(const ArgList &DriverArgs) const { Index: clang/include/clang/Driver/ToolChain.h =================================================================== --- clang/include/clang/Driver/ToolChain.h +++ clang/include/clang/Driver/ToolChain.h @@ -681,8 +681,9 @@ llvm::opt::ArgStringList &CC1Args) const; /// Add arguments to use system-specific HIP includes. - virtual void AddHIPIncludeArgs(const llvm::opt::ArgList &DriverArgs, - llvm::opt::ArgStringList &CC1Args) const; + virtual std::string + AddHIPWrapperArgsAndGetIncludePath(const llvm::opt::ArgList &DriverArgs, + llvm::opt::ArgStringList &CC1Args) const; /// Add arguments to use MCU GCC toolchain includes. virtual void AddIAMCUIncludeArgs(const llvm::opt::ArgList &DriverArgs,
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits