Closed bramtayl closed 3 years ago
I cannot open that link, is that a private repo?
The most common one seems to be
SODIUM_MIN
is a commonly used macro in the codebase, but Clang doesn't seem to be able to parse the macro. Is there way to register the macro (e.g. map it to the julia functionmin
)?
Is that macro a true public API of libsodium? These kinda macros are usually for implementing C functions as C doesn't support polymorphism, but is it really used when calling the API functions? The only use-case I can imagine is that it will reduce efforts when translating C code.
Anyway, this can be done by manually define const SODIUM_MIN = min
in Julia.
However, it's tricky to let Clang.jl do this kinda thing automatically because it's not smart enough to understand why the SODIUM_MIN
should be mapped to min
. To tell this info to Clang.jl, you can either use a rewriter
or overload wrap_c
, please refer to this post for further details.
Sorry I gave up and deleted it. I decided just to use ccall because I just needed one function from libsodium. It doesn't seem to have worked correctly either; the code for that is here:
https://github.com/bramtayl/OnlinePackage.jl/blob/master/src/OnlinePackage.jl
OK, I just did this https://github.com/Gnimuc/Sodium.jl ;)
And I didn't see sodium_init()
is called anywhere in your package. https://download.libsodium.org/doc/usage
Wow thanks!!!
Thanks for the advice, and also, for the package! Since sodium is being used by github, I bet a lot of people will find the package useful.
I added a call to sodium_init
to my code, and it still isn't working :( I also tried using the types listed in the package (Ptr{Cuchar}, Ptr{Cuchar}, Culonglong, Ptr{Cuchar})
for cryptobox seal instead of what I have now (Ptr{UInt8}, Cstring, Cint, Ptr{UInt8})
and that didn't work either. What's puzzling me is that after I run the function, the resulting string contains many NUL characters (well at least, findall(x .== 0, raw_encoded)
) returns many values, and if I'm understanding correctly, NUL should signify the end of a string?
The resulting raw_encoded
is also different every time I run the function, which doesn't seem right...
Omigosh you're the best! I posted a MWE on my discourse post.
Well, I tried using the package you wrote and updated online package based on the test you linked. And I'm still getting the same error...which suggests to me this isn't a problem with ccall after all. Something else must be wrong :( Anyway, thanks so much for your help! I don't know if @amitmurthy is still around but if he is maybe he can accept your rewrite of Sodium as a PR?
I can transfer the package to him or JuliaWeb. I'd like to keep this issue open since we do need to add enhancement for dealing with function-like macros.
@Gnimuc ok. Let me know where your sodium code ends up. I've added it as a GitHub dependency to OnlinePackage for now
This is mostly just a request for help. I'm trying to resurrect Sodium.jl. I've got a binary version build via BinaryBuilder so you can now access it via
using libsodium_jll
.I'm trying to use Clang to automatically generate a wrapper, but I'm running into a number of issues. The most common one seems to be
SODIUM_MIN
is a commonly used macro in the codebase, but Clang doesn't seem to be able to parse the macro. Is there way to register the macro (e.g. map it to the julia functionmin
)?You can see my progress at my branch here https://github.com/bramtayl/Sodium.jl
This is the output I get when I run generate.jl: