# __________ __ ___. # Open \______ \ ____ ____ | | _\_ |__ _______ ___ # Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / # Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < # Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ # \/ \/ \/ \/ \/ # $Id$ # ifndef V SILENT = @ endif CC = gcc LD = ld OC = objcopy CROSS ?= arm-elf-eabi- ROOTDIR = ../../.. FIRMDIR = $(ROOTDIR)/firmware FWARM = $(FIRMDIR)/target/arm FW8702 = $(FWARM)/s5l8702 BUILDDIR = build/ LINKFILE = dualboot.lds # Edit the following variables when adding a new target. # mks5lboot.c also needs to be edited to refer to these # To add a new target x you need to: # 1) add x to the list in TARGETS # 2) create a variable named OPT_x of the form: # OPT_x=target specific defines TARGETS = ipod6g OPT_ipod6g = -DIPOD_6G -DMEMORYSIZE=64 LOADERS = install uninstall OPT_install = OPT_uninstall = -DDUALBOOT_UNINSTALL # target/loader specific options $(foreach l, $(LOADERS),$(foreach t, $(TARGETS),\ $(eval OPT_$(l)_$(t) = $(OPT_$(l)) $(OPT_$(t))))) DEFINES = -DBOOTLOADER SOURCES = init.S dualboot.c SOURCES += $(ROOTDIR)/lib/arm_support/support-arm.S SOURCES += $(wildcard $(FIRMDIR)/asm/mem*.c $(FIRMDIR)/libc/mem*.c) SOURCES += $(addprefix $(FWARM)/, mmu-arm.S) SOURCES += $(addprefix $(FW8702)/, clocking-s5l8702.c spi-s5l8702.c nor-s5l8702.c crypto-s5l8702.c) # target/loader specific sources SRCTARGET = piezo-.c $(foreach l, $(LOADERS), $(foreach t, $(TARGETS),\ $(eval SRC_$(l)_$(t) = $(addprefix $(FW8702)/$(t)/, $(subst -.,-$(subst ipod,,$(t)).,$(SRCTARGET)))))) INCLUDES += -I. -I.. -I$(FIRMDIR) -I$(FWARM) -I$(FW8702) INCLUDES += $(addprefix -I$(FIRMDIR)/, export include libc/include kernel/include) # target/loader specific includes $(foreach l,$(LOADERS),$(foreach t,$(TARGETS),$(eval INC_$(l)_$(t) = -I$(FW8702)/$(t)))) CFLAGS = $(INCLUDES) -mcpu=arm926ej-s -std=gnu99 -nostdlib -ffreestanding -Os -W -Wall\ -Wundef -Wstrict-prototypes -ffunction-sections -fdata-sections -Wl,--gc-sections $(DEFINES) # Build filenames prefix PFX = dualboot_ BOOTBINS = $(foreach l, $(LOADERS),$(foreach t, $(TARGETS),$(PFX)$(l)_$(t).arm-bin)) OUTPUTDUALBOOT = ../dualboot.h ../dualboot.c OUTPUTDEBUG = $(BOOTBINS:%.arm-bin=$(BUILDDIR)%.arm-elf) $(BOOTBINS:%.arm-bin=$(BUILDDIR)%.lds) all: $(BUILDDIR) $(OUTPUTDUALBOOT) $(BUILDDIR)$(PFX)%.lds: $(LINKFILE) @echo Creating $@ $(SILENT)$(CROSS)$(CC) $(INC_$*) $(CFLAGS) $(OPT_$*) -E -x c - < $< | sed '/#/d' > $@ $(BUILDDIR)$(PFX)%.arm-elf: $(BUILDDIR)$(PFX)%.lds $(SOURCES) @echo CC -T $(notdir $^ $(SRC_$*)) $(SILENT)$(CROSS)$(CC) $(INC_$*) $(CFLAGS) $(OPT_$*) -o $@ -T$^ $(SRC_$*) $(PFX)%.arm-bin: $(BUILDDIR)$(PFX)%.arm-elf @echo OC $< $(SILENT)$(CROSS)$(OC) -O binary $< $@ bin2c: bin2c.c $(CC) -o $@ $< $(OUTPUTDUALBOOT): bin2c $(BOOTBINS) ./bin2c ../dualboot $(BOOTBINS) $(BUILDDIR): mkdir -p $@ clean: rm -rf bin2c $(BOOTBINS) $(BUILDDIR) .PRECIOUS: $(OUTPUTDEBUG)