From f7ad3ec4dd3aef55b6fe6e6ac16bcf449617e183 Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Wed, 31 Jul 2019 17:31:20 +0200 Subject: [PATCH] Standalone build --- .gitignore | 2 + Tuprules.tup | 197 ++++++---------------- libretro/cores/Tuprules.tup | 6 +- libretro/games/quake_dopa/Tupfile | 2 +- libretro/games/streemerz/Tupfile | 2 +- libretro/tests/topbench/Tupfile | 2 +- runtimes/cave_story/cave_story-en/Tupfile | 2 +- runtimes/soyuz/Tupfile | 2 +- shell.nix | 10 ++ 9 files changed, 76 insertions(+), 149 deletions(-) create mode 100644 shell.nix diff --git a/.gitignore b/.gitignore index 69b5279..dd22c80 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,5 @@ ##### Do not edit. .tup /.gitignore +/out +/public diff --git a/Tuprules.tup b/Tuprules.tup index 688b861..a893af0 100644 --- a/Tuprules.tup +++ b/Tuprules.tup @@ -1,53 +1,51 @@ -ifndef TOOL_CHAIN_PREFIX - error TOOL_CHAIN_PREFIX not configured, missing variant? -endif +.gitignore -DEPOT_DIR = $(TUP_CWD)/depot -DEPOT_RAW_DIR = $(DEPOT_DIR)/raw -DEPOT_PKG_DIR = $(DEPOT_DIR)/pkg +export DHALL_GENODE +export DHALL_GENODE_TYPES +export DHALL_PRELUDE +export NIX_LDFLAGS +export NIX_PATH +export PKG_CONFIG_PATH -PUBLIC_DIR = $(TUP_CWD)/public/@(PUBLIC_USER) -PUBLIC_RAW_DIR = $(PUBLIC_DIR)/raw -PUBLIC_BIN_DIR = $(PUBLIC_DIR)/bin -PUBLIC_PKG_DIR = $(PUBLIC_DIR)/pkg +ERRATA_DIR=$(TUP_CWD)/errata + +OUTPUTS_OUT=$(TUP_CWD)/out + +OUT_BIN_DIR = $(OUTPUTS_OUT)/bin +OUT_PKG_DIR = $(OUTPUTS_OUT)/pkg +OUT_RAW_DIR = $(OUTPUTS_OUT)/raw ifeq (@(TUP_ARCH),i386) CC_MARCH = -march=i686 -m32 LD_MARCH = -melf_i386 AS_MARCH = -march=i686 --32 -DEPOT_BIN_DIR = $(DEPOT_DIR)/bin/x86_32 endif ifeq (@(TUP_ARCH),x86_64) +TOOL_CHAIN_PREFIX=genode-x86- CC_MARCH = -m64 -mcmodel=large LD_MARCH = -melf_x86_64 -DEPOT_BIN_DIR = $(DEPOT_DIR)/bin/x86_64 endif ifeq (@(TUP_ARCH),arm_v8) CC_MARCH = -march=armv8-a endif -GENODE_DIR = $(TUP_CWD)/upstream -&STUB_DIR = stub -STUB_DIR = $(TUP_CWD)/stub - -export NIX_PATH -NIX_BUILD = nix-build --option substitute false +GENODE_DIR = $(TUP_CWD) LIBGCC = `$(CC) $(CC_MARCH) -print-libgcc-file-name` -!prg = | $(GENODE_DIR)/ $(GENODE_DIR)/ \ +!prg = | $(GENODE_DIR)/ $(GENODE_DIR)/ \ |> ^o LD %o^ \ $(LD) $(LD_MARCH) $(LDFLAGS) \ - -L&(STUB_DIR) \ + -L$(LIB_DIR) \ `$(PKG_CONFIG) --libs $(LIBS) genode-prg` \ %f \ $(LIBGCC) \ -o %o \ |> %d -!lib = | $(GENODE_DIR)/ $(GENODE_DIR)/ |> ^o LD %o^ $(LD) $(LD_MARCH) %f $(LDFLAGS) `$(PKG_CONFIG) --libs genode-lib $(LIBS)` -L&(STUB_DIR) -o %o |> +!lib = | $(GENODE_DIR)/ $(GENODE_DIR)/ |> ^o LD %o^ $(LD) $(LD_MARCH) %f $(LDFLAGS) `$(PKG_CONFIG) --libs genode-lib $(LIBS)` -L$(LIB_DIR) -o %o |> ifeq ($(RAW_NAME),) RAW_NAME = $(TARGET_NAME) @@ -61,32 +59,19 @@ ifeq ($(PKG_NAME),) PKG_NAME = $(TARGET_NAME) endif -GIT_VERSION=`git describe --always` -BIN_VERSION=$(GIT_VERSION) -PKG_VERSION=$(GIT_VERSION) - -ifeq ($(RAW_VERSION),) -RAW_VERSION=$(GIT_VERSION) +ifdef DEPOT_VERSION +DEPOT_VERSION = @(DEPOT_VERSION) +else +DEPOT_VERSION = current endif -RAW_DIR = $(DEPOT_RAW_DIR)/$(RAW_NAME)/current - # Destination for locally defined raw package +BIN_DIR = $(OUT_BIN_DIR)/$(BIN_NAME)/$(DEPOT_VERSION) +PKG_DIR = $(OUT_PKG_DIR)/$(PKG_NAME)/$(DEPOT_VERSION) +RAW_DIR = $(OUT_RAW_DIR)/$(RAW_NAME)/$(DEPOT_VERSION) -BIN_DIR = $(DEPOT_BIN_DIR)/$(BIN_NAME)/current - # Destination for locally defined binary package - -PKG_DIR = $(DEPOT_PKG_DIR)/$(PKG_NAME)/current - # Destination for locally defined runtime package - -!raw = |> ^ generate raw metadata^ \ - echo $(RAW_DEPENDS) local/raw/$(RAW_NAME)/$(RAW_VERSION) | tr ' ' '\n' > %o; \ - echo local/raw/$(RAW_NAME)/$(RAW_VERSION) > %o \ -|> $(RAW_DIR)/.ARCHIVES $(DEPOT_DIR)/ - -!bin = |> ^ generate bin metadata^ \ - echo $(BIN_DEPENDS) local/src/$(BIN_NAME)/$(BIN_VERSION) | tr ' ' '\n' > %o; \ -|> $(BIN_DIR)/.ARCHIVES $(DEPOT_DIR)/ - # Macro invoked in BIN_RULES +!bin = |> |> +!pkg = |> |> +!raw = |> |> &RAW_RULES = errata/raw.tup # Rules for finalizing a locally defined raw package @@ -95,68 +80,23 @@ PKG_DIR = $(DEPOT_PKG_DIR)/$(PKG_NAME)/current &PKG_RULES = errata/pkg.tup # Rules for finalizing a locally defined runtime package -AWK_LOCAL_ARCHIVES = awk -F '/' \ - '{if ($1 != "local") {print $0} \ - else {print $1"/"$2"/"$3"/current"}}' - -!pkg = |> |> - -!collect_raw = |> ^ COLLECT %b^ \ - cp %f %o \ -|> $(RAW_DIR)/%b $(DEPOT_DIR)/ - !collect_bin = |> ^ COLLECT %b^ \ - @(TOOL_CHAIN_PREFIX)strip -o %o %f \ -|> $(DEPOT_BIN_DIR)/$(BIN_NAME)/current/%b $(DEPOT_DIR)/ - -!collect_pkg_runtime = | $(VERSIONS_SED_FILE) |> ^ package %f^ \ - xmllint --noout -schema $(ERRATA_DIR)/runtime.xsd %f; \ - cp %f $(DEPOT_PKG_DIR)/$(PKG_NAME)/current/runtime; \ - echo $(PKG_DEPENDS) | tr ' ' '\n' | sed \ - -e 's|_/\(.*\)/\(.*\)$|local/\1/\2/current|' \ - > $(DEPOT_PKG_DIR)/$(PKG_NAME)/current/archives; \ - sed -f $(VERSIONS_SED_FILE) $(DEPOT_PKG_DIR)/$(PKG_NAME)/current/archives \ - > $(DEPOT_PKG_DIR)/$(PKG_NAME)/current/.ARCHIVES; \ -|> \ - $(DEPOT_PKG_DIR)/$(PKG_NAME)/current/runtime \ - $(DEPOT_PKG_DIR)/$(PKG_NAME)/current/archives \ - $(DEPOT_PKG_DIR)/$(PKG_NAME)/current/.ARCHIVES \ - $(DEPOT_DIR)/ - -!collect_pkg = |> ^ COLLECT %b^ cp %f %o \ - |> $(DEPOT_PKG_DIR)/$(PKG_NAME)/current/%b \ - $(DEPOT_DIR)/ - -VERSIONS_SED_FILE = $(TUP_CWD)/versions.sed -PKG_SED_FILE = $(TUP_CWD)/pkg.sed - -RAW_LISTING = $(TUP_CWD)/raw-list -BIN_LISTING = $(TUP_CWD)/bin-list -PKG_LISTING = $(TUP_CWD)/pkg-list - -SDK_INCLUDE = $(TUP_CWD)/sdk.tup - -ERRATA_DIR = $(TUP_CWD)/errata - -export PKG_CONFIG_PATH -PKG_CONFIG = PKG_CONFIG_PATH=$(GENODE_DIR)/upstream:pkg-config:$PKG_CONFIG_PATH pkg-config - -CC = @(TOOL_CHAIN_PREFIX)gcc -CXX = @(TOOL_CHAIN_PREFIX)g++ -LD= @(TOOL_CHAIN_PREFIX)ld -AR = @(TOOL_CHAIN_PREFIX)ar -AS = @(TOOL_CHAIN_PREFIX)as -OBJCOPY = @(TOOL_CHAIN_PREFIX)objcopy + $(TOOL_CHAIN_PREFIX)strip -o %o %f \ +|> $(OUT_BIN_DIR)/$(BIN_NAME)/%b $(OUTPUTS_OUT)/ +CC = $(TOOL_CHAIN_PREFIX)gcc +CXX = $(TOOL_CHAIN_PREFIX)g++ +LD= $(TOOL_CHAIN_PREFIX)ld +AR = $(TOOL_CHAIN_PREFIX)ar +AS = $(TOOL_CHAIN_PREFIX)as +OBJCOPY = $(TOOL_CHAIN_PREFIX)objcopy AS_OPT += $(AS_MARCH) +NIX_BUILD = nix-build --option substitute no + LIBGCC = `$(CC) $(CC_MARCH) -print-libgcc-file-name` -PKG_CONFIG_DIR = $(TUP_CWD)/pkg-config -&PKG_CONFIG_DIR = pkg-config - -PKG_CONFIG_PATH = $(PKG_CONFIG_DIR) -PKG_CONFIG = PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config +PKG_CONFIG = pkg-config !asm = |> ^ CC %b^ @(CC_WRAPPER) $(CC) $(DEFINES) $(CFLAGS) $(CFLAGS_%e) $(CFLAGS_%f) -D__ASSEMBLY__ $(INCLUDES) -c %f -o %o |> %B.o @@ -172,57 +112,32 @@ PKG_CONFIG = PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config !strip = |> strip -o %o %f |> -&LD_SCRIPT_SO = upstream/repos/base/src/ld/genode_rel.ld +!ln = |> ln -s %f %o |> -ifeq (@(TUP_ARCH),x86_64) - ASM_SYM_DEPENDENCY = movq \1@GOTPCREL(%rip), %rax -else - ASM_SYM_DEPENDENCY = .long \1 +ifeq (@(TUP_ARCH),i386) +AS_MARCH = -march=i686 --32 endif -!abi_stub = |> ^ STUB %o^\ - sed \ - -e "s/^\(\w\+\) D \(\w\+\)\$/.data; .global \1; .type \1,%%object; .size \1,\2; \1:/p" \ - -e "s/^\(\w\+\) V/.data; .weak \1; .type \1,%%object; \1:/p" \ - -e "s/^\(\w\+\) T/.text; .global \1; .type \1,%%function; \1:/p" \ - -e "s/^\(\w\+\) R \(\w\+\)\$/.section .rodata; .global \1; .type \1,%%object; .size \1,\2; \1:/p" \ - -e "s/^\(\w\+\) W/.text; .weak \1; .type \1,%%function; \1:/p" \ - -e "s/^\(\w\+\) B \(\w\+\)\$/.bss; .global \1; .type \1,%%object; .size \1,\2; \1:/p" \ - -e "s/^\(\w\+\) U/.text; .global \1; $(ASM_SYM_DEPENDENCY)/p" \ - %f \ - | $(CC) -x assembler -c - -o tmp.o; \ - $(LD) -o %o \ - -shared \ - -T &(LD_SCRIPT_SO) \ - tmp.o; \ - rm tmp.o; \ -|> $(STUB_DIR)/%B.lib.so $(GENODE_DIR)/ +DEPOT_MANIFEST = $(OUTPUTS_OUT)/manifest.dhall -DHALL_PRELUDE = $(TUP_CWD)/dhall/Prelude.dhall -DHALL_GENODE = $(TUP_CWD)/dhall/package.dhall -DHALL_GENODE_TYPES = $(TUP_CWD)/dhall/types.dhall -DHALL = DHALL_PRELUDE=$(DHALL_PRELUDE) DHALL_GENODE=$(DHALL_GENODE) DHALL_GENODE_TYPES=$(DHALL_GENODE_TYPES) dhall +DHALL = dhall -!dhall = |> ^b dhall > %o^ $(DHALL) |> - -DEPOT_MANIFEST = $(PUBLIC_DIR)/manifest.dhall - -!index_pkg = | $(PUBLIC_DIR)/ |> ^ Generate index.dhall^\ +!index_pkg = | $(OUTPUTS_OUT)/ |> ^ Generate index.dhall^\ $(DHALL) <<< '{ info = (%f).indexInfo, name = "$(PKG_NAME)", version = ($(DEPOT_MANIFEST)).pkg.$(PKG_NAME).version }' > %o \ -|> $(PKG_DIR)/index.dhall $(DEPOT_DIR)/index/ +|> $(PKG_DIR)/index.dhall $(OUTPUTS_OUT)/index/ !render_runtime = | $(VERSIONS_SED_FILE) |> ^o render %d runtime^ \ $(DHALL) text <<< '$(ERRATA_DIR)/renderRuntime.dhall (%f).runtime' \ - > $(DEPOT_PKG_DIR)/$(PKG_NAME)/current/runtime; \ + > $(OUT_PKG_DIR)/$(PKG_NAME)/current/runtime; \ xmllint --noout -schema $(ERRATA_DIR)/runtime.xsd - \ - < $(DEPOT_PKG_DIR)/$(PKG_NAME)/current/runtime; \ + < $(OUT_PKG_DIR)/$(PKG_NAME)/current/runtime; \ echo $(PKG_DEPENDS) | tr ' ' '\n' | sed \ -e 's|_/\(.*\)/\(.*\)$|local/\1/\2/current|' \ - > $(DEPOT_PKG_DIR)/$(PKG_NAME)/current/archives; \ - sed -f $(VERSIONS_SED_FILE) $(DEPOT_PKG_DIR)/$(PKG_NAME)/current/archives \ - > $(DEPOT_PKG_DIR)/$(PKG_NAME)/current/.ARCHIVES; \ + > $(OUT_PKG_DIR)/$(PKG_NAME)/current/archives; \ + sed -f $(VERSIONS_SED_FILE) $(OUT_PKG_DIR)/$(PKG_NAME)/current/archives \ + > $(OUT_PKG_DIR)/$(PKG_NAME)/current/.ARCHIVES; \ |> \ - $(DEPOT_PKG_DIR)/$(PKG_NAME)/current/runtime \ - $(DEPOT_PKG_DIR)/$(PKG_NAME)/current/archives \ - $(DEPOT_PKG_DIR)/$(PKG_NAME)/current/.ARCHIVES \ - $(DEPOT_DIR)/ \ + $(OUT_PKG_DIR)/$(PKG_NAME)/current/runtime \ + $(OUT_PKG_DIR)/$(PKG_NAME)/current/archives \ + $(OUT_PKG_DIR)/$(PKG_NAME)/current/.ARCHIVES \ + $(OUT_PKG_DIR)/ \ diff --git a/libretro/cores/Tuprules.tup b/libretro/cores/Tuprules.tup index 774f3ab..299c68e 100644 --- a/libretro/cores/Tuprules.tup +++ b/libretro/cores/Tuprules.tup @@ -5,7 +5,7 @@ PKG_DEPENDS += \ _/src/$(BIN_NAME) \ _/src/retro_frontend \ -!libretro_cc = | $(GENODE_DIR)/ |> ^ CC %f^ \ +!libretro_cc = |> ^ CC %f^ \ $(CC) \ $(DEFINES) \ `$(PKG_CONFIG) --cflags $(CORE_PKGS)` \ @@ -14,7 +14,7 @@ PKG_DEPENDS += \ -c %f -o %o \ |> %f.$(TARGET_NAME).o -!libretro_cxx = | $(GENODE_DIR)/ |> ^ CXX %f^ \ +!libretro_cxx = |> ^ CXX %f^ \ $(CXX) \ $(DEFINES) \ `$(PKG_CONFIG) --cflags $(CORE_PKGS)` \ @@ -23,7 +23,7 @@ PKG_DEPENDS += \ -c %f -o %o \ |> %f.$(TARGET_NAME).o -!libretro_core_link = | $(GENODE_DIR)/ $(GENODE_DIR)/ |> ^o LD %d^ \ +!libretro_core_link = | $(GENODE_DIR)/ |> ^o LD %d^ \ $(LD) %f -o %o \ -shared --version-script=$(LINK_T) $(NO_UNDEFINED) \ $(LDFLAGS) \ diff --git a/libretro/games/quake_dopa/Tupfile b/libretro/games/quake_dopa/Tupfile index b5a63bf..b612ac8 100644 --- a/libretro/games/quake_dopa/Tupfile +++ b/libretro/games/quake_dopa/Tupfile @@ -1,4 +1,4 @@ -ifndef CONFIG_NO_NETWORK +ifndef OFFLINE TARGET_NAME = quake_dopa RAW_VERSION = 2016-06-22 diff --git a/libretro/games/streemerz/Tupfile b/libretro/games/streemerz/Tupfile index c738862..c35c8b4 100644 --- a/libretro/games/streemerz/Tupfile +++ b/libretro/games/streemerz/Tupfile @@ -1,4 +1,4 @@ -ifndef CONFIG_NO_NETWORK +ifndef OFFLINE TARGET_NAME = streemerz RAW_VERSION = 02 diff --git a/libretro/tests/topbench/Tupfile b/libretro/tests/topbench/Tupfile index d4c790f..65b58e9 100644 --- a/libretro/tests/topbench/Tupfile +++ b/libretro/tests/topbench/Tupfile @@ -1,4 +1,4 @@ -ifndef CONFIG_NO_NETWORK +ifndef OFFLINE TARGET_NAME = topbench include_rules diff --git a/runtimes/cave_story/cave_story-en/Tupfile b/runtimes/cave_story/cave_story-en/Tupfile index 1e0761e..a7d1ae5 100644 --- a/runtimes/cave_story/cave_story-en/Tupfile +++ b/runtimes/cave_story/cave_story-en/Tupfile @@ -1,4 +1,4 @@ -ifndef CONFIG_OFFLINE +ifndef OFFLINE TARGET_NAME = cave_story-en diff --git a/runtimes/soyuz/Tupfile b/runtimes/soyuz/Tupfile index 6da722e..956a093 100644 --- a/runtimes/soyuz/Tupfile +++ b/runtimes/soyuz/Tupfile @@ -1,4 +1,4 @@ -ifndef CONFIG_OFFLINE +ifndef OFFLINE TARGET_NAME = soyuz diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..5310899 --- /dev/null +++ b/shell.nix @@ -0,0 +1,10 @@ +{ pkgs ? import { } }: + +pkgs.shell.mkShell + { buildInputs = with pkgs; + [ ports.libc + ports.stdcxx + ports.egl_api + ports.mesa + ]; + }