xref: /libCEED/julia/LibCEED.jl/src/C.jl (revision 6c6044755ff91cefef5da44fde896bd53fec652f)
1# Low-level C API for libCEED
2
3module C
4
5using Libdl, libCEED_jll
6
7const UINT_MAX = typemax(Cuint)
8include(joinpath(@__DIR__, "generated", "libceed_bindings.jl"))
9
10const CEED_STRIDES_BACKEND = Ref{Ptr{CeedInt}}()
11const CEED_BASIS_COLLOCATED = Ref{CeedBasis}()
12const CEED_VECTOR_ACTIVE = Ref{CeedVector}()
13const CEED_VECTOR_NONE = Ref{CeedVector}()
14const CEED_ELEMRESTRICTION_NONE = Ref{CeedElemRestriction}()
15const CEED_QFUNCTION_NONE = Ref{CeedQFunction}()
16const CEED_REQUEST_IMMEDIATE = Ref{CeedRequest}()
17const CEED_REQUEST_ORDERED = Ref{CeedRequest}()
18
19function __init__()
20    global libceed_handle = dlopen(libceed)
21    # some global variables
22    CEED_STRIDES_BACKEND[] = cglobal((:CEED_STRIDES_BACKEND, libceed))
23    CEED_BASIS_COLLOCATED[] =
24        unsafe_load(cglobal((:CEED_BASIS_COLLOCATED, libceed), CeedBasis))
25    CEED_VECTOR_ACTIVE[] = unsafe_load(cglobal((:CEED_VECTOR_ACTIVE, libceed), CeedVector))
26    CEED_VECTOR_NONE[] = unsafe_load(cglobal((:CEED_VECTOR_NONE, libceed), CeedVector))
27    CEED_ELEMRESTRICTION_NONE[] =
28        unsafe_load(cglobal((:CEED_ELEMRESTRICTION_NONE, libceed), CeedElemRestriction))
29    CEED_QFUNCTION_NONE[] =
30        unsafe_load(cglobal((:CEED_QFUNCTION_NONE, libceed), CeedQFunction))
31    CEED_REQUEST_IMMEDIATE[] =
32        unsafe_load(cglobal((:CEED_REQUEST_IMMEDIATE, libceed), Ptr{CeedRequest}))
33    CEED_REQUEST_ORDERED[] =
34        unsafe_load(cglobal((:CEED_REQUEST_ORDERED, libceed), Ptr{CeedRequest}))
35end
36
37end # module
38