{ stdenv, lib, makeWrapper, scdoc, qbe, harec, binutils-unwrapped, tzdata, python3, rustc, }: let arch = stdenv.hostPlatform.uname.processor; qbePlatform = { x86_64 = "amd64_apple"; aarch64 = "arm64_apple"; }.${arch}; hareAs = ./hare-as.py; hareLd = stdenv.mkDerivation (finalAttrs: { pname = "hare-ld"; version = "1.0"; src = [ ./ld.rs ]; buildInputs = [ rustc ]; unpackPhase = '' for srcFile in $src; do cp $srcFile $(stripHash $srcFile) done ''; buildPhase = '' rustc -o hare-ld.bin ld.rs ''; installPhase = '' mkdir -p $out/bin cp hare-ld.bin $out/bin/hare-ld ''; }); hareCc = stdenv.mkDerivation (finalAttrs: { pname = "hare-cc"; version = "1.0"; src = [ ./ld.rs ]; buildInputs = [ rustc ]; unpackPhase = '' for srcFile in $src; do cp $srcFile $(stripHash $srcFile) done ''; buildPhase = '' sed -i \ -e 's/"ld"/"cc"/g' \ -e '11 a let mut args = vec![];' \ ld.rs rustc -o hare-cc.bin ld.rs ''; installPhase = '' mkdir -p $out/bin cp hare-cc.bin $out/bin/hare-cc ''; }); in stdenv.mkDerivation (finalAttrs: { pname = "hare"; version = "0.24"; src = builtins.fetchGit { url = "https://github.com/hshq/harelang"; ref = "master"; rev = "30d097a7c7f3ccf9e4fc783d1cdae1fd506673c7"; }; patches = [ ]; nativeBuildInputs = [ harec makeWrapper qbe scdoc python3 ]; buildInputs = [ binutils-unwrapped harec qbe tzdata ]; makeFlags = [ "HARECACHE=.harecache" "PREFIX=${builtins.placeholder "out"}" "ARCH=${arch}" "VERSION=${finalAttrs.version}-nixpkgs" "QBEFLAGS=-t${qbePlatform}" "CC=${hareCc}/bin/hare-cc" "AS=${hareAs}" "LD=${hareLd}/bin/hare-ld" # Strip the variable of an empty $(SRCDIR)/hare/third-party, since nix does # not follow the FHS. "HAREPATH=$(SRCDIR)/hare/stdlib" ]; postConfigure = '' ln -s configs/darwin.mk config.mk sed -i 's/ @#/ /' Makefile sed -i 's/ @/ /' Makefile sed -i 's/ @/ /' makefiles/darwin.aarch64.mk ''; postFixup = '' wrapProgram $out/bin/hare \ --prefix PATH : ${lib.makeBinPath [harec qbe]} \ --set CC ${hareCc}/bin/hare-cc \ --set AS ${hareAs} \ --set LD ${hareLd}/bin/hare-ld ''; setupHook = ./setup-hook.sh; })