Another update, this time about Artifacts. I think to remember I read something about juliac
and Artifacts, and that PackageCompiler
has functionality to collect all required Artifacts – but don’t remember where. Any pointers are welcome, thanks!
Artifacts are the binary dependencies (compiled shared libraries, mostly) some packages rely on. These are automatically downloaded to a dedicated folder (something like <user-folder>.julia/artifacts
), and the julia runtime knows where to look for them.
Now, there’s not much documentation on this; Artifacts · The Julia Language is quite minimalistic and the referenced section about Pkg
is intended for package devs. There is some more explanation in Custom binaries · JuMP.
When I use a package which requires artifacts (my example is jump-dev/HiGHS.jl) and use juliac
to generate a binary, upon execution I get the error:
ErrorException("`ccall` requires the compiler")
Now:
- What is meant by the “compiler”? Initially I thought
libLLVM*
(which I remove due to its size) or a C compiler such asgcc
(which I do have available). → But it seems to belibjulia-codegen*
ANDlibLLVM*
. Together, they are 218MB and, what concerns me more, make up all the dynamic “interpreted”/JIT-compiled machinery of julia, which I exactly do NOT want in a fully pre-compiled binary. - Why is it needed for a
ccall
? - How do I identify all required artifacts, and where do I put them (under Windows and Linux), absolute and relative to my
juliac
-generated binary?- I can run the “MWE” in
juliac
-compiled form, when staying on the build machine with the auto-downloaded artifacts stil in place. - Would just be good to know which artifacts are actually downloaded and used, where they are, and if I could package them into a portable “distribution” somehow.
- I can run the “MWE” in