Skip to content

Commit

Permalink
[Driver][SYCL] Improve tool name specification for AOT tools on Windo…
Browse files Browse the repository at this point in the history
…ws (#2389)

For Windows, we need to be sure to search for the full executable name
as opposed to just the case name for the AOT tools (aoc, ocloc, opencl-aot).
There can be instances of directory names of the same name, causing the
wrong 'binary' to be called.
  • Loading branch information
mdtoguchi authored Sep 3, 2020
1 parent 9dda36f commit 78a86da
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 3 deletions.
16 changes: 13 additions & 3 deletions clang/lib/Driver/ToolChains/SYCL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,13 @@ void SYCL::Linker::ConstructJob(Compilation &C, const JobAction &JA,
SpirvInputs);
}

static const char *makeExeName(Compilation &C, StringRef Name) {
llvm::SmallString<8> ExeName(Name);
if (C.getDriver().IsCLMode())
ExeName.append(".exe");
return C.getArgs().MakeArgString(ExeName);
}

void SYCL::fpga::BackendCompiler::ConstructJob(Compilation &C,
const JobAction &JA,
const InputInfo &Output,
Expand Down Expand Up @@ -313,7 +320,8 @@ void SYCL::fpga::BackendCompiler::ConstructJob(Compilation &C,
CmdArgs.push_back(Args.MakeArgString(A->getAsString(Args)));
}

SmallString<128> ExecPath(getToolChain().GetProgramPath("aoc"));
SmallString<128> ExecPath(
getToolChain().GetProgramPath(makeExeName(C, "aoc")));
const char *Exec = C.getArgs().MakeArgString(ExecPath);
auto Cmd = std::make_unique<Command>(
JA, *this, ResponseFileSupport::None(), Exec, CmdArgs, None);
Expand Down Expand Up @@ -350,7 +358,8 @@ void SYCL::gen::BackendCompiler::ConstructJob(Compilation &C,
static_cast<const toolchains::SYCLToolChain &>(getToolChain());
TC.TranslateBackendTargetArgs(Args, CmdArgs);
TC.TranslateLinkerTargetArgs(Args, CmdArgs);
SmallString<128> ExecPath(getToolChain().GetProgramPath("ocloc"));
SmallString<128> ExecPath(
getToolChain().GetProgramPath(makeExeName(C, "ocloc")));
const char *Exec = C.getArgs().MakeArgString(ExecPath);
auto Cmd = std::make_unique<Command>(
JA, *this, ResponseFileSupport::None(), Exec, CmdArgs, None);
Expand Down Expand Up @@ -383,7 +392,8 @@ void SYCL::x86_64::BackendCompiler::ConstructJob(Compilation &C,

TC.TranslateBackendTargetArgs(Args, CmdArgs);
TC.TranslateLinkerTargetArgs(Args, CmdArgs);
SmallString<128> ExecPath(getToolChain().GetProgramPath("opencl-aot"));
SmallString<128> ExecPath(
getToolChain().GetProgramPath(makeExeName(C, "opencl-aot")));
const char *Exec = C.getArgs().MakeArgString(ExecPath);
auto Cmd = std::make_unique<Command>(
JA, *this, ResponseFileSupport::None(), Exec, CmdArgs, None);
Expand Down
11 changes: 11 additions & 0 deletions clang/test/Driver/sycl-offload.c
Original file line number Diff line number Diff line change
Expand Up @@ -686,6 +686,17 @@
// CHK-TOOLS-AOT: clang{{.*}} "-triple" "x86_64-unknown-linux-gnu" {{.*}} "-include" "[[INPUT1]]" {{.*}} "-o" "[[OUTPUT7:.+\.o]]"
// CHK-TOOLS-AOT: ld{{.*}} "[[OUTPUT7]]" "[[OUTPUT6]]" {{.*}} "-lsycl"

// Check to be sure that for windows, the 'exe' tools are called
// RUN: %clang_cl -fsycl -fsycl-targets=spir64_x86_64-unknown-unknown-sycldevice %s -### 2>&1 \
// RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-CPU-WIN
// RUN: %clang_cl -fsycl -fsycl-targets=spir64_gen-unknown-unknown-sycldevice %s -### 2>&1 \
// RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-GEN-WIN
// RUN: %clang_cl -fsycl -fsycl-targets=spir64_fpga-unknown-unknown-sycldevice %s -### 2>&1 \
// RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-FPGA-WIN
// CHK-TOOLS-GEN-WIN: ocloc.exe{{.*}}
// CHK-TOOLS-CPU-WIN: opencl-aot.exe{{.*}}
// CHK-TOOLS-FPGA-WIN: aoc.exe{{.*}}

/// ###########################################################################

/// Check -Xsycl-target-backend option passing
Expand Down

0 comments on commit 78a86da

Please sign in to comment.