cross compilation: get mepo to cross compile

in the end i don't even need to emulate zig... (yay)

the mepo_1_1 stuff isn't needed. i'll delete it next patch
This commit is contained in:
Colin 2023-08-06 08:09:13 +00:00
parent a4860c3963
commit 75770cd34b
3 changed files with 172 additions and 71 deletions

View File

@ -844,78 +844,161 @@ in {
# depsBuildBuild = (upstream.depsBuildBuild or []) ++ [ final.pkg-config ];
});
mepo =
# let
# zig = final.zig.override {
# inherit (emulated) stdenv;
# };
# # makeWrapper = final.makeWrapper.override {
# # inherit (emulated) stdenv;
# # };
# # makeWrapper = emulated.stdenv.mkDerivation final.makeWrapper;
# in
# (prev.mepo.overrideAttrs (upstream: {
# checkPhase = lib.replaceStrings [ "zig" ] [ "${zig}/bin/zig" ] upstream.checkPhase;
# installPhase = lib.replaceStrings [ "zig" ] [ "${zig}/bin/zig" ] upstream.installPhase;
# })).override {
# inherit (emulated) stdenv;
# inherit zig;
# };
let
mepoDefn = {
stdenv
, upstreamMepo
, makeWrapper
, pkg-config
, zig
# buildInputs
, curl
, SDL2
, SDL2_gfx
, SDL2_image
, SDL2_ttf
, jq
, ncurses
}: stdenv.mkDerivation {
inherit (upstreamMepo)
pname
version
src
# buildInputs
preBuild
doCheck
postInstall
meta
;
# moves pkg-config to buildInputs where zig can see it, and uses the host build of zig.
nativeBuildInputs = [ makeWrapper ];
buildInputs = [
curl SDL2 SDL2_gfx SDL2_image SDL2_ttf jq ncurses pkg-config
# mepo_1_1 = emulateBuildMachine (prev.mepo_1_1.override {
# zig_0_9 = final.zig_0_9.overrideAttrs (upstream: {
# cmakeFlags = (upstream.cmakeFlags or []) ++ [
# "-DZIG_EXECUTABLE=${final.buildPackages.zig_0_9}/bin/zig"
# ];
# doInstallCheck = false;
# });
# });
mepo_1_1 = emulateBuildMachine (prev.mepo_1_1.override {
zig_0_9 = emulateBuildMachine (final.zig_0_9.overrideAttrs (upstream: {
cmakeFlags = (upstream.cmakeFlags or []) ++ [
# "-DZIG_EXECUTABLE=${final.buildPackages.zig_0_9}/bin/zig"
"-DZIG_TARGET_TRIPLE=aarch64-linux-gnu"
];
checkPhase = lib.replaceStrings [ "zig" ] [ "${zig}/bin/zig" ] upstreamMepo.checkPhase;
installPhase = lib.replaceStrings [ "zig" ] [ "${zig}/bin/zig" ] upstreamMepo.installPhase;
};
in
emulateBuildMachine (final.callPackage mepoDefn {
upstreamMepo = prev.mepo;
zig = emulateBuildMachine final.zig;
});
# (prev.mepo.override {
# # emulate zig and stdenv to fix:
# # - "/build/source/src/sdlshim.zig:1:20: error: C import failed"
# # emulate makeWrapper to fix:
# # - "error: makeWrapper/makeShellWrapper must be in nativeBuildInputs"
# # inherit (emulated) makeWrapper stdenv;
# inherit (emulated) stdenv;
# inherit zig;
# # inherit makeWrapper;
# }).overrideAttrs (upstream: {
# # nativeBuildInputs = [ final.pkg-config makeWrapper ];
# # nativeBuildInputs = [ final.pkg-config emulated.makeWrapper ];
# # ref to zig by full path because otherwise it doesn't end up on the path...
# #checkPhase = lib.replaceStrings [ "zig" ] [ "${zig}/bin/zig" ] upstream.checkPhase;
# #installPhase = lib.replaceStrings [ "zig" ] [ "${zig}/bin/zig" ] upstream.installPhase;
# });
doInstallCheck = false;
}));
});
mepo = prev.mepo.overrideAttrs (upstream: {
doCheck = false;
nativeBuildInputs = upstream.nativeBuildInputs ++ [
# zig hard-codes `pkg-config` inside lib/std/build.zig
(final.buildPackages.writeShellScriptBin "pkg-config" ''
exec $PKG_CONFIG $@
'')
];
postPatch = (upstream.postPatch or "") + ''
substituteInPlace src/sdlshim.zig \
--replace 'cInclude("SDL2/SDL_image.h")' 'cInclude("SDL_image.h")' \
--replace 'cInclude("SDL2/SDL_ttf.h")' 'cInclude("SDL_ttf.h")'
substituteInPlace build.zig \
--replace 'step.linkSystemLibrary("curl")' 'step.linkSystemLibrary("libcurl")' \
--replace 'exe.install();' 'exe.install(); if (true) { return; } // skip tests when cross compiling'
'';
# optional `zig build` debugging flags:
# - --verbose
# - --verbose-cimport
# - --help
installPhase = ''
runHook preInstall
zig build -Dtarget=aarch64-linux-gnu -Drelease-safe=true -Dcpu=baseline --prefix $out install
install -d $out/share/man/man1
runHook postInstall
'';
});
# mepo = emulateBuildMachine (prev.mepo.override {
# zig = (final.buildPackages.zig.overrideAttrs (upstream: {
# cmakeFlags = (upstream.cmakeFlags or []) ++ [
# "-DZIG_EXECUTABLE=${final.buildPackages.zig}/bin/zig"
# "-DZIG_TARGET_TRIPLE=aarch64-linux-gnu"
# # "-DZIG_MCPU=${final.targetPlatform.gcc.cpu}"
# ];
# # makeFlags = (upstream.makeFlags or []) ++ [
# # # stop at the second stage.
# # # the third stage would be a self-hosted compiler (i.e. build the compiler using what you just built),
# # # but that only works on native builds
# # "zig2"
# # ];
# }));
# });
# mepo = prev.mepo.overrideAttrs (upstream: {
# installPhase = lib.replaceStrings [ "zig " ] [ "zig -Dtarget=aarch64-linux "] upstream.installPhase;
# doCheck = false;
# });
# mepo =
# # let
# # zig = final.zig.override {
# # inherit (emulated) stdenv;
# # };
# # # makeWrapper = final.makeWrapper.override {
# # # inherit (emulated) stdenv;
# # # };
# # # makeWrapper = emulated.stdenv.mkDerivation final.makeWrapper;
# # in
# # (prev.mepo.overrideAttrs (upstream: {
# # checkPhase = lib.replaceStrings [ "zig" ] [ "${zig}/bin/zig" ] upstream.checkPhase;
# # installPhase = lib.replaceStrings [ "zig" ] [ "${zig}/bin/zig" ] upstream.installPhase;
# # })).override {
# # inherit (emulated) stdenv;
# # inherit zig;
# # };
# let
# mepoDefn = {
# stdenv
# , upstreamMepo
# , makeWrapper
# , pkg-config
# , zig
# # buildInputs
# , curl
# , SDL2
# , SDL2_gfx
# , SDL2_image
# , SDL2_ttf
# , jq
# , ncurses
# }: stdenv.mkDerivation {
# inherit (upstreamMepo)
# pname
# version
# src
# # buildInputs
# preBuild
# doCheck
# postInstall
# meta
# ;
# # moves pkg-config to buildInputs where zig can see it, and uses the host build of zig.
# nativeBuildInputs = [ makeWrapper ];
# buildInputs = [
# curl SDL2 SDL2_gfx SDL2_image SDL2_ttf jq ncurses pkg-config
# ];
# checkPhase = lib.replaceStrings [ "zig" ] [ "${zig}/bin/zig" ] upstreamMepo.checkPhase;
# installPhase = lib.replaceStrings [ "zig" ] [ "${zig}/bin/zig" ] upstreamMepo.installPhase;
# };
# in
# emulateBuildMachine (final.callPackage mepoDefn {
# upstreamMepo = prev.mepo;
# zig = final.zig.overrideAttrs (upstream: {
# # TODO: for zig1 we can actually set ZIG_EXECUTABLE and use the build zig.
# # zig2 doesn't support that.
# postPatch = (upstream.postPatch or "") + ''
# substituteInPlace CMakeLists.txt \
# --replace "COMMAND zig1 " "COMMAND ${final.stdenv.hostPlatform.emulator final.buildPackages} $PWD/build/zig1 " \
# --replace "COMMAND zig2 " "COMMAND ${final.stdenv.hostPlatform.emulator final.buildPackages} $PWD/build/zig2 "
# '';
# });
# # zig = emulateBuildMachine (final.zig.overrideAttrs (upstream: {
# # # speed up the emulated build by skipping docs and tests
# # outputs = [ "out" ];
# # postBuild = ""; # don't build docs
# # doInstallCheck = false;
# # doCheck = false;
# # }));
# });
# # (prev.mepo.override {
# # # emulate zig and stdenv to fix:
# # # - "/build/source/src/sdlshim.zig:1:20: error: C import failed"
# # # emulate makeWrapper to fix:
# # # - "error: makeWrapper/makeShellWrapper must be in nativeBuildInputs"
# # # inherit (emulated) makeWrapper stdenv;
# # inherit (emulated) stdenv;
# # inherit zig;
# # # inherit makeWrapper;
# # }).overrideAttrs (upstream: {
# # # nativeBuildInputs = [ final.pkg-config makeWrapper ];
# # # nativeBuildInputs = [ final.pkg-config emulated.makeWrapper ];
# # # ref to zig by full path because otherwise it doesn't end up on the path...
# # #checkPhase = lib.replaceStrings [ "zig" ] [ "${zig}/bin/zig" ] upstream.checkPhase;
# # #installPhase = lib.replaceStrings [ "zig" ] [ "${zig}/bin/zig" ] upstream.installPhase;
# # });
# mepo = (prev.mepo.override {
# # emulate zig and stdenv to fix:
# # - "/build/source/src/sdlshim.zig:1:20: error: C import failed"

View File

@ -0,0 +1,17 @@
{ stdenv
, mepo
, fetchFromSourcehut
, zig_0_9
}:
(mepo.override {
inherit stdenv; #< for easier `override` in cross.nix
zig = zig_0_9;
}).overrideAttrs (orig: rec {
version = "1.1";
src = fetchFromSourcehut {
owner = "~mil";
repo = "mepo";
rev = version;
hash = "sha256-OIZ617QLjiTiDwcsn0DnRussYtjDkVyifr2mdSqA98A=";
};
})

View File

@ -41,6 +41,7 @@ let
ldd-aarch64 = callPackage ./additional/ldd-aarch64 { };
lightdm-mobile-greeter = callPackage ./additional/lightdm-mobile-greeter { };
linux-megous = callPackage ./additional/linux-megous { };
mepo_1_1 = callPackage ./additional/mepo_1_1 { };
mpv-uosc-latest = callPackage ./additional/mpv-uosc-latest { };
mx-sanebot = callPackage ./additional/mx-sanebot { };
rtl8723cs-firmware = callPackage ./additional/rtl8723cs-firmware { };