From fd3ca8fb272a82f75685a471c83c00141ff0d148 Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Fri, 20 Sep 2019 22:21:51 +0200 Subject: [PATCH] Split upstream into multiple derivations --- shell.nix | 62 ++++++++-------- upstream/default.nix | 163 ++++++++++++++++++++++++------------------- 2 files changed, 122 insertions(+), 103 deletions(-) diff --git a/shell.nix b/shell.nix index 028507d..94ac060 100644 --- a/shell.nix +++ b/shell.nix @@ -1,37 +1,35 @@ { nixpkgs, toolchain, dhallPackages, pkgs }: let - args = - { name = "genode-dev-env"; - buildInputs = with nixpkgs.buildPackages; - [ toolchain - stdenv.glibc.dev - git tup - ccache - pkgconfig - pkgs.upstream.dev - pkgs.ports.libc.dev - ]; + args = { + name = "genode-dev-env"; + buildInputs = with nixpkgs.buildPackages; [ + toolchain + git + tup + ccache + pkgconfig + pkgs.upstream.base.dev + pkgs.ports.libc.dev + ]; - GENODE_DEV = pkgs.upstream.dev; + GENODE = pkgs.upstream.base; - shellHook = - '' - export DHALL_PRELUDE=${dhallPackages.prelude}/package.dhall - export DHALL_GENODE=${dhallPackages.genode}/package.dhall - export DHALL_GENODE_TYPES=${dhallPackages.genode}/types.dhall - export PROMPT_DIRTRIM=2 - export PS1="\[\033[1;30m\]dev: [\[\033[1;37m\]\w\[\033[1;30m\]] $\[\033[0m\] " - export PS2="\[\033[1;30m\]>\[\033[0m\] " - ''; - # Setup a prompt with a distinct appearance - }; -in -nixpkgs.buildPackages.mkShell - ( args - // { passthru = - { mkShell = { buildInputs, ... }@args': nixpkgs.buildPackages.mkShell - ( args // args' // { buildInputs = args.buildInputs ++ args'.buildInputs; } ); - }; - } - ) + shellHook = '' + export DHALL_PRELUDE=${dhallPackages.prelude}/package.dhall + export DHALL_GENODE=${dhallPackages.genode}/package.dhall + export DHALL_GENODE_TYPES=${dhallPackages.genode}/types.dhall + export PROMPT_DIRTRIM=2 + export PS1="\[\033[1;30m\]dev: [\[\033[1;37m\]\w\[\033[1;30m\]] $\[\033[0m\] " + export PS2="\[\033[1;30m\]>\[\033[0m\] " + ''; + # Setup a prompt with a distinct appearance + }; +in nixpkgs.buildPackages.mkShell (args // { + passthru = { + mkShell = { buildInputs, ... }@args': + nixpkgs.buildPackages.mkShell (args // args' // { + buildInputs = args.buildInputs ++ args'.buildInputs; + }); + }; +}) diff --git a/upstream/default.nix b/upstream/default.nix index ab0036a..e933e43 100644 --- a/upstream/default.nix +++ b/upstream/default.nix @@ -1,80 +1,101 @@ { nixpkgs }: -with builtins; +let + inherit (nixpkgs.stdenv) lib targetPlatform; + specs = with targetPlatform; + [ ] ++ lib.optional is32bit "32bit" ++ lib.optional is64bit "64bit" + ++ lib.optional isAarch32 "arm" ++ lib.optional isAarch64 "arm_64" + ++ lib.optional isRiscV "riscv" ++ lib.optional isx86 "x86" + ++ lib.optional isx86_32 "x86_32" ++ lib.optional isx86_64 "x86_64"; -nixpkgs.stdenv.mkDerivation { - name = "genode"; - outputs = [ "out" "dev" ]; version = "19.07"; + buildRepo = repo: nativeBuildInputs: - LIBCXX = nixpkgs.llvmPackages.libcxx; - LIBCXXABI = nixpkgs.llvmPackages.libcxxabi; - LIBUNWIND = nixpkgs.llvmPackages.libunwind; - HOST_LIBC = nixpkgs.buildPackages.glibc.dev; + nixpkgs.stdenv.mkDerivation { + name = "genode-${repo}-${version}"; + outputs = [ "out" "dev" ]; + inherit repo nativeBuildInputs specs version; - src = nixpkgs.fetchgit - { url = "https://git.sr.ht/~ehmry/genode"; - rev = "edb117c13b0cde38ba66ffaaa19a798fbb6d044d"; - sha256 = "0rkpsh07hdv4r5pgyw707zhv546h96c6h150cdw01hi54jq8c0dr"; - fetchSubmodules = false; + LIBCXX = nixpkgs.llvmPackages.libcxx; + LIBCXXABI = nixpkgs.llvmPackages.libcxxabi; + LIBUNWIND = nixpkgs.llvmPackages.libunwind; + HOST_LIBC = nixpkgs.buildPackages.glibc.dev; + + LIBUNWIND_BAREMETAL = + nixpkgs.llvmPackages.libunwind.override { isBaremetal = true; }; + + src = nixpkgs.fetchgit { + url = "https://git.sr.ht/~ehmry/genode"; + rev = "e22d21e49f298ed9bba2f05eff0ab3390674040a"; + sha256 = "0i7a18rxzjb1nv42039dbjwvf4bnsi2rl8zcs8amj6kbxfyrdk9z"; + fetchSubmodules = false; + }; + + setupHook = ./../tool/setup-hooks.sh; + + depsBuildBuild = with nixpkgs.buildPackages; [ llvm pkgconfig tup ]; + + configurePhase = '' + # Configure Tup + echo CONFIG_NIX= >> tup.config + echo CONFIG_NIX_OUTPUTS_OUT=$out >> tup.config + echo CONFIG_NIX_OUTPUTS_DEV=$dev >> tup.config + + # Disable other repos + for R in repos/*; do + [ "$R" != "repos/$repo" ] && find $R -name Tupfile -delete + done + find repos/gems -name Tupfile -delete + + # Scan repository and generate script + rm Tupfile # skip the dhall stuff + tup init + tup generate buildPhase.sh + + # Redirect artifacts to Nix store + mkdir -p $out $dev/include + ln -s $out out + ln -s $dev dev + ''; + + buildPhase = '' + test -d repos/$repo/src/ld && cp -rv repos/$repo/src/ld $dev/ + pushd . + set -v + source buildPhase.sh + set +v + popd + ''; + + installPhase = '' + # Populate the "dev" headers + for DIR in repos/$repo/include; do + for SPEC in $specs; do + if [ -d $DIR/spec/$SPEC ]; then + cp -r $DIR/spec/$SPEC/* $dev/include + rm -r $DIR/spec/$SPEC + fi + done + rm -rf $DIR/spec + cp -r $DIR $dev/ + done + + touch $dev/.genode + for pc in $dev/lib/pkgconfig/*.pc; do + sed -i "s|-l:|$dev/lib/|g" $pc + done + ''; + + shellHook = '' + export PROMPT_DIRTRIM=2 + export PS1="\[\033[1;30m\]Genode-dev [\[\033[1;37m\]\w\[\033[1;30m\]] $\[\033[0m\] " + export PS2="\[\033[1;30m\]>\[\033[0m\] " + ''; }; - setupHook = ./../tool/setup-hooks.sh; - - depsBuildBuild = with nixpkgs.buildPackages; - [ stdenv.glibc.dev - tup - pkgconfig - ]; - - configurePhase = - '' - # Populate the SDK headers - mkdir -p $out $dev/include - cp -r repos/base/src/ld $dev/ld - cp -r repos/base/include $dev/include/base - cp -r repos/os/include $dev/include/os - cp -r repos/libports/include $dev/include/libports - cp -r repos/gems/include $dev/include/gems - - # Configure Tup - echo CONFIG_NIX= >> tup.config - echo CONFIG_NIX_OUTPUTS_OUT=$out >> tup.config - echo CONFIG_NIX_OUTPUTS_DEV=$dev >> tup.config - - # Disable Gems build - find repos/gems -name Tupfile -delete - - # Scan repository and generate script - rm Tupfile # skip the dhall stuff - tup init - tup generate buildPhase.sh - - # Redirect artifacts to Nix store - ln -s $out out - ln -s $dev dev - ''; - - buildPhase = - '' - set -v - source buildPhase.sh - set +v - ''; - - installPhase = - '' - touch $dev/.genode - for pc in $dev/lib/pkgconfig/*.pc - do - sed -i "s|-l:|$dev/lib/|g" $pc - done - ''; - - shellHook = - '' - export PROMPT_DIRTRIM=2 - export PS1="\[\033[1;30m\]Genode-dev [\[\033[1;37m\]\w\[\033[1;30m\]] $\[\033[0m\] " - export PS2="\[\033[1;30m\]>\[\033[0m\] " - ''; +in rec { + base = buildRepo "base" [ ]; + base-linux = buildRepo "base-linux" [ base ]; + base-nova = buildRepo "base-nova" [ base ]; + os = buildRepo "os" [ base ]; }