gridap / gridap/P4est_wrapper.jl

How to wrap Structs/C-Unions from Julia

Open
#1 2 comments 1 reaction 0 assignees View on GitHub
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.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.