From 861d0e5a58a2cea3b02f0911cb6281727220b188 Mon Sep 17 00:00:00 2001 From: Justin Lebar <jlebar@google.com> Date: Thu, 15 Dec 2016 18:44:57 +0000 Subject: [PATCH] [CUDA] Add --ptxas-path= flag. Summary: This lets you build with one CUDA installation but use ptxas from another install. This is useful e.g. if you want to avoid bugs in an old ptxas without actually upgrading wholesale to a newer CUDA version. Reviewers: tra Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D27788 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@289847 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Driver/Options.td | 2 ++ lib/Driver/Tools.cpp | 6 +++++- test/Driver/cuda-ptxas-path.cu | 12 ++++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 test/Driver/cuda-ptxas-path.cu diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td index 35e15ed8663..ead774a6788 100644 --- a/include/clang/Driver/Options.td +++ b/include/clang/Driver/Options.td @@ -425,6 +425,8 @@ def no_cuda_version_check : Flag<["--"], "no-cuda-version-check">, def no_cuda_noopt_device_debug : Flag<["--"], "no-cuda-noopt-device-debug">; def cuda_path_EQ : Joined<["--"], "cuda-path=">, Group<i_Group>, HelpText<"CUDA installation path">; +def ptxas_path_EQ : Joined<["--"], "ptxas-path=">, Group<i_Group>, + HelpText<"Path to ptxas (used for compiling CUDA code)">; def fcuda_flush_denormals_to_zero : Flag<["-"], "fcuda-flush-denormals-to-zero">, Flags<[CC1Option]>, HelpText<"Flush denormal floating point values to zero in CUDA device mode.">; def fno_cuda_flush_denormals_to_zero : Flag<["-"], "fno-cuda-flush-denormals-to-zero">; diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index dbe8cfb340f..253a25695fe 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -12105,7 +12105,11 @@ void NVPTX::Assembler::ConstructJob(Compilation &C, const JobAction &JA, for (const auto& A : Args.getAllArgValues(options::OPT_Xcuda_ptxas)) CmdArgs.push_back(Args.MakeArgString(A)); - const char *Exec = Args.MakeArgString(TC.GetProgramPath("ptxas")); + const char *Exec; + if (Arg *A = Args.getLastArg(options::OPT_ptxas_path_EQ)) + Exec = A->getValue(); + else + Exec = Args.MakeArgString(TC.GetProgramPath("ptxas")); C.addCommand(llvm::make_unique<Command>(JA, *this, Exec, CmdArgs, Inputs)); } diff --git a/test/Driver/cuda-ptxas-path.cu b/test/Driver/cuda-ptxas-path.cu new file mode 100644 index 00000000000..3ac5932b067 --- /dev/null +++ b/test/Driver/cuda-ptxas-path.cu @@ -0,0 +1,12 @@ +// REQUIRES: clang-driver +// REQUIRES: x86-registered-target +// REQUIRES: nvptx-registered-target + +// RUN: %clang -### --target=i386-unknown-linux \ +// RUN: --cuda-path=%S/Inputs/CUDA_80/usr/local/cuda \ +// RUN: --ptxas-path=/some/path/to/ptxas %s 2>&1 \ +// RUN: | FileCheck %s + +// CHECK-NOT: "ptxas" +// CHECK: "/some/path/to/ptxas" +// CHECK-SAME: "--gpu-name" "sm_20" -- GitLab