- Install Nix, the functional package manager. You'll need Linux (but macOS might work too).
- Make sure you have at least 4 GB of free space available for
/tmp
and a few GB of free space available for/nix
. - To get my recipes, run:
git clone https://github.com/DavidEGrayson/nixcrpkgs && cd nixcrpkgs && git checkout 4f7b11d
That commit is the current tip of the dev/david/2019 branch. - To build a i686-w64-mingw32 C/C++ cross-compiling toolchain and a hello world program, run:
nix-build -A win32.hello
- To build Qt and its examples, run:
nix-build -A win32.qt.examples
- To just build the toolchain itself, run:
nix-build -A win32.gcc
- To start a shell where you can easily use the toolchain, run:
nix-shell -A win32.hello
Whenever you run a nix-build or nix-shell command that requires the compiler, it will be built if it has not been built before. You can edit the patches, shell scripts, and other parts of nixcrpkgs and Nix will automatically know what parts of the compiler need to be rebuilt the next time you run one of those commands. Build results are cached, so it is quick and easy to switch between different versions of the compiler built this way.
After running nix-build, there is a symbolic link named result
in the current directory that points to the thing you built. So run commands like find result/
to inspect its contents and try it out.
I think building GCC and then building Qt takes a total of about 2 hours on my computer.
Commit 4f7b11d of my repository uses GCC 7.3.0 and the proposed patch from GCC bug 58732 comment #20.
If you want to experiment with patching GCC, you need to edit the list of patches in mingw-w64/gcc/default.nix and/or edit the files they are referring to in the same directory.
If you want to use a different version of GCC, edit the src url in mingw-w64/gcc/default.nix, then modify the sha256 field on the line below slightly (e.g. reduce one of the numbers to a lower number). Then when you get an error about a hash mismatch from nix-build, copy the correct hash into the sha256 field. (There are smoother ways to do this but I find this to be pretty fast.) I couldn't get snapshot versions to build this way, but I was able to get GCC 8.2.0 to build earlier.
Hello!
I tried using
nix-build -A win32.qt.examples
and I ran into this error:graphite-isl-ast-to-gimple.c:98:7: error 'isl_id_free' was not declared in this scope
Any idea why this happens?