Skip to content

Commit 21ba319

Browse files
committed
Add new GZIP DEFLATE decompressor/compressor
1 parent 3edf4bc commit 21ba319

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+10314
-5167
lines changed

Makefile

Lines changed: 9 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ else ifeq ($(SAVETYPE),sram)
6767
DEFINES += SRAM=1
6868
endif
6969

70-
DEFINES += NO_ERRNO_H=1 NO_GZIP=1
70+
DEFINES += NO_ERRNO_H=1
7171

7272
# VERSION - selects the version of the game to build
7373
# jp - builds the 1996 Japanese version
@@ -269,12 +269,10 @@ BUILD_DIR_BASE := build
269269
# BUILD_DIR is the location where all build artifacts are placed
270270
BUILD_DIR := $(BUILD_DIR_BASE)/$(VERSION)_$(CONSOLE)
271271

272-
COMPRESS ?= lz4t
272+
COMPRESS ?= gzip
273273
$(eval $(call validate-option,COMPRESS,mio0 yay0 lz4t gzip rnc1 rnc2 uncomp))
274274
ifeq ($(COMPRESS),gzip)
275275
DEFINES += GZIP=1
276-
LIBZRULE := $(BUILD_DIR)/libz.a
277-
LIBZLINK := -lz
278276
else ifeq ($(COMPRESS),rnc1)
279277
DEFINES += RNC1=1
280278
else ifeq ($(COMPRESS),rnc2)
@@ -289,9 +287,6 @@ else ifeq ($(COMPRESS),uncomp)
289287
DEFINES += UNCOMPRESSED=1
290288
endif
291289

292-
GZIPVER ?= std
293-
$(eval $(call validate-option,GZIPVER,std libdef))
294-
295290
# Whether to hide commands or not
296291
VERBOSE ?= 0
297292
ifeq ($(VERBOSE),0)
@@ -375,7 +370,6 @@ BUILD_DIR_BASE := build
375370
BUILD_DIR := $(BUILD_DIR_BASE)/$(VERSION)_$(CONSOLE)
376371
ROM := $(BUILD_DIR)/$(TARGET_STRING).z64
377372
ELF := $(BUILD_DIR)/$(TARGET_STRING).elf
378-
LIBZ := $(BUILD_DIR)/libz.a
379373
LD_SCRIPT := sm64.ld
380374
YAY0_DIR := $(BUILD_DIR)/bin
381375
SOUND_BIN_DIR := $(BUILD_DIR)/sound
@@ -384,7 +378,7 @@ ACTOR_DIR := actors
384378
LEVEL_DIRS := $(patsubst levels/%,%,$(dir $(wildcard levels/*/header.h)))
385379

386380
# Directories containing source files
387-
SRC_DIRS += src src/boot src/game src/engine src/audio src/menu src/buffers lib/librtc actors levels bin data assets asm lib sound
381+
SRC_DIRS += src src/boot src/boot/deflate src/game src/engine src/audio src/menu src/buffers lib/librtc actors levels bin data assets asm lib sound
388382
LIBZ_SRC_DIRS := src/libz
389383
GODDARD_SRC_DIRS := src/goddard src/goddard/dynlists
390384
BIN_DIRS := bin bin/$(VERSION)
@@ -396,7 +390,6 @@ include Makefile.split
396390
LEVEL_C_FILES := $(wildcard levels/*/leveldata.c) $(wildcard levels/*/script.c) $(wildcard levels/*/geo.c)
397391
C_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c)) $(LEVEL_C_FILES)
398392
CPP_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.cpp))
399-
LIBZ_C_FILES := $(foreach dir,$(LIBZ_SRC_DIRS),$(wildcard $(dir)/*.c))
400393
GODDARD_C_FILES := $(foreach dir,$(GODDARD_SRC_DIRS),$(wildcard $(dir)/*.c))
401394
S_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.s))
402395
GENERATED_C_FILES := $(BUILD_DIR)/assets/mario_anim_data.c $(BUILD_DIR)/assets/demo_data.c
@@ -425,11 +418,10 @@ O_FILES := $(foreach file,$(C_FILES),$(BUILD_DIR)/$(file:.c=.o)) \
425418
$(foreach file,$(GENERATED_C_FILES),$(file:.c=.o)) \
426419
lib/PR/hvqm/hvqm2sp1.o lib/PR/hvqm/hvqm2sp2.o
427420

428-
LIBZ_O_FILES := $(foreach file,$(LIBZ_C_FILES),$(BUILD_DIR)/$(file:.c=.o))
429421
GODDARD_O_FILES := $(foreach file,$(GODDARD_C_FILES),$(BUILD_DIR)/$(file:.c=.o))
430422

431423
# Automatic dependency files
432-
DEP_FILES := $(O_FILES:.o=.d) $(LIBZ_O_FILES:.o=.d) $(GODDARD_O_FILES:.o=.d) $(BUILD_DIR)/$(LD_SCRIPT).d
424+
DEP_FILES := $(O_FILES:.o=.d) $(GODDARD_O_FILES:.o=.d) $(BUILD_DIR)/$(LD_SCRIPT).d
433425

434426
#==============================================================================#
435427
# Compiler Options #
@@ -456,7 +448,7 @@ else
456448
$(error Unable to detect a suitable MIPS toolchain installed)
457449
endif
458450

459-
LIBRARIES := nustd hvqm2 z goddard
451+
LIBRARIES := nustd hvqm2 goddard
460452

461453
LINK_LIBRARIES = $(foreach i,$(LIBRARIES),-l$(i))
462454

@@ -547,6 +539,7 @@ RSPASMFLAGS := $(foreach d,$(DEFINES),-definelabel $(subst =, ,$(d)))
547539
YAY0TOOL := $(TOOLS_DIR)/slienc
548540
MIO0TOOL := $(TOOLS_DIR)/mio0
549541
LZ4TPACK := $(TOOLS_DIR)/lz4tpack
542+
DEFLATEPACK := $(TOOLS_DIR)/deflatepack
550543
RNCPACK := $(TOOLS_DIR)/rncpack
551544
FILESIZER := $(TOOLS_DIR)/filesizer
552545
N64CKSUM := $(TOOLS_DIR)/n64cksum
@@ -560,11 +553,6 @@ EXTRACT_DATA_FOR_MIO := $(TOOLS_DIR)/extract_data_for_mio
560553
SKYCONV := $(TOOLS_DIR)/skyconv
561554
FIXLIGHTS_PY := $(TOOLS_DIR)/fixlights.py
562555
FLIPS := $(TOOLS_DIR)/flips
563-
ifeq ($(GZIPVER),std)
564-
GZIP := gzip
565-
else
566-
GZIP := libdeflate-gzip
567-
endif
568556
# Use the system installed armips if available. Otherwise use the one provided with this repository.
569557
ifneq (,$(call find-command,armips))
570558
RSPASM := armips
@@ -686,11 +674,6 @@ endif
686674

687675
$(CRASH_TEXTURE_C_FILES): TEXTURE_ENCODING := u32
688676

689-
ifeq ($(COMPILER),gcc)
690-
$(BUILD_DIR)/src/libz/%.o: OPT_FLAGS := -Os
691-
$(BUILD_DIR)/src/libz/%.o: CFLAGS += -Wno-implicit-fallthrough -Wno-unused-parameter -Wno-pointer-sign
692-
endif
693-
694677
ifeq ($(VERSION),eu)
695678
TEXT_DIRS := text/de text/us text/fr
696679

@@ -731,7 +714,7 @@ $(BUILD_DIR)/src/game/rendering_graph_node.o: OPT_FLAGS := $(GRAPH_NODE_OPT_FLAG
731714
# $(info MATH_UTIL_OPT_FLAGS: $(MATH_UTIL_OPT_FLAGS))
732715
# $(info GRAPH_NODE_OPT_FLAGS: $(GRAPH_NODE_OPT_FLAGS))
733716

734-
ALL_DIRS := $(BUILD_DIR) $(addprefix $(BUILD_DIR)/,$(SRC_DIRS) asm/debug $(GODDARD_SRC_DIRS) $(LIBZ_SRC_DIRS) $(ULTRA_BIN_DIRS) $(BIN_DIRS) $(TEXTURE_DIRS) $(TEXT_DIRS) $(SOUND_SAMPLE_DIRS) $(addprefix levels/,$(LEVEL_DIRS)) rsp include) $(YAY0_DIR) $(addprefix $(YAY0_DIR)/,$(VERSION)) $(SOUND_BIN_DIR) $(SOUND_BIN_DIR)/sequences/$(VERSION)
717+
ALL_DIRS := $(BUILD_DIR) $(addprefix $(BUILD_DIR)/,$(SRC_DIRS) asm/debug $(GODDARD_SRC_DIRS) $(ULTRA_BIN_DIRS) $(BIN_DIRS) $(TEXTURE_DIRS) $(TEXT_DIRS) $(SOUND_SAMPLE_DIRS) $(addprefix levels/,$(LEVEL_DIRS)) rsp include) $(YAY0_DIR) $(addprefix $(YAY0_DIR)/,$(VERSION)) $(SOUND_BIN_DIR) $(SOUND_BIN_DIR)/sequences/$(VERSION)
735718

736719
# Make sure build directory exists before compiling anything
737720
DUMMY != mkdir -p $(ALL_DIRS)
@@ -938,13 +921,8 @@ $(BUILD_DIR)/libgoddard.a: $(GODDARD_O_FILES)
938921
@$(PRINT) "$(GREEN)Linking libgoddard: $(BLUE)$@ $(NO_COL)\n"
939922
$(V)$(AR) rcs -o $@ $(GODDARD_O_FILES)
940923

941-
# Link libz
942-
$(BUILD_DIR)/libz.a: $(LIBZ_O_FILES)
943-
@$(PRINT) "$(GREEN)Linking libz: $(BLUE)$@ $(NO_COL)\n"
944-
$(V)$(AR) rcs -o $@ $(LIBZ_O_FILES)
945-
946924
# SS2: Goddard rules to get size
947-
$(BUILD_DIR)/sm64_prelim.ld: sm64.ld $(O_FILES) $(YAY0_OBJ_FILES) $(SEG_FILES) $(BUILD_DIR)/libgoddard.a $(BUILD_DIR)/libz.a
925+
$(BUILD_DIR)/sm64_prelim.ld: sm64.ld $(O_FILES) $(YAY0_OBJ_FILES) $(SEG_FILES) $(BUILD_DIR)/libgoddard.a
948926
$(call print,Preprocessing preliminary linker script:,$<,$@)
949927
$(V)$(CPP) $(CPPFLAGS) -DPRELIMINARY=1 -DBUILD_DIR=$(BUILD_DIR) -DULTRALIB=lib$(ULTRALIB) -MMD -MP -MT $@ -MF $@.d -o $@ $<
950928

@@ -962,7 +940,7 @@ $(BUILD_DIR)/asm/debug/map.o: asm/debug/map.s $(BUILD_DIR)/sm64_prelim.elf
962940
$(V)$(CROSS)gcc -c $(ASMFLAGS) $(foreach i,$(INCLUDE_DIRS),-Wa,-I$(i)) -x assembler-with-cpp -MMD -MF $(BUILD_DIR)/$*.d -o $@ $<
963941

964942
# Link SM64 ELF file
965-
$(ELF): $(BUILD_DIR)/sm64_prelim.elf $(BUILD_DIR)/asm/debug/map.o $(O_FILES) $(YAY0_OBJ_FILES) $(SEG_FILES) $(BUILD_DIR)/$(LD_SCRIPT) $(BUILD_DIR)/libz.a $(BUILD_DIR)/libgoddard.a
943+
$(ELF): $(BUILD_DIR)/sm64_prelim.elf $(BUILD_DIR)/asm/debug/map.o $(O_FILES) $(YAY0_OBJ_FILES) $(SEG_FILES) $(BUILD_DIR)/$(LD_SCRIPT) $(BUILD_DIR)/libgoddard.a
966944
@$(PRINT) "$(GREEN)Linking ELF file: $(BLUE)$@ $(NO_COL)\n"
967945
$(V)$(LD) --gc-sections -L $(BUILD_DIR) -T $(BUILD_DIR)/$(LD_SCRIPT) -T goddard.txt -Map $(BUILD_DIR)/sm64.$(VERSION).map --no-check-sections $(addprefix -R ,$(SEG_FILES)) -o $@ $(O_FILES) -L$(LIBS_DIR) -l$(ULTRALIB) -Llib $(LINK_LIBRARIES) -u sprintf -u osMapTLB -Llib/gcclib/$(LIBGCCDIR) -lgcc
968946

compression/gziprules.mk

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,9 @@
1-
# Compress binary file to gzip
2-
$(BUILD_DIR)/%.gz: $(BUILD_DIR)/%.bin
1+
# Compress binary file
2+
$(BUILD_DIR)/%.szp: $(BUILD_DIR)/%.bin
33
$(call print,Compressing:,$<,$@)
4-
ifeq ($(GZIPVER),std)
5-
$(V)$(GZIP) -c -9 -n $< > $@
6-
else
7-
$(V)$(GZIP) -c -12 -n $< > $@
8-
endif
9-
10-
# Strip gzip header
11-
$(BUILD_DIR)/%.szp: $(BUILD_DIR)/%.gz
12-
$(call print,Converting:,$<,$@)
13-
$(V)dd bs=10 skip=1 if=$< of=$(<:.gz=.gz.strip) status=none
14-
$(V)$(FILESIZER) $(<:.gz=.gz.strip) $@ `stat --format="%s" $(<:.gz=.bin)`
4+
$(V)$(DEFLATEPACK) $< $@
155

166
# convert binary szp to object file
177
$(BUILD_DIR)/%.szp.o: $(BUILD_DIR)/%.szp
18-
$(call print,Converting GZIP to ELF:,$<,$@)
8+
$(call print,Converting deflate to ELF:,$<,$@)
199
$(V)$(LD) -r -b binary $< -o $@

include/gzip.h

Lines changed: 0 additions & 59 deletions
This file was deleted.

sm64.ld

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -175,9 +175,8 @@ SECTIONS
175175
#endif
176176
BUILD_DIR/lib/librtc*.o(.text*);
177177
*ULTRALIB.a:*.o(.text*);
178-
*/libnustd.a:*.o(.text*);
178+
*libnustd.a:*.o(.text*);
179179
*libgcc.a:*.o(.text*);
180-
*/libz.a:*.o(.text*);
181180
*/libhvqm2.a:*.o(.text*);
182181
lib/rspboot.o(.text*);
183182
#include "rsptext.inc.ld"
@@ -199,7 +198,6 @@ SECTIONS
199198
BUILD_DIR/lib/librtc*.o(.*data*);
200199
*ULTRALIB.a:*.o(.data*);
201200
*/libhvqm2.a:*.o(.data*);
202-
*/libz.a:*.o(.data*);
203201
#include "rspdata.inc.ld"
204202
BUILD_DIR/lib/aspMain.o(.data*);
205203
lib/PR/audio/n_aspMain.o(.data*);
@@ -218,7 +216,6 @@ SECTIONS
218216
BUILD_DIR/lib/librtc*.o(.rodata*);
219217
*ULTRALIB.a:*.o(.rodata*);
220218
*libgcc.a:*.o(.rodata*);
221-
*/libz.a:*.o(.rodata*);
222219

223220
lib/PR/hvqm/hvqm2sp1.o(.rodata*);
224221
}
@@ -240,7 +237,6 @@ SECTIONS
240237
*ULTRALIB.a:*.o(.scommon);
241238
*ULTRALIB.a:*.o(.*bss*);
242239
*/libhvqm2.a:*.o(.bss*);
243-
*/libz.a:*.o(.bss*);
244240
. = ALIGN(0x8);
245241
}
246242
END_NOLOAD(main)

0 commit comments

Comments
 (0)