66//
77// ===----------------------------------------------------------------------===//
88
9+ #define __SYCL_ONLINE_COMPILER_CPP
10+
911#include < sycl/detail/os_util.hpp>
1012#include < sycl/detail/ur.hpp>
1113#include < sycl/ext/intel/experimental/online_compiler.hpp>
@@ -19,9 +21,11 @@ inline namespace _V1 {
1921namespace ext ::intel::experimental {
2022namespace detail {
2123
24+ using namespace sycl ::detail;
25+
2226static std::vector<const char *>
2327prepareOclocArgs (sycl::info::device_type DeviceType, device_arch DeviceArch,
24- bool Is64Bit, const std::string & DeviceStepping,
28+ bool Is64Bit, string_view DeviceStepping,
2529 const std::string &UserArgs) {
2630 std::vector<const char *> Args = {" ocloc" , " -q" , " -spv_only" , " -device" };
2731
@@ -54,7 +58,7 @@ prepareOclocArgs(sycl::info::device_type DeviceType, device_arch DeviceArch,
5458
5559 if (DeviceStepping != " " ) {
5660 Args.push_back (" -revision_id" );
57- Args.push_back (DeviceStepping.c_str ());
61+ Args.push_back (DeviceStepping.data ());
5862 }
5963
6064 Args.push_back (Is64Bit ? " -64" : " -32" );
@@ -82,11 +86,11 @@ prepareOclocArgs(sycl::info::device_type DeviceType, device_arch DeviceArch,
8286// / allocated during the compilation.
8387// / @param UserArgs - User's options to ocloc compiler.
8488static std::vector<byte>
85- compileToSPIRV (const std::string &Source, sycl::info::device_type DeviceType,
86- device_arch DeviceArch, bool Is64Bit,
87- const std::string &DeviceStepping, void *&CompileToSPIRVHandle,
88- void *&FreeSPIRVOutputsHandle,
89+ compileToSPIRV (string_view Src, sycl::info::device_type DeviceType,
90+ device_arch DeviceArch, bool Is64Bit, string_view DeviceStepping,
91+ void *&CompileToSPIRVHandle, void *&FreeSPIRVOutputsHandle,
8992 const std::vector<std::string> &UserArgs) {
93+ std::string Source{Src.data ()};
9094
9195 if (!CompileToSPIRVHandle) {
9296#ifdef __SYCL_RT_OS_WINDOWS
@@ -198,11 +202,10 @@ compileToSPIRV(const std::string &Source, sycl::info::device_type DeviceType,
198202}
199203} // namespace detail
200204
201- template <>
202- template <>
203- __SYCL_EXPORT std::vector<byte>
204- online_compiler<source_language::opencl_c>::compile(
205- const std::string &Source, const std::vector<std::string> &UserArgs) {
205+ template <source_language Lang>
206+ __SYCL_EXPORT std::vector<byte> online_compiler<Lang>::compile_impl(
207+ detail::string_view Src, detail::string_view DeviceStepping,
208+ const std::vector<detail::string_view> &Options) {
206209
207210 if (OutputFormatVersion != std::pair<int , int >{0 , 0 }) {
208211 std::string Version = std::to_string (OutputFormatVersion.first ) + " , " +
@@ -211,29 +214,27 @@ online_compiler<source_language::opencl_c>::compile(
211214 Version + " ) is not supported yet" );
212215 }
213216
214- return detail::compileToSPIRV (Source, DeviceType, DeviceArch, Is64Bit,
217+ std::vector<std::string> UserArgs;
218+ for (auto &&Opt : Options)
219+ UserArgs.emplace_back (Opt.data ());
220+
221+ if constexpr (Lang == source_language::cm)
222+ UserArgs.push_back (" -cmc" );
223+
224+ return detail::compileToSPIRV (Src, DeviceType, DeviceArch, Is64Bit,
215225 DeviceStepping, CompileToSPIRVHandle,
216226 FreeSPIRVOutputsHandle, UserArgs);
217227}
218228
219- template < >
220- template <>
221- __SYCL_EXPORT std::vector<byte> online_compiler<source_language::cm>::compile(
222- const std::string &Source, const std:: vector<std::string > &UserArgs) {
229+ template __SYCL_EXPORT std::vector<byte >
230+ online_compiler<source_language::opencl_c>::compile_impl(
231+ detail::string_view Src, detail::string_view DeviceStepping,
232+ const std::vector<detail::string_view > &Options);
223233
224- if (OutputFormatVersion != std::pair<int , int >{0 , 0 }) {
225- std::string Version = std::to_string (OutputFormatVersion.first ) + " , " +
226- std::to_string (OutputFormatVersion.second );
227- throw online_compile_error (std::string (" The output format version (" ) +
228- Version + " ) is not supported yet" );
229- }
230-
231- std::vector<std::string> CMUserArgs = UserArgs;
232- CMUserArgs.push_back (" -cmc" );
233- return detail::compileToSPIRV (Source, DeviceType, DeviceArch, Is64Bit,
234- DeviceStepping, CompileToSPIRVHandle,
235- FreeSPIRVOutputsHandle, CMUserArgs);
236- }
234+ template __SYCL_EXPORT std::vector<byte>
235+ online_compiler<source_language::cm>::compile_impl(
236+ detail::string_view Src, detail::string_view DeviceStepping,
237+ const std::vector<detail::string_view> &Options);
237238} // namespace ext::intel::experimental
238239
239240namespace ext {
0 commit comments