# A development shell with everything docs/guides/building.md asks for. # # nix-shell # then: make, make qemu, make iso # # Why this exists: the UEFI loader is the one part that genuinely cannot be # built without clang and lld. `make` falls back to the GNU toolchain for the # kernel, so a machine with only gcc gets a kernel that builds and a loader that # silently stays whatever it was -- which is exactly the failure that left a # stale boot splash on this tree for half a day. # # Pinned to whatever nixpkgs the host is on rather than to a flake input, on # purpose: this is a convenience for one developer's machine, not a # reproducibility claim. If it ever needs to be the latter it wants a flake. { pkgs ? import { } }: pkgs.mkShell { name = "schos"; nativeBuildInputs = with pkgs; [ # The cross-compiler, and the reason this file exists. clang targets # bare-metal ELF, 16-bit code and PE/COFF from one install; lld-link is what # produces BOOTX64.EFI. clang lld llvm # llvm-objcopy, llvm-objdump # The host compiler, for tools/ -- mkfs, mkschfs, the SchFS suites. Must be # a real Unix compiler: those need and . gcc gnumake perl # generates the interrupt vector table python3 # boot logo, crash-screen QR, mklogo qemu # make qemu, and every test harness OVMF # firmware for the UEFI path; the Makefile searches for it xorriso # make iso mtools # ESP staging curl gnutar # fetching ports xz # ...some of which are .tar.xz # The X ports (docs/plan/xorg.md): half of them configure with autotools # and half with meson, and all of them ask pkg-config for each other. # libxcb generates its protocol code with python; libX11 and xkbcomp need # m4 and bison at build time. pkg-config meson ninja gnum4 bison flex ]; shellHook = '' echo "schos: clang $(clang --version | head -1 | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')," \ "$(qemu-system-x86_64 --version | head -1 | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')" echo " make | make qemu | make schfs-check | make iso" ''; }