Unverified Commit c68fb0f3 authored by Aleksana's avatar Aleksana Committed by GitHub
Browse files

Merge pull request #311671 from onemoresuza/hare-fix-makeflags

hare: fix makeflags
parents 5903ac45 476b34c5
Loading
Loading
Loading
Loading
+85 −64
Original line number Diff line number Diff line
{ lib
, stdenv
, fetchFromSourcehut
, binutils-unwrapped
, harec
, makeWrapper
, qbe
, gitUpdater
, scdoc
, tzdata
, substituteAll
, fetchpatch
, callPackage
, enableCrossCompilation ? (stdenv.hostPlatform.isLinux && stdenv.hostPlatform.is64bit)
, pkgsCross
, x86_64PkgsCrossToolchain ? pkgsCross.gnu64
, aarch64PkgsCrossToolchain ? pkgsCross.aarch64-multiplatform
, riscv64PkgsCrossToolchain ? pkgsCross.riscv64
{
  lib,
  stdenv,
  fetchFromSourcehut,
  binutils-unwrapped,
  harec,
  makeWrapper,
  qbe,
  gitUpdater,
  scdoc,
  tzdata,
  substituteAll,
  fetchpatch,
  callPackage,
  enableCrossCompilation ? (stdenv.hostPlatform.isLinux && stdenv.hostPlatform.is64bit),
  pkgsCross,
  x86_64PkgsCrossToolchain ? pkgsCross.gnu64,
  aarch64PkgsCrossToolchain ? pkgsCross.aarch64-multiplatform,
  riscv64PkgsCrossToolchain ? pkgsCross.riscv64,
}:

# There's no support for `aarch64` or `riscv64` for freebsd nor for openbsd on nix.
# See `lib.systems.doubles.aarch64` and `lib.systems.doubles.riscv64`.
assert let
assert
  let
    inherit (stdenv.hostPlatform) isLinux is64bit;
    inherit (lib) intersectLists platforms concatStringsSep;
    workingPlatforms = intersectLists platforms.linux (with platforms; x86_64 ++ aarch64 ++ riscv64);
@@ -33,21 +35,27 @@ in

let
  arch = stdenv.hostPlatform.uname.processor;
  qbePlatform = {
  qbePlatform =
    {
      x86_64 = "amd64_sysv";
      aarch64 = "arm64";
      riscv64 = "rv64";
  }.${arch};
    }
    .${arch};
  platform = lib.toLower stdenv.hostPlatform.uname.system;
  embeddedOnBinaryTools =
    let
      genToolsFromToolchain = toolchain:
      genToolsFromToolchain =
        toolchain:
        let
          crossTargetPrefix = toolchain.stdenv.cc.targetPrefix;
          toolchainArch = toolchain.stdenv.hostPlatform.uname.processor;
          absOrRelPath = toolDrv: toolBasename:
            if arch == toolchainArch then toolBasename
            else lib.getExe' toolDrv "${crossTargetPrefix}${toolBasename}";
          absOrRelPath =
            toolDrv: toolBasename:
            if arch == toolchainArch then
              toolBasename
            else
              lib.getExe' toolDrv "${crossTargetPrefix}${toolBasename}";
        in
        {
          "ld" = absOrRelPath toolchain.buildPackages.binutils "ld";
@@ -65,7 +73,10 @@ stdenv.mkDerivation (finalAttrs: {
  pname = "hare";
  version = "0.24.0";

  outputs = [ "out" "man" ];
  outputs = [
    "out"
    "man"
  ];

  src = fetchFromSourcehut {
    owner = "~sircmpwn";
@@ -88,6 +99,11 @@ stdenv.mkDerivation (finalAttrs: {
    # Don't build haredoc since it uses the build `hare` bin, which breaks
    # cross-compilation.
    ./002-dont-build-haredoc.patch
    # Display toolchains when using `hare version -v`.
    (fetchpatch {
      url = "https://git.sr.ht/~sircmpwn/hare/commit/e35f2284774436f422e06f0e8d290b173ced1677.patch";
      hash = "sha256-A59bGO/9tOghV8/MomTxd8xRExkHVdoMom2d+HTfQGg=";
    })
  ];

  nativeBuildInputs = [
@@ -104,28 +120,29 @@ stdenv.mkDerivation (finalAttrs: {
    tzdata
  ];

  makeFlags = [
  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"
  ] ++ lib.optionals enableCrossCompilation [
    ]
    ++ lib.optionals enableCrossCompilation [
      "RISCV64_AS=${embeddedOnBinaryTools.riscv64.as}"
      "RISCV64_CC=${embeddedOnBinaryTools.riscv64.cc}"
      "RISCV64_LD=${embeddedOnBinaryTools.riscv64.ld}"
      "AARCH64_AS=${embeddedOnBinaryTools.aarch64.as}"
      "AARCH64_CC=${embeddedOnBinaryTools.aarch64.cc}"
      "AARCH64_LD=${embeddedOnBinaryTools.aarch64.ld}"
    "x86_64_AS=${embeddedOnBinaryTools.x86_64.as}"
    "x86_64_CC=${embeddedOnBinaryTools.x86_64.cc}"
    "x86_64_LD=${embeddedOnBinaryTools.x86_64.ld}"
      "X86_64_AS=${embeddedOnBinaryTools.x86_64.as}"
      "X86_64_CC=${embeddedOnBinaryTools.x86_64.cc}"
      "X86_64_LD=${embeddedOnBinaryTools.x86_64.ld}"
    ];

  enableParallelBuilding = true;
@@ -143,7 +160,13 @@ stdenv.mkDerivation (finalAttrs: {

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

  setupHook = ./setup-hook.sh;
@@ -151,9 +174,7 @@ stdenv.mkDerivation (finalAttrs: {
  passthru = {
    updateScript = gitUpdater { };
    tests = lib.optionalAttrs enableCrossCompilation {
      crossCompilation = callPackage ./cross-compilation-tests.nix {
        hare = finalAttrs.finalPackage;
      };
      crossCompilation = callPackage ./cross-compilation-tests.nix { hare = finalAttrs.finalPackage; };
    };
  };