1*9ba83ac0SJeremy L Thompson // Copyright (c) 2017-2026, Lawrence Livermore National Security, LLC and other CEED contributors.
2bd882c8aSJames Wright // All Rights Reserved. See the top-level LICENSE and NOTICE files for details.
3bd882c8aSJames Wright //
4bd882c8aSJames Wright // SPDX-License-Identifier: BSD-2-Clause
5bd882c8aSJames Wright //
6bd882c8aSJames Wright // This file is part of CEED: http://github.com/ceed
7509d4af6SJeremy L Thompson #pragma once
8bd882c8aSJames Wright
9bd882c8aSJames Wright #include <ceed/backend.h>
10bd882c8aSJames Wright #include <ceed/jit-source/sycl/sycl-types.h>
11bd882c8aSJames Wright
12bd882c8aSJames Wright #include <sycl/sycl.hpp>
13bd882c8aSJames Wright #include <type_traits>
14bd882c8aSJames Wright
15bd882c8aSJames Wright #define CeedCallSycl(ceed, ...) \
16bd882c8aSJames Wright do { \
17bd882c8aSJames Wright try { \
18bd882c8aSJames Wright __VA_ARGS__; \
19bd882c8aSJames Wright } catch (sycl::exception const &e) { \
20bd882c8aSJames Wright return CeedError((ceed), CEED_ERROR_BACKEND, e.what()); \
21bd882c8aSJames Wright } \
22bd882c8aSJames Wright } while (0);
23bd882c8aSJames Wright
24bd882c8aSJames Wright using CeedBackendFunction = int (*)();
25bd882c8aSJames Wright
26bd882c8aSJames Wright template <typename R, class... Args>
CeedSetBackendFunctionCpp(Ceed ceed,const char * type,void * object,const char * fname,R (* f)(Args...))27bd882c8aSJames Wright int CeedSetBackendFunctionCpp(Ceed ceed, const char *type, void *object, const char *fname, R (*f)(Args...)) {
28bd882c8aSJames Wright static_assert(std::is_same_v<int, R>, "Ceed backend functions must return int");
29bd882c8aSJames Wright // Kris: this is potentially undefined behavior by C++ standards
30bd882c8aSJames Wright auto *bf = reinterpret_cast<CeedBackendFunction>(f);
31bd882c8aSJames Wright return CeedSetBackendFunction(ceed, type, object, fname, bf);
32bd882c8aSJames Wright }
33bd882c8aSJames Wright
34bd882c8aSJames Wright typedef struct {
35bd882c8aSJames Wright sycl::context sycl_context;
36bd882c8aSJames Wright sycl::device sycl_device;
37bd882c8aSJames Wright sycl::queue sycl_queue;
38bd882c8aSJames Wright } Ceed_Sycl;
39bd882c8aSJames Wright
40eb7e6cafSJeremy L Thompson CEED_INTERN int CeedInit_Sycl(Ceed ceed, const char *resource);
41bd882c8aSJames Wright
42bd882c8aSJames Wright CEED_INTERN int CeedDestroy_Sycl(Ceed ceed);
43bd882c8aSJames Wright
449ffb25e0SJames Wright CEED_INTERN int CeedSetStream_Sycl(Ceed ceed, void *handle);
45