66//
77// ===----------------------------------------------------------------------===//
88
9- #define __SYCL_ONLINE_COMPILER_CPP
10-
119#include < sycl/detail/os_util.hpp>
1210#include < sycl/detail/ur.hpp>
1311#include < sycl/ext/intel/experimental/online_compiler.hpp>
@@ -21,11 +19,9 @@ inline namespace _V1 {
2119namespace ext ::intel::experimental {
2220namespace detail {
2321
24- using namespace sycl ::detail;
25-
2622static std::vector<const char *>
2723prepareOclocArgs (sycl::info::device_type DeviceType, device_arch DeviceArch,
28- bool Is64Bit, string_view DeviceStepping,
24+ bool Is64Bit, const std::string & DeviceStepping,
2925 const std::string &UserArgs) {
3026 std::vector<const char *> Args = {" ocloc" , " -q" , " -spv_only" , " -device" };
3127
@@ -58,7 +54,7 @@ prepareOclocArgs(sycl::info::device_type DeviceType, device_arch DeviceArch,
5854
5955 if (DeviceStepping != " " ) {
6056 Args.push_back (" -revision_id" );
61- Args.push_back (DeviceStepping.data ());
57+ Args.push_back (DeviceStepping.c_str ());
6258 }
6359
6460 Args.push_back (Is64Bit ? " -64" : " -32" );
@@ -86,11 +82,11 @@ prepareOclocArgs(sycl::info::device_type DeviceType, device_arch DeviceArch,
8682// / allocated during the compilation.
8783// / @param UserArgs - User's options to ocloc compiler.
8884static std::vector<byte>
89- compileToSPIRV (string_view Src, sycl::info::device_type DeviceType,
90- device_arch DeviceArch, bool Is64Bit, string_view DeviceStepping,
91- void *&CompileToSPIRVHandle, void *&FreeSPIRVOutputsHandle,
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,
9289 const std::vector<std::string> &UserArgs) {
93- std::string Source{Src.data ()};
9490
9591 if (!CompileToSPIRVHandle) {
9692#ifdef __SYCL_RT_OS_WINDOWS
@@ -202,10 +198,11 @@ compileToSPIRV(string_view Src, sycl::info::device_type DeviceType,
202198}
203199} // namespace detail
204200
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) {
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) {
209206
210207 if (OutputFormatVersion != std::pair<int , int >{0 , 0 }) {
211208 std::string Version = std::to_string (OutputFormatVersion.first ) + " , " +
@@ -214,27 +211,29 @@ __SYCL_EXPORT std::vector<byte> online_compiler<Lang>::compile_impl(
214211 Version + " ) is not supported yet" );
215212 }
216213
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,
214+ return detail::compileToSPIRV (Source, DeviceType, DeviceArch, Is64Bit,
225215 DeviceStepping, CompileToSPIRVHandle,
226216 FreeSPIRVOutputsHandle, UserArgs);
227217}
228218
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);
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) {
233223
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);
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+ }
238237} // namespace ext::intel::experimental
239238
240239namespace ext {
0 commit comments