Replaces the old vendored BDK with the one from hekate v6.5.5 (CTCaer's 2025/2026 refactors: sdmmc, SE, minerva v1.6, display, heap, return value homogenisation). OmniNX additions re-applied on top: bq24193_charger_connected() and jc_clear_input(); s_vprintf now ships with the BDK. Ported to the new API: - sd_mount(), sdmmc_storage_* and ini_parse() now return 0 on success. The installer checked ini_parse() != 1, which would have made it miss manifest.ini and run every install as a clean install. - SD helpers come from bdk/storage/sd.c (source/nx_sd.* removed), ffsystem.c from the BDK, diskio.c/ffconf.h from hekate (ffconf keeps the sd:/ volume prefix). - minerva_init() needs the minerva storage; the installer still drops to 800 MHz afterwards. - Payload launch follows hekate (sd_file_read, hw_deinit); coreboot path removed upstream. - Stack moved to 0x96000000: the old 0x83100000 is inside the new heap. - GUI/USB/compression parts of the BDK are not built.
121 lines
4.3 KiB
Makefile
121 lines
4.3 KiB
Makefile
rwildcard = $(foreach d, $(wildcard $1*), $(filter $(subst *, %, $2), $d) $(call rwildcard, $d/, $2))
|
|
|
|
ifeq ($(strip $(DEVKITARM)),)
|
|
$(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM")
|
|
endif
|
|
|
|
include $(DEVKITARM)/base_rules
|
|
|
|
################################################################################
|
|
|
|
IPL_LOAD_ADDR := 0x40008000
|
|
VERSION := $(shell cat VERSION)
|
|
|
|
################################################################################
|
|
|
|
TARGET := omninx-installer
|
|
OUTPUT_NAME := OmniNX-Installer.bin
|
|
BUILDDIR := build
|
|
OUTPUTDIR := output
|
|
SOURCEDIR := source
|
|
BDKDIR := bdk
|
|
BDKINC := -I./$(BDKDIR)
|
|
VPATH = $(dir ./$(SOURCEDIR)/) $(dir $(wildcard ./$(SOURCEDIR)/*/)) $(dir $(wildcard ./$(SOURCEDIR)/*/*/))
|
|
VPATH += $(dir $(wildcard ./$(BDKDIR)/)) $(dir $(wildcard ./$(BDKDIR)/*/)) $(dir $(wildcard ./$(BDKDIR)/*/*/))
|
|
|
|
# All source files
|
|
OBJS = $(patsubst $(SOURCEDIR)/%.S, $(BUILDDIR)/$(TARGET)/%.o, \
|
|
$(patsubst $(SOURCEDIR)/%.c, $(BUILDDIR)/$(TARGET)/%.o, \
|
|
$(call rwildcard, $(SOURCEDIR), *.S *.c)))
|
|
OBJS += $(patsubst $(BDKDIR)/%.S, $(BUILDDIR)/$(TARGET)/%.o, \
|
|
$(patsubst $(BDKDIR)/%.c, $(BUILDDIR)/$(TARGET)/%.o, \
|
|
$(call rwildcard, $(BDKDIR), *.S *.c)))
|
|
|
|
|
|
# BDK parts the installer never uses (GUI, USB gadget, compression).
|
|
OBJS := $(filter-out $(BUILDDIR)/$(TARGET)/libs/lvgl/% $(BUILDDIR)/$(TARGET)/usb/% $(BUILDDIR)/$(TARGET)/libs/compr/%,$(OBJS))
|
|
OBJS := $(sort $(OBJS))
|
|
|
|
GFX_INC := '"../$(SOURCEDIR)/gfx.h"'
|
|
FFCFG_INC := '"../$(SOURCEDIR)/libs/fatfs/ffconf.h"'
|
|
|
|
################################################################################
|
|
|
|
CUSTOMDEFINES := -DIPL_LOAD_ADDR=$(IPL_LOAD_ADDR)
|
|
CUSTOMDEFINES += -DBDK_MALLOC_NO_DEFRAG
|
|
CUSTOMDEFINES += -DGFX_INC=$(GFX_INC) -DFFCFG_INC=$(FFCFG_INC)
|
|
CUSTOMDEFINES += -DVERSION='"$(VERSION)"'
|
|
|
|
ARCH := -march=armv4t -mtune=arm7tdmi -mthumb -mthumb-interwork
|
|
CFLAGS = $(ARCH) -Os -nostdlib -ffunction-sections -fdata-sections -fomit-frame-pointer -fno-inline -std=gnu11 -Wall -Wno-missing-braces -MMD -MP $(CUSTOMDEFINES)
|
|
LDFLAGS = $(ARCH) -nostartfiles -lgcc -Wl,--nmagic,--gc-sections -Xlinker --defsym=IPL_LOAD_ADDR=$(IPL_LOAD_ADDR)
|
|
|
|
################################################################################
|
|
|
|
MAX_PAYLOAD_SIZE := 126296
|
|
|
|
RAMTEST_BIN := $(OUTPUTDIR)/RAM-Test.bin
|
|
OBJS_RAMTEST := $(filter-out $(BUILDDIR)/$(TARGET)/main.o,$(OBJS)) \
|
|
$(BUILDDIR)/$(TARGET)/ram_test_main.o
|
|
|
|
.PHONY: all clean release ram-test
|
|
|
|
all: $(OUTPUTDIR)/$(OUTPUT_NAME)
|
|
$(eval BIN_SIZE = $(shell wc -c < $(OUTPUTDIR)/$(OUTPUT_NAME)))
|
|
@echo "Payload size is $(BIN_SIZE) bytes (max $(MAX_PAYLOAD_SIZE) for RCM)"
|
|
@if [ $(BIN_SIZE) -gt $(MAX_PAYLOAD_SIZE) ]; then echo "ERROR: payload exceeds the RCM size limit"; exit 1; fi
|
|
|
|
clean:
|
|
@rm -rf $(BUILDDIR)
|
|
@rm -rf $(OUTPUTDIR)
|
|
@rm -f $(RAMTEST_BIN)
|
|
@rm -rf release
|
|
@rm -f $(TARGET)-*.zip
|
|
|
|
$(OUTPUTDIR)/$(OUTPUT_NAME): $(BUILDDIR)/$(TARGET)/$(TARGET).elf
|
|
@mkdir -p "$(@D)"
|
|
$(OBJCOPY) -S -O binary $< $(OUTPUTDIR)/$(TARGET).bin
|
|
@mv $(OUTPUTDIR)/$(TARGET).bin $(OUTPUTDIR)/$(OUTPUT_NAME)
|
|
|
|
$(BUILDDIR)/$(TARGET)/$(TARGET).elf: $(OBJS)
|
|
$(CC) $(LDFLAGS) -T $(SOURCEDIR)/link.ld $^ -o $@
|
|
|
|
$(BUILDDIR)/$(TARGET)/ram_test_main.o: tools/ram_test_main.c
|
|
@mkdir -p "$(@D)"
|
|
$(CC) $(CFLAGS) $(BDKINC) -I$(SOURCEDIR) -c $< -o $@
|
|
|
|
$(BUILDDIR)/$(TARGET)/ram_test.elf: $(OBJS_RAMTEST)
|
|
$(CC) $(LDFLAGS) -T $(SOURCEDIR)/link.ld $^ -o $@
|
|
|
|
$(RAMTEST_BIN): $(BUILDDIR)/$(TARGET)/ram_test.elf
|
|
@mkdir -p "$(@D)"
|
|
$(OBJCOPY) -S -O binary $< $@
|
|
@echo "RAM-Test payload: $(RAMTEST_BIN) ($$(wc -c < $@) bytes)"
|
|
|
|
ram-test: $(RAMTEST_BIN)
|
|
|
|
$(BUILDDIR)/$(TARGET)/%.o: $(SOURCEDIR)/%.c
|
|
@mkdir -p "$(@D)"
|
|
$(CC) $(CFLAGS) $(BDKINC) -I$(SOURCEDIR) -c $< -o $@
|
|
|
|
$(BUILDDIR)/$(TARGET)/%.o: $(SOURCEDIR)/%.S
|
|
@mkdir -p "$(@D)"
|
|
$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
$(BUILDDIR)/$(TARGET)/%.o: $(BDKDIR)/%.c
|
|
@mkdir -p "$(@D)"
|
|
$(CC) $(CFLAGS) $(BDKINC) -I$(SOURCEDIR) -c $< -o $@
|
|
|
|
$(BUILDDIR)/$(TARGET)/%.o: $(BDKDIR)/%.S
|
|
@mkdir -p "$(@D)"
|
|
$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
# Header dependencies (generated by -MMD)
|
|
-include $(OBJS:.o=.d) $(BUILDDIR)/$(TARGET)/ram_test_main.d
|
|
|
|
release: $(OUTPUTDIR)/$(OUTPUT_NAME)
|
|
@mkdir -p release/bootloader/payloads
|
|
@cp $(OUTPUTDIR)/$(OUTPUT_NAME) release/bootloader/payloads/$(OUTPUT_NAME)
|
|
@cd release && zip -r ../$(TARGET)-$(VERSION).zip bootloader
|
|
@echo "Release package created: $(TARGET)-$(VERSION).zip"
|