mirror of
https://github.com/Mallos31/Quest.git
synced 2024-11-23 05:09:51 +00:00
remove makefile functionality, small build cleanup
This commit is contained in:
parent
cd70c4ec15
commit
4cd014e60c
174
Makefile
174
Makefile
@ -1,168 +1,16 @@
|
||||
BASENAME = quest64
|
||||
VERSION := us
|
||||
|
||||
BUILD_DIR = build
|
||||
ASM_DIRS = asm asm/data
|
||||
BIN_DIRS = assets
|
||||
SRC_DIR = src src/os
|
||||
|
||||
SRC_DIRS = $(SRC_DIR)
|
||||
|
||||
TOOLS_DIR := tools
|
||||
|
||||
S_FILES = $(foreach dir,$(ASM_DIRS),$(wildcard $(dir)/*.s))
|
||||
C_FILES = $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c))
|
||||
H_FILES = $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.h))
|
||||
BIN_FILES = $(foreach dir,$(BIN_DIRS),$(wildcard $(dir)/*.bin))
|
||||
|
||||
O_FILES := $(foreach file,$(S_FILES),$(BUILD_DIR)/$(file).o) \
|
||||
$(foreach file,$(C_FILES),$(BUILD_DIR)/$(file).o) \
|
||||
$(foreach file,$(BIN_FILES),$(BUILD_DIR)/$(file).o)
|
||||
|
||||
|
||||
TARGET = $(BUILD_DIR)/$(BASENAME).$(VERSION)
|
||||
LD_SCRIPT = $(BASENAME).ld
|
||||
|
||||
CROSS = mips-linux-gnu-
|
||||
AS = $(CROSS)as
|
||||
CPP = cpp
|
||||
LD = $(CROSS)ld
|
||||
OBJDUMP = $(CROSS)objdump
|
||||
OBJCOPY = $(CROSS)objcopy
|
||||
PYTHON = python3
|
||||
|
||||
OBJCOPYFLAGS = -O binary
|
||||
|
||||
|
||||
CC := $(TOOLS_DIR)/ido_5.3/usr/lib/cc
|
||||
|
||||
OPT_FLAGS := -O2 -g3
|
||||
|
||||
OBJECTS := $(shell grep -E 'build.+\.o' quest64.ld -o)
|
||||
DEPENDS := $(OBJECTS:=.d)
|
||||
MIPSISET := -mips2 -o32
|
||||
|
||||
INCLUDE_CFLAGS := -I . -I include -I include/2.0I -I include/2.0I/PR
|
||||
|
||||
ASFLAGS = -EB -mtune=vr4300 -march=vr4300 -mabi=32 -I include
|
||||
|
||||
# Files requiring pre/post-processing
|
||||
GREP := grep -rl
|
||||
GLOBAL_ASM_C_FILES := $(shell $(GREP) GLOBAL_ASM $(SRC_DIR) </dev/null 2>/dev/null)
|
||||
GLOBAL_ASM_O_FILES := $(foreach file,$(GLOBAL_ASM_C_FILES),$(BUILD_DIR)/$(file).o)
|
||||
|
||||
|
||||
CFLAGS := -G 0 -Xfullwarn -Xcpluscomm -signed -nostdinc -non_shared -Wab,-r4300_mul
|
||||
CFLAGS += -D_LANGUAGE_C -D_FINALROM -DF3DEX_GBI -DWIN32
|
||||
# ignore compiler warnings about anonymous structs
|
||||
CFLAGS += -woff 649,838
|
||||
CFLAGS += $(INCLUDE_CFLAGS)
|
||||
|
||||
ifeq ($(VERSION),us)
|
||||
CFLAGS += -DVERSION_US
|
||||
endif
|
||||
ifeq ($(VERSION),eu)
|
||||
CFLAGS += -DVERSION_EU
|
||||
endif
|
||||
|
||||
LDFLAGS = -T $(LD_SCRIPT) -Map $(TARGET).map -T undefined_syms_auto.txt -T undefined_funcs_auto.txt -T undefined_syms.$(VERSION).txt --no-check-sections
|
||||
|
||||
|
||||
ASM_PROCESSOR_DIR := $(TOOLS_DIR)/asm-processor
|
||||
|
||||
### Optimisation Overrides
|
||||
build/src/seqpgetstate.c.o: OPT_FLAGS := -O2
|
||||
build/src/aigetlen.c.o: OPT_FLAGS := -O1
|
||||
build/src/pfssearchfile.c.o: OPT_FLAGS := -O1
|
||||
build/src/pfsreadwritefile.c.o: OPT_FLAGS := -O1
|
||||
build/src/pfsfreeblocks.c.o: OPT_FLAGS := -O1
|
||||
build/src/pfsfilestate.c.o: OPT_FLAGS := -O1
|
||||
build/src/pfsdeletefile.c.o: OPT_FLAGS := -O1
|
||||
build/src/pfsallocatefile.c.o: OPT_FLAGS := -O1
|
||||
build/src/pfsnumfiles.c.o: OPT_FLAGS := -O1
|
||||
build/src/pfsgetstatus.c.o: OPT_FLAGS := -O1
|
||||
build/src/contpfs.c.o: OPT_FLAGS := -O1
|
||||
build/src/leodiskinit.c.o: OPT_FLAGS := -O1
|
||||
build/src/controller.c.o: OPT_FLAGS := -O1
|
||||
build/src/initialize.c.o: OPT_FLAGS := -O1
|
||||
build/src/createthread.c.o: OPT_FLAGS := -O1
|
||||
build/src/startthread.c.o: OPT_FLAGS := -O1
|
||||
build/src/createmesgqueue.c.o: OPT_FLAGS := -O1
|
||||
build/src/visetevent.c.o: OPT_FLAGS := -O1
|
||||
build/src/pfsisplug.c.o: OPT_FLAGS := -O1
|
||||
build/src/pfschecker.c.o: OPT_FLAGS := -O1
|
||||
build/src/sptaskyielded.c.o: OPT_FLAGS := -O1
|
||||
build/src/sptask.c.o: OPT_FLAGS := -O1
|
||||
build/src/viblack.c.o: OPT_FLAGS := -O1
|
||||
build/src/viswapbuf.c.o: OPT_FLAGS := -O1
|
||||
build/src/vigetcurrframebuf.c.o: OPT_FLAGS := -O1
|
||||
build/src/vimgr.c.o: OPT_FLAGS := -O1
|
||||
|
||||
|
||||
### Targets
|
||||
|
||||
default: all
|
||||
|
||||
all: dirs $(TARGET).z64 verify
|
||||
|
||||
dirs:
|
||||
$(foreach dir,$(SRC_DIRS) $(ASM_DIRS) $(BIN_DIRS),$(shell mkdir -p $(BUILD_DIR)/$(dir)))
|
||||
|
||||
check: .baserom.$(VERSION).ok
|
||||
|
||||
verify: $(TARGET).z64
|
||||
@echo "$$(cat $(BASENAME).$(VERSION).sha1) $(TARGET).z64" | sha1sum --check
|
||||
|
||||
extract: check
|
||||
$(PYTHON) $(TOOLS_DIR)/splat/split.py $(BASENAME).$(VERSION).yaml
|
||||
|
||||
clean:
|
||||
rm -rf assets
|
||||
@echo "If you meant to build, use ./configure && ninja"
|
||||
@echo "If ninja errors, run ./install.sh"
|
||||
rm -rf build
|
||||
#rm -f *auto.txt
|
||||
|
||||
### Recipes
|
||||
distclean: clean
|
||||
rm -rf asm
|
||||
rm -rf assets
|
||||
rm -f *auto.txt
|
||||
rm -f quest64.ld
|
||||
|
||||
.baserom.$(VERSION).ok: baserom.$(VERSION).z64
|
||||
@echo "$$(cat $(BASENAME).$(VERSION).sha1) $<" | sha1sum --check
|
||||
@touch $@
|
||||
expectedclean:
|
||||
rm -rf expected
|
||||
|
||||
$(TARGET).elf: $(O_FILES) $(LANG_O_FILES)
|
||||
@$(LD) $(LDFLAGS) -o $@
|
||||
|
||||
# ifndef PERMUTER
|
||||
# $(GLOBAL_ASM_O_FILES): $(BUILD_DIR)/%.c.o: %.c
|
||||
# $(PYTHON) $(ASM_PROCESSOR_DIR)/asm_processor.py $(OPT_FLAGS) $< > $(BUILD_DIR)/$<
|
||||
# $(CC) -c -32 $(CFLAGS) $(OPT_FLAGS) $(MIPSISET) -o $@ $(BUILD_DIR)/$<
|
||||
# $(PYTHON) $(ASM_PROCESSOR_DIR)/asm_processor.py $(OPT_FLAGS) $< --post-process $@ \
|
||||
# --assembler "$(AS) $(ASFLAGS)" --asm-prelude $(ASM_PROCESSOR_DIR)/prelude.s
|
||||
# endif
|
||||
|
||||
ifndef PERMUTER
|
||||
$(GLOBAL_ASM_O_FILES): $(BUILD_DIR)/%.c.o: %.c
|
||||
$(PYTHON) $(ASM_PROCESSOR_DIR)/asm_processor.py $(OPT_FLAGS) $< > $(BUILD_DIR)/$<
|
||||
$(CC) -c -32 $(CFLAGS) $(OPT_FLAGS) $(MIPSISET) -o $@ $(BUILD_DIR)/$<
|
||||
$(PYTHON) $(ASM_PROCESSOR_DIR)/asm_processor.py $(OPT_FLAGS) $< --post-process $@ \
|
||||
--assembler "$(AS) $(ASFLAGS)" --asm-prelude include/macro.inc
|
||||
endif
|
||||
|
||||
# non asm-processor recipe
|
||||
$(BUILD_DIR)/%.c.o: %.c
|
||||
$(CC) -c $(CFLAGS) $(OPT_FLAGS) $(MIPSISET) -o $@ $<
|
||||
|
||||
$(BUILD_DIR)/%.s.o: %.s
|
||||
$(AS) $(ASFLAGS) -o $@ $<
|
||||
|
||||
$(BUILD_DIR)/%.bin.o: %.bin
|
||||
$(LD) -r -b binary -o $@ $<
|
||||
|
||||
$(TARGET).bin: $(TARGET).elf
|
||||
$(OBJCOPY) $(OBJCOPYFLAGS) $< $@
|
||||
|
||||
$(TARGET).z64: $(TARGET).bin
|
||||
@cp $< $@
|
||||
|
||||
### Settings
|
||||
.SECONDARY:
|
||||
.PHONY: all clean default
|
||||
SHELL = /bin/bash -e -o pipefail
|
||||
.DEFAULT_GOAL: all
|
||||
.PHONY: all clean distclean
|
@ -7,4 +7,4 @@ def apply(config, args):
|
||||
config['mapfile'] = f'build/{basename}.{version}.map'
|
||||
config['source_directories'] = ['src', 'include']
|
||||
config['objdump_flags'] = ['-M','reg-names=32']
|
||||
config['makeflags'] = ['COMPARE=0']
|
||||
config["make_command"] = ["ninja"]
|
||||
|
@ -8,6 +8,7 @@ options:
|
||||
symbol_addrs_path: symbol_addrs.us.txt
|
||||
migrate_rodata_to_functions: True
|
||||
target_path: baserom.us.z64
|
||||
asm_emit_size_directive: false
|
||||
segments:
|
||||
- name: header
|
||||
type: header
|
||||
|
18
src/328F0.c
18
src/328F0.c
@ -58,20 +58,10 @@ void func_80031F1C(s16 arg0, s16 arg1) {
|
||||
}
|
||||
|
||||
//#pragma GLOBAL_ASM("asm/nonmatchings/328F0/func_80031F74.s")
|
||||
void func_80031F74(u8 *arg0)
|
||||
{
|
||||
s32 var_s0;
|
||||
if (0 != (*arg0))
|
||||
{
|
||||
do
|
||||
{
|
||||
var_s0 = *arg0;
|
||||
arg0++;
|
||||
func_80031DD4(var_s0);
|
||||
var_s0 = *arg0;
|
||||
}
|
||||
while (*arg0 != 0);
|
||||
}
|
||||
void func_80031F74(u8* arg0) {
|
||||
while (*arg0 != 0) {
|
||||
func_80031DD4(*arg0++);
|
||||
}
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/328F0/func_80031FBC.s")
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit e7cd45ba18620d1a50c9dcdaba30bbefd02414c9
|
||||
Subproject commit 247994f34820afc2ed7e173427caad6199c4b666
|
@ -1 +1 @@
|
||||
Subproject commit 41c1b303e7761a35fd67d85de09cec5ea4b4eac6
|
||||
Subproject commit 6dd4d3adcbfb3ee607b9a1e2bba3502d27217d44
|
115
tools/progress.py
Executable file
115
tools/progress.py
Executable file
@ -0,0 +1,115 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import argparse
|
||||
import git
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
from colour import Color
|
||||
|
||||
script_dir = os.path.dirname(os.path.realpath(__file__))
|
||||
root_dir = os.path.join(script_dir, "..")
|
||||
asm_dir = os.path.join(root_dir, "asm", "nonmatchings")
|
||||
build_dir = os.path.join(root_dir, "build")
|
||||
elf_path = os.path.join(build_dir, "marioparty.elf")
|
||||
|
||||
def get_func_sizes():
|
||||
try:
|
||||
result = subprocess.run(['objdump', '-x', elf_path], stdout=subprocess.PIPE)
|
||||
nm_lines = result.stdout.decode().split("\n")
|
||||
except:
|
||||
print(f"Error: Could not run objdump on {elf_path} - make sure that the project is built")
|
||||
sys.exit(1)
|
||||
|
||||
sizes = {}
|
||||
total = 0
|
||||
|
||||
for line in nm_lines:
|
||||
if " F " in line:
|
||||
components = line.split()
|
||||
size = int(components[4], 16)
|
||||
name = components[5]
|
||||
total += size
|
||||
sizes[name] = size
|
||||
|
||||
return sizes, total
|
||||
|
||||
def get_nonmatching_funcs():
|
||||
funcs = set()
|
||||
|
||||
for root, dirs, files in os.walk(asm_dir):
|
||||
for f in files:
|
||||
if f.endswith(".s"):
|
||||
funcs.add(f[:-2])
|
||||
|
||||
return funcs
|
||||
|
||||
def get_funcs_sizes(sizes, matchings, nonmatchings):
|
||||
msize = 0
|
||||
nmsize = 0
|
||||
|
||||
for func in matchings:
|
||||
msize += sizes[func]
|
||||
|
||||
for func in nonmatchings:
|
||||
if func not in sizes:
|
||||
pass
|
||||
# print(func)
|
||||
else:
|
||||
nmsize += sizes[func]
|
||||
|
||||
return msize, nmsize
|
||||
|
||||
def lerp(a, b, alpha):
|
||||
return a + (b - a) * alpha
|
||||
|
||||
def main(args):
|
||||
func_sizes, total_size = get_func_sizes()
|
||||
all_funcs = set(func_sizes.keys())
|
||||
|
||||
nonmatching_funcs = get_nonmatching_funcs()
|
||||
matching_funcs = all_funcs - nonmatching_funcs
|
||||
|
||||
matching_size, nonmatching_size = get_funcs_sizes(func_sizes, matching_funcs, nonmatching_funcs)
|
||||
|
||||
if len(all_funcs) == 0:
|
||||
funcs_matching_ratio = 0.0
|
||||
matching_ratio = 0.0
|
||||
else:
|
||||
funcs_matching_ratio = (len(matching_funcs) / len(all_funcs)) * 100
|
||||
matching_ratio = (matching_size / total_size) * 100
|
||||
|
||||
if args.csv:
|
||||
version = 1
|
||||
git_object = git.Repo().head.object
|
||||
timestamp = str(git_object.committed_date)
|
||||
git_hash = git_object.hexsha
|
||||
csv_list = [str(version), timestamp, git_hash, str(len(all_funcs)), str(len(nonmatching_funcs)),
|
||||
str(len(matching_funcs)), str(total_size), str(nonmatching_size), str(matching_size)]
|
||||
print(",".join(csv_list))
|
||||
elif args.shield_json:
|
||||
import json
|
||||
|
||||
# https://shields.io/endpoint
|
||||
color = Color("#50ca22", hue=lerp(0, 105/255, matching_ratio / 100))
|
||||
print(json.dumps({
|
||||
"schemaVersion": 1,
|
||||
"label": f"progress ({args.version})",
|
||||
"message": f"{matching_ratio:.2f}%",
|
||||
"color": color.hex,
|
||||
}))
|
||||
else:
|
||||
print (f" Matching Size:{matching_size}\n Nonmatching Size:{nonmatching_size}\n Calculated Size:{matching_size + nonmatching_size}\n Total Size:{total_size}\n")
|
||||
if matching_size + nonmatching_size != total_size:
|
||||
print("Warning: category/total size mismatch!\n")
|
||||
print(f"{len(matching_funcs)} matched functions / {len(all_funcs)} total ({funcs_matching_ratio:.2f}%)")
|
||||
print(f"{matching_size} matching bytes / {total_size} total ({matching_ratio:.2f}%)")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(description="Reports progress for the project")
|
||||
parser.add_argument("--csv", action="store_true")
|
||||
parser.add_argument("--shield-json", action="store_true")
|
||||
args = parser.parse_args()
|
||||
|
||||
main(args)
|
@ -1 +1 @@
|
||||
Subproject commit d87e50f4ed96bc2a00e3b0c65d453608fb6b57cc
|
||||
Subproject commit 312d57a03d5fd03bbd98106e9986f1257b75d950
|
Loading…
Reference in New Issue
Block a user