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> 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