We are using Clang.jl to automate the conversion of p4est headers to Julia bindings. It wraps functions and structs, but some structs are skipped.
Manually wrapping some complex C-structs and C-unions can be non-straightforward, so we need to investigate how to do it correctly.
I was looking for some information in this direction. Links below can be interesting in order to understand how to deal with this issue:
Packed structs and union declarations are not supported by Julia.
https://docs.julialang.org/en/latest/manual/calling-c-and-fortran-code/#Struct-Type-Correspondences-1
Dealing with complex C structure [discurse.julialang]
https://discourse.julialang.org/t/dealing-with-complex-c-structure/9045
Potential wrong alignments and sizes of structs with C Unions
Potential wrong alignments and sizes of structs with C unions JuliaInterop/Clang.jl#238
Structure padding and packing
https://stackoverflow.com/questions/4306186/structure-padding-and-packing
Using C Libraries from Julia (interesting blog post from Cbinding.jl developer)
https://www.analytech-solutions.com/analytech-solutions/blog/cbinding.html
In general, we and these links are in the same direction. But i need a deepest read.
In addition 2 interesting resources to perform alternative implementations:
Use unsafe_convert/unsafe_load instead of reinterpret
https://github.com/JuliaMultimedia/CSFML.jl/blob/812f21224d683f4119b02c456dda47d4d0a4a471/src/Window/window_common.jl#L272-L314
Improvements for specifying and using C bindings in Julia [CBinding.jl]
https://github.com/analytech-solutions/CBinding.jl
We are using Clang.jl to automate the conversion of p4est headers to Julia bindings. It wraps functions and structs, but some structs are skipped.
Manually wrapping some complex C-structs and C-unions can be non-straightforward, so we need to investigate how to do it correctly.
I was looking for some information in this direction. Links below can be interesting in order to understand how to deal with this issue:
In general, we and these links are in the same direction. But i need a deepest read.
In addition 2 interesting resources to perform alternative implementations: