diff --git a/default.nix b/default.nix index 1317ed5..1c7323f 100644 --- a/default.nix +++ b/default.nix @@ -1,23 +1,30 @@ -{ nixpkgs ? import }: - -with builtins; - let - nixpkgs' = nixpkgs { - config.allowUnsupportedSystem = true; - crossSystem = { - isx86_64 = true; - isGenode = true; - imports = [ ./platform.nix ]; + pkgOverlay = self: super: + # Overlay of locally defined packages + { + genode = super.callPackage ./upstream { }; + dhall = super.callPackage ./dhall { }; }; - overlays = [ (import ./overlay) ]; + + toolchainOverlay = import ./toolchain-overlay; + # Overlay of toolchain patches + + nixpkgs' = builtins.fetchGit { + # A branch of Nixpkgs with a custom "crossSystem" mechanism + url = "https://github.com/ehmry/nixpkgs.git"; + ref = "hybrid"; + rev = "e4d734ace275cae70a776771d034c051956c9cab"; }; -in rec { - nixpkgs = nixpkgs'; - - dhall = import ./dhall { inherit nixpkgs; }; - - upstream = import ./upstream { inherit nixpkgs; }; +in { nixpkgs ? import nixpkgs' }: +nixpkgs { + # Evaluate an overlayed Nixpkgs for a Genode target + config.allowUnsupportedSystem = true; + crossSystem = { + isx86_64 = true; + isGenode = true; + imports = [ ./platform.nix ]; + }; + overlays = [ toolchainOverlay pkgOverlay ]; } diff --git a/dhall/default.nix b/dhall/default.nix index ffe8d43..29bda3e 100644 --- a/dhall/default.nix +++ b/dhall/default.nix @@ -1,8 +1,7 @@ -{ nixpkgs }: +{ callPackage }: rec { - prelude = prelude_9_0_0; - prelude_9_0_0 = nixpkgs.callPackage ./prelude-9.0.0.nix {}; - genode = nixpkgs.callPackage ./genode.nix {}; + prelude_9_0_0 = callPackage ./prelude-9.0.0.nix { }; + genode = callPackage ./genode.nix { }; } diff --git a/overlay/Genode.cmake b/toolchain-overlay/Genode.cmake similarity index 100% rename from overlay/Genode.cmake rename to toolchain-overlay/Genode.cmake diff --git a/overlay/binutils.patch b/toolchain-overlay/binutils.patch similarity index 100% rename from overlay/binutils.patch rename to toolchain-overlay/binutils.patch diff --git a/overlay/clang.patch b/toolchain-overlay/clang.patch similarity index 100% rename from overlay/clang.patch rename to toolchain-overlay/clang.patch diff --git a/overlay/compiler-rt.patch b/toolchain-overlay/compiler-rt.patch similarity index 100% rename from overlay/compiler-rt.patch rename to toolchain-overlay/compiler-rt.patch diff --git a/overlay/default.nix b/toolchain-overlay/default.nix similarity index 100% rename from overlay/default.nix rename to toolchain-overlay/default.nix diff --git a/overlay/headers/default.nix b/toolchain-overlay/headers/default.nix similarity index 100% rename from overlay/headers/default.nix rename to toolchain-overlay/headers/default.nix diff --git a/overlay/libc++.patch b/toolchain-overlay/libc++.patch similarity index 100% rename from overlay/libc++.patch rename to toolchain-overlay/libc++.patch diff --git a/overlay/libc/MB_CUR_MAX.patch b/toolchain-overlay/libc/MB_CUR_MAX.patch similarity index 100% rename from overlay/libc/MB_CUR_MAX.patch rename to toolchain-overlay/libc/MB_CUR_MAX.patch diff --git a/overlay/libc/_CurrentRuneLocale.patch b/toolchain-overlay/libc/_CurrentRuneLocale.patch similarity index 100% rename from overlay/libc/_CurrentRuneLocale.patch rename to toolchain-overlay/libc/_CurrentRuneLocale.patch diff --git a/overlay/libc/cdefs_no_hidden.patch b/toolchain-overlay/libc/cdefs_no_hidden.patch similarity index 100% rename from overlay/libc/cdefs_no_hidden.patch rename to toolchain-overlay/libc/cdefs_no_hidden.patch diff --git a/overlay/libc/default.nix b/toolchain-overlay/libc/default.nix similarity index 100% rename from overlay/libc/default.nix rename to toolchain-overlay/libc/default.nix diff --git a/overlay/libc/gdtoa.patch b/toolchain-overlay/libc/gdtoa.patch similarity index 100% rename from overlay/libc/gdtoa.patch rename to toolchain-overlay/libc/gdtoa.patch diff --git a/overlay/libc/genode_rel.ld b/toolchain-overlay/libc/genode_rel.ld similarity index 100% rename from overlay/libc/genode_rel.ld rename to toolchain-overlay/libc/genode_rel.ld diff --git a/overlay/libc/libc-builder.sh b/toolchain-overlay/libc/libc-builder.sh similarity index 100% rename from overlay/libc/libc-builder.sh rename to toolchain-overlay/libc/libc-builder.sh diff --git a/overlay/libc/libc.pc.in b/toolchain-overlay/libc/libc.pc.in similarity index 100% rename from overlay/libc/libc.pc.in rename to toolchain-overlay/libc/libc.pc.in diff --git a/overlay/libc/libc.symbols b/toolchain-overlay/libc/libc.symbols similarity index 100% rename from overlay/libc/libc.symbols rename to toolchain-overlay/libc/libc.symbols diff --git a/overlay/libc/log2.patch b/toolchain-overlay/libc/log2.patch similarity index 100% rename from overlay/libc/log2.patch rename to toolchain-overlay/libc/log2.patch diff --git a/overlay/libc/mktime.patch b/toolchain-overlay/libc/mktime.patch similarity index 100% rename from overlay/libc/mktime.patch rename to toolchain-overlay/libc/mktime.patch diff --git a/overlay/libc/printfcommon.patch b/toolchain-overlay/libc/printfcommon.patch similarity index 100% rename from overlay/libc/printfcommon.patch rename to toolchain-overlay/libc/printfcommon.patch diff --git a/overlay/libc/rcmd.patch b/toolchain-overlay/libc/rcmd.patch similarity index 100% rename from overlay/libc/rcmd.patch rename to toolchain-overlay/libc/rcmd.patch diff --git a/overlay/libc/res_init_c.patch b/toolchain-overlay/libc/res_init_c.patch similarity index 100% rename from overlay/libc/res_init_c.patch rename to toolchain-overlay/libc/res_init_c.patch diff --git a/overlay/libc/runetype.patch b/toolchain-overlay/libc/runetype.patch similarity index 100% rename from overlay/libc/runetype.patch rename to toolchain-overlay/libc/runetype.patch diff --git a/overlay/libc/semaphore.patch b/toolchain-overlay/libc/semaphore.patch similarity index 100% rename from overlay/libc/semaphore.patch rename to toolchain-overlay/libc/semaphore.patch diff --git a/overlay/libc/thread_local.patch b/toolchain-overlay/libc/thread_local.patch similarity index 100% rename from overlay/libc/thread_local.patch rename to toolchain-overlay/libc/thread_local.patch diff --git a/overlay/libc/types.patch b/toolchain-overlay/libc/types.patch similarity index 100% rename from overlay/libc/types.patch rename to toolchain-overlay/libc/types.patch diff --git a/overlay/libc/vfwprintf_c_warn.patch b/toolchain-overlay/libc/vfwprintf_c_warn.patch similarity index 100% rename from overlay/libc/vfwprintf_c_warn.patch rename to toolchain-overlay/libc/vfwprintf_c_warn.patch diff --git a/overlay/libc/xlocale.patch b/toolchain-overlay/libc/xlocale.patch similarity index 100% rename from overlay/libc/xlocale.patch rename to toolchain-overlay/libc/xlocale.patch diff --git a/overlay/libc/xlocale_private.patch b/toolchain-overlay/libc/xlocale_private.patch similarity index 100% rename from overlay/libc/xlocale_private.patch rename to toolchain-overlay/libc/xlocale_private.patch diff --git a/overlay/libc/xprintf_float.patch b/toolchain-overlay/libc/xprintf_float.patch similarity index 100% rename from overlay/libc/xprintf_float.patch rename to toolchain-overlay/libc/xprintf_float.patch diff --git a/overlay/llvm.patch b/toolchain-overlay/llvm.patch similarity index 100% rename from overlay/llvm.patch rename to toolchain-overlay/llvm.patch diff --git a/upstream/default.nix b/upstream/default.nix index 60037d4..e78d5f1 100644 --- a/upstream/default.nix +++ b/upstream/default.nix @@ -1,30 +1,34 @@ -{ nixpkgs }: +{ stdenv, buildPackages, fetchgit, llvmPackages }: 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"; + inherit (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"; version = "19.07"; - buildRepo = repo: nativeBuildInputs: + buildRepo = repo: - nixpkgs.stdenv.mkDerivation { + stdenv.mkDerivation { name = "genode-${repo}-${version}"; outputs = [ "out" "dev" ]; - inherit repo nativeBuildInputs specs version; + inherit repo specs version; - LIBCXX = nixpkgs.llvmPackages.libcxx; - LIBCXXABI = nixpkgs.llvmPackages.libcxxabi; - LIBUNWIND = nixpkgs.llvmPackages.libunwind; - HOST_LIBC = nixpkgs.buildPackages.glibc.dev; + HOST_LIBC = buildPackages.glibc.dev; + LIBCXX = llvmPackages.libcxx; + LIBCXXABI = llvmPackages.libcxxabi; + LIBUNWIND = llvmPackages.libunwind; LIBUNWIND_BAREMETAL = - nixpkgs.llvmPackages.libunwind.override { isBaremetal = true; }; + llvmPackages.libunwind.override { isBaremetal = true; }; - src = nixpkgs.fetchgit { + src = fetchgit { url = "https://git.sr.ht/~ehmry/genode"; rev = "d28abff776f94dc876662eb7dcdf5a6e81d26cc8"; sha256 = "1ibw27s352c2si22y209q17api8gaqv7qsh70vh4wk9bfv1kgchx"; @@ -33,7 +37,7 @@ let setupHook = ./../tool/setup-hooks.sh; - depsBuildBuild = with nixpkgs.buildPackages; [ llvm pkgconfig tup ]; + depsBuildBuild = with buildPackages; [ llvm pkgconfig tup ]; configurePhase = '' # Configure Tup @@ -94,8 +98,11 @@ let }; in rec { - base = buildRepo "base" [ ]; - base-linux = buildRepo "base-linux" [ base ]; - base-nova = buildRepo "base-nova" [ base ]; - os = buildRepo "os" [ base ]; + base = buildRepo "base"; + base-linux = (buildRepo "base-linux").overrideAttrs + (attrs: { nativeBuildInputs = [ base ]; }); + base-nova = (buildRepo "base-nova").overrideAttrs + (attrs: { nativeBuildInputs = [ base ]; }); + os = + (buildRepo "os").overrideAttrs (attrs: { nativeBuildInputs = [ base ]; }); }