port: auto-generate headers like the decomp does

this does not require the ROM
This commit is contained in:
fgsfds committed 2023-08-09 22:32:26 +02:00
1 parent 67492e744d
commit 28282f1c35
7 files changed
+61 -14

No files matched your search

+46 -8
View File
@@ -116,7 +116,7 @@ C_DEFINES := $(foreach d,$(DEFINES),-D$(d))
A_DIR := src/assets/$(ROMID) A_DIR := src/assets/$(ROMID)
B_DIR := build/$(ROMID)-port B_DIR := build/$(ROMID)-port
E_DIR := extracted/$(ROMID) G_DIR := src/generated/$(ROMID)
ifneq (,$(findstring x86_64,$(TARGET_PLATFORM))) ifneq (,$(findstring x86_64,$(TARGET_PLATFORM)))
TOOLCHAIN_ARCH := x86_64 TOOLCHAIN_ARCH := x86_64
@@ -135,9 +135,12 @@ else # TODO
endif endif
# These are still used in the port, but only to generate headers. # These are still used in the port, but only to generate headers.
LANG_JSON_FILES := $(shell find $(A_DIR) -path '*/lang/*.json') JSON_FILES := $(shell find $(A_DIR) -path '*/lang/*.json')
PADS_JSON_FILES := $(shell find $(A_DIR) -path '*/pads/*.json') 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 '*/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 := $(shell find src/game port -name '*.c')
C_FILES := $(C_FILES) \ C_FILES := $(C_FILES) \
@@ -227,11 +230,45 @@ LDFLAGS := $(TARGET_LDFLAGS)
# (We use this a lot) # (We use this a lot)
export ROMID 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 BIN := $(B_DIR)/pd.exe
default: $(BIN) 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) $(LD) $(COMMON_CFLAGS) $(OPT_LVL) -o $(BIN) $^ $(LDFLAGS)
$(B_DIR)/%.o: %.c $(B_DIR)/%.o: %.c
@@ -242,14 +279,15 @@ $(B_DIR)/%.o: %.cpp
@mkdir -p $(dir $@) @mkdir -p $(dir $@)
$(CXX) -c $(CXXFLAGS) $(OPT_LVL) -o $@ $< $(CXX) -c $(CXXFLAGS) $(OPT_LVL) -o $@ $<
################################################################################
# Clean rules
clean: clean:
rm -rf build/$(ROMID)-port rm -rf build/$(ROMID)-port
# rm -rf src/generated/$(ROMID)
allclean: allclean:
rm -rf build/* rm -rf build/*
# rm -rf src/generated rm -rf src/generated
codeclean: codeclean:
find $(B_DIR)/game $(B_DIR)/inflate $(B_DIR)/lib $(B_DIR)/port -name '*.o' -delete find $(B_DIR)/game $(B_DIR)/inflate $(B_DIR)/lib $(B_DIR)/port -name '*.o' -delete
+3 -1
View File
@@ -3,6 +3,7 @@
import assetmgr import assetmgr
import json import json
import os import os
import sys
def main(): def main():
fd = open('src/assets/%s/animations.json' % os.environ['ROMID'], 'r') fd = open('src/assets/%s/animations.json' % os.environ['ROMID'], 'r')
@@ -11,7 +12,8 @@ def main():
rows = json.loads(data) rows = json.loads(data)
make_object(rows) if '--headers-only' not in sys.argv:
make_object(rows)
make_header(rows) make_header(rows)
def make_header(rows): def make_header(rows):
+2 -1
View File
@@ -19,7 +19,8 @@ def main():
if sys.argv[2] == 'en': if sys.argv[2] == 'en':
make_header(rows, shortname) 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): def get_shortname(basename):
return re.match(r'^[a-z0-9]+', basename)[0] return re.match(r'^[a-z0-9]+', basename)[0]
+2 -1
View File
@@ -18,7 +18,8 @@ class App():
self.populate_waygroup_waypoints() self.populate_waygroup_waypoints()
self.make_header() self.make_header()
self.make_object() if '--headers-only' not in sys.argv:
self.make_object()
def load_data(self): def load_data(self):
fd = open(sys.argv[1], 'r') fd = open(sys.argv[1], 'r')
+3 -1
View File
@@ -3,6 +3,7 @@
import assetmgr import assetmgr
import json import json
import os import os
import sys
def main(): def main():
fd = open('src/assets/%s/sequences.json' % os.environ['ROMID'], 'r') fd = open('src/assets/%s/sequences.json' % os.environ['ROMID'], 'r')
@@ -11,7 +12,8 @@ def main():
rows = json.loads(data) rows = json.loads(data)
make_object(rows) if '--headers-only' not in sys.argv:
make_object(rows)
make_header(rows) make_header(rows)
def make_header(rows): def make_header(rows):
+3 -1
View File
@@ -3,6 +3,7 @@
import assetmgr import assetmgr
import json import json
import os import os
import sys
def main(): def main():
fd = open('src/assets/%s/textures.json' % os.environ['ROMID'], 'r') fd = open('src/assets/%s/textures.json' % os.environ['ROMID'], 'r')
@@ -11,7 +12,8 @@ def main():
rows = json.loads(data) rows = json.loads(data)
make_objects(rows) if '--headers-only' not in sys.argv:
make_objects(rows)
make_header(rows) make_header(rows)
def make_header(rows): def make_header(rows):
+2 -1
View File
@@ -27,7 +27,8 @@ class App():
self.room_names = self.json['rooms'].keys() self.room_names = self.json['rooms'].keys()
self.make_header() self.make_header()
self.make_object() if '--headers-only' not in sys.argv:
self.make_object()
def load_data(self): def load_data(self):
fd = open(sys.argv[1], 'r') fd = open(sys.argv[1], 'r')