From 28282f1c355c4351debea0a42d482048651d7196 Mon Sep 17 00:00:00 2001 From: fgsfds Date: Wed, 9 Aug 2023 22:32:26 +0200 Subject: [PATCH] port: auto-generate headers like the decomp does this does not require the ROM --- Makefile.port | 54 ++++++++++++++++++++++++++++++++------ tools/assetmgr/mkanims | 4 ++- tools/assetmgr/mklang | 3 ++- tools/assetmgr/mkpads | 3 ++- tools/assetmgr/mksequences | 4 ++- tools/assetmgr/mktextures | 4 ++- tools/assetmgr/mktiles | 3 ++- 7 files changed, 61 insertions(+), 14 deletions(-) diff --git a/Makefile.port b/Makefile.port index ae4977001..7543fbd0d 100644 --- a/Makefile.port +++ b/Makefile.port @@ -116,7 +116,7 @@ C_DEFINES := $(foreach d,$(DEFINES),-D$(d)) A_DIR := src/assets/$(ROMID) B_DIR := build/$(ROMID)-port -E_DIR := extracted/$(ROMID) +G_DIR := src/generated/$(ROMID) ifneq (,$(findstring x86_64,$(TARGET_PLATFORM))) TOOLCHAIN_ARCH := x86_64 @@ -135,9 +135,12 @@ else # TODO endif # These are still used in the port, but only to generate headers. -LANG_JSON_FILES := $(shell find $(A_DIR) -path '*/lang/*.json') -PADS_JSON_FILES := $(shell find $(A_DIR) -path '*/pads/*.json') -TILES_JSON_FILES := $(shell find $(A_DIR) -path '*/tiles/*.json') +JSON_FILES := $(shell find $(A_DIR) -path '*/lang/*.json') +JSON_FILES += $(shell find $(A_DIR) -path '*/pads/*.json') +JSON_FILES += $(shell find $(A_DIR) -path '*/tiles/*.json') +JSON_FILES += $(wildcard $(A_DIR)/*.json) + +JSON_HEADERS := $(patsubst $(A_DIR)/%.json, $(G_DIR)/%.h, $(JSON_FILES)) C_FILES := $(shell find src/game port -name '*.c') C_FILES := $(C_FILES) \ @@ -227,11 +230,45 @@ LDFLAGS := $(TARGET_LDFLAGS) # (We use this a lot) export ROMID +# Signal to the tooling that we only need the header files generated. +HEADERS_ONLY := 1 +export HEADERS_ONLY + BIN := $(B_DIR)/pd.exe default: $(BIN) -$(BIN): $(O_FILES) +################################################################################ +# Asset Manager header generation + +# Anims +$(G_DIR)/animations.h: $(A_DIR)/animations.json + tools/assetmgr/mkanims --headers-only + +# Lang +$(G_DIR)/lang/%.h: $(A_DIR)/lang/%.json + tools/assetmgr/mklang $< en --headers-only + +# Pads +$(G_DIR)/pads/%.h: $(A_DIR)/pads/%.json + tools/assetmgr/mkpads $< --headers-only + +# Sequences +$(G_DIR)/sequences.h: $(A_DIR)/sequences.json + tools/assetmgr/mksequences --headers-only + +# Textures +$(G_DIR)/textures.h: $(A_DIR)/textures.json + tools/assetmgr/mktextures --headers-only + +# Tiles +$(G_DIR)/tiles/%.h: $(A_DIR)/tiles/%.json + tools/assetmgr/mktiles $< --headers-only + +################################################################################ +# Generic compilation rules + +$(BIN): $(JSON_HEADERS) $(O_FILES) $(LD) $(COMMON_CFLAGS) $(OPT_LVL) -o $(BIN) $^ $(LDFLAGS) $(B_DIR)/%.o: %.c @@ -242,14 +279,15 @@ $(B_DIR)/%.o: %.cpp @mkdir -p $(dir $@) $(CXX) -c $(CXXFLAGS) $(OPT_LVL) -o $@ $< +################################################################################ +# Clean rules + clean: rm -rf build/$(ROMID)-port -# rm -rf src/generated/$(ROMID) allclean: rm -rf build/* -# rm -rf src/generated + rm -rf src/generated codeclean: find $(B_DIR)/game $(B_DIR)/inflate $(B_DIR)/lib $(B_DIR)/port -name '*.o' -delete - diff --git a/tools/assetmgr/mkanims b/tools/assetmgr/mkanims index 36205c9a2..bd5a9b4c8 100755 --- a/tools/assetmgr/mkanims +++ b/tools/assetmgr/mkanims @@ -3,6 +3,7 @@ import assetmgr import json import os +import sys def main(): fd = open('src/assets/%s/animations.json' % os.environ['ROMID'], 'r') @@ -11,7 +12,8 @@ def main(): rows = json.loads(data) - make_object(rows) + if '--headers-only' not in sys.argv: + make_object(rows) make_header(rows) def make_header(rows): diff --git a/tools/assetmgr/mklang b/tools/assetmgr/mklang index fc3bff794..047896d63 100755 --- a/tools/assetmgr/mklang +++ b/tools/assetmgr/mklang @@ -19,7 +19,8 @@ def main(): if sys.argv[2] == 'en': make_header(rows, shortname) - make_object(rows, basename, sys.argv[2]) + if '--headers-only' not in sys.argv: + make_object(rows, basename, sys.argv[2]) def get_shortname(basename): return re.match(r'^[a-z0-9]+', basename)[0] diff --git a/tools/assetmgr/mkpads b/tools/assetmgr/mkpads index 21948664b..1149b4bbc 100755 --- a/tools/assetmgr/mkpads +++ b/tools/assetmgr/mkpads @@ -18,7 +18,8 @@ class App(): self.populate_waygroup_waypoints() self.make_header() - self.make_object() + if '--headers-only' not in sys.argv: + self.make_object() def load_data(self): fd = open(sys.argv[1], 'r') diff --git a/tools/assetmgr/mksequences b/tools/assetmgr/mksequences index 9bd9b38ac..ea30f84ea 100755 --- a/tools/assetmgr/mksequences +++ b/tools/assetmgr/mksequences @@ -3,6 +3,7 @@ import assetmgr import json import os +import sys def main(): fd = open('src/assets/%s/sequences.json' % os.environ['ROMID'], 'r') @@ -11,7 +12,8 @@ def main(): rows = json.loads(data) - make_object(rows) + if '--headers-only' not in sys.argv: + make_object(rows) make_header(rows) def make_header(rows): diff --git a/tools/assetmgr/mktextures b/tools/assetmgr/mktextures index 8b067a198..ca788dad8 100755 --- a/tools/assetmgr/mktextures +++ b/tools/assetmgr/mktextures @@ -3,6 +3,7 @@ import assetmgr import json import os +import sys def main(): fd = open('src/assets/%s/textures.json' % os.environ['ROMID'], 'r') @@ -11,7 +12,8 @@ def main(): rows = json.loads(data) - make_objects(rows) + if '--headers-only' not in sys.argv: + make_objects(rows) make_header(rows) def make_header(rows): diff --git a/tools/assetmgr/mktiles b/tools/assetmgr/mktiles index f851253a7..82c71b67e 100755 --- a/tools/assetmgr/mktiles +++ b/tools/assetmgr/mktiles @@ -27,7 +27,8 @@ class App(): self.room_names = self.json['rooms'].keys() self.make_header() - self.make_object() + if '--headers-only' not in sys.argv: + self.make_object() def load_data(self): fd = open(sys.argv[1], 'r')