diff options
| author | Derek Hensley <hensley.derek58@gmail.com> | 2023-07-31 17:42:21 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-07-31 20:42:21 -0400 |
| commit | 33ec543467f17900516d93dd4b7964b8f49d1951 (patch) | |
| tree | 426bd326b52d2a609d6f45cdf17a50162cbdc01b /lib/ultralib/Makefile | |
| parent | 6d0c9276e8fc93e679d295b4e5f968da4b966a9b (diff) | |
Libultra OK (#20)
* Identify last 2 libultra files
* BSS left
* Update not built files
* libultra OK
* Makefile formating
* Identify last couple data files
* libultra section headers
* Paddings
* Fix one padding
* move non_shared to CLFAGS and ASFLAGS
* git subrepo pull --force lib/ultralib
subrepo:
subdir: "lib/ultralib"
merged: "b376559"
upstream:
origin: "git@github.com:decompals/ultralib.git"
branch: "main"
commit: "b376559"
git-subrepo:
version: "0.4.6"
origin: "https://github.com/ingydotnet/git-subrepo"
commit: "110b9eb"
* Remove duplicate -non_shared
* .hasm
* Jenkins
* GBIDEFINE
Diffstat (limited to 'lib/ultralib/Makefile')
| -rw-r--r-- | lib/ultralib/Makefile | 115 |
1 files changed, 62 insertions, 53 deletions
diff --git a/lib/ultralib/Makefile b/lib/ultralib/Makefile index 3700641..cf87da4 100644 --- a/lib/ultralib/Makefile +++ b/lib/ultralib/Makefile @@ -1,32 +1,38 @@ NON_MATCHING ?= 0 -TARGET := libgultra_rom +# One of: +# libgultra_rom, libgultra_d, libgultra +# libultra_rom, libultra_d, libultra +TARGET ?= libgultra_rom +CROSS ?= mips-linux-gnu- + BASE_DIR := base_$(TARGET) BASE_AR := $(TARGET).a -BUILD_DIR := build +BUILD_ROOT := build +BUILD_DIR := $(BUILD_ROOT)/$(TARGET) BUILD_AR := $(BUILD_DIR)/$(TARGET).a WORKING_DIR := $(shell pwd) CPP := cpp -P AR := ar -AS := tools/gcc/as -CC := tools/gcc/gcc -AR_OLD := tools/gcc/ar - -export COMPILER_PATH := $(WORKING_DIR)/tools/gcc -CFLAGS := -w -nostdinc -c -G 0 -mgp32 -mfp32 -mips3 -D_LANGUAGE_C -ASFLAGS := -w -nostdinc -c -G 0 -mgp32 -mfp32 -mips3 -DMIPSEB -D_LANGUAGE_ASSEMBLY -D_MIPS_SIM=1 -D_ULTRA64 -x assembler-with-cpp -GBIDEFINE := -DF3DEX_GBI_2 -CPPFLAGS = -D_MIPS_SZLONG=32 -D__USE_ISOC99 -I $(WORKING_DIR)/include -I $(WORKING_DIR)/include/gcc -I $(WORKING_DIR)/include/PR $(GBIDEFINE) +ifeq ($(findstring libgultra,$(TARGET)),libgultra) +-include Makefile.gcc +else ifeq ($(findstring libultra,$(TARGET)),libultra) +-include Makefile.ido +else +$(error Invalid Target) +endif ifeq ($(findstring _d,$(TARGET)),_d) CPPFLAGS += -D_DEBUG -OPTFLAGS := -O0 else -CPPFLAGS += -DNDEBUG -D_FINALROM -OPTFLAGS := -O3 +CPPFLAGS += -DNDEBUG +endif + +ifeq ($(findstring _rom,$(TARGET)),_rom) +CPPFLAGS += -D_FINALROM endif SRC_DIRS := $(shell find src -type d) @@ -43,6 +49,11 @@ MARKER_FILES := $(O_FILES:.o=.marker) ifneq ($(NON_MATCHING),1) COMPARE_OBJ = cmp $(BASE_DIR)/$(@F:.marker=.o) $(@:.marker=.o) && echo "$(@:.marker=.o): OK" COMPARE_AR = cmp $(BASE_AR) $@ && echo "$@: OK" +ifeq ($(COMPILER),ido) +COMPARE_OBJ = $(CROSS)objcopy -p --strip-debug $(WORKING_DIR)/$(@:.marker=.o) $(WORKING_DIR)/$(@:.marker=.cmp.o) && \ + cmp $(BASE_DIR)/.cmp/$(@F:.marker=.cmp.o) $(WORKING_DIR)/$(@:.marker=.cmp.o) && echo "$(@:.marker=.o): OK" +COMPARE_AR = echo "$@: Cannot compare archive currently" +endif else COMPARE_OBJ := COMPARE_AR := @@ -51,7 +62,7 @@ endif BASE_OBJS := $(wildcard $(BASE_DIR)/*.o) # Try to find a file corresponding to an archive file in any of src/ asm/ or the base directory, prioritizing src then asm then the original file -AR_ORDER = $(foreach f,$(shell $(AR) t $(BASE_AR)),$(shell find $(BUILD_DIR)/src $(BUILD_DIR)/asm $(BUILD_DIR)/$(BASE_DIR) -name $f -type f -print -quit)) +AR_ORDER = $(foreach f,$(shell $(AR) t $(BASE_AR)),$(shell find $(BUILD_DIR)/src $(BUILD_DIR)/asm $(BUILD_DIR)/$(BASE_DIR) -iname $f -type f -print -quit)) MATCHED_OBJS = $(filter-out $(BUILD_DIR)/$(BASE_DIR)/%,$(AR_ORDER)) UNMATCHED_OBJS = $(filter-out $(MATCHED_OBJS),$(AR_ORDER)) NUM_OBJS = $(words $(AR_ORDER)) @@ -68,13 +79,13 @@ $(BUILD_AR): $(MARKER_FILES) ifneq ($(NON_MATCHING),1) # patch archive creation time and individual files' ownership & permissions dd bs=1 skip=24 seek=24 count=12 conv=notrunc if=$(BASE_AR) of=$@ status=none - python3 tools/patch_ar_meta.py $@ + python3 tools/patch_ar_meta.py $@ $(BASE_AR) $(PATCH_AR_FLAGS) @$(COMPARE_AR) @echo "Matched: $(NUM_OBJS_MATCHED)/$(NUM_OBJS)" endif clean: - $(RM) -rf $(BUILD_DIR) + $(RM) -rf $(BUILD_ROOT) distclean: clean $(MAKE) -C tools distclean @@ -84,73 +95,71 @@ setup: $(MAKE) -C tools cd $(BASE_DIR) && $(AR) xo ../$(BASE_AR) chmod -R +rw $(BASE_DIR) - -# KMC gcc has a custom flag, N64ALIGN, which forces 8 byte alignment on arrays. This can be used to match, but -# an explicit aligned(8) attribute can be used instead. We opted for the latter for better compatibilty with -# other versions of GCC that do not have this flag. -# export N64ALIGN := ON -export VR4300MUL := ON +ifeq ($(COMPILER),ido) + export CROSS=$(CROSS) && ./tools/strip_debug.sh $(BASE_DIR) +endif $(BUILD_DIR)/$(BASE_DIR)/%.marker: $(BASE_DIR)/%.o cp $< $(@:.marker=.o) ifneq ($(NON_MATCHING),1) -# @$(COMPARE_OBJ) # change file timestamps to match original @touch -r $(BASE_DIR)/$(@F:.marker=.o) $(@:.marker=.o) @$(COMPARE_OBJ) @touch $@ endif -ifeq ($(findstring _d,$(TARGET)),_d) -$(BUILD_DIR)/src/rmon/%.marker: OPTFLAGS := -O0 -endif +GBIDEFINE := -DF3DEX_GBI_2 -STRIP = - -$(BUILD_DIR)/src/os/initialize_isv.marker: OPTFLAGS := -O2 -$(BUILD_DIR)/src/os/initialize_isv.marker: STRIP = && tools/gcc/strip-2.7 -N initialize_isv.c $(WORKING_DIR)/$(@:.marker=.o) $(WORKING_DIR)/$(@:.marker=.o) -$(BUILD_DIR)/src/os/assert.marker: OPTFLAGS := -O0 -$(BUILD_DIR)/src/os/ackramromread.marker: OPTFLAGS := -O0 -$(BUILD_DIR)/src/os/ackramromwrite.marker: OPTFLAGS := -O0 -$(BUILD_DIR)/src/os/exit.marker: OPTFLAGS := -O0 -$(BUILD_DIR)/src/os/seterrorhandler.marker: OPTFLAGS := -O0 -$(BUILD_DIR)/src/gu/us2dex_emu.marker: GBIDEFINE := -DF3DEX_GBI -$(BUILD_DIR)/src/sp/sprite.marker: GBIDEFINE := -$(BUILD_DIR)/src/sp/spriteex.marker: GBIDEFINE := -$(BUILD_DIR)/src/sp/spriteex2.marker: GBIDEFINE := -$(BUILD_DIR)/src/sp/spriteex2.marker: GBIDEFINE := -$(BUILD_DIR)/src/mgu/%.marker: export VR4300MUL := OFF -$(BUILD_DIR)/src/mgu/rotate.marker: export VR4300MUL := ON -$(BUILD_DIR)/src/os/%.marker: ASFLAGS += -P -$(BUILD_DIR)/src/gu/%.marker: ASFLAGS += -P -$(BUILD_DIR)/src/libc/%.marker: ASFLAGS += -P -$(BUILD_DIR)/src/rmon/%.marker: ASFLAGS += -P +$(BUILD_DIR)/src/gu/parse_gbi.marker: GBIDEFINE := -DF3D_GBI +$(BUILD_DIR)/src/gu/us2dex_emu.marker: GBIDEFINE := +$(BUILD_DIR)/src/gu/us2dex2_emu.marker: GBIDEFINE := +$(BUILD_DIR)/src/sp/sprite.marker: GBIDEFINE := -DF3D_GBI +$(BUILD_DIR)/src/sp/spriteex.marker: GBIDEFINE := +$(BUILD_DIR)/src/sp/spriteex2.marker: GBIDEFINE := $(BUILD_DIR)/src/voice/%.marker: OPTFLAGS += -DLANG_JAPANESE -I$(WORKING_DIR)/src -I$(WORKING_DIR)/src/voice -$(BUILD_DIR)/src/voice/%.marker: CC := tools/compile_sjis.py -D__CC=$(WORKING_DIR)/$(CC) +$(BUILD_DIR)/src/voice/%.marker: CC := tools/compile_sjis.py -D__CC=$(WORKING_DIR)/$(CC) -D__BUILD_DIR=$(BUILD_DIR) $(BUILD_DIR)/%.marker: %.c - cd $(<D) && $(WORKING_DIR)/$(CC) $(CFLAGS) $(CPPFLAGS) $(OPTFLAGS) $(<F) -o $(WORKING_DIR)/$(@:.marker=.o) + cd $(<D) && $(WORKING_DIR)/$(CC) $(CFLAGS) $(MIPS_VERSION) $(CPPFLAGS) $(OPTFLAGS) $(<F) $(IINC) -o $(WORKING_DIR)/$(@:.marker=.o) ifneq ($(NON_MATCHING),1) # check if this file is in the archive; patch corrupted bytes and change file timestamps to match original if so - $(if $(findstring $(BASE_DIR)/$(@F:.marker=.o), $(BASE_OBJS)), \ + @$(if $(findstring $(BASE_DIR)/$(@F:.marker=.o), $(BASE_OBJS)), \ python3 tools/fix_objfile.py $(@:.marker=.o) $(BASE_DIR)/$(@F:.marker=.o) $(STRIP) && \ $(COMPARE_OBJ) && \ touch -r $(BASE_DIR)/$(@F:.marker=.o) $(@:.marker=.o), \ - echo "Object file $(<F:.marker=.o) is not in the current archive" \ + echo "Object file $(@F:.marker=.o) is not in the current archive" \ ) # create or update the marker file @touch $@ endif $(BUILD_DIR)/%.marker: %.s - cd $(<D) && $(WORKING_DIR)/$(CC) $(ASFLAGS) $(CPPFLAGS) -I. $(OPTFLAGS) $(<F) -o $(WORKING_DIR)/$(@:.marker=.o) + cd $(<D) && $(WORKING_DIR)/$(CC) $(ASFLAGS) $(MIPS_VERSION) $(CPPFLAGS) $(ASOPTFLAGS) $(<F) $(IINC) -o $(WORKING_DIR)/$(@:.marker=.o) +ifneq ($(NON_MATCHING),1) +# check if this file is in the archive; patch corrupted bytes and change file timestamps to match original if so + @$(if $(findstring $(BASE_DIR)/$(@F:.marker=.o), $(BASE_OBJS)), \ + python3 tools/fix_objfile.py $(@:.marker=.o) $(BASE_DIR)/$(@F:.marker=.o) $(STRIP) && \ + $(COMPARE_OBJ) && \ + touch -r $(BASE_DIR)/$(@F:.marker=.o) $(@:.marker=.o), \ + echo "Object file $(@F:.marker=.o) is not in the current archive" \ + ) +# create or update the marker file + @touch $@ +endif + +# Rule for building files that require specific file paths in the mdebug section +$(MDEBUG_FILES): $(BUILD_DIR)/src/%.marker: src/%.s + cp $(<:.marker=.s) $(dir $@) + mkdir -p $(@:.marker=) + export USR_INCLUDE=$(WORKING_DIR)/include && cd $(@:.marker=) && $(WORKING_DIR)/$(CC) $(ASFLAGS) $(CPPFLAGS) ../$(<F) -I/usr/include -o $(notdir $(<:.s=.o)) + mv $(@:.marker=)/$(<F:.s=.o) $(@:.marker=)/.. ifneq ($(NON_MATCHING),1) # check if this file is in the archive; patch corrupted bytes and change file timestamps to match original if so @$(if $(findstring $(BASE_DIR)/$(@F:.marker=.o), $(BASE_OBJS)), \ python3 tools/fix_objfile.py $(@:.marker=.o) $(BASE_DIR)/$(@F:.marker=.o) && \ $(COMPARE_OBJ) && \ touch -r $(BASE_DIR)/$(@F:.marker=.o) $(@:.marker=.o), \ - echo "Object file $(<F:.marker=.o) is not in the current archive" \ + echo "Object file $(@F:.marker=.o) is not in the current archive" \ ) # create or update the marker file @touch $@ |
