Skip to content

Commit 2c217cf

Browse files
npmillerdwoodwor-intel
authored andcommitted
[SYCL] Fix file names in SYCL toolchain
In a recent patch clang was aligned with OpenMP to rename CUDA fat-binaries to `.cubin` files rather than `.o` files. To get the correct filenames use `getInputFilename` from the toolchain object.
1 parent 04fed93 commit 2c217cf

File tree

1 file changed

+12
-10
lines changed

1 file changed

+12
-10
lines changed

clang/lib/Driver/ToolChains/SYCL.cpp

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,10 @@ void SYCL::constructLLVMForeachCommand(Compilation &C, const JobAction &JA,
6868
// The llvm-foreach command looks like this:
6969
// llvm-foreach --in-file-list=a.list --in-replace='{}' -- echo '{}'
7070
ArgStringList ForeachArgs;
71-
std::string OutputFileName(Output.getFilename());
71+
std::string OutputFileName(T->getToolChain().getInputFilename(Output));
7272
ForeachArgs.push_back(C.getArgs().MakeArgString("--out-ext=" + Ext));
7373
for (auto &I : InputFiles) {
74-
std::string Filename(I.getFilename());
74+
std::string Filename(T->getToolChain().getInputFilename(I));
7575
ForeachArgs.push_back(
7676
C.getArgs().MakeArgString("--in-file-list=" + Filename));
7777
ForeachArgs.push_back(
@@ -162,14 +162,14 @@ const char *SYCL::Linker::constructLLVMLinkCommand(
162162
// an actual object/archive. Take that list and pass those to the linker
163163
// instead of the original object.
164164
if (JA.isDeviceOffloading(Action::OFK_SYCL)) {
165-
auto isSYCLDeviceLib = [&C](const InputInfo &II) {
165+
auto isSYCLDeviceLib = [&C, this](const InputInfo &II) {
166166
const ToolChain *HostTC = C.getSingleOffloadToolChain<Action::OFK_Host>();
167167
StringRef LibPostfix = ".o";
168168
if (HostTC->getTriple().isWindowsMSVCEnvironment() &&
169169
C.getDriver().IsCLMode())
170170
LibPostfix = ".obj";
171-
StringRef InputFilename =
172-
llvm::sys::path::filename(StringRef(II.getFilename()));
171+
StringRef InputFilename = llvm::sys::path::filename(
172+
StringRef(this->getToolChain().getInputFilename(II)));
173173
StringRef LibSyclPrefix("libsycl-");
174174
if (!InputFilename.startswith(LibSyclPrefix) ||
175175
!InputFilename.endswith(LibPostfix) || (InputFilename.count('-') < 2))
@@ -193,18 +193,19 @@ const char *SYCL::Linker::constructLLVMLinkCommand(
193193
if (LinkSYCLDeviceLibs)
194194
Opts.push_back("-only-needed");
195195
for (const auto &II : InputFiles) {
196+
std::string FileName = getToolChain().getInputFilename(II);
196197
if (II.getType() == types::TY_Tempfilelist) {
197198
// Pass the unbundled list with '@' to be processed.
198-
std::string FileName(II.getFilename());
199199
Libs.push_back(C.getArgs().MakeArgString("@" + FileName));
200200
} else if (II.getType() == types::TY_Archive && !LinkSYCLDeviceLibs) {
201-
Libs.push_back(II.getFilename());
201+
Libs.push_back(C.getArgs().MakeArgString(FileName));
202202
} else
203-
Objs.push_back(II.getFilename());
203+
Objs.push_back(C.getArgs().MakeArgString(FileName));
204204
}
205205
} else
206206
for (const auto &II : InputFiles)
207-
Objs.push_back(II.getFilename());
207+
Objs.push_back(
208+
C.getArgs().MakeArgString(getToolChain().getInputFilename(II)));
208209

209210
// Get llvm-link path.
210211
SmallString<128> ExecPath(C.getDriver().Dir);
@@ -227,7 +228,8 @@ const char *SYCL::Linker::constructLLVMLinkCommand(
227228
};
228229

229230
// Add an intermediate output file.
230-
const char *OutputFileName = Output.getFilename();
231+
const char *OutputFileName =
232+
C.getArgs().MakeArgString(getToolChain().getInputFilename(Output));
231233

232234
if (Libs.empty())
233235
AddLinkCommand(OutputFileName, Objs, Opts);

0 commit comments

Comments
 (0)