This repository contains recipes for building binaries for Julia packages using BinaryBuilder.jl.
To contribute a new recipe, you can either
- use
BinaryBuilder.run_wizard()
, which will automatically open a pull request to this repository after a successfull build for all requested platforms - Copy another build recipe using it as a template, and then open a manual pull request to this repository
Yggdrasil builds the tarballs using master
version of BinaryBuilder.jl, which requires Julia 1.3.0 or later versions. Note that this BinaryBuilder.jl version has some differences compared to v0.1.4 and the builders generated are slightly different. You are welcome to contribute builders written for BinaryBuilder.jl v0.1.4, but they will likely need minor adjustements.
Buildkite CI is used to test that the builders can successfully produce the tarballs.
If you prefer to test your manual buildscript before opening the pull request, we suggest installing BinaryBuilder.jl
on Julia 1.3 or any following release and running julia --color=yes build_tarballs.jl --verbose --debug
locally. On MacOS, you will need to have docker
installed for this to work.
To trigger the build of a new version of the upstream package simply open a pull request to update the builder as necessary. This usually boils down to only updating the version number and the source (e.g., URL and hash for an archive, or the revision for a git repository), but in some cases more changes may be needed.
The last versions of BinaryBuilder make use of the Artifacts
system shipping in Julia 1.3. This means that BinaryBuilder no longer generates build.jl
files that are placed into your Julia package's deps/
folder, but instead generates whole Julia packages (known colloquially as "jll" packages) that are placed within the JuliaBinaryWrappers organization. Merged pull requests to Yggdrasil result in new versions of these wrapper packages being generated, uploaded and registered, allowing your client Julia code to simply invoke using LibFoo_jll
to get ahold of your binaries with no need for a Pkg.build()
step. (This will, of course, only be the case for Julia 1.3+).
We encourage Julia developers to use JLL packages for their libraries. Read the documention of BinaryBuilder to learn how to use them.
Here are a few examples of pull requests of Julia packages switching to using JLL package to provide the prebuilt binaries to the users:
You can read more about the Artifacts
system and how it is important for reproducibility in this post on Julia's blog "Pkg + BinaryBuilder -- The Next Generation".