Files
game-and-watch-zelda3/Makefile
2023-09-05 23:36:47 +02:00

625 lines
21 KiB
Makefile

##########################################################################################################################
# File automatically-generated by tool: [projectgenerator] version: [3.10.0-B14] date: [Sat Nov 21 15:39:30 CET 2020]
##########################################################################################################################
# ------------------------------------------------
# Generic Makefile (based on gcc)
#
# ChangeLog :
# 2017-02-10 - Several enhancements + project update mode
# 2015-07-22 - first version
# ------------------------------------------------
######################################
# target
######################################
TARGET = gw_zelda3
######################################
# building variables
######################################
# debug build?
DEBUG = 0
# optimization
OPT = -O3
INTFLASH_BANK ?= 2
EXTFLASH_OFFSET ?= 1048576
EXTFLASH_SIZE_MB ?= 15
EXTFLASH_SIZE ?= $(shell echo "$$(( $(EXTFLASH_SIZE_MB) * 1024 * 1024 ))")
EXTFLASH_ADDRESS ?= $(shell echo "$$(( $(EXTFLASH_OFFSET) + 0x90000000 ))")
LARGE_FLASH ?= 0
export LARGE_FLASH # Used in stm32h7x_spiflash.cfg
ifeq ($(LARGE_FLASH), 0)
PROGRAM_VERIFY="verify"
else
# Currently verify is broken for large chips
PROGRAM_VERIFY=""
endif
export USE_4K_ERASE_CMD=0 # Used in stm32h7x_spiflash.cfg
# Screenshot support allocates 150kB of external flash
ENABLE_SCREENSHOT ?= 0
# Limit to 30 fps for improved stability
LIMIT_30FPS ?= 1
# Overclock level: 0 (no overclocking), 1 (intermediate overclocking), or 2 (max overclocking)
OVERCLOCK ?= 2
RENDER_FPS ?= 0
PATCH_DIALOGUES ?= 0
# Savestate support allocates 178kB of external flash
ENABLE_SAVESTATE ?= 0
# Increase UI speed (item menu, etc.)
FASTER_UI ?= 1
# Display battery indicator in item menu
BATTERY_INDICATOR ?= 1
# Extended screensize (0 for default screen size 256x224, 1 for full-height 256x240, 2 for full screen 320x240)
EXTENDED_SCREEN ?= 1
# Item switch on L/R. Also allows reordering of items in inventory by pressing Y+direction.
# Hold X, L, or R inside of the item selection screen to assign items to those buttons.
# If X is reassigned, Select opens the map. Push Select while paused to save or quit.
# When L or R are assigned items, those buttons will no longer cycle items.
FEATURE_SWITCH_LR ?= 0
# Allow turning while dashing
FEATURE_TURN_WHILE_DASHING ?= 0
# Allow mirror to be used to warp to the Dark World
FEATURE_MIRROR_TO_DARK_WORLD ?= 0
# Collect items (like hearts) with sword instead of having to touch them
FEATURE_COLLECT_ITEMS_WITH_SWORD ?= 0
# Level 2-4 sword can be used to break pots
FEATURE_BREAK_POTS_WITH_SWORD ?= 0
# Disable the low health beep
FEATURE_DISABLE_LOW_HEALTH_BEEP ?= 0
# Avoid waiting too much at the start
FEATURE_SKIP_INTRO_ON_KEYPRESS ?= 1
# Display max rupees/bombs/arrows with orange/yellow color
FEATURE_SHOW_MAX_ITEMS_IN_YELLOW ?= 0
# Allows up to four bombs active at a time instead of two.
FEATURE_MORE_ACTIVE_BOMBS ?= 0
# Can carry 9999 rupees instead of 999
FEATURE_CARRY_MORE_RUPEES ?= 0
# Enable various zelda bug fixes
FEATURE_MISC_BUG_FIXES ?= 0
# Allow bird travel to be cancelled by hitting the X key
FEATURE_CANCEL_BIRD_TRAVEL ?= 0
# Enable some more advanced zelda bugfixes that change game behavior
FEATURE_GAME_CHANGING_BUG_FIXES ?= 0
# Enable this to limit the ItemSwitchLR item cycling to the first 4 items.
FEATURE_SWITCH_LR_LIMIT ?= 0
FEATURES := 0
FEATURES := $(shell echo "$$(( $(FEATURES) | $(FEATURE_SWITCH_LR) << 1 ))")
FEATURES := $(shell echo "$$(( $(FEATURES) | $(FEATURE_TURN_WHILE_DASHING) << 2 ))")
FEATURES := $(shell echo "$$(( $(FEATURES) | $(FEATURE_MIRROR_TO_DARK_WORLD) << 3 ))")
FEATURES := $(shell echo "$$(( $(FEATURES) | $(FEATURE_COLLECT_ITEMS_WITH_SWORD) << 4 ))")
FEATURES := $(shell echo "$$(( $(FEATURES) | $(FEATURE_BREAK_POTS_WITH_SWORD) << 5 ))")
FEATURES := $(shell echo "$$(( $(FEATURES) | $(FEATURE_DISABLE_LOW_HEALTH_BEEP) << 6 ))")
FEATURES := $(shell echo "$$(( $(FEATURES) | $(FEATURE_SKIP_INTRO_ON_KEYPRESS) << 7 ))")
FEATURES := $(shell echo "$$(( $(FEATURES) | $(FEATURE_SHOW_MAX_ITEMS_IN_YELLOW) << 8 ))")
FEATURES := $(shell echo "$$(( $(FEATURES) | $(FEATURE_MORE_ACTIVE_BOMBS) << 9 ))")
FEATURES := $(shell echo "$$(( $(FEATURES) | $(FEATURE_CARRY_MORE_RUPEES) << 11 ))")
FEATURES := $(shell echo "$$(( $(FEATURES) | $(FEATURE_MISC_BUG_FIXES) << 12 ))")
FEATURES := $(shell echo "$$(( $(FEATURES) | $(FEATURE_CANCEL_BIRD_TRAVEL) << 13 ))")
FEATURES := $(shell echo "$$(( $(FEATURES) | $(FEATURE_GAME_CHANGING_BUG_FIXES) << 14 ))")
FEATURES := $(shell echo "$$(( $(FEATURES) | $(FEATURE_SWITCH_LR_LIMIT) << 15 ))")
# Disables all game customizations altogether
VANILLA_GAMEPLAY ?= 0
ifneq ($(VANILLA_GAMEPLAY), 0)
PATCH_DIALOGUES=0
FASTER_UI=0
BATTERY_INDICATOR=0
FEATURES=0
EXTENDED_SCREEN=0
endif
# Language
DIALOGUES_LANGUAGE ?= us
ifeq ($(DIALOGUES_LANGUAGE), us)
LOCALIZED_ROM=
LOCALIZED_ROM_PATH=
else
LOCALIZED_ROM=zelda3_$(DIALOGUES_LANGUAGE).sfc
LOCALIZED_ROM_PATH=zelda3/tables/$(LOCALIZED_ROM)
endif
# Configure Game & Watch target device mario|zelda
GNW_TARGET ?= mario
# Set the preprocessor options
ifeq ($(GNW_TARGET),mario)
GNW_TARGET_ZELDA = 0
GNW_TARGET_MARIO = 1
else ifeq ($(GNW_TARGET),zelda)
GNW_TARGET_ZELDA = 1
GNW_TARGET_MARIO = 0
else
$(error Invalid GNW_TARGET. Valid values {mario|zelda})
endif
#######################################
# paths
#######################################
# Build path
BUILD_DIR = build
######################################
# source
######################################
# C sources
C_SOURCES = \
Core/Src/lcd.c \
Core/Src/buttons.c \
Core/Src/bq24072.c \
Core/Src/main.c \
Core/Src/gw_flash.c \
Core/Src/crc32.c \
Core/Src/stm32h7xx_it.c \
Core/Src/stm32h7xx_hal_msp.c \
Core/Src/system_stm32h7xx.c \
Core/Src/porting/zelda_assets_in_intflash.c \
Core/Src/porting/zelda_assets_in_ram.c \
Core/Src/porting/zelda_assets_in_extflash.c \
Core/Src/porting/common.c \
zelda3/zelda_rtl.c \
zelda3/misc.c \
zelda3/nmi.c \
zelda3/poly.c \
zelda3/attract.c \
zelda3/snes/ppu.c \
zelda3/snes/dma.c \
zelda3/spc_player.c \
zelda3/util.c \
zelda3/audio.c \
zelda3/overworld.c \
zelda3/ending.c \
zelda3/select_file.c \
zelda3/dungeon.c \
zelda3/messaging.c \
zelda3/hud.c \
zelda3/load_gfx.c \
zelda3/ancilla.c \
zelda3/player.c \
zelda3/sprite.c \
zelda3/player_oam.c \
zelda3/snes/dsp.c \
zelda3/sprite_main.c \
zelda3/tagalong.c \
zelda3/third_party/opus-1.3.1-stripped/opus_decoder_amalgam.c \
zelda3/tile_detect.c \
zelda3/overlord.c \
# ASM sources
ASM_SOURCES = \
startup_bootloader_stm32h7b0xx.s
# Version and URL for the STM32CubeH7 SDK
SDK_VERSION ?= v1.8.0
SDK_URL ?= https://raw.githubusercontent.com/STMicroelectronics/STM32CubeH7
# Local path for the SDK
SDK_DIR ?= Drivers
# SDK C sources
SDK_C_SOURCES = \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_adc.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_adc_ex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_cortex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dac_ex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dac.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma_ex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_dma2d.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_exti.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash_ex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_flash.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_gpio.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_hsem.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c_ex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_i2c.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_jpeg.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_ltdc_ex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_ltdc.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_mdma.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_ospi.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr_ex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_pwr.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc_ex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rcc.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rtc_ex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_rtc.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_sai_ex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_sai.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_spi_ex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_spi.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_tim_ex.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_tim.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_wwdg.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal.c \
# SDK ASM sources
SDK_ASM_SOURCES = \
Drivers/CMSIS/Device/ST/STM32H7xx/Source/Templates/gcc/startup_stm32h7b0xx.s
# SDK headers
SDK_HEADERS = \
Drivers/CMSIS/Device/ST/STM32H7xx/Include/stm32h7b0xx.h \
Drivers/CMSIS/Device/ST/STM32H7xx/Include/stm32h7xx.h \
Drivers/CMSIS/Device/ST/STM32H7xx/Include/system_stm32h7xx.h \
Drivers/CMSIS/Include/cmsis_compiler.h \
Drivers/CMSIS/Include/cmsis_gcc.h \
Drivers/CMSIS/Include/cmsis_version.h \
Drivers/CMSIS/Include/core_cm7.h \
Drivers/CMSIS/Include/mpu_armv7.h \
Drivers/STM32H7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_ll_adc.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_adc.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_adc_ex.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_cortex.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_dac_ex.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_dac.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_def.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_dma_ex.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_dma.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_dma2d.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_exti.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_flash_ex.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_flash.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_gpio_ex.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_gpio.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_hsem.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_i2c_ex.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_i2c.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_jpeg.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_ltdc_ex.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_ltdc.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_mdma.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_ospi.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_pwr_ex.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_pwr.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_rcc_ex.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_rcc.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_rtc_ex.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_rtc.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_sai_ex.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_sai.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_spi_ex.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_spi.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_tim.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_tim_ex.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal_wwdg.h \
Drivers/STM32H7xx_HAL_Driver/Inc/stm32h7xx_hal.h \
#######################################
# binaries
#######################################
PREFIX = arm-none-eabi-
# The gcc compiler bin path can be either defined in make command via GCC_PATH variable (> make GCC_PATH=xxx)
# either it can be added to the PATH environment variable.
ifdef GCC_PATH
CC = $(GCC_PATH)/$(PREFIX)gcc
AS = $(GCC_PATH)/$(PREFIX)gcc -x assembler-with-cpp
CP = $(GCC_PATH)/$(PREFIX)objcopy
SZ = $(GCC_PATH)/$(PREFIX)size
else
CC = $(PREFIX)gcc
AS = $(PREFIX)gcc -x assembler-with-cpp
CP = $(PREFIX)objcopy
SZ = $(PREFIX)size
endif
HEX = $(CP) -O ihex
BIN = $(CP) -O binary -S
ECHO = echo
PYTHON:=/usr/bin/env python3
#######################################
# CFLAGS
#######################################
# cpu
CPU = -mcpu=cortex-m7
# fpu
FPU = -mfpu=fpv5-d16
# float-abi
FLOAT-ABI = -mfloat-abi=hard
# mcu
MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI)
# macros for gcc
# AS defines
AS_DEFS =
# C defines
C_DEFS = \
-DINTFLASH_BANK=$(INTFLASH_BANK) \
-DUSE_HAL_DRIVER \
-DSTM32H7B0xx \
-DBATTERY_INDICATOR=$(BATTERY_INDICATOR) \
-DENABLE_SCREENSHOT=$(ENABLE_SCREENSHOT) \
-DGNW_TARGET_MARIO=$(GNW_TARGET_MARIO) \
-DGNW_TARGET_ZELDA=$(GNW_TARGET_ZELDA) \
-DLIMIT_30FPS=$(LIMIT_30FPS) \
-DOVERCLOCK=$(OVERCLOCK) \
-DRENDER_FPS=$(RENDER_FPS) \
-DFEATURES=$(FEATURES) \
-DENABLE_SAVESTATE=$(ENABLE_SAVESTATE) \
-DFASTER_UI=$(FASTER_UI) \
-DEXTENDED_SCREEN=$(EXTENDED_SCREEN) \
-DDIALOGUES_LANGUAGE=$(DIALOGUES_LANGUAGE)
# AS includes
AS_INCLUDES =
# C includes
C_INCLUDES = \
-ICore/Inc \
-ICore/Inc/porting \
-IDrivers/STM32H7xx_HAL_Driver/Inc \
-IDrivers/STM32H7xx_HAL_Driver/Inc/Legacy \
-IDrivers/CMSIS/Device/ST/STM32H7xx/Include \
-IDrivers/CMSIS/Include \
-I. \
# compile gcc flags
ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections
CFLAGS = $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections
CFLAGS += -DHEADLESS
ifeq ($(DEBUG), 1)
CFLAGS += -g -gdwarf-2 #-O0
endif
# Generate dependency information
CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)"
#######################################
# LDFLAGS
#######################################
LDFLAGS += -Wl,--defsym=__EXTFLASH_OFFSET__=$(EXTFLASH_OFFSET)
LDFLAGS += -Wl,--defsym=__EXTFLASH_TOTAL_LENGTH__=$(EXTFLASH_SIZE)
LDFLAGS += -Wl,--defsym=ENABLE_SCREENSHOT=$(ENABLE_SCREENSHOT)
LDFLAGS += -Wl,--defsym=ENABLE_SAVESTATE=$(ENABLE_SAVESTATE)
ifeq ($(INTFLASH_BANK), 1)
INTFLASH_ADDRESS = 0x08000000
else ifeq ($(INTFLASH_BANK), 2)
INTFLASH_ADDRESS = 0x08100000
endif
LDFLAGS += -Wl,--defsym=__INTFLASH__=$(INTFLASH_ADDRESS)
# link script
LDSCRIPT = STM32H7B0VBTx_FLASH.ld
# libraries
LIBS = -lc -lm -lnosys
LIBDIR =
LDFLAGS += $(MCU) -specs=nano.specs -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections
# default action: build all
all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET)_extflash.bin $(BUILD_DIR)/$(TARGET)_intflash.bin
#######################################
# download SDK files
#######################################
$(SDK_DIR)/%:
$(V)$(ECHO) [ WGET ] $(notdir $@)
$(V)wget -q $(SDK_URL)/$(SDK_VERSION)/$@ -P $(dir $@)
.PHONY: download_sdk
download_sdk: $(SDK_HEADERS) $(SDK_C_SOURCES) $(SDK_ASM_SOURCES)
#######################################
# build the application
#######################################
# list of objects
OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o) $(SDK_C_SOURCES:.c=.o)))
vpath %.c $(sort $(dir $(C_SOURCES) $(SDK_C_SOURCES)))
# list of ASM program objects
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.s=.o) $(SDK_ASM_SOURCES:.s=.o)))
vpath %.s $(sort $(dir $(ASM_SOURCES) $(SDK_ASM_SOURCES)))
# function used to generate prerequisite rules for SDK objects
define sdk_obj_prereq_gen
$(BUILD_DIR)/$(patsubst %.c,%.o,$(patsubst %.s,%.o,$(notdir $1))): $1
endef
# note: the blank line above is intentional
# generate all object prerequisite rules
$(eval $(foreach obj,$(SDK_C_SOURCES) $(SDK_ASM_SOURCES),$(call sdk_obj_prereq_gen,$(obj))))
$(BUILD_DIR)/%.o: %.c Makefile $(SDK_HEADERS) | $(BUILD_DIR)
$(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@
$(BUILD_DIR)/%.o: %.s Makefile $(SDK_HEADERS) | $(BUILD_DIR)
$(AS) -c $(CFLAGS) $< -o $@
$(BUILD_DIR)/$(TARGET).elf: assets_extraction $(OBJECTS) Makefile
$(CC) $(OBJECTS) $(LDFLAGS) -o $@
$(SZ) $@
$(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
$(HEX) $< $@
$(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
$(BIN) $< $@
assets_extraction: Core/Src/porting/zelda_assets_in_extflash.c Core/Src/porting/zelda_assets_in_intflash.c Core/Src/porting/zelda_assets_in_ram.c
Core/Src/porting/zelda_assets_%.c: scripts/bundle_all_assets.py scripts/update_all_assets.py zelda3/tables/zelda3_assets.dat | $(BUILD_DIR)
$(PYTHON) ./scripts/bundle_all_assets.py
$(PYTHON) ./scripts/update_all_assets.py
# FIXME Handle patching dialogue.txt in restool.py?
#zelda3/tables/dialogue.txt: zelda3/tables/zelda3.sfc zelda3/tables/dialogue.txt.patched
#zelda3/tables/dialogue.txt.patched: scripts/dialogue.txt.diff
# cd zelda3 && make tables/dialogue.txt
# if [ $(PATCH_DIALOGUES) -gt 0 ]; then \
# echo 'Patching dialogues file'; \
# if [ -e $@ ]; then patch -R zelda3/tables/dialogue.txt $@; fi; \
# patch zelda3/tables/dialogue.txt $<; \
# cp scripts/dialogue.txt.diff $@; \
# fi
zelda3/tables/zelda3_assets.dat: zelda3/tables/zelda3.sfc $(LOCALIZED_ROM_PATH) | $(BUILD_DIR)
@if [ "$(LOCALIZED_ROM)" ]; then \
$(ECHO) 'Extracting dialogues from localized ROM: $(LOCALIZED_ROM)'; \
cd zelda3/tables; \
$(PYTHON) restool.py --extract-dialogue -r $(LOCALIZED_ROM); \
$(ECHO) "Extracting game resources with localized dialogues"; \
$(PYTHON) restool.py --extract-from-rom --languages=$(DIALOGUES_LANGUAGE) -r zelda3.sfc; \
else \
$(ECHO) "Extracting game resources"; \
cd zelda3/tables; $(PYTHON) restool.py --extract-from-rom -r zelda3.sfc; \
fi
$(BUILD_DIR):
mkdir $@
OPENOCD ?= openocd
ADAPTER ?= jlink
OCDIFACE ?= scripts/interface_$(ADAPTER).cfg
GNWMANAGER ?= gnwmanager
CAT ?= cat
TAMP ?= tamp
$(BUILD_DIR)/$(TARGET)_extflash.bin: $(BUILD_DIR)/$(TARGET).elf | $(BUILD_DIR)
$(V)$(BIN) -j ._itcram_hot -j ._dtcram_hot -j ._ahbram_hot -j ._ram_exec -j ._extflash $< $(BUILD_DIR)/$(TARGET)_extflash.bin
$(BUILD_DIR)/$(TARGET)_intflash.bin: $(BUILD_DIR)/$(TARGET).elf | $(BUILD_DIR)
$(V)$(BIN) -j .isr_vector_bootloader -j .text.bootloader -j .rodata.bootloader -j .data.bootloader $< $(BUILD_DIR)/$(TARGET)_intflash.bin
$(BUILD_DIR)/$(TARGET)_ram_app.bin: $(BUILD_DIR)/$(TARGET).elf | $(BUILD_DIR)
$(V)$(BIN) -j .isr_vector_ram -j .text -j .rodata -j .ARM.extab -j .preinit_array -j .init_array -j .fini_array -j .data $< $(BUILD_DIR)/$(TARGET)_ram_app.bin
$(BUILD_DIR)/$(TARGET)_ram_app.bin.tamp: $(BUILD_DIR)/$(TARGET)_ram_app.bin | $(BUILD_DIR)
$(V)$(TAMP) compress $< -o $(BUILD_DIR)/$(TARGET)_ram_app.bin.tamp
$(BUILD_DIR)/$(TARGET)_intflash_with_payload.bin: $(BUILD_DIR)/$(TARGET)_intflash.bin $(BUILD_DIR)/$(TARGET)_ram_app.bin | $(BUILD_DIR)
$(V)$(CAT) $(BUILD_DIR)/$(TARGET)_intflash.bin $(BUILD_DIR)/$(TARGET)_ram_app.bin > $(BUILD_DIR)/$(TARGET)_intflash_with_payload.bin
flash_intflash: $(BUILD_DIR)/$(TARGET)_intflash_with_payload.bin
$(GNWMANAGER) flash $(INTFLASH_ADDRESS) $< -- start $(INTFLASH_ADDRESS)
.PHONY: flash_intflash
flash_extflash: $(BUILD_DIR)/$(TARGET)_extflash.bin
@$(GNWMANAGER) flash ext $< --offset=$(EXTFLASH_OFFSET) -- start $(INTFLASH_ADDRESS)
.PHONY: flash_extflash
flash_ram_app: $(BUILD_DIR)/$(TARGET)_ram_app.bin.tamp
$(GNWMANAGER) push /apps/$(TARGET).bin.tamp $(BUILD_DIR)/$(TARGET)_ram_app.bin.tamp \
.PHONY: flash_intflash
# Programs both the external and internal flash.
flash: $(BUILD_DIR)/$(TARGET)_intflash_with_payload.bin $(BUILD_DIR)/$(TARGET)_extflash.bin
@$(GNWMANAGER) flash $(INTFLASH_ADDRESS) $(BUILD_DIR)/$(TARGET)_intflash_with_payload.bin \
-- flash ext $(BUILD_DIR)/$(TARGET)_extflash.bin --offset=$(EXTFLASH_OFFSET) \
-- start $(INTFLASH_ADDRESS) \
$(RESET_DBGMCU_CMD)
.PHONY: flash
# Programs both the external flash and application in filesystem.
flash_as_app: $(BUILD_DIR)/$(TARGET)_ram_app.bin.tamp $(BUILD_DIR)/$(TARGET)_extflash.bin
@$(GNWMANAGER) push /apps/$(TARGET).bin.tamp $(BUILD_DIR)/$(TARGET)_ram_app.bin.tamp \
-- flash ext $(BUILD_DIR)/$(TARGET)_extflash.bin --offset=$(EXTFLASH_OFFSET) \
-- start bank1 \
$(RESET_DBGMCU_CMD)
.PHONY: flash_as_app
reset:
$(OPENOCD) -f $(OCDIFACE) -c "init; reset; exit"
.PHONY: reset
reset_dbgmcu:
# Reset the DBGMCU configuration register (DBGMCU_CR)
$(V)$(OPENOCD) -f ${OCDIFACE} -c "init; reset halt; mww 0x5C001004 0x00000000; resume; exit;"
.PHONY: reset_dbgmcu
# Starts openocd and attaches to the target. To be used with 'flash_intflash_nc' and 'gdb'
openocd:
$(OPENOCD) -f $(OCDIFACE) -c "init; halt"
.PHONY: openocd
dump_logs: $(BUILD_DIR)/$(TARGET).elf
$(V)./scripts/dump_logs.sh
.PHONY: dump_logs
size: $(BUILD_DIR)/$(TARGET).elf
$(V)./scripts/size.sh $<
.PHONY: size
GDB ?= $(PREFIX)gdb
debug: $(BUILD_DIR)/$(TARGET).elf
$(GDB) $< -ex "target extended-remote :3333"
.PHONY: debug
#######################################
# clean up
#######################################
clean:
-rm -fR $(BUILD_DIR)
-rm -fR Core/Src/porting/zelda_assets_*.c
cd zelda3 && make clean
#######################################
# dependencies
#######################################
-include $(wildcard $(BUILD_DIR)/*.d)
# *** EOF ***