@@ -5,13 +5,13 @@ using Pkg
55
66# 1st arg name to wrapped arg type map
77const 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
1616const 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
3535const 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
4343const 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
5858function 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__)
232232include_dir = joinpath (Sundials_jll. artifact_dir, " include" ) |> normpath
233233
234234artifact_toml = joinpath (dirname (pathof (Sundials_jll. SuiteSparse_jll)), " .." ,
235- " StdlibArtifacts.toml" )
235+ " StdlibArtifacts.toml" )
236236suitespase_dir = Pkg. Artifacts. ensure_artifact_installed (" SuiteSparse" , artifact_toml)
237237suitespase_include_sir = joinpath (suitespase_dir, " include" )
238238
@@ -244,24 +244,24 @@ args = get_default_args()
244244push! (args, " -I$include_dir " , " -isystem$suitespase_include_sir " )
245245
246246library_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" )
259259headers = String[]
260260for 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" ))
265265end
266266options[" general" ][" library_names" ] = library_names
267267
0 commit comments