What are the differences between PackageCompiler and BinaryBuilder to build stan-alone apps?

Hi all!

Pretty much the title question, but I’d like to give a bit of context. I’m using Julia to develop my Master’s thesis (love the language so far). I need to integrate a linear model predictor I’m developing into the workflow of my lab colleagues, and I have now a choice. I can ask them to install Julia, but the ideal would be to produce a stand-alone binary executable. My question is: what are the differences between PackageCompiler’s create_app() and BinaryBuilder.jl? If you prefer it in this way, why would I need one when there’s the other?
I can make two observations:

  1. For what I read, BinaryBuilder is more targeted towards cross-compilation, whereas PackageCompiler is not. Did I understood correctly? If yes, why on the language homepage it is advised PackageCompiler to compile to binary (at voice “Ecosystem”)?
  2. Little note: I need to embed the model data into the application (for now simply using Serialization.jl and deserializing the object). Is this easier in one app or in the other?

Thanks!

1 Like

To put it simple, BinaryBuilder is for compiling non-Julia software, supported languages are C/C++, Fortran, Rust and Go. If you want to create an executable out of some Julia code, PackageCompiler is probably your best bet at the moment, BinaryBuilder can’t help you with that.

5 Likes

To add more context, BinaryBuilder is used to compile third-party libraries that are need by Julia packages.
For example, when you install (add) Ipopt.jl, you (by default) install the C++ Ipopt library that has been compiled with BinaryBuilder and used (wrapped) by Ipopt.jl.

1 Like

Got it, thank you very much, to both! :pray: