mirror of
https://github.com/sylverb/game-and-watch-retro-go.git
synced 2026-01-12 08:29:29 +01:00
903 lines
31 KiB
Makefile
903 lines
31 KiB
Makefile
######################################
|
|
# building variables
|
|
######################################
|
|
# debug build?
|
|
DEBUG ?= 1
|
|
# optimization
|
|
OPT ?= -Og
|
|
|
|
# Set to 0 to suppress dirty submodule warning
|
|
CHECK_DIRTY_SUBMODULE ?= 1
|
|
|
|
# Set to 0 to skip tools check
|
|
CHECK_TOOLS ?= 1
|
|
|
|
# Set to 1 to enable 16MB external flash support. (deprecated, use EXTFLASH_SIZE_MB instead!)
|
|
LARGE_FLASH ?= 0
|
|
|
|
# Configure where data is stored in the external flash by
|
|
# setting EXTFLASH_OFFSET. Useful if the first 1MB are to be preserved.
|
|
EXTFLASH_OFFSET ?= 0
|
|
|
|
# Configure Game & Watch target device mario|zelda
|
|
GNW_TARGET ?= mario
|
|
|
|
OFF_SAVESTATE = 0
|
|
ifeq ($(SHARED_HIBERNATE_SAVESTATE),1)
|
|
OFF_SAVESTATE = 1
|
|
endif
|
|
|
|
# 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
|
|
|
|
# Configure external flash size by setting EXTFLASH_SIZE
|
|
ifeq ($(LARGE_FLASH),1)
|
|
# 16MB
|
|
EXTFLASH_SIZE_MB ?= 16
|
|
else
|
|
# 4MB for Zelda otherwise 1MB
|
|
ifeq ($(GNW_TARGET),zelda)
|
|
EXTFLASH_SIZE_MB ?= 4
|
|
else
|
|
EXTFLASH_SIZE_MB ?= 1
|
|
endif
|
|
endif
|
|
|
|
# Configure external flash size in MB (Megabytes)
|
|
EXTFLASH_SIZE_MB ?= 1
|
|
INTFLASH_BANK ?= 1
|
|
BIG_BANK ?= 1
|
|
|
|
EXTFLASH_SIZE ?= $(shell echo "$$(( $(EXTFLASH_SIZE_MB) * 1024 * 1024 ))")
|
|
|
|
EXTFLASH_FORCE_SPI ?= 0
|
|
|
|
# Set to 0 to remove state saving support (uses less space)
|
|
STATE_SAVING ?= 1
|
|
ifeq ($(STATE_SAVING),0)
|
|
SAVE_PARAM := --no-save
|
|
endif
|
|
|
|
# Screenshot support allocates 150kB of external flash. Disabled by default.
|
|
ENABLE_SCREENSHOT ?= 0
|
|
# Set to 1 to add game genie support
|
|
GAME_GENIE ?= 0
|
|
|
|
# Compress supported ROMs by default. Set to 0 to disable.
|
|
COMPRESS ?= lzma
|
|
ifeq ($(COMPRESS),0)
|
|
COMPRESS_PARAM :=
|
|
else
|
|
COMPRESS_PARAM := --compress=$(COMPRESS)
|
|
endif
|
|
|
|
# Reset the DBGMCU configuration register (DBGMCU_CR) after flashing
|
|
# Set to 0 to keep the clocks running when suspended (makes debugging easier)
|
|
RESET_DBGMCU ?= 1
|
|
ifeq ($(RESET_DBGMCU),1)
|
|
RESET_DBGMCU_CMD = $(MAKE) reset_dbgmcu
|
|
else
|
|
RESET_DBGMCU_CMD = $(MAKE) reset_mcu
|
|
endif
|
|
|
|
PYTHON3 ?= /usr/bin/env python3
|
|
|
|
#######################################
|
|
# paths
|
|
#######################################
|
|
# Build path
|
|
BUILD_DIR ?= build
|
|
|
|
#######################################
|
|
# i18n Codepage
|
|
#######################################
|
|
CODEPAGE ?= 1252
|
|
|
|
ES_ES ?= 1
|
|
PT_PT ?= 1
|
|
FR_FR ?= 1
|
|
IT_IT ?= 1
|
|
ZH_CN ?= 0
|
|
ZH_TW ?= 0
|
|
KO_KR ?= 0
|
|
JA_JP ?= 0
|
|
FONT ?=0
|
|
|
|
SCODEPAGE = "ascii"
|
|
|
|
ifeq ($(CODEPAGE), 936)
|
|
SCODEPAGE = "gbk"
|
|
ZH_CN = 1
|
|
else ifeq ($(CODEPAGE), 950)
|
|
SCODEPAGE = "big5"
|
|
ZH_TW = 1
|
|
else ifeq ($(CODEPAGE), 932)
|
|
SCODEPAGE = "eucjp"
|
|
JA_JP = 1
|
|
else ifeq ($(CODEPAGE), 949)
|
|
KO_KR = 1
|
|
SCODEPAGE = "euckr"
|
|
else ifeq ($(CODEPAGE), 12521)
|
|
ES_ES = 1
|
|
SCODEPAGE = "iso-8859-1"
|
|
else ifeq ($(CODEPAGE), 12522)
|
|
PT_PT = 1
|
|
SCODEPAGE = "iso-8859-1"
|
|
else ifeq ($(CODEPAGE), 12523)
|
|
FR_FR = 1
|
|
SCODEPAGE = "iso-8859-1"
|
|
else ifeq ($(CODEPAGE), 12524)
|
|
IT_IT = 1
|
|
SCODEPAGE = "iso-8859-1"
|
|
else
|
|
SCODEPAGE = "iso-8859-1"
|
|
endif
|
|
|
|
UICODEPAGE ?= CODEPAGE
|
|
ifeq ($(UICODEPAGE), 936)
|
|
ZH_CN = 1
|
|
else ifeq ($(UICODEPAGE), 950)
|
|
ZH_TW = 1
|
|
else ifeq ($(UICODEPAGE), 932)
|
|
JA_JP = 1
|
|
else ifeq ($(UICODEPAGE), 949)
|
|
KO_KR = 1
|
|
else ifeq ($(UICODEPAGE), 12521)
|
|
ES_ES = 1
|
|
else ifeq ($(UICODEPAGE), 12522)
|
|
PT_PT = 1
|
|
else ifeq ($(UICODEPAGE), 12523)
|
|
FR_FR = 1
|
|
else ifeq ($(UICODEPAGE), 12524)
|
|
IT_IT = 1
|
|
endif
|
|
|
|
ROMINFOCODE ?= $(SCODEPAGE)
|
|
CODEPAGE_PARAM := --codepage=$(ROMINFOCODE)
|
|
|
|
#######################################
|
|
# cover flow
|
|
#######################################
|
|
COVERFLOW ?= 0
|
|
|
|
ifdef COVERFLOW
|
|
COVERFLOW_PARAM := --coverflow=$(COVERFLOW)
|
|
endif
|
|
|
|
JPG_QUALITY ?= 90
|
|
JPG_QUALITY_PARAM := --jpg_quality=$(JPG_QUALITY)
|
|
|
|
# Common C sources
|
|
C_SOURCES += \
|
|
retro-go-stm32/components/lupng/miniz.c \
|
|
retro-go-stm32/retro-go/main/gui.c \
|
|
Core/Src/porting/gw_alloc.c \
|
|
Core/Src/retro-go/rg_main.c \
|
|
Core/Src/retro-go/rg_rtc.c \
|
|
Core/Src/retro-go/rg_emulators.c \
|
|
Core/Src/retro-go/rom_manager.c \
|
|
Core/Src/porting/odroid_settings.c \
|
|
Core/Src/retro-go/i18n/rg_i18n.c \
|
|
Core/Src/retro-go/rg_logos.c
|
|
|
|
# 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 \
|
|
Core/Src/memcpy-armv7m.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
|
|
GDB = $(GCC_PATH)/$(PREFIX)gdb
|
|
DUMP = $(GCC_PATH)/$(PREFIX)objdump
|
|
else
|
|
CC = $(PREFIX)gcc
|
|
AS = $(PREFIX)gcc -x assembler-with-cpp
|
|
CP = $(PREFIX)objcopy
|
|
SZ = $(PREFIX)size
|
|
GDB = $(PREFIX)gdb
|
|
DUMP = $(PREFIX)objdump
|
|
endif
|
|
|
|
HEX = $(CP) -O ihex
|
|
BIN = $(CP) -O binary -S
|
|
ECHO = echo
|
|
TOUCH = touch
|
|
|
|
#######################################
|
|
# CFLAGS
|
|
#######################################
|
|
# cpu
|
|
CPU = -mcpu=cortex-m7 -mtune=cortex-m7
|
|
|
|
# fpu
|
|
FPU = -mfpu=fpv5-d16
|
|
|
|
# float-abi
|
|
FLOAT-ABI = -mfloat-abi=hard
|
|
|
|
# mcu
|
|
MCU = $(CPU) -mthumb -mno-unaligned-access $(FPU) $(FLOAT-ABI)
|
|
|
|
# macros for gcc
|
|
# AS defines
|
|
AS_DEFS +=
|
|
|
|
# C defines
|
|
C_DEFS += \
|
|
-D_GNU_SOURCE \
|
|
-DINTFLASH_BANK=$(INTFLASH_BANK) \
|
|
-DBIG_BANK=$(BIG_BANK) \
|
|
-DEXTFLASH_SIZE=$(EXTFLASH_SIZE) \
|
|
-DOFF_SAVESTATE=$(OFF_SAVESTATE) \
|
|
-DCODEPAGE=$(CODEPAGE) \
|
|
-DUICODEPAGE=$(UICODEPAGE) \
|
|
-DINCLUDED_ES_ES=$(ES_ES) \
|
|
-DINCLUDED_PT_PT=$(PT_PT) \
|
|
-DINCLUDED_FR_FR=$(FR_FR) \
|
|
-DINCLUDED_IT_IT=$(IT_IT) \
|
|
-DINCLUDED_ZH_CN=$(ZH_CN) \
|
|
-DINCLUDED_ZH_TW=$(ZH_TW) \
|
|
-DINCLUDED_KO_KR=$(KO_KR) \
|
|
-DINCLUDED_JA_JP=$(JA_JP) \
|
|
-DONEFONT=$(FONT) \
|
|
-DLANG=$(LANG) \
|
|
-DCOVERFLOW=$(COVERFLOW) \
|
|
-DEXTFLASH_FORCE_SPI=$(EXTFLASH_FORCE_SPI) \
|
|
-DUSE_HAL_DRIVER \
|
|
-DSTM32H7B0xx \
|
|
-DIS_LITTLE_ENDIAN \
|
|
-DMINIZ_NO_MALLOC \
|
|
-DMINIZ_NO_ZLIB_APIS \
|
|
-DDEBUG_RG_ALLOC \
|
|
-DSTATE_SAVING=$(STATE_SAVING) \
|
|
-DENABLE_SCREENSHOT=$(ENABLE_SCREENSHOT) \
|
|
-DGNW_TARGET_MARIO=$(GNW_TARGET_MARIO) \
|
|
-DGNW_TARGET_ZELDA=$(GNW_TARGET_ZELDA) \
|
|
-DGAME_GENIE=$(GAME_GENIE) \
|
|
-DTARGET_GNW \
|
|
-DNO_EMBEDDED_SAMPLES \
|
|
-D__LIBRETRO__ \
|
|
-DZ80_CUSTOM_CONFIGURATION \
|
|
-DMSX_NO_ZIP \
|
|
-DMSX_NO_FILESYSTEM \
|
|
-DMSX_NO_MALLOC \
|
|
-DMAX_VIDEO_WIDTH_320 \
|
|
-DPIXEL_WIDTH=8 \
|
|
-DMSX_NO_STEREO
|
|
|
|
# AS includes
|
|
AS_INCLUDES +=
|
|
|
|
# C includes
|
|
C_INCLUDES += \
|
|
-ICore/Inc \
|
|
-ICore/Inc/porting \
|
|
-ICore/Inc/porting/gb \
|
|
-ICore/Inc/porting/nes \
|
|
-ICore/Inc/porting/smsplusgx \
|
|
-ICore/Inc/porting/pce \
|
|
-ICore/Inc/porting/msx \
|
|
-ICore/Inc/porting/wsv \
|
|
-ICore/Inc/porting/gw \
|
|
-ICore/Inc/porting/gwenesis \
|
|
-ICore/Inc/porting/wswan \
|
|
-ICore/Inc/retro-go \
|
|
-IDrivers/STM32H7xx_HAL_Driver/Inc \
|
|
-IDrivers/STM32H7xx_HAL_Driver/Inc/Legacy \
|
|
-IDrivers/CMSIS/Device/ST/STM32H7xx/Include \
|
|
-IDrivers/CMSIS/Include \
|
|
-Iretro-go-stm32/components/lupng \
|
|
|
|
# Force include the configuration
|
|
CFLAGS += $(CFLAGS_EXTRA) -include $(BUILD_DIR)/config.h
|
|
|
|
# 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
|
|
|
|
ifeq ($(DEBUG), 1)
|
|
CFLAGS += -g -gdwarf-2
|
|
endif
|
|
|
|
CFLAGS += -fstack-usage -Wstack-usage=20480
|
|
|
|
# Generate dependency information
|
|
CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)"
|
|
|
|
LDFLAGS += -Wl,--defsym=__EXTFLASH_OFFSET__=$(EXTFLASH_OFFSET)
|
|
LDFLAGS += -Wl,--defsym=__EXTFLASH_TOTAL_LENGTH__=$(EXTFLASH_SIZE)
|
|
LDFLAGS += -Wl,--defsym=ENABLE_SCREENSHOT=$(ENABLE_SCREENSHOT)
|
|
|
|
ifeq ($(INTFLASH_BANK), 1)
|
|
INTFLASH_ADDRESS = 0x08000000
|
|
else ifeq ($(INTFLASH_BANK), 2)
|
|
INTFLASH_ADDRESS = 0x08100000
|
|
endif
|
|
|
|
LDFLAGS += -Wl,--defsym=__INTFLASH__=$(INTFLASH_ADDRESS)
|
|
|
|
ifeq ($(BIG_BANK), 1)
|
|
FLASH_LENGTH = 256k
|
|
else
|
|
FLASH_LENGTH = 128k
|
|
endif
|
|
|
|
LDFLAGS += -Wl,--defsym=__FLASH_LENGTH__=$(FLASH_LENGTH)
|
|
|
|
#######################################
|
|
# LDFLAGS
|
|
#######################################
|
|
# 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: CheckTools CheckDirtySubmodules $(BUILD_DIR) $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET)_extflash.bin $(BUILD_DIR)/$(TARGET)_intflash.bin $(BUILD_DIR)/$(TARGET)_intflash2.bin
|
|
|
|
#######################################
|
|
# build the application
|
|
#######################################
|
|
# list of objects
|
|
OBJECTS = $(addprefix $(BUILD_DIR)/core/,$(notdir $(C_SOURCES:.c=.o) $(SDK_C_SOURCES:.c=.o)))
|
|
GNUBOY_OBJECTS = $(addprefix $(BUILD_DIR)/gnuboy/,$(notdir $(GNUBOY_C_SOURCES:.c=.o)))
|
|
NES_OBJECTS = $(addprefix $(BUILD_DIR)/nes/,$(notdir $(NES_C_SOURCES:.c=.o)))
|
|
SMSPLUSGX_OBJECTS = $(addprefix $(BUILD_DIR)/smsplusgx/,$(notdir $(SMSPLUSGX_C_SOURCES:.c=.o)))
|
|
PCE_OBJECTS = $(addprefix $(BUILD_DIR)/pce/,$(notdir $(PCE_C_SOURCES:.c=.o)))
|
|
GW_OBJECTS = $(addprefix $(BUILD_DIR)/gw/,$(notdir $(GW_C_SOURCES:.c=.o)))
|
|
MSX_OBJECTS = $(addprefix $(BUILD_DIR)/msx/,$(notdir $(MSX_C_SOURCES:.c=.o)))
|
|
WSV_OBJECTS = $(addprefix $(BUILD_DIR)/wsv/,$(notdir $(WSV_C_SOURCES:.c=.o)))
|
|
MD_OBJECTS = $(addprefix $(BUILD_DIR)/md/,$(notdir $(MD_C_SOURCES:.c=.o)))
|
|
WSWAN_OBJECTS = $(addprefix $(BUILD_DIR)/wswan/,$(notdir $(WSWAN_C_SOURCES:.c=.o)))
|
|
|
|
vpath %.c $(sort $(dir $(C_SOURCES) $(NES_C_SOURCES) $(GNUBOY_C_SOURCES) $(SMSPLUSGX_C_SOURCES) $(PCE_C_SOURCES) $(MSX_C_SOURCES) $(GW_C_SOURCES) $(WSV_C_SOURCES) $(MD_C_SOURCES) $(WSWAN_C_SOURCES) $(SDK_C_SOURCES)))
|
|
# list of ASM program objects
|
|
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(SDK_ASM_SOURCES:.s=.o)))
|
|
vpath %.s $(sort $(dir $(SDK_ASM_SOURCES)))
|
|
|
|
OBJECTS += $(addprefix $(BUILD_DIR)/,roms.a)
|
|
|
|
# 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))))
|
|
|
|
FORCE:
|
|
|
|
Core/Inc/githash.h: FORCE | $(BUILD_DIR)
|
|
$(V)./scripts/update_githash.sh $@
|
|
|
|
$(BUILD_DIR)/core/main.o: Core/Inc/githash.h
|
|
$(BUILD_DIR)/core/flashapp.o: Core/Inc/githash.h
|
|
$(BUILD_DIR)/core/rg_main.o: Core/Inc/githash.h
|
|
|
|
# Run parse_roms.py to generate information about the roms
|
|
$(BUILD_DIR)/rom_files.txt: FORCE | $(BUILD_DIR)
|
|
$(V)$(ECHO) [ BASH ] Checking for updated roms
|
|
$(V)./scripts/update_rom_files.sh build/rom_files.txt roms/gb roms/nes roms/sms roms/gg roms/col roms/pce roms/sg roms/msx roms/gw roms/wsv roms/md roms/wswan
|
|
|
|
$(BUILD_DIR)/roms.a: $(BUILD_DIR)/rom_files.txt parse_roms.py
|
|
$(V)$(ECHO) [ PYTHON3 ] $(notdir $<)
|
|
$(V)$(PYTHON3) parse_roms.py --flash-size $(EXTFLASH_SIZE) $(SAVE_PARAM) $(COMPRESS_PARAM) $(CODEPAGE_PARAM) $(COVERFLOW_PARAM) $(JPG_QUALITY_PARAM) --off_saveflash=$(OFF_SAVESTATE)
|
|
|
|
$(BUILD_DIR)/config.h $(BUILD_DIR)/saveflash.ld $(BUILD_DIR)/cacheflash.ld $(BUILD_DIR)/offsaveflash.ld &: $(BUILD_DIR)/roms.a
|
|
$(V)/bin/sh -c true
|
|
STM32H7B0VBTx_FLASH.ld: $(BUILD_DIR)/offsaveflash.ld $(BUILD_DIR)/saveflash.ld $(BUILD_DIR)/cacheflash.ld
|
|
|
|
# rom_manager.c depends on the different *_roms.c files but they only change when roms.a changes
|
|
$(BUILD_DIR)/core/rom_manager.o: Core/Src/retro-go/rom_manager.c $(BUILD_DIR)/roms.a
|
|
|
|
ifeq (${CHECK_DIRTY_SUBMODULE},1)
|
|
CheckDirtySubmodules:
|
|
$(V)git submodule foreach "git diff --quiet" 2> /dev/null || \
|
|
(echo -e "\n\n\nYou have changes in the submodule. This is not normal.\nPlease clean the submodule by running 'git submodule update --init'\n\n(You may set CHECK_DIRTY_SUBMODULE=0 to suppress this warning)\n\n\n" && exit 1)
|
|
$(V)git submodule status | grep -v '+' 2> /dev/null > /dev/null || \
|
|
(echo -e "\n\n\nYou are using a submodule that is not updated.\nPlease sync the submodules by running 'git submodule update --init'\n\n(You may set CHECK_DIRTY_SUBMODULE=0 to suppress this warning)\n\n\n" && exit 1)
|
|
else
|
|
CheckDirtySubmodules:
|
|
endif
|
|
.PHONY: CheckDirtySubmodules
|
|
|
|
ifeq (${CHECK_TOOLS},1)
|
|
CheckTools:
|
|
@# Check that the tools in the toolchain exist
|
|
$(V)/usr/bin/env bash -c " \
|
|
for tool in $(CC) $(CP) $(SZ) $(GDB) $(DUMP); do \
|
|
which \$$tool 2> /dev/null > /dev/null || \
|
|
( \
|
|
echo -e \"\nCannot find \$$tool\n\" && \
|
|
exit 1 \
|
|
) \
|
|
done"
|
|
|
|
@# Check that GCC version 10 or higher is used
|
|
$(V)$(CC) -v 2>&1 | grep "gcc version 1[0-9]" > /dev/null || \
|
|
( \
|
|
echo -e "\n\n\nPlease use GCC version 10 or higher.\n\n\nYou are using:" && \
|
|
$(CC) -v 2>&1 | grep "gcc version" ; \
|
|
echo -e "\n\n\n" && \
|
|
exit 1 \
|
|
)
|
|
|
|
$(V)$(CP) --info | grep "elf32-littlearm" > /dev/null || \
|
|
( \
|
|
echo -e "\n\n\n$(CP) does not suport elf32-littlearm.\nPlease install a toolchain that supports elf32-littlearm and armv7e-m.\n\n\n" && \
|
|
exit 1 \
|
|
)
|
|
|
|
$(V)$(DUMP) --help | grep "armv7e-m" > /dev/null || \
|
|
( \
|
|
echo -e "\n\n\nobjdump does not suport armv7e-m.\nPlease install a toolchain that supports elf32-littlearm and armv7e-m.\n\n\n" && \
|
|
exit 1 \
|
|
)
|
|
|
|
$(V)$(PYTHON3) scripts/python_version_check.py
|
|
|
|
else
|
|
CheckTools:
|
|
endif
|
|
.PHONY: CheckTools
|
|
|
|
$(BUILD_DIR)/%.o: %.s Makefile.common Makefile $(BUILD_DIR)/config.h | $(BUILD_DIR)
|
|
$(V)$(ECHO) [ AS ] $(notdir $<)
|
|
$(V)$(AS) -c $(CFLAGS) $< -o $@
|
|
|
|
$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) $(WSWAN_OBJECTS) $(NES_OBJECTS) $(GNUBOY_OBJECTS) $(SMSPLUSGX_OBJECTS) $(PCE_OBJECTS) $(MSX_OBJECTS) $(GW_OBJECTS) $(WSV_OBJECTS) $(MD_OBJECTS) Makefile.common Makefile $(LDSCRIPT)
|
|
$(V)$(ECHO) [ LD ] $(notdir $@)
|
|
$(V)$(CC) $(OBJECTS) $(WSWAN_OBJECTS) $(NES_OBJECTS) $(GNUBOY_OBJECTS) $(SMSPLUSGX_OBJECTS) $(PCE_OBJECTS) $(MSX_OBJECTS) $(GW_OBJECTS) $(WSV_OBJECTS) $(MD_OBJECTS) $(LDFLAGS) -o $@
|
|
$(V)./scripts/extflash_size.sh $@
|
|
|
|
$(BUILD_DIR)/core/%.o: %.c Makefile.common Makefile $(SDK_HEADERS) $(BUILD_DIR)/config.h | $(BUILD_DIR)
|
|
$(V)$(ECHO) [ CC core ] $(notdir $<)
|
|
$(V)$(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/core/$(notdir $(<:.c=.lst)) $< -o $@
|
|
|
|
$(BUILD_DIR)/nes/%.o: %.c Makefile.common Makefile $(SDK_HEADERS) $(BUILD_DIR)/config.h | $(BUILD_DIR)
|
|
$(V)$(ECHO) [ CC nes ] $(notdir $<)
|
|
$(V)$(CC) -c $(CFLAGS) $(NES_C_INCLUDES) -Wa,-a,-ad,-alms=$(BUILD_DIR)/nes/$(notdir $(<:.c=.lst)) $< -o $@
|
|
|
|
$(BUILD_DIR)/gnuboy/%.o: %.c Makefile.common Makefile $(SDK_HEADERS) $(BUILD_DIR)/config.h | $(BUILD_DIR)
|
|
$(V)$(ECHO) [ CC gb ] $(notdir $<)
|
|
$(V)$(CC) -c $(CFLAGS) $(GNUBOY_C_INCLUDES) -Wa,-a,-ad,-alms=$(BUILD_DIR)/gnuboy/$(notdir $(<:.c=.lst)) $< -o $@
|
|
|
|
$(BUILD_DIR)/smsplusgx/%.o: %.c Makefile.common Makefile $(SDK_HEADERS) $(BUILD_DIR)/config.h | $(BUILD_DIR)
|
|
$(V)$(ECHO) [ CC sms ] $(notdir $<)
|
|
$(V)$(CC) -c $(CFLAGS) $(SMSPLUSGX_C_INCLUDES) -Wa,-a,-ad,-alms=$(BUILD_DIR)/smsplusgx/$(notdir $(<:.c=.lst)) $< -o $@
|
|
|
|
$(BUILD_DIR)/pce/%.o: %.c Makefile.common Makefile $(SDK_HEADERS) $(BUILD_DIR)/config.h | $(BUILD_DIR)
|
|
$(V)$(ECHO) [ CC pce ] $(notdir $<)
|
|
$(V)$(CC) -c $(CFLAGS) $(PCE_C_INCLUDES) -Wa,-a,-ad,-alms=$(BUILD_DIR)/pce/$(notdir $(<:.c=.lst)) $< -o $@
|
|
|
|
$(BUILD_DIR)/msx/%.o: %.c Makefile.common Makefile $(SDK_HEADERS) $(BUILD_DIR)/config.h | $(BUILD_DIR)
|
|
$(V)$(ECHO) [ CC msx ] $(notdir $<)
|
|
$(V)$(CC) -c $(CFLAGS) $(MSX_C_INCLUDES) -Wa,-a,-ad,-alms=$(BUILD_DIR)/msx/$(notdir $(<:.c=.lst)) $< -o $@
|
|
|
|
$(BUILD_DIR)/gw/%.o: %.c Makefile.common Makefile $(SDK_HEADERS) $(BUILD_DIR)/config.h | $(BUILD_DIR)
|
|
$(V)$(ECHO) [ CC gw ] $(notdir $<)
|
|
$(V)$(CC) -c $(CFLAGS) $(GW_C_INCLUDES) -Wa,-a,-ad,-alms=$(BUILD_DIR)/gw/$(notdir $(<:.c=.lst)) $< -o $@
|
|
|
|
$(BUILD_DIR)/wsv/%.o: %.c Makefile.common Makefile $(SDK_HEADERS) $(BUILD_DIR)/config.h | $(BUILD_DIR)
|
|
$(V)$(ECHO) [ CC wsv ] $(notdir $<)
|
|
$(V)$(CC) -c $(CFLAGS) $(WSV_C_INCLUDES) -Wa,-a,-ad,-alms=$(BUILD_DIR)/wsv/$(notdir $(<:.c=.lst)) $< -o $@
|
|
|
|
$(BUILD_DIR)/md/%.o: %.c Makefile.common Makefile $(SDK_HEADERS) $(BUILD_DIR)/config.h | $(BUILD_DIR)
|
|
$(V)$(ECHO) [ CC md ] $(notdir $<)
|
|
$(V)$(CC) -c $(CFLAGS) $(MD_C_INCLUDES) -Wa,-a,-ad,-alms=$(BUILD_DIR)/md/$(notdir $(<:.c=.lst)) $< -o $@
|
|
|
|
$(BUILD_DIR)/wswan/%.o: %.c Makefile.common Makefile $(SDK_HEADERS) $(BUILD_DIR)/config.h | $(BUILD_DIR)
|
|
$(V)$(ECHO) [ CC wswan ] $(notdir $<)
|
|
$(V)$(CC) -c $(CFLAGS) $(WSWAN_C_INCLUDES) -Wa,-a,-ad,-alms=$(BUILD_DIR)/wswan/$(notdir $(<:.c=.lst)) $< -o $@
|
|
|
|
$(BUILD_DIR):
|
|
$(V)mkdir $@
|
|
$(V)mkdir $@/core
|
|
$(V)mkdir $@/nes
|
|
$(V)mkdir $@/gnuboy
|
|
$(V)mkdir $@/smsplusgx
|
|
$(V)mkdir $@/pce
|
|
$(V)mkdir $@/msx
|
|
$(V)mkdir $@/gw
|
|
$(V)mkdir $@/wsv
|
|
$(V)mkdir $@/md
|
|
$(V)mkdir $@/wswan
|
|
|
|
#######################################
|
|
# Flashing
|
|
#######################################
|
|
|
|
OPENOCD ?= openocd
|
|
ADAPTER ?= stlink
|
|
FLASH_MULTI ?= scripts/flash_multi.sh
|
|
FLASHTEST ?= scripts/flashapp.sh --test
|
|
|
|
# Starts openocd and attaches to the target. To be used with 'flash_intflash_nc' and 'gdb'
|
|
openocd:
|
|
$(OPENOCD) -f scripts/interface_$(ADAPTER).cfg -c "init; halt"
|
|
.PHONY: openocd
|
|
|
|
reset:
|
|
$(OPENOCD) -f scripts/interface_$(ADAPTER).cfg -c "init; reset; exit"
|
|
.PHONY: reset
|
|
|
|
erase_intflash_1:
|
|
$(OPENOCD) -f scripts/interface_$(ADAPTER).cfg -c "init; halt; flash erase_address 0x08000000 131072; resume; exit"
|
|
.PHONY: erase_intflash1
|
|
|
|
erase_intflash_2:
|
|
$(OPENOCD) -f scripts/interface_$(ADAPTER).cfg -c "init; halt; flash erase_address 0x08100000 131072; resume; exit"
|
|
.PHONY: erase_intflash2
|
|
|
|
erase_extflash: flash_intflash
|
|
$(V)./scripts/extflash_erase.sh $(EXTFLASH_SIZE)
|
|
.PHONY: erase_extflash
|
|
|
|
start_bank_1:
|
|
$(OPENOCD) -f scripts/interface_$(ADAPTER).cfg \
|
|
-c 'init; reset halt' \
|
|
-c 'set MSP 0x[string range [mdw 0x08000000] 12 19]' \
|
|
-c 'set PC 0x[string range [mdw 0x08000004] 12 19]' \
|
|
-c 'echo "Setting MSP -> $$MSP"' \
|
|
-c 'echo "Setting PC -> $$PC"' \
|
|
-c 'reg msp $$MSP' \
|
|
-c 'reg pc $$PC' \
|
|
-c 'resume;exit'
|
|
.PHONY: start_bank_1
|
|
|
|
start_bank_2:
|
|
$(OPENOCD) -f scripts/interface_$(ADAPTER).cfg \
|
|
-c 'init; reset halt' \
|
|
-c 'set MSP 0x[string range [mdw 0x08100000] 12 19]' \
|
|
-c 'set PC 0x[string range [mdw 0x08100004] 12 19]' \
|
|
-c 'echo "Setting MSP -> $$MSP"' \
|
|
-c 'echo "Setting PC -> $$PC"' \
|
|
-c 'reg msp $$MSP' \
|
|
-c 'reg pc $$PC' \
|
|
-c 'resume;exit'
|
|
.PHONY: start_bank_2
|
|
|
|
# Programs the internal flash using a new OpenOCD instance
|
|
flash_intflash: $(BUILD_DIR)/$(TARGET)_intflash.bin
|
|
$(OPENOCD) -f scripts/interface_$(ADAPTER).cfg -c "program $< $(INTFLASH_ADDRESS) verify reset exit"
|
|
.PHONY: flash_intflash
|
|
|
|
# Flashes using an existing openocd instance
|
|
flash_intflash_nc: $(BUILD_DIR)/$(TARGET)_intflash.bin
|
|
echo "program $< $(INTFLASH_ADDRESS) verify reset" | nc -c localhost 4444
|
|
.PHONY: flash_intflash_nc
|
|
|
|
flash_intflash2: $(BUILD_DIR)/$(TARGET)_intflash2.bin
|
|
# $(OPENOCD) -f scripts/interface_$(ADAPTER).cfg -c "program $< 0x08100000 verify reset exit"
|
|
.PHONY: flash_intflash2
|
|
|
|
# Flashes using an existing openocd instance
|
|
flash_intflash2_nc: $(BUILD_DIR)/$(TARGET)_intflash2.bin
|
|
echo "program $< 0x08100000 verify reset" | nc -c localhost 4444
|
|
.PHONY: flash_intflash2_nc
|
|
|
|
flash_extflash: $(BUILD_DIR)/$(TARGET)_extflash.bin
|
|
$(FLASH_MULTI) $(BUILD_DIR)/$(TARGET)_extflash.bin $(EXTFLASH_OFFSET)
|
|
.PHONY: flash_extflash
|
|
|
|
flash_test: flash_intflash
|
|
$(FLASHTEST)
|
|
.PHONY: flash_test
|
|
|
|
# Programs both the external and internal flash.
|
|
flash: CheckTools CheckDirtySubmodules
|
|
$(V)$(MAKE) flash_intflash
|
|
ifeq ($(INTFLASH_BANK), 1)
|
|
$(V)$(MAKE) flash_intflash2
|
|
endif
|
|
$(V)$(MAKE) flash_extflash
|
|
$(V)$(RESET_DBGMCU_CMD)
|
|
.PHONY: flash
|
|
|
|
monitor:
|
|
$(V)$(PYTHON3) tools/logpoll.py
|
|
.PHONY: monitor
|
|
|
|
flash-monitor: flash
|
|
$(V)$(MAKE) monitor
|
|
.PHONY: flash-monitor
|
|
|
|
# Alias for flash
|
|
flash_all: flash
|
|
|
|
# Transfers save files from the device to the host machine
|
|
flash_saves_backup: $(BUILD_DIR)/$(TARGET).elf
|
|
$(V)./scripts/saves_backup.sh $<
|
|
.PHONY: flash_saves_backup
|
|
|
|
# Transfers save files from the host machine to the device
|
|
flash_saves_restore: $(BUILD_DIR)/$(TARGET).elf
|
|
$(V)./scripts/saves_restore.sh $<
|
|
.PHONY: flash_saves_restore
|
|
|
|
# Erases the saveflash area on the device
|
|
flash_saves_erase: $(BUILD_DIR)/$(TARGET).elf
|
|
$(V)./scripts/saves_erase.sh $<
|
|
.PHONY: flash_saves_erase
|
|
|
|
size: $(BUILD_DIR)/$(TARGET).elf
|
|
$(V)./scripts/size.sh $<
|
|
.PHONY: size
|
|
|
|
reset_dbgmcu:
|
|
# Reset the DBGMCU configuration register (DBGMCU_CR)
|
|
$(V)$(OPENOCD) -f scripts/interface_$(ADAPTER).cfg -c "init; reset halt; mww 0x5C001004 0x00000000; resume; exit;"
|
|
.PHONY: reset_dbgmcu
|
|
|
|
reset_mcu:
|
|
$(V)$(OPENOCD) -f scripts/interface_$(ADAPTER).cfg -c "init; reset run; exit;" 2> $(BUILD_DIR)/openocd.log
|
|
.PHONY: reset_mcu
|
|
|
|
gdb: $(BUILD_DIR)/$(TARGET).elf
|
|
$(GDB) $< -ex "target extended-remote :3333"
|
|
.PHONY: gdb
|
|
|
|
# Flashes intflash *only* and launches gdb afterwards
|
|
gdb_intflash: flash_intflash_nc gdb
|
|
.PHONY: gdb_intflash
|
|
|
|
dump_logs: $(BUILD_DIR)/$(TARGET).elf
|
|
$(V)./scripts/dump_logs.sh
|
|
.PHONY: dump_logs
|
|
|
|
dump_screenshot:
|
|
$(V)./tools/screenshot.py
|
|
.PHONY: dump_screenshot
|
|
|
|
docker_build:
|
|
$(V)docker build -f Dockerfile --tag kbeckmann/retro-go-builder .
|
|
.PHONY: docker_build
|
|
|
|
docker:
|
|
$(V)docker run --rm -it --privileged --user $(shell id -u):$(shell id -g) -v $(PWD):/opt/workdir -v /dev/bus/usb:/dev/bus/usb kbeckmann/retro-go-builder
|
|
.PHONY: docker
|
|
|
|
help:
|
|
@echo "Game and Watch Retro Go"
|
|
@echo ""
|
|
@echo "Configuration variables:"
|
|
@echo " EXTFLASH_FORCE_SPI - Forces the use of legacy SPI mode for the external flash driver"
|
|
@echo " EXTFLASH_SIZE_MB - Sets the external flash size in megabytes"
|
|
@echo " EXTFLASH_SIZE - Sets the external flash size in bytes (has precedence over EXTFLASH_SIZE_MB)"
|
|
@echo " LARGE_FLASH - Sets the external flash size to 16MB (deprecated)"
|
|
@echo " EXTFLASH_OFFSET - Places the data at an offset in the external flash (useful for dual boot)"
|
|
@echo " INTFLASH_BANK - Sets the internal flash bank. Valid values {1,2} (default=1)."
|
|
@echo " BIG_BANK - Use internal flash bank as undocumented 256k.(default=1, set 0 to 128k)."
|
|
@echo " It's required patched OPENOCD to work"
|
|
@echo " COMPRESS - Configures ROM compression, Valid values {0,lz4,zopfli,lzma} (default=lzma)."
|
|
@echo " STATE_SAVING - Set to 0 to disable state saving (default=1)"
|
|
@echo " RESET_DBGMCU - Configures if DBGMCU should be reset after flashing."
|
|
@echo " Set to 0 to disable power saving (default=1)"
|
|
@echo " CODEPAGE - Sets codepage to configures default display language.(default=1252)"
|
|
@echo " set 932 as Japanese; 936 as simple Chinese; 950 as traditional Chinese"
|
|
@echo " 949 as Korean; 12521 as Spanish; 12522 as Portuguese; "
|
|
@echo " UICODEPAGE - Sets ui display language.(default=CODEPAGE=1252 as English)"
|
|
@echo " ROMINFOCODE - Sets encoding of parse rom name, default = ascii"
|
|
@echo " ES_ES,PT_PT,FR_FR, "
|
|
@echo " IT_IT,ZH_CN,ZH_TW, "
|
|
@echo " KO_KR,JA_JP - Set to 1 to include or exclude some other language"
|
|
@echo " FONT - Only persist one font and set the font number. "
|
|
@echo " Font effect see: Core\\Inc\\retro-go\\fonts\\font_un_xx.h"
|
|
@echo " COVERFLOW - Set to 1 include cover art with rom (default=0)"
|
|
@echo " JPG_QUALITY - Set convert cover art image jpg quality (default = 90)"
|
|
@echo " ENABLE_SCREENSHOT - Set to 1 to enable screenshot support (default disabled if extflash is 1MB)"
|
|
@echo " GNW_TARGET - Game & Watch target, Valid values {mario,zelda} (default=mario)"
|
|
@echo " GAME_GENIE - Set to 1 to enable game genie support (default=0)"
|
|
@echo " SHARED_HIBERNATE_SAVESTATE - Set to 1 to enable a separate savestate for off/on (default=0)"
|
|
@echo ""
|
|
@echo "Current configuration:"
|
|
@echo " EXTFLASH_FORCE_SPI=$(EXTFLASH_FORCE_SPI)"
|
|
@echo " EXTFLASH_SIZE_MB=$(EXTFLASH_SIZE_MB)"
|
|
@echo " EXTFLASH_SIZE=$(EXTFLASH_SIZE)"
|
|
@echo " LARGE_FLASH=$(LARGE_FLASH)"
|
|
@echo " EXTFLASH_OFFSET=$(EXTFLASH_OFFSET)"
|
|
@echo " INTFLASH_BANK=$(INTFLASH_BANK)"
|
|
@echo " BIG_BANK=$(BIG_BANK)"
|
|
@echo " COMPRESS=$(COMPRESS)"
|
|
@echo " STATE_SAVING=$(STATE_SAVING)"
|
|
@echo " RESET_DBGMCU=$(RESET_DBGMCU)"
|
|
@echo " ENABLE_SCREENSHOT=$(ENABLE_SCREENSHOT)"
|
|
@echo " GNW_TARGET=$(GNW_TARGET)"
|
|
@echo " GAME_GENIE=$(GAME_GENIE)"
|
|
@echo " GCC_PATH=$(GCC_PATH)"
|
|
@echo " PREFIX=$(PREFIX)"
|
|
@echo " CODEPAGE=$(CODEPAGE)"
|
|
@echo " UICODEPAGE=$(UICODEPAGE)"
|
|
@echo " COVERFLOW=$(COVERFLOW)"
|
|
@echo " ROMINFOCODE=$(ROMINFOCODE)"
|
|
@echo " ES_ES=$(ES_ES)"
|
|
@echo " PT_PT=$(PT_PT)"
|
|
@echo " FR_FR=$(FR_FR)"
|
|
@echo " IT_IT=$(IT_IT)"
|
|
@echo " ZH_CN=$(ZH_CN)"
|
|
@echo " ZH_TW=$(ZH_TW)"
|
|
@echo " KO_KR=$(KO_KR)"
|
|
@echo " JA_JP=$(JA_JP)"
|
|
@echo " FONT=$(FONT)"
|
|
@echo ""
|
|
@echo "Targets:"
|
|
@echo " docker - Runs a docker container using the image created by docker_build"
|
|
@echo " docker_build - Builds a docker image"
|
|
@echo " dump_logs - Dumps the callstack and logbuf. Starts openocd and gdb under the hood."
|
|
@echo " dump_screenshot - Downloads the stored screenshot."
|
|
@echo " flash - Programs the internal and external flash"
|
|
@echo " flash_all - Alias for 'flash' (deprecated)"
|
|
@echo " flash_extflash - Only programs the external flash"
|
|
@echo " flash_intflash - Only programs the internal flash"
|
|
@echo " flash_intflash_nc - Only programs the internal flash and uses an existing openocd server"
|
|
@echo " flash_test - Runs a flash test. Will overwrite data on the external flash!"
|
|
@echo " gdb - Starts gdb and attaches to openocd"
|
|
@echo " gdb_intflash - Runs flash_intflash_nc, then starts gdb and attaches to openocd"
|
|
@echo " openocd - Starts openocd with appropriate config"
|
|
@echo " reset_dbgmcu - Resets the unit and turns off DBGMCU (lowers battery drain)"
|
|
@echo " reset_mcu - Resets the unit"
|
|
@echo " romdef - Dumps all rom info to roms.json in roms directory to custom display name and"
|
|
@echo " publish property under edit that file before make flash "
|
|
@echo " size - Prints size information for all sections"
|
|
@echo ""
|
|
.PHONY: help
|
|
|
|
#######################################
|
|
# Define rom's display name and publish property
|
|
#######################################
|
|
romdef:
|
|
$(V)$(ECHO) [ PYTHON3 ] $(notdir $<)
|
|
$(V)$(PYTHON3) parse_romdef.py
|
|
$(V)$(ECHO) [ RM ] $(BUILD_DIR)/roms.a
|
|
$(V)rm -rf $(BUILD_DIR)/roms.a
|
|
$(V)$(ECHO) [ RM ] $(BUILD_DIR)/core/rom_manager.*
|
|
$(V)rm -rf $(BUILD_DIR)/core/rom_manager.*
|
|
.PHONY: romdef
|
|
|
|
#######################################
|
|
# 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)
|
|
|
|
#######################################
|
|
# clean up
|
|
#######################################
|
|
clean:
|
|
$(V)$(ECHO) [ RM ] $(BUILD_DIR)
|
|
$(V)-rm -fR $(BUILD_DIR)
|
|
|
|
distclean: clean
|
|
$(V)$(ECHO) [ RM ] $(SDK_DIR)
|
|
$(V)rm -rf $(SDK_DIR)
|
|
|
|
#######################################
|
|
# dependencies
|
|
#######################################
|
|
-include $(wildcard $(BUILD_DIR)/*.d)
|
|
|
|
# *** EOF ***
|