Skip to content

Commit 91e9c76

Browse files
authored
[Driver][SYCL][FPGA] generated dep files for AOT should be picked up in CWD(#1336)
When adding the .d files to be picked up by the aoc tool call, the generated .d files are created in CWD when the input file is in CWD/dir/file.cpp. This was wrong where we assumed generation was in CWD/dir Signed-off-by: Michael D Toguchi <[email protected]>
1 parent 6ccd84a commit 91e9c76

File tree

2 files changed

+53
-35
lines changed

2 files changed

+53
-35
lines changed

clang/lib/Driver/ToolChains/SYCL.cpp

Lines changed: 34 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -232,20 +232,37 @@ void SYCL::fpga::BackendCompiler::ConstructJob(Compilation &C,
232232
ForeachExt = "aocr";
233233
}
234234

235+
StringRef createdReportName;
235236
for (auto *A : Args) {
236-
// Any input file is assumed to have a dependency file associated
237-
if (A->getOption().getKind() == Option::InputClass) {
238-
SmallString<128> FN(A->getSpelling());
239-
StringRef Ext(llvm::sys::path::extension(FN));
240-
if (!Ext.empty()) {
241-
types::ID Ty = getToolChain().LookupTypeForExtension(Ext.drop_front());
242-
if (Ty == types::TY_INVALID)
243-
continue;
244-
if (types::isSrcFile(Ty)) {
245-
llvm::sys::path::replace_extension(FN, "d");
246-
FPGADepFiles.push_back(InputInfo(types::TY_Dependencies,
247-
Args.MakeArgString(FN), Args.MakeArgString(FN)));
248-
}
237+
// Any input file is assumed to have a dependency file associated and
238+
// the report folder can also be named based on the first input.
239+
if (A->getOption().getKind() != Option::InputClass)
240+
continue;
241+
SmallString<128> ArgName(A->getSpelling());
242+
StringRef Ext(llvm::sys::path::extension(ArgName));
243+
if (Ext.empty())
244+
continue;
245+
types::ID Ty = getToolChain().LookupTypeForExtension(Ext.drop_front());
246+
if (Ty == types::TY_INVALID)
247+
continue;
248+
if (types::isSrcFile(Ty) || Ty == types::TY_Object) {
249+
// Dependency files and the project report are created in CWD, so strip
250+
// off any directory information if provided with the input file.
251+
// TODO - Use temporary files for dependency file creation and
252+
// usage with -fintelfpga.
253+
ArgName = llvm::sys::path::filename(ArgName);
254+
if (types::isSrcFile(Ty)) {
255+
SmallString<128> DepName(ArgName);
256+
llvm::sys::path::replace_extension(DepName, "d");
257+
FPGADepFiles.push_back(InputInfo(types::TY_Dependencies,
258+
Args.MakeArgString(DepName),
259+
Args.MakeArgString(DepName)));
260+
}
261+
if (createdReportName.empty()) {
262+
// Project report should be saved into CWD, so strip off any
263+
// directory information if provided with the input file.
264+
llvm::sys::path::replace_extension(ArgName, "prj");
265+
createdReportName = Args.MakeArgString(ArgName);
249266
}
250267
}
251268
}
@@ -270,26 +287,10 @@ void SYCL::fpga::BackendCompiler::ConstructJob(Compilation &C,
270287
const char * FolderName = Args.MakeArgString(FN);
271288
ReportOptArg += FolderName;
272289
} else {
273-
// Output directory is based off of the first object name
274-
for (Arg * Cur : Args) {
275-
if (Cur->getOption().getKind() != Option::InputClass)
276-
continue;
277-
SmallString<128> ArgName = Cur->getSpelling();
278-
StringRef Ext(llvm::sys::path::extension(ArgName));
279-
if (Ext.empty())
280-
continue;
281-
types::ID Ty = getToolChain().LookupTypeForExtension(Ext.drop_front());
282-
if (Ty == types::TY_INVALID)
283-
continue;
284-
if (types::isSrcFile(Ty) || Ty == types::TY_Object) {
285-
// Project report should be saved into CWD, so strip off any
286-
// directory information if provided with the input file.
287-
ArgName = llvm::sys::path::filename(ArgName);
288-
llvm::sys::path::replace_extension(ArgName, "prj");
289-
ReportOptArg += Args.MakeArgString(ArgName);
290-
break;
291-
}
292-
}
290+
// Output directory is based off of the first object name as captured
291+
// above.
292+
if (!createdReportName.empty())
293+
ReportOptArg += createdReportName;
293294
}
294295
if (!ReportOptArg.empty())
295296
CmdArgs.push_back(C.getArgs().MakeArgString(

clang/test/Driver/sycl-offload-intelfpga.cpp

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -251,14 +251,31 @@
251251
// CHK-FPGA-REPORT-OPT: aoc{{.*}} "-sycl" {{.*}} "-output-report-folder=[[OUTDIR]]{{/|\\\\}}file.prj"
252252

253253
/// -fintelfpga output report file from dir/source
254+
/// check dependency file from dir/source
254255
// RUN: mkdir -p %t_dir
255256
// RUN: touch %t_dir/dummy.cpp
256257
// RUN: %clangxx -### -fsycl -fintelfpga %t_dir/dummy.cpp 2>&1 \
257258
// RUN: | FileCheck -DOUTDIR=%t_dir -check-prefix=CHK-FPGA-REPORT-OPT2 %s
258259
// RUN: %clang_cl -### -fsycl -fintelfpga %t_dir/dummy.cpp 2>&1 \
259260
// RUN: | FileCheck -DOUTDIR=%t_dir -check-prefix=CHK-FPGA-REPORT-OPT2 %s
260-
// CHK-FPGA-REPORT-OPT2: aoc{{.*}} "-sycl" {{.*}} "-output-report-folder=dummy.prj"
261-
// CHK-FPGA-REPORT-OPT2-NOT: aoc{{.*}} "-sycl" {{.*}} "-output-report-folder=[[OUTDIR]]{{.*}}"
261+
// CHK-FPGA-REPORT-OPT2: aoc{{.*}} "-sycl"{{.*}} "-dep-files=dummy.d" "-output-report-folder=dummy.prj"
262+
// CHK-FPGA-REPORT-OPT2-NOT: aoc{{.*}} "-sycl" {{.*}}[[OUTDIR]]{{.*}}
263+
264+
/// -fintelfpga output report file should be based on first input (src/obj)
265+
// RUN: mkdir -p %t_dir
266+
// RUN: touch %t_dir/dummy1.cpp
267+
// RUN: touch %t_dir/dummy2.cpp
268+
// RUN: touch %t_dir/dummy1.o
269+
// RUN: touch %t_dir/dummy2.o
270+
// RUN: %clangxx -### -fsycl -fintelfpga %t_dir/dummy2.o %t_dir/dummy1.cpp 2>&1 \
271+
// RUN: | FileCheck -check-prefix=CHK-FPGA-REPORT-NAME %s
272+
// RUN: %clangxx -### -fsycl -fintelfpga %t_dir/dummy2.cpp %t_dir/dummy1.o 2>&1 \
273+
// RUN: | FileCheck -check-prefix=CHK-FPGA-REPORT-NAME %s
274+
// RUN: %clang_cl -### -fsycl -fintelfpga %t_dir/dummy2.o %t_dir/dummy1.cpp 2>&1 \
275+
// RUN: | FileCheck -check-prefix=CHK-FPGA-REPORT-NAME %s
276+
// RUN: %clang_cl -### -fsycl -fintelfpga %t_dir/dummy2.cpp %t_dir/dummy1.o 2>&1 \
277+
// RUN: | FileCheck -check-prefix=CHK-FPGA-REPORT-NAME %s
278+
// CHK-FPGA-REPORT-NAME: aoc{{.*}} "-sycl"{{.*}} "-output-report-folder=dummy2.prj"
262279

263280
/// -fintelfpga static lib (aoco)
264281
// RUN: echo "Dummy AOCO image" > %t.aoco

0 commit comments

Comments
 (0)