Skip to content

Commit 276e92e

Browse files
format
1 parent e762f9a commit 276e92e

30 files changed

+2758
-2702
lines changed

gen/generate.jl

Lines changed: 70 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ using Pkg
55

66
# 1st arg name to wrapped arg type map
77
const arg1_name2type = Dict(:arkode_mem => :(ARKStepMemPtr),
8-
:cvode_mem => :(CVODEMemPtr),
9-
:cv_mem => :(CVODEMemPtr),
10-
:kinmem => :(KINMemPtr),
11-
:kinmemm => :(KINMemPtr), # Sundials typo?
12-
:ida_mem => :(IDAMemPtr),
13-
:idaa_mem => :(IDAMemPtr), # Sundials typo?
14-
:idaadj_mem => :(IDAMemPtr))
8+
:cvode_mem => :(CVODEMemPtr),
9+
:cv_mem => :(CVODEMemPtr),
10+
:kinmem => :(KINMemPtr),
11+
:kinmemm => :(KINMemPtr), # Sundials typo?
12+
:ida_mem => :(IDAMemPtr),
13+
:idaa_mem => :(IDAMemPtr), # Sundials typo?
14+
:idaadj_mem => :(IDAMemPtr))
1515

1616
const linear_solvers_and_matrices = [
1717
# Linear Solvers
@@ -33,27 +33,27 @@ const linear_solvers_and_matrices = [
3333

3434
# substitute Ptr{Void} with the typed pointer
3535
const ctor_return_type = Dict("ARKCreate" => :(ARKStepMemPtr),
36-
"ARKStepCreate" => :(ARKStepMemPtr),
37-
"ERKStepCreate" => :(ERKStepMemPtr),
38-
"MRIStepCreate" => :(MRIStepMemPtr),
39-
"CVodeCreate" => :(CVODEMemPtr),
40-
"IDACreate" => :(IDAMemPtr),
41-
"KINCreate" => :(KINMemPtr))
36+
"ARKStepCreate" => :(ARKStepMemPtr),
37+
"ERKStepCreate" => :(ERKStepMemPtr),
38+
"MRIStepCreate" => :(MRIStepMemPtr),
39+
"CVodeCreate" => :(CVODEMemPtr),
40+
"IDACreate" => :(IDAMemPtr),
41+
"KINCreate" => :(KINMemPtr))
4242
# signatures for C function pointer types
4343
const FnTypeSignatures = Dict(:ARKRhsFn => (:Cint,
44-
:((realtype, N_Vector, N_Vector, Ptr{Cvoid}))),
45-
:CVRhsFn => (:Cint,
46-
:((realtype, N_Vector, N_Vector, Ptr{Cvoid}))),
47-
:CVRootFn => (:Cint,
48-
:((realtype, N_Vector, Ptr{realtype},
49-
Ptr{Cvoid}))),
50-
:IDAResFn => (:Cint,
51-
:((realtype, N_Vector, N_Vector, N_Vector,
52-
Ptr{Cvoid}))),
53-
:IDARootFn => (:Cint,
54-
:((realtype, N_Vector, N_Vector, Ptr{realtype},
55-
Ptr{Cvoid}))),
56-
:KINSysFn => (:Cint, :((N_Vector, N_Vector, Ptr{Cvoid}))))
44+
:((realtype, N_Vector, N_Vector, Ptr{Cvoid}))),
45+
:CVRhsFn => (:Cint,
46+
:((realtype, N_Vector, N_Vector, Ptr{Cvoid}))),
47+
:CVRootFn => (:Cint,
48+
:((realtype, N_Vector, Ptr{realtype},
49+
Ptr{Cvoid}))),
50+
:IDAResFn => (:Cint,
51+
:((realtype, N_Vector, N_Vector, N_Vector,
52+
Ptr{Cvoid}))),
53+
:IDARootFn => (:Cint,
54+
:((realtype, N_Vector, N_Vector, Ptr{realtype},
55+
Ptr{Cvoid}))),
56+
:KINSysFn => (:Cint, :((N_Vector, N_Vector, Ptr{Cvoid}))))
5757

5858
function wrap_sundials_api(expr::Expr)
5959
if expr.head == :function &&
@@ -103,10 +103,10 @@ function wrap_sundials_api(expr::Expr)
103103
if func_name[1:6] == "SUNMAT"
104104
expr.args[2].args[1].args[2].args[2] = Symbol(string(expr.args[2].args[1].args[2].args[2]) *
105105
lowercase(split(func_name,
106-
"_")[end]))
106+
"_")[end]))
107107
else
108108
name_i = findfirst(lsmn -> occursin(lsmn, lowercase(func_name)),
109-
linear_solvers_and_matrices)
109+
linear_solvers_and_matrices)
110110

111111
@assert name_i > 0
112112
name = linear_solvers_and_matrices[name_i]
@@ -141,25 +141,25 @@ function wrap_sundials_api(expr::Expr)
141141
# this guarantees that the wrapper and associated Sundials object (e.g. N_Vector)
142142
# is not removed by GC'
143143
return (arg_name_expr,
144-
Expr(:call, :convert, :NVector, arg_name_expr), # convert arg to NVector to store in a local var
145-
Expr(:call, :convert, arg_type_expr,
146-
Symbol(string("__", arg_name_expr)))) # convert NVector to N_Vector
144+
Expr(:call, :convert, :NVector, arg_name_expr), # convert arg to NVector to store in a local var
145+
Expr(:call, :convert, arg_type_expr,
146+
Symbol(string("__", arg_name_expr)))) # convert NVector to N_Vector
147147
elseif arg_type_expr == :Clong || arg_type_expr == :Cint ||
148148
occursin(r"MemPtr$", string(arg_type_expr))
149149
# convert(XXXMemPtr, mem), no local var required
150150
return (arg_name_expr, nothing,
151-
Expr(:call, :convert, arg_type_expr, arg_name_expr))
151+
Expr(:call, :convert, arg_type_expr, arg_name_expr))
152152
elseif isa(arg_type_expr, Expr) && arg_type_expr.head == :curly &&
153153
arg_type_expr.args[1] == :Ptr && arg_type_expr.args[2] != :FILE
154154
# convert julia arrays to pointer, no local var required
155155
# FIXME sometimes these arguments are not really arrays, but just a pointer to a var to be assigned
156156
# by the function call. Does that make sense to detect such cases and assume that input arg is a reference to Julia var?
157157
return (arg_name_expr, nothing,
158-
Expr(:call, :pointer, arg_name_expr))
158+
Expr(:call, :pointer, arg_name_expr))
159159
elseif haskey(FnTypeSignatures, arg_type_expr) # wrap Julia function to C function using a defined signature
160160
return (arg_name_expr, nothing,
161-
Expr(:call, Symbol(string(arg_type_expr, "_wrapper")),
162-
arg_name_expr))
161+
Expr(:call, Symbol(string(arg_type_expr, "_wrapper")),
162+
arg_name_expr))
163163
else # any other case, no argument wrapping
164164
return (arg_name_expr, nothing, arg_name_expr)
165165
end
@@ -172,22 +172,22 @@ function wrap_sundials_api(expr::Expr)
172172

173173
# higher-level wrapper function
174174
wrapper_func_expr = Expr(:function,
175-
# function declaration with argument types stripped, so it would accept any type
176-
Expr(:call, Symbol(func_name),
177-
map(arg_exprs -> arg_exprs[1],
178-
args_wrap_exprs)...),
179-
Expr(:block,
180-
# local var defs
181-
map(filter(arg_exprs -> arg_exprs[2] !==
182-
nothing,
183-
args_wrap_exprs)) do arg_exprs
184-
Expr(:(=), Symbol("__", arg_exprs[1]),
185-
arg_exprs[2])
186-
end...,
187-
# low-level function call with Julia types converted to low-level arguments
188-
Expr(:call, Symbol(lowlevel_func_name),
189-
map(arg_exprs -> arg_exprs[3],
190-
args_wrap_exprs)...)))
175+
# function declaration with argument types stripped, so it would accept any type
176+
Expr(:call, Symbol(func_name),
177+
map(arg_exprs -> arg_exprs[1],
178+
args_wrap_exprs)...),
179+
Expr(:block,
180+
# local var defs
181+
map(filter(arg_exprs -> arg_exprs[2] !==
182+
nothing,
183+
args_wrap_exprs)) do arg_exprs
184+
Expr(:(=), Symbol("__", arg_exprs[1]),
185+
arg_exprs[2])
186+
end...,
187+
# low-level function call with Julia types converted to low-level arguments
188+
Expr(:call, Symbol(lowlevel_func_name),
189+
map(arg_exprs -> arg_exprs[3],
190+
args_wrap_exprs)...)))
191191
# write down both low-level and higher level wrappers
192192
return Any[expr, wrapper_func_expr]
193193
else
@@ -201,11 +201,11 @@ function wrap_sundials_api(expr::Expr)
201201
fn_rettype, fn_argtypes = FnTypeSignatures[fn_typename]
202202
wrapper_name = Symbol(string(string(fn_typename), "_wrapper"))
203203
c_wrapper_def = Expr(:(=),
204-
Expr(:call, wrapper_name, Expr(:(::), :fp, fn_typename)), :fp)
204+
Expr(:call, wrapper_name, Expr(:(::), :fp, fn_typename)), :fp)
205205
jl_wrapper_def = Expr(:(=),
206-
Expr(:call, wrapper_name, :f),
207-
# function declaration with argument types stripped
208-
Expr(:call, :cfunction, :f, fn_rettype, fn_argtypes))
206+
Expr(:call, wrapper_name, :f),
207+
# function declaration with argument types stripped
208+
Expr(:call, :cfunction, :f, fn_rettype, fn_argtypes))
209209
return Any[expr, c_wrapper_def, jl_wrapper_def]
210210
elseif expr.head == :const && expr.args[1].head == :(=) &&
211211
isa(expr.args[1].args[2], Int)
@@ -232,7 +232,7 @@ cd(@__DIR__)
232232
include_dir = joinpath(Sundials_jll.artifact_dir, "include") |> normpath
233233

234234
artifact_toml = joinpath(dirname(pathof(Sundials_jll.SuiteSparse_jll)), "..",
235-
"StdlibArtifacts.toml")
235+
"StdlibArtifacts.toml")
236236
suitespase_dir = Pkg.Artifacts.ensure_artifact_installed("SuiteSparse", artifact_toml)
237237
suitespase_include_sir = joinpath(suitespase_dir, "include")
238238

@@ -244,24 +244,24 @@ args = get_default_args()
244244
push!(args, "-I$include_dir", "-isystem$suitespase_include_sir")
245245

246246
library_names = Dict(raw"sundials[\\/].+" => "libsundials_sundials",
247-
raw"sunnonlinsol[\\/].+" => "libsundials_sunnonlinsol",
248-
raw"sunmatrix[\\/].+" => "libsundials_sunmatrix",
249-
raw"kinsol[\\/].+" => "libsundials_kinsol",
250-
raw"ida[\\/].+" => "libsundials_idas",
251-
raw"cvodes[\\/].+" => "libsundials_cvodes",
252-
raw"sunlinsol[\\/].+$(?<!lapackband\.h)(?<!lapackdense\.h)" => "libsundials_sunlinsol",
253-
raw"cvode[\\/].+" => "libsundials_cvodes",
254-
raw"idas[\\/].+" => "libsundials_idas",
255-
raw"arkode[\\/].+" => "libsundials_arkode",
256-
raw"nvector[\\/].+" => "libsundials_nvecserial",
257-
raw"lapackband\.h" => "libsundials_sunlinsollapackband",
258-
raw"lapackdense\.h" => "libsundials_sunlinsollapackdense")
247+
raw"sunnonlinsol[\\/].+" => "libsundials_sunnonlinsol",
248+
raw"sunmatrix[\\/].+" => "libsundials_sunmatrix",
249+
raw"kinsol[\\/].+" => "libsundials_kinsol",
250+
raw"ida[\\/].+" => "libsundials_idas",
251+
raw"cvodes[\\/].+" => "libsundials_cvodes",
252+
raw"sunlinsol[\\/].+$(?<!lapackband\.h)(?<!lapackdense\.h)" => "libsundials_sunlinsol",
253+
raw"cvode[\\/].+" => "libsundials_cvodes",
254+
raw"idas[\\/].+" => "libsundials_idas",
255+
raw"arkode[\\/].+" => "libsundials_arkode",
256+
raw"nvector[\\/].+" => "libsundials_nvecserial",
257+
raw"lapackband\.h" => "libsundials_sunlinsollapackband",
258+
raw"lapackdense\.h" => "libsundials_sunlinsollapackdense")
259259
headers = String[]
260260
for lib in readdir(include_dir)
261261
header_dir = joinpath(include_dir, lib)
262262
append!(headers,
263-
joinpath(header_dir, header)
264-
for header in readdir(header_dir) if endswith(header, ".h"))
263+
joinpath(header_dir, header)
264+
for header in readdir(header_dir) if endswith(header, ".h"))
265265
end
266266
options["general"]["library_names"] = library_names
267267

0 commit comments

Comments
 (0)