Unverified Commit 12449072 authored by Peder Bergebakken Sundt's avatar Peder Bergebakken Sundt Committed by GitHub
Browse files

Merge pull request #266456 from onemoresuza/hare

hare: unstable-2023-04-23 -> unstable-2023-10-22; harec: unstable-2023-04-23 -> unstable-2023-10-23
parents 8ed9ed74 fbbff51a
Loading
Loading
Loading
Loading
+97 −4
Original line number Diff line number Diff line
{ config, lib, pkgs }:
{ lib
, stdenv
, fetchFromSourcehut
, binutils-unwrapped
, harec
, makeWrapper
, qbe
, scdoc
}:

lib.makeScope pkgs.newScope (self: {
let
  # We use harec's override of qbe until 1.2 is released, but the `qbe` argument
  # is kept to avoid breakage.
  qbe = harec.qbeUnstable;
in
stdenv.mkDerivation (finalAttrs: {
  pname = "hare";
  version = "unstable-2023-10-23";

  harec = pkgs.callPackage ./harec { };
  hare = pkgs.callPackage ./hare { };
  src = fetchFromSourcehut {
    owner = "~sircmpwn";
    repo = "hare";
    rev = "1048620a7a25134db370bf24736efff1ffcb2483";
    hash = "sha256-slQPIhrcM+KAVAvjuRnqNdEAEr4Xa4iQNVEpI7Wl+Ks=";
  };

  nativeBuildInputs = [
    binutils-unwrapped
    harec
    makeWrapper
    qbe
    scdoc
  ];

  buildInputs = [
    binutils-unwrapped
    harec
    qbe
  ];

  # Append the distribution name to the version
  env.LOCALVER = "nix";

  configurePhase =
    let
      # https://harelang.org/platforms/
      arch =
        if stdenv.isx86_64 then "x86_64"
        else if stdenv.isAarch64 then "aarch64"
        else if stdenv.hostPlatform.isRiscV && stdenv.is64bit then "riscv64"
        else "unsupported";
      platform =
        if stdenv.isLinux then "linux"
        else if stdenv.isFreeBSD then "freebsd"
        else "unsupported";
    in
    ''
      runHook preConfigure

      cp config.example.mk config.mk
      makeFlagsArray+=(
        PREFIX="${builtins.placeholder "out"}"
        HARECACHE="$(mktemp -d --tmpdir harecache.XXXXXXXX)"
        BINOUT="$(mktemp -d --tmpdir bin.XXXXXXXX)"
        PLATFORM="${platform}"
        ARCH="${arch}"
      )

      runHook postConfigure
    '';

  doCheck = true;

  postFixup =
    let
      binPath = lib.makeBinPath [
        binutils-unwrapped
        harec
        qbe
      ];
    in
    ''
      wrapProgram $out/bin/hare --prefix PATH : ${binPath}
    '';

  setupHook = ./setup-hook.sh;

  strictDeps = true;
  enableParallelBuilding = true;

  meta = {
    homepage = "https://harelang.org/";
    description =
      "A systems programming language designed to be simple, stable, and robust";
    license = lib.licenses.gpl3Only;
    maintainers = with lib.maintainers; [ onemoresuza ];
    mainProgram = "hare";
    inherit (harec.meta) platforms badPlatforms;
  };
})
+0 −44
Original line number Diff line number Diff line
## Template to generate config.mk via substitute-all

# set PREFIX externally
BINDIR = $(PREFIX)/bin
MANDIR = $(PREFIX)/share/man
SRCDIR = $(PREFIX)/src
STDLIB = $(SRCDIR)/hare/stdlib

HAREPATH = $(SRCDIR)/hare/stdlib:$(SRCDIR)/hare/third-party

## Build configuration

# Platform to build for
PLATFORM = @platform@
ARCH = @arch@

# External tools and flags
HAREC = harec
HAREFLAGS = @hareflags@
QBE = qbe
AS = as
LD = ld
AR = ar
SCDOC = scdoc

# Where to store build artifacts
# set HARECACHE externally

# Cross-compiler toolchains
# # TODO: fixup this
AARCH64_AS=aarch64-as
AARCH64_AR=aarch64-ar
AARCH64_CC=aarch64-cc
AARCH64_LD=aarch64-ld

RISCV64_AS=riscv64-as
RISCV64_AR=riscv64-ar
RISCV64_CC=riscv64-cc
RISCV64_LD=riscv64-ld

X86_64_AS=as
X86_64_AR=ar
X86_64_CC=cc
X86_64_LD=ld
+0 −98
Original line number Diff line number Diff line
{ lib
, stdenv
, fetchFromSourcehut
, binutils-unwrapped
, harePackages
, makeWrapper
, qbe
, scdoc
, substituteAll
}:

let
  inherit (harePackages) harec;
in
stdenv.mkDerivation (finalAttrs: {
  pname = "hare";
  version = "unstable-2023-04-23";

  src = fetchFromSourcehut {
    owner = "~sircmpwn";
    repo = "hare";
    rev = "464ec7a660b12ab1ef8e4dcc9d00604cec996c6e";
    hash = "sha256-5/ObckDxosqUkFfDVhGA/0kwjFzDUxu420nkfa97vqM=";
  };

  nativeBuildInputs = [
    binutils-unwrapped
    harec
    makeWrapper
    qbe
    scdoc
  ];

  buildInputs = [
    binutils-unwrapped
    harec
    qbe
  ];

  strictDeps = true;

  configurePhase =
    let
      # https://harelang.org/platforms/
      arch =
        if stdenv.isx86_64 then "x86_64"
        else if stdenv.isAarch64 then "aarch64"
        else if stdenv.hostPlatform.isRiscV && stdenv.is64bit then "riscv64"
        else "unsupported";
      platform =
        if stdenv.isLinux then "linux"
        else if stdenv.isFreeBSD then "freebsd"
        else "unsupported";
      hareflags = "";
      config-file = substituteAll {
        src = ./config-template.mk;
        inherit arch platform hareflags;
      };
    in
    ''
      runHook preConfigure

      export HARECACHE="$NIX_BUILD_TOP/.harecache"
      export BINOUT="$NIX_BUILD_TOP/.bin"
      cat ${config-file} > config.mk

      runHook postConfigure
    '';

  makeFlags = [
    "PREFIX=${placeholder "out"}"
  ];

  doCheck = true;

  postInstall =
    let
      binPath = lib.makeBinPath [
        binutils-unwrapped
        harec
        qbe
      ];
    in
    ''
      wrapProgram $out/bin/hare --prefix PATH : ${binPath}
    '';

  setupHook = ./setup-hook.sh;

  meta = {
    homepage = "http://harelang.org/";
    description =
      "A systems programming language designed to be simple, stable, and robust";
    license = lib.licenses.gpl3Only;
    maintainers = with lib.maintainers; [ onemoresuza ];
    inherit (harec.meta) platforms badPlatforms;
  };
})
+63 −0
Original line number Diff line number Diff line
@@ -2,39 +2,57 @@
, stdenv
, fetchFromSourcehut
, qbe
, fetchgit
}:

let
  # harec needs the dbgfile and dbgloc features implemented up to this commit.
  # This can be dropped once 1.2 is released, for a possible release date see:
  # https://lists.sr.ht/~mpu/qbe/%3CZPkmHE9KLohoEohE%40cloudsdale.the-delta.net.eu.org%3E
  qbe' = qbe.overrideAttrs (_old: {
    version = "1.1-unstable-2023-08-18";
    src = fetchgit {
      url = "git://c9x.me/qbe.git";
      rev = "36946a5142c40b733d25ea5ca469f7949ee03439";
      hash = "sha256-bqxWFP3/aw7kRoD6ictbFcjzijktHvh4AgWAXBIODW8=";
    };
  });
in
stdenv.mkDerivation (finalAttrs: {
  pname = "harec";
  version = "unstable-2023-04-25";
  version = "unstable-2023-10-22";

  src = fetchFromSourcehut {
    owner = "~sircmpwn";
    repo = "harec";
    rev = "068e8da091f9053726251bc221abf40fdea630ff";
    hash = "sha256-PPR0d+6JJRzPURW7AznloBSrtylMJExNCGCxFMl2LsA=";
    rev = "64dea196ce040fbf3417e1b4fb11331688672aca";
    hash = "sha256-2Aeb+OZ/hYUyyxx6aTw+Oxiac+p+SClxtg0h68ZBSHc=";
  };

  nativeBuildInputs = [
    qbe
    qbe'
  ];

  buildInputs = [
    qbe
    qbe'
  ];

  # TODO: report upstream
  hardeningDisable = [ "fortify" ];

  strictDeps = true;
  enableParallelBuilding = true;

  doCheck = true;

  passthru = {
    # We create this attribute so that the `hare` package can access the
    # overwritten `qbe`.
    qbeUnstable = qbe';
  };

  meta = {
    homepage = "http://harelang.org/";
    homepage = "https://harelang.org/";
    description = "Bootstrapping Hare compiler written in C for POSIX systems";
    license = lib.licenses.gpl3Only;
    maintainers = with lib.maintainers; [ onemoresuza ];
    mainProgram = "harec";
    # The upstream developers do not like proprietary operating systems; see
    # https://harelang.org/platforms/
    # UPDATE: https://github.com/hshq/harelang provides a MacOS port
Loading