From 5e5703f58449760eddf26e2c125fce50c6193c45 Mon Sep 17 00:00:00 2001 From: Viktoria Maximova Date: Tue, 1 Dec 2020 17:51:39 +0300 Subject: [PATCH] [SYCL] Allow multiple build options for opencl-aot (#2828) This patch adds handling of multiple build options if they were set separately. Covered by test from https://github.com/intel/llvm-test-suite/pull/58. Signed-off-by: Viktoria Maksimova --- opencl-aot/source/main.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/opencl-aot/source/main.cpp b/opencl-aot/source/main.cpp index 52202dbd2d6fd..1fc514c4b148a 100644 --- a/opencl-aot/source/main.cpp +++ b/opencl-aot/source/main.cpp @@ -299,9 +299,9 @@ int main(int Argc, char *Argv[]) { "o", cl::init("output.bin"), cl::desc("Specify the output OpenCL program binary filename"), cl::value_desc("filename")); - cl::opt OptBuildOptions("bo", - cl::desc("Set OpenCL build options"), - cl::value_desc("build options")); + cl::list OptBuildOptions("bo", cl::ZeroOrMore, + cl::desc("Set OpenCL build options"), + cl::value_desc("build options")); cl::ParseCommandLineOptions(Argc, Argv, "OpenCL ahead-of-time (AOT) compilation tool"); @@ -414,7 +414,12 @@ int main(int Argc, char *Argv[]) { CLProgramUPtr ProgramUPtr(std::move(Progs[0])); // step 7: set OpenCL build options - std::string BuildOptions = OptBuildOptions; + std::string BuildOptions; + if (!OptBuildOptions.empty()) { + for (const auto &BO : OptBuildOptions) + BuildOptions += BO + ' '; + } + auto ParentDir = sys::path::parent_path(OptInputBinary); if (!ParentDir.empty()) { BuildOptions += " -I \"" + std::string(ParentDir) + '\"'; @@ -422,8 +427,8 @@ int main(int Argc, char *Argv[]) { std::cout << "Using build options: " << BuildOptions << '\n'; // step 8: build OpenCL program - CLErr = clBuildProgram(ProgramUPtr.get(), 1, &DeviceId, - OptBuildOptions.c_str(), nullptr, nullptr); + CLErr = clBuildProgram(ProgramUPtr.get(), 1, &DeviceId, BuildOptions.c_str(), + nullptr, nullptr); std::string CompilerBuildLog; std::tie(CompilerBuildLog, ErrorMessage, std::ignore) =