diff --git a/tup-genode/gcc.tup b/Tuprules.gcc similarity index 100% rename from tup-genode/gcc.tup rename to Tuprules.gcc diff --git a/tup-genode/llvm.tup b/Tuprules.llvm similarity index 100% rename from tup-genode/llvm.tup rename to Tuprules.llvm diff --git a/Tuprules.tup b/Tuprules.tup index 653e25f60..cb9547d44 100644 --- a/Tuprules.tup +++ b/Tuprules.tup @@ -13,11 +13,11 @@ DEV_DIR = $(TUP_CWD)/dev DEV_LIB_DIR = $(DEV_DIR)/lib ifdef IS_GCC -include tup-genode/gcc.tup +include Tuprules.gcc endif ifdef IS_LLVM -include tup-genode/llvm.tup +include Tuprules.llvm endif ifeq ($(TOOLCHAIN_CONFIGURED),) diff --git a/default.nix b/default.nix index 690c5b9c2..bf38af55f 100644 --- a/default.nix +++ b/default.nix @@ -24,9 +24,6 @@ let nixpkgs'.stdenvAdapters.overrideCC nixpkgs'.stdenv sourceForgeToolchain; in assert env.cc.isGNU; env; - src = self.outPath or (builtins.fetchGit ./.); - version = self.lastModified or "unstable"; - inherit (stdenvLlvm) lib targetPlatform; specs = with targetPlatform; [ ] @@ -123,7 +120,6 @@ let IS_GCC = ""; LINUX_HEADERS = buildPackages.glibc.dev; - VERSION = version; }; in toTupConfig stdenvGcc (f stdenvGcc); @@ -148,16 +144,17 @@ let llvmPackages.libunwind.override { isBaremetal = true; }; LIBUNWIND = llvmPackages.libunwind; LINUX_HEADERS = buildPackages.glibc.dev; - VERSION = version; }; in toTupConfig stdenvLlvm (f stdenvLlvm); - buildRepo = { env, repo, repoInputs }: + buildRepo = { env, repo, repoInputs, filter }: let in env.mkDerivation { - pname = "genode-" + repo; - inherit src repo specs version; + name = "genode-" + repo; + inherit repo specs; + + src = builtins.filterSource filter ./.; nativeBuildInputs = repoInputs; # This is wrong, why does pkg-config not collect buildInputs? @@ -233,6 +230,8 @@ let maintainers = [ maintainers.ehmry ]; }; + } // { + version = self.lastModified; }; buildRepo' = { ... }@args: buildRepo ({ env = stdenvGcc; } // args); @@ -240,33 +239,88 @@ let #builtins.throw "create the tup config file in the stdenv environment, replacing CC/CXX with environmental variables" in rec { - packages = rec { + packages = let + + hasPrefix = pre: + with builtins; + let + pre' = "${toString ./.}/${pre}"; + preLen = stringLength pre'; + in path: + let pathLen = stringLength path; + in substring 0 preLen path == substring 0 pathLen pre'; + + hasSuffix = suf: + with builtins; + let sufLen = stringLength suf; + in path: + let pathLen = stringLength path; + in substring (pathLen - sufLen) pathLen path == suf; + + filterBaseRepo = name: + with builtins; + let + match = [ + (hasPrefix "Tup") + (hasPrefix "repos/Tup") + (hasPrefix "repos/base/") + (hasPrefix "repos/base-${name}") + ]; + skip = [ + (hasSuffix "/run") + (hasSuffix "/recipes") + (hasSuffix ".gitignore") + ]; + in path: type: let f = f': f' path; in any f match && !any f skip; + + filterRepo = repo: + with builtins; + let + reposDir = toString ./repos; + skip = [ + (hasSuffix "/run") + (hasSuffix "/recipes") + (hasSuffix ".gitignore") + ]; + match = [ + (hasPrefix "Tup") + (hasPrefix "repos/Tup") + (hasPrefix "repos/${repo}") + (hasPrefix "repos/base/src/ld") + ]; + in path: type: let f = f': f' path; in any f match && !any f skip; + in rec { NOVA = nixpkgs.callPackage ./NOVA { }; base = buildRepo' { repo = "base"; repoInputs = [ ]; + filter = filterBaseRepo "-"; }; base-linux = buildRepo' { repo = "base-linux"; repoInputs = [ base ]; + filter = filterBaseRepo "linux"; }; base-nova = buildRepo' { repo = "base-nova"; repoInputs = [ base ]; + filter = filterBaseRepo "nova"; }; os = buildRepo' { repo = "os"; repoInputs = [ base ]; + filter = filterRepo "os"; }; gems = buildRepo' { repo = "gems"; repoInputs = [ base os ]; + filter = filterRepo "gems"; }; inherit stdenvGcc stdenvLlvm tupConfigGcc tupConfigLlvm; diff --git a/enter-shell.sh b/enter-shell.sh index a1bd02901..6a9191fe2 100755 --- a/enter-shell.sh +++ b/enter-shell.sh @@ -1,6 +1,6 @@ #! /bin/sh set -e -nix build .#packages.x86_64-linux-x86_64-genode.tupConfigGcc -o tup.config +nix build .#packages.x86_64-linux-x86_64-genode.tupConfigGcc -o build-gcc/tup.config export SHELL=bash exec nix dev-shell diff --git a/repos/base-nova/src/lib/ld/Tupfile b/repos/base-nova/src/lib/ld/Tupfile index 4fc1a5f05..4979c442c 100644 --- a/repos/base-nova/src/lib/ld/Tupfile +++ b/repos/base-nova/src/lib/ld/Tupfile @@ -26,7 +26,7 @@ endif LDFLAGS += -z max-page-size=0x1000 LDFLAGS += -T$(BASE_DIR)/src/ld/genode_rel.ld -LDFLAGS += -L$(DEV_DIR)/lib +PKG_LIBS = -L$(DEV_DIR)/lib `$(PKG_CONFIG) --libs alarm cxx ldso-startup timeout` : {obj} | \ $(DEV_DIR)/ \ @@ -35,7 +35,7 @@ LDFLAGS += -L$(DEV_DIR)/lib $(REP_DIR)/ \ $(REP_DIR)/ \ symbol.map \ -|> $(LD) -o %o $(LD_MARCH) $(LDFLAGS) --whole-archive --start-group -l:alarm.a % % -l:cxx.a % -l:timeout.a %f --end-group --no-whole-archive $(LIBGCC) \ +|> $(LD) -o %o $(LD_MARCH) $(LDFLAGS) --whole-archive --start-group $(PKG_LIBS) % % % %f --end-group --no-whole-archive $(LIBGCC) \ |> ld-nova.lib.so $(REP_DIR)/ {bin} : {bin} |> !collect_bin |> diff --git a/repos/base/src/test/ds_ownership/Tupfile b/repos/base/src/test/ds_ownership/Tupfile deleted file mode 100644 index 2f2f7b727..000000000 --- a/repos/base/src/test/ds_ownership/Tupfile +++ /dev/null @@ -1,4 +0,0 @@ -include_rules -: foreach *.cc |> !cxx |> %B.o {obj} -: {obj} | |> !prg |> test-%d {bin} -: {bin} |> !collect_bin |> diff --git a/repos/base/src/test/log/Tupfile b/repos/base/src/test/log/Tupfile deleted file mode 100644 index 2f2f7b727..000000000 --- a/repos/base/src/test/log/Tupfile +++ /dev/null @@ -1,4 +0,0 @@ -include_rules -: foreach *.cc |> !cxx |> %B.o {obj} -: {obj} | |> !prg |> test-%d {bin} -: {bin} |> !collect_bin |> diff --git a/repos/base/src/test/mmio/Tupfile b/repos/base/src/test/mmio/Tupfile deleted file mode 100644 index 2f2f7b727..000000000 --- a/repos/base/src/test/mmio/Tupfile +++ /dev/null @@ -1,4 +0,0 @@ -include_rules -: foreach *.cc |> !cxx |> %B.o {obj} -: {obj} | |> !prg |> test-%d {bin} -: {bin} |> !collect_bin |> diff --git a/repos/base/src/test/new_delete/Tupfile b/repos/base/src/test/new_delete/Tupfile deleted file mode 100644 index 2f2f7b727..000000000 --- a/repos/base/src/test/new_delete/Tupfile +++ /dev/null @@ -1,4 +0,0 @@ -include_rules -: foreach *.cc |> !cxx |> %B.o {obj} -: {obj} | |> !prg |> test-%d {bin} -: {bin} |> !collect_bin |> diff --git a/repos/base/src/test/reconstructible/Tupfile b/repos/base/src/test/reconstructible/Tupfile deleted file mode 100644 index 2f2f7b727..000000000 --- a/repos/base/src/test/reconstructible/Tupfile +++ /dev/null @@ -1,4 +0,0 @@ -include_rules -: foreach *.cc |> !cxx |> %B.o {obj} -: {obj} | |> !prg |> test-%d {bin} -: {bin} |> !collect_bin |> diff --git a/repos/base/src/test/registry/Tupfile b/repos/base/src/test/registry/Tupfile deleted file mode 100644 index 2f2f7b727..000000000 --- a/repos/base/src/test/registry/Tupfile +++ /dev/null @@ -1,4 +0,0 @@ -include_rules -: foreach *.cc |> !cxx |> %B.o {obj} -: {obj} | |> !prg |> test-%d {bin} -: {bin} |> !collect_bin |> diff --git a/repos/base/src/test/rm_fault/Tupfile b/repos/base/src/test/rm_fault/Tupfile deleted file mode 100644 index 2f2f7b727..000000000 --- a/repos/base/src/test/rm_fault/Tupfile +++ /dev/null @@ -1,4 +0,0 @@ -include_rules -: foreach *.cc |> !cxx |> %B.o {obj} -: {obj} | |> !prg |> test-%d {bin} -: {bin} |> !collect_bin |> diff --git a/repos/base/src/test/rm_nested/Tupfile b/repos/base/src/test/rm_nested/Tupfile deleted file mode 100644 index 2f2f7b727..000000000 --- a/repos/base/src/test/rm_nested/Tupfile +++ /dev/null @@ -1,4 +0,0 @@ -include_rules -: foreach *.cc |> !cxx |> %B.o {obj} -: {obj} | |> !prg |> test-%d {bin} -: {bin} |> !collect_bin |> diff --git a/repos/base/src/test/segfault/Tupfile b/repos/base/src/test/segfault/Tupfile deleted file mode 100644 index 2f2f7b727..000000000 --- a/repos/base/src/test/segfault/Tupfile +++ /dev/null @@ -1,4 +0,0 @@ -include_rules -: foreach *.cc |> !cxx |> %B.o {obj} -: {obj} | |> !prg |> test-%d {bin} -: {bin} |> !collect_bin |> diff --git a/repos/base/src/test/smp/Tupfile b/repos/base/src/test/smp/Tupfile deleted file mode 100644 index 2f2f7b727..000000000 --- a/repos/base/src/test/smp/Tupfile +++ /dev/null @@ -1,4 +0,0 @@ -include_rules -: foreach *.cc |> !cxx |> %B.o {obj} -: {obj} | |> !prg |> test-%d {bin} -: {bin} |> !collect_bin |> diff --git a/repos/base/src/test/stack_smash/Tupfile b/repos/base/src/test/stack_smash/Tupfile deleted file mode 100644 index 2f2f7b727..000000000 --- a/repos/base/src/test/stack_smash/Tupfile +++ /dev/null @@ -1,4 +0,0 @@ -include_rules -: foreach *.cc |> !cxx |> %B.o {obj} -: {obj} | |> !prg |> test-%d {bin} -: {bin} |> !collect_bin |> diff --git a/repos/base/src/test/sub_rm/Tupfile b/repos/base/src/test/sub_rm/Tupfile deleted file mode 100644 index 2f2f7b727..000000000 --- a/repos/base/src/test/sub_rm/Tupfile +++ /dev/null @@ -1,4 +0,0 @@ -include_rules -: foreach *.cc |> !cxx |> %B.o {obj} -: {obj} | |> !prg |> test-%d {bin} -: {bin} |> !collect_bin |> diff --git a/repos/base/src/test/synced_interface/Tupfile b/repos/base/src/test/synced_interface/Tupfile deleted file mode 100644 index 2f2f7b727..000000000 --- a/repos/base/src/test/synced_interface/Tupfile +++ /dev/null @@ -1,4 +0,0 @@ -include_rules -: foreach *.cc |> !cxx |> %B.o {obj} -: {obj} | |> !prg |> test-%d {bin} -: {bin} |> !collect_bin |> diff --git a/repos/base/src/test/thread/Tupfile b/repos/base/src/test/thread/Tupfile deleted file mode 100644 index 2f2f7b727..000000000 --- a/repos/base/src/test/thread/Tupfile +++ /dev/null @@ -1,4 +0,0 @@ -include_rules -: foreach *.cc |> !cxx |> %B.o {obj} -: {obj} | |> !prg |> test-%d {bin} -: {bin} |> !collect_bin |> diff --git a/repos/base/src/test/timer/Tupfile b/repos/base/src/test/timer/Tupfile deleted file mode 100644 index 2f2f7b727..000000000 --- a/repos/base/src/test/timer/Tupfile +++ /dev/null @@ -1,4 +0,0 @@ -include_rules -: foreach *.cc |> !cxx |> %B.o {obj} -: {obj} | |> !prg |> test-%d {bin} -: {bin} |> !collect_bin |> diff --git a/repos/base/src/test/timer_accuracy/Tupfile b/repos/base/src/test/timer_accuracy/Tupfile deleted file mode 100644 index 2f2f7b727..000000000 --- a/repos/base/src/test/timer_accuracy/Tupfile +++ /dev/null @@ -1,4 +0,0 @@ -include_rules -: foreach *.cc |> !cxx |> %B.o {obj} -: {obj} | |> !prg |> test-%d {bin} -: {bin} |> !collect_bin |> diff --git a/repos/base/src/test/xml_node/Tupfile b/repos/base/src/test/xml_node/Tupfile deleted file mode 100644 index 2f2f7b727..000000000 --- a/repos/base/src/test/xml_node/Tupfile +++ /dev/null @@ -1,4 +0,0 @@ -include_rules -: foreach *.cc |> !cxx |> %B.o {obj} -: {obj} | |> !prg |> test-%d {bin} -: {bin} |> !collect_bin |>