Skip to content

Commit 7a8fa1a

Browse files
authored
[SYCL] Fix link and compile options (#5741)
1 parent 7bf09d3 commit 7a8fa1a

File tree

1 file changed

+22
-8
lines changed

1 file changed

+22
-8
lines changed

sycl/source/detail/program_manager/program_manager.cpp

+22-8
Original file line numberDiff line numberDiff line change
@@ -417,22 +417,32 @@ static void applyOptionsFromImage(std::string &CompileOpts,
417417
appendLinkOptionsFromImage(LinkOpts, Img);
418418
}
419419

420-
static void applyOptionsFromEnvironment(std::string &CompileOpts,
421-
std::string &LinkOpts) {
422-
// Build options are overridden if environment variables are present.
420+
static void applyCompileOptionsFromEnvironment(std::string &CompileOpts) {
423421
// Environment variables are not changed during program lifecycle so it
424422
// is reasonable to use static here to read them only once.
425423
static const char *CompileOptsEnv =
426424
SYCLConfig<SYCL_PROGRAM_COMPILE_OPTIONS>::get();
427425
if (CompileOptsEnv) {
428426
CompileOpts = CompileOptsEnv;
429427
}
428+
}
429+
430+
static void applyLinkOptionsFromEnvironment(std::string &LinkOpts) {
431+
// Environment variables are not changed during program lifecycle so it
432+
// is reasonable to use static here to read them only once.
430433
static const char *LinkOptsEnv = SYCLConfig<SYCL_PROGRAM_LINK_OPTIONS>::get();
431434
if (LinkOptsEnv) {
432435
LinkOpts = LinkOptsEnv;
433436
}
434437
}
435438

439+
static void applyOptionsFromEnvironment(std::string &CompileOpts,
440+
std::string &LinkOpts) {
441+
// Build options are overridden if environment variables are present.
442+
applyCompileOptionsFromEnvironment(CompileOpts);
443+
applyLinkOptionsFromEnvironment(LinkOpts);
444+
}
445+
436446
std::pair<RT::PiProgram, bool> ProgramManager::getOrCreatePIProgram(
437447
const RTDeviceBinaryImage &Img, const context &Context,
438448
const device &Device, const std::string &CompileAndLinkOptions,
@@ -1695,6 +1705,7 @@ ProgramManager::compile(const device_image_plain &DeviceImage,
16951705

16961706
// TODO: Handle zero sized Device list.
16971707
std::string CompileOptions;
1708+
applyCompileOptionsFromEnvironment(CompileOptions);
16981709
appendCompileOptionsFromImage(CompileOptions,
16991710
*(InputImpl->get_bin_image_ref()));
17001711
RT::PiResult Error = Plugin.call_nocheck<PiApiKind::piProgramCompile>(
@@ -1729,11 +1740,14 @@ ProgramManager::link(const std::vector<device_image_plain> &DeviceImages,
17291740
PIDevices.push_back(getSyclObjImpl(Dev)->getHandleRef());
17301741

17311742
std::string LinkOptionsStr;
1732-
for (const device_image_plain &DeviceImage : DeviceImages) {
1733-
const std::shared_ptr<device_image_impl> &InputImpl =
1734-
getSyclObjImpl(DeviceImage);
1735-
appendLinkOptionsFromImage(LinkOptionsStr,
1736-
*(InputImpl->get_bin_image_ref()));
1743+
applyLinkOptionsFromEnvironment(LinkOptionsStr);
1744+
if (LinkOptionsStr.empty()) {
1745+
for (const device_image_plain &DeviceImage : DeviceImages) {
1746+
const std::shared_ptr<device_image_impl> &InputImpl =
1747+
getSyclObjImpl(DeviceImage);
1748+
appendLinkOptionsFromImage(LinkOptionsStr,
1749+
*(InputImpl->get_bin_image_ref()));
1750+
}
17371751
}
17381752
const context &Context = getSyclObjImpl(DeviceImages[0])->get_context();
17391753
const ContextImplPtr ContextImpl = getSyclObjImpl(Context);

0 commit comments

Comments
 (0)