xref: /libCEED/julia/LibCEED.jl/src/C.jl (revision 3446d1b5ce8d1a4e72ebab9baee4f1efd0361227)
1# Low-level C API for libCEED
2
3module C
4
5using CEnum, Libdl
6
7# Get the path to the libCEED dynamic library, configured during the build step
8# of the LibCEED.jl package.
9const depsfile = joinpath(@__DIR__, "..", "deps", "deps.jl")
10if !isfile(depsfile)
11    error("LibCEED.jl not properly installed. Please run Pkg.build(\"LibCEED\")")
12end
13include(depsfile)
14
15include(joinpath(@__DIR__, "generated", "libceed_common.jl"))
16include(joinpath(@__DIR__, "generated", "libceed_api.jl"))
17
18const CEED_STRIDES_BACKEND = Ref{Ptr{CeedInt}}()
19const CEED_BASIS_COLLOCATED = Ref{CeedBasis}()
20const CEED_VECTOR_ACTIVE = Ref{CeedVector}()
21const CEED_VECTOR_NONE = Ref{CeedVector}()
22const CEED_ELEMRESTRICTION_NONE = Ref{CeedElemRestriction}()
23const CEED_QFUNCTION_NONE = Ref{CeedQFunction}()
24const CEED_REQUEST_IMMEDIATE = Ref{CeedRequest}()
25const CEED_REQUEST_ORDERED = Ref{CeedRequest}()
26
27function __init__()
28    global libceed_handle = dlopen(libceed)
29    # some global variables
30    CEED_STRIDES_BACKEND[] = cglobal((:CEED_STRIDES_BACKEND, libceed))
31    CEED_BASIS_COLLOCATED[] =
32        unsafe_load(cglobal((:CEED_BASIS_COLLOCATED, libceed), CeedBasis))
33    CEED_VECTOR_ACTIVE[] = unsafe_load(cglobal((:CEED_VECTOR_ACTIVE, libceed), CeedVector))
34    CEED_VECTOR_NONE[] = unsafe_load(cglobal((:CEED_VECTOR_NONE, libceed), CeedVector))
35    CEED_ELEMRESTRICTION_NONE[] =
36        unsafe_load(cglobal((:CEED_ELEMRESTRICTION_NONE, libceed), CeedElemRestriction))
37    CEED_QFUNCTION_NONE[] =
38        unsafe_load(cglobal((:CEED_QFUNCTION_NONE, libceed), CeedQFunction))
39    CEED_REQUEST_IMMEDIATE[] =
40        unsafe_load(cglobal((:CEED_REQUEST_IMMEDIATE, libceed), Ptr{CeedRequest}))
41    CEED_REQUEST_ORDERED[] =
42        unsafe_load(cglobal((:CEED_REQUEST_ORDERED, libceed), Ptr{CeedRequest}))
43end
44
45end # module
46