1
Fork 0
This commit is contained in:
Jan-Erik Rediger 2024-05-14 21:02:43 +02:00
commit 4e22a48854
4 changed files with 139 additions and 0 deletions

24
flake.nix Normal file
View file

@ -0,0 +1,24 @@
{
description = "Hare for mac";
outputs = { self, nixpkgs, ... }:
let
supportedSystems = [ "x86_64-darwin" "aarch64-darwin" ];
forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
in
{
devShells = forAllSystems (system:
let
pkgs = nixpkgs.legacyPackages.${system};
harec = pkgs.callPackage ./pkgs/harec.nix { };
#hare = pkgs.callPackage ./pkgs/hare.nix { inherit harec; };
in
{
default = pkgs.mkShell {
buildInputs = [
harec
];
};
});
};
}

71
pkgs/hare.nix Normal file
View file

@ -0,0 +1,71 @@
{
stdenv,
lib,
makeWrapper,
scdoc,
substituteAll,
qbe,
harec,
binutils-unwrapped,
tzdata
}:
let
platform = lib.toLower stdenv.hostPlatform.uname.system;
arch = stdenv.hostPlatform.uname.processor;
qbePlatform = {
x86_64 = "amd64_sysv";
aarch64 = "arm64";
riscv64 = "rv64";
}.${arch};
in
stdenv.mkDerivation (finalAttrs: {
pname = "hare";
version = "0.24";
src = builtins.fetchGit {
url = "https://git.sr.ht/~sircmpwn/hare";
ref = "master";
rev = "0cd51184a7acdfd4ef20195d1648622b04477293";
};
patches = [
];
nativeBuildInputs = [
harec
makeWrapper
qbe
scdoc
];
buildInputs = [
binutils-unwrapped
harec
qbe
tzdata
];
makeFlags = [
"HARECACHE=.harecache"
"PREFIX=${builtins.placeholder "out"}"
"ARCH=${arch}"
"VERSION=${finalAttrs.version}-nixpkgs"
"QBEFLAGS=-t${qbePlatform}"
"CC=${stdenv.cc.targetPrefix}cc"
"AS=${stdenv.cc.targetPrefix}as"
"LD=${stdenv.cc.targetPrefix}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/linux.mk config.mk
'';
postFixup = ''
wrapProgram $out/bin/hare \
--prefix PATH : ${lib.makeBinPath [binutils-unwrapped harec qbe]}
'';
setupHook = ./setup-hook.sh;
})

35
pkgs/harec.nix Normal file
View file

@ -0,0 +1,35 @@
{ lib, stdenv, qbe }:
let
platform = lib.toLower stdenv.hostPlatform.uname.system;
arch = stdenv.hostPlatform.uname.processor;
qbePlatform = {
x86_64 = "amd64_sysv";
aarch64 = "arm64";
riscv64 = "rv64";
}.${arch};
in
stdenv.mkDerivation (finalAttrs: {
pname = "harec";
version = "0.24";
src = builtins.fetchGit {
url = "github.com/hshq/harelang-harec";
ref = "master";
rev = "51446fdef8b39df1fbf4fa2644d3f51f020f974a";
};
buildInputs = [ qbe ];
nativeBuildInputs = [ qbe ];
makeFlags = [
"PREFIX=${builtins.placeholder "out"}"
"ARCH=${arch}"
"VERSION=${finalAttrs.version}-nixpkgs"
"QBEFLAGS=-t${qbePlatform}"
"CC=${stdenv.cc.targetPrefix}cc"
"AS=${stdenv.cc.targetPrefix}as"
"LD=${stdenv.cc.targetPrefix}ld"
];
postConfigure = ''
ln -s configs/darwin.mk config.mk
'';
})

9
pkgs/setup-hook.sh Normal file
View file

@ -0,0 +1,9 @@
addHarepath () {
for haredir in third-party stdlib; do
if [[ -d "$1/src/hare/$haredir" ]]; then
addToSearchPath HAREPATH "$1/src/hare/$haredir"
fi
done
}
addEnvHooks "$hostOffset" addHarepath