rbino
build_dot_zig - Use the Zig build system from Elixir to build your NIFs
build_dot_zig is a Mix compiler that allows you to use the Zig build system and compiler from Elixir. This lets you to easily build C, C++ and Zig NIFs without a system toolchain on Linux, MacOS and Windows. You can think of it as an alternative to elixir_make with some more goodies.
The library also features a handy mix generator, mix build_dot_zig.gen.c_nif, that bootstraps all that is needed for a NIF written in C. The only thing left to do is to write the implementation of the NIF.
In the future (or possibly right now, I have yet to experiment with it) it could also leverage the Zig package manager to retrieve C, C++ or Zig dependencies, without the need of having them installed system-wide.
Here you can find a blog post with some more details about the library features.
Most Liked
LostKobrakai
I would love to give more hearts to this than one. I had been hoping this would become a thing for some time. I might even have a usecase for it at work. Does this work with nerves and their targets?
LostKobrakai
As someone not experienced in systems level languages I found zig quite a bit more approachable than rust. I also really like that they actually want to make things like cross compilation simpler. I once tried to cross compile a rust project we have at work and just gave up after a bit, because I couldn’t figure out what was going wrong. Doing it with a toolchain in the handful of MB makes zig even more appealing in that regard.
LostKobrakai
This was about a proposal for zig to gain more indepenance from third parties it currently depends on. I’ll link to the comment, which should ultimately give some perspective to the initial proposal: make the main zig executable no longer depend on LLVM, LLD, and Clang libraries · Issue #16270 · ziglang/zig · GitHub
rbino
It’s nice to see we had the same idea ![]()
build_dot_zig was not very discoverable up until now because even though I’ve been working on it since March, it was mainly meant to serve my own use case, and now I finally decided to polish it a little bit and share it with a wider audience.
About the documentation of the Zig build system, I agree it’s a little sparse. This guide that was published recently can help a little, and I also don’t mind digging into the code since I find Zig stdlib code very readable.
What I don’t agree with is the claim that it can’t be used in serious projects.
Here’s some projects which I would consider serious ported to the Zig build system:
I think we can agree that if your NIF gets more complex than CPython your problem is not going to be how you build it ![]()
D4no0
Once again, the discoverability on libraries is horrible
.
We created a similar library for this year’s spawnfest: GitHub - spawnfest/zig_builder
Alas, in my opinion the zig build system is still too unreliable to be used in any serious projects, we had a lot of trouble dealing with internal errors from the build system and the lack of documentation didn’t help.







