Split upstream into multiple derivations
This commit is contained in:
parent
2898f32458
commit
fd3ca8fb27
62
shell.nix
62
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;
|
||||
});
|
||||
};
|
||||
})
|
||||
|
|
|
@ -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 ];
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue