Cross Compiling
Appearance
☶︎
This article or section needs to be expanded. Further information may be found in the related discussion page. Please consult the pedia article metapage for guidelines on contributing.
For building arm software check out the Article NixOS on ARM
If you are looking for building 32bit software, check out Packaging/32bit Applications
Quick example to cross compile a package: Cheatsheet#Cross-compile_packages.
Cross-Compiling in nixpkgs unstable (pre-18.09)
A lot has happened in 2018 and now cross-compilation is well supported within the unstable branch of nixpkgs.
The basic idea is to use pkgsCross.platform
instead of pkgs
:
nix build -f channel:nixos-unstable pkgsCross.raspberryPi.emacs
How to specify dependencies
Depending in which if packages are required at build time or at runtime they need to go to different inputs the derivation.
- If it is used at build-time it's
depsBuildXXX
- compiler producing native binaries go to
depsBuildBuild
- compiler producing cross binaries, all setup hooks and programs executed by the builder go to
depsBuildHost
- common examples:
pkgconfig, autoreconfHook, makeWrapper, intltool, bison, flex
- common examples:
- compiler producing native binaries go to
- If it is used at run-time it's
depsHostXXX
. [Stack linking doesn't effect this, even if it allows us to forget where things came from.]- if it’s an interpreter that will be needed by an installed script, it should go in
depsHostTarget
. - otherwise it is probably only needed at build time and can go in
depsBuildHost
- if it’s an interpreter that will be needed by an installed script, it should go in
- If it is a tool and "acts" (e.g. helps build) on build-time stuff, then it's
depsXXXBuild
- If it is a tool and "acts" on run-time stuff, then it's
depsXXXHost
- if it is not a tool, it's
depsXXX(XXX+1)
(build + 1 == host, host +1 == target) for backwards compatibility, usenativeBuildInputs
instead ofdepsBuildHost
andbuildInputs
instead ofdepsHostTarget
.
Source: https://github.com/NixOS/nixpkgs/pull/50881#issuecomment-440772499
References
- Nixpkgs manual on cross compiling
- Introduction to Cross Compilation with nix by Matthew Bauer