1
Fork 0
hare-nix/pkgs/hare.nix

119 lines
2.4 KiB
Nix
Raw Normal View History

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