|
| 1 | +{ enableSystemd ? true }: |
| 2 | +let |
| 3 | + static = import ./static.nix; |
| 4 | + pkgs = (import ./nixpkgs.nix { |
| 5 | + crossSystem = { |
| 6 | + config = "powerpc64le-unknown-linux-gnu"; |
| 7 | + }; |
| 8 | + config = { |
| 9 | + packageOverrides = pkg: { |
| 10 | + gcrypt = (static pkg.libgcrypt); |
| 11 | + gpgme = (static pkg.gpgme); |
| 12 | + libassuan = (static pkg.libassuan); |
| 13 | + libgpgerror = (static pkg.libgpgerror); |
| 14 | + libseccomp = (static pkg.libseccomp); |
| 15 | + glib = (static pkg.glib).overrideAttrs (x: { |
| 16 | + outputs = [ "bin" "out" "dev" ]; |
| 17 | + mesonFlags = [ |
| 18 | + "-Ddefault_library=static" |
| 19 | + "-Ddevbindir=${placeholder ''dev''}/bin" |
| 20 | + "-Dgtk_doc=false" |
| 21 | + "-Dnls=disabled" |
| 22 | + ]; |
| 23 | + postInstall = '' |
| 24 | + moveToOutput "share/glib-2.0" "$dev" |
| 25 | + substituteInPlace "$dev/bin/gdbus-codegen" --replace "$out" "$dev" |
| 26 | + sed -i "$dev/bin/glib-gettextize" -e "s|^gettext_dir=.*|gettext_dir=$dev/share/glib-2.0/gettext|" |
| 27 | + sed '1i#line 1 "${x.pname}-${x.version}/include/glib-2.0/gobject/gobjectnotifyqueue.c"' \ |
| 28 | + -i "$dev"/include/glib-2.0/gobject/gobjectnotifyqueue.c |
| 29 | + ''; |
| 30 | + }); |
| 31 | + libcap = (static pkg.libcap).overrideAttrs (x: { |
| 32 | + postInstall = '' |
| 33 | + mkdir -p "$doc/share/doc/${x.pname}-${x.version}" |
| 34 | + cp License "$doc/share/doc/${x.pname}-${x.version}/" |
| 35 | + mkdir -p "$pam/lib/security" |
| 36 | + mv "$lib"/lib/security "$pam/lib" |
| 37 | + ''; |
| 38 | + }); |
| 39 | + systemd = (static pkg.systemd).overrideAttrs (x: { |
| 40 | + outputs = [ "out" "dev" ]; |
| 41 | + mesonFlags = x.mesonFlags ++ [ |
| 42 | + "-Dglib=false" |
| 43 | + "-Dbpf-compiler=gcc" |
| 44 | + "-Dbpf-framework=false" |
| 45 | + "-Dstatic-libsystemd=true" |
| 46 | + ]; |
| 47 | + }); |
| 48 | + yajl = (static pkg.yajl).overrideAttrs (x: { |
| 49 | + preConfigure = '' |
| 50 | + export CMAKE_STATIC_LINKER_FLAGS="-static" |
| 51 | + ''; |
| 52 | + }); |
| 53 | + zstd = pkg.zstd.overrideAttrs (x: { |
| 54 | + cmakeFlags = x.cmakeFlags ++ [ "-DZSTD_BUILD_CONTRIB:BOOL=OFF" ]; |
| 55 | + preInstall = ""; |
| 56 | + }); |
| 57 | + }; |
| 58 | + }; |
| 59 | + }); |
| 60 | + |
| 61 | + self = with pkgs; stdenv.mkDerivation rec { |
| 62 | + name = "crun"; |
| 63 | + src = ./..; |
| 64 | + vendorSha256 = null; |
| 65 | + doCheck = false; |
| 66 | + enableParallelBuilding = true; |
| 67 | + outputs = [ "out" ]; |
| 68 | + nativeBuildInputs = with buildPackages; [ |
| 69 | + autoreconfHook |
| 70 | + bash |
| 71 | + gitMinimal |
| 72 | + pkg-config |
| 73 | + python3 |
| 74 | + which |
| 75 | + ]; |
| 76 | + buildInputs = [ |
| 77 | + gcrypt |
| 78 | + glibc |
| 79 | + glibc.static |
| 80 | + libcap |
| 81 | + libseccomp |
| 82 | + systemd |
| 83 | + yajl |
| 84 | + ]; |
| 85 | + configureFlags = [ "--enable-static" ] |
| 86 | + ++ lib.optional (!enableSystemd) [ "--disable-systemd" ]; |
| 87 | + prePatch = '' |
| 88 | + export CFLAGS='-static -pthread' |
| 89 | + export LDFLAGS='-s -w -static-libgcc -static' |
| 90 | + export EXTRA_LDFLAGS='-s -w -linkmode external -extldflags "-static -lm"' |
| 91 | + export CRUN_LDFLAGS='-all-static' |
| 92 | + export LIBS='${glibc.static}/lib/libc.a ${glibc.static}/lib/libpthread.a ${glibc.static}/lib/librt.a ${lib.getLib libcap}/lib/libcap.a ${lib.getLib libseccomp}/lib/libseccomp.a ${lib.getLib systemd}/lib/libsystemd.a ${yajl}/lib/libyajl_s.a ${gcrypt}/lib/libgcrypt.a' |
| 93 | + ''; |
| 94 | + buildPhase = '' |
| 95 | + patchShebangs . |
| 96 | + make |
| 97 | + ''; |
| 98 | + installPhase = '' |
| 99 | + install -Dm755 crun $out/bin/crun |
| 100 | + ''; |
| 101 | + }; |
| 102 | +in |
| 103 | +self |
0 commit comments