gridap / gridap/P4est_wrapper.jl
How to wrap Structs/C-Unions from Julia
- Dominant language
- Julia
- Stars
- 10
- Forks
- 1
- PR merge metrics
- No merged PRs in 30d
Description
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:
1. > 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
2. > Dealing with complex C structure [discurse.julialang]
https://discourse.julialang.org/t/dealing-with-complex-c-structure/9045
3. > Potential wrong alignments and sizes of structs with C Unions
https://github.com/JuliaInterop/Clang.jl/issues/238
4. > Structure padding and packing
https://stackoverflow.com/questions/4306186/structure-padding-and-packing
5. > 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:
1. > Use unsafe_convert/unsafe_load instead of reinterpret
https://github.com/JuliaMultimedia/CSFML.jl/blob/812f21224d683f4119b02c456dda47d4d0a4a471/src/Window/window_common.jl#L272-L314
2. > Improvements for specifying and using C bindings in Julia [CBinding.jl]
https://github.com/analytech-solutions/CBinding.jl
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.