PackagingCon

BinaryBuilder.jl — Using Julia's Pkg to deliver binary libraries
2021-11-10 , Room I

BinaryBuilder.jl is a framework that allows you to compile binaries for an ever-growing set of platforms (16 currently): Linux, FreeBSD, macOS and Windows on various architectures. While BinaryBuilder.jl is mainly employed to build libraries and programs used in packages for the Julia programming language, it is completely general and anyone can install and use on their system the binaries it produces.


The Julia programming languages promises to solve the so-called "two-language problem", so that users don't need to rewrite code in other languages to achieve better performance. However, we don't live in a Julia-only world, and many high-quality libraries that we don't want to miss out have been already written in other languages. We then must jump through hoops to ensure that code written in other languages is easily accessible from Julia. BinaryBuilder.jl allows you to take software written in compiled languages such as C, C++, Fortran, Go or Rust, and build precompiled binaries for a plethora of different platforms that can be used from Julia packages, but not only.

Automatically generated thin wrappers, called JJLs, allow users to seamlessly install binaries just like regular Julia packages, and the other Julia packages can depend on JLLs. Additionally, Julia's package manger records JLLs in the manifest file capturing the content of an environment for reproducibility, so that not only does it record Julia packages, but also binary libraries in other languages.

BinaryBuilder.jl cross-compiles binaries for all target platforms in a single sandbox environment, using consistent toolchains. Built binaries are relocatable and packaged into reproducible tarballs. BinaryBuilder.jl also takes into account different ABIs (libstdc++ dual ABI and different libgfortran versions), and all binaries are audited to automatically fix common errors (e.g., check correct ISA and OS ABI for the target platform, set rpaths, etc...).

In this talk we will describe the architecture of BinaryBuilder.jl, and how it piggybacks Julia's package manager and the Artifacts system to safely deliver the binaries to the end users.

Research Software Developer at UCL during the day, binary builder during the night.