forked from len0rd/rockbox
We now preprocess the .lds file to allow macros/#ifdef etc and we now set the DRAM size using a define. In combination with the recent configure fix, this should allow us to build 8MB versions "out of the box". The 'dist' target was removed. 'archos' was replaced with 'rockbox' in all the temporary file names when building/linking. Plain cosmetic change. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@3345 a1c6a512-1295-4272-9138-f99709370657
140 lines
3.9 KiB
Makefile
140 lines
3.9 KiB
Makefile
# __________ __ ___.
|
|
# Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
# \/ \/ \/ \/ \/
|
|
# $Id$
|
|
#
|
|
|
|
CC = sh-elf-gcc
|
|
LD = sh-elf-ld
|
|
AR = sh-elf-ar
|
|
AS = sh-elf-as
|
|
OC = sh-elf-objcopy
|
|
|
|
LANGUAGE = english
|
|
|
|
FIRMWARE := ../firmware
|
|
DOCSDIR := ../docs
|
|
|
|
INCLUDES= -I$(FIRMWARE)/include -I$(FIRMWARE)/export -I. -I$(OBJDIR)
|
|
|
|
CFLAGS = -O -W -Wall -m1 -nostdlib -ffreestanding -Wstrict-prototypes -fomit-frame-pointer -fschedule-insns $(INCLUDES) $(TARGET) $(DEFINES) -DAPPSVERSION=\"$(VERSION)\" $(EXTRA_DEFINES)
|
|
AFLAGS += -small -relax
|
|
|
|
# Check if this is a kind of Recorder
|
|
ANYREC = $(findstring RECORDER, $(TARGET))
|
|
|
|
ifndef MEM
|
|
# if MEM is not set, assume 2MB
|
|
MEM=2
|
|
endif
|
|
|
|
ifdef DEBUG
|
|
DEFINES := -DDEBUG
|
|
CFLAGS += -g
|
|
LDS := $(FIRMWARE)/gdb.lds
|
|
else
|
|
LDS := $(FIRMWARE)/app.lds
|
|
endif
|
|
|
|
SRC := $(wildcard *.c)
|
|
|
|
ifeq ($(TARGET), -DARCHOS_FMRECORDER)
|
|
SCRAMBLE_OPT = -fm
|
|
endif
|
|
|
|
ifeq ($(ANYREC), RECORDER)
|
|
SRC += $(wildcard recorder/*.c)
|
|
CFLAGS += -Irecorder
|
|
OUTNAME = ajbrec.ajz
|
|
else
|
|
SRC += $(wildcard player/*.c)
|
|
CFLAGS += -Iplayer
|
|
OUTNAME = archos.mod
|
|
endif
|
|
|
|
OBJS := $(OBJDIR)/lang.o $(SRC:%.c=$(OBJDIR)/%.o)
|
|
|
|
LINKFILE = $(OBJDIR)/linkage.lds
|
|
|
|
ifndef OBJDIR
|
|
no_configure:
|
|
@echo "Don't run make here. Run the tools/configure script from your own build"
|
|
@echo "directory, then run make there."
|
|
@echo
|
|
@echo "More help on how to build rockbox can be found here:"
|
|
@echo "http://rockbox.haxx.se/docs/how_to_compile.html"
|
|
endif
|
|
|
|
all : $(OBJDIR)/$(OUTNAME)
|
|
|
|
$(OBJDIR)/librockbox.a:
|
|
make -C $(FIRMWARE) TARGET=$(TARGET) DEBUG=$(DEBUG) OBJDIR=$(OBJDIR)
|
|
|
|
# MEM should be passed on to this makefile with the chosen memory size given
|
|
# in number of MB
|
|
$(LINKFILE): $(LDS)
|
|
cat $< | $(CC) -DMEMORYSIZE=$(MEM) -E -P - >$@
|
|
|
|
$(OBJDIR)/rockbox.elf : $(OBJS) $(LINKFILE) $(OBJDIR)/librockbox.a
|
|
$(CC) -Os -nostdlib -o $(OBJDIR)/rockbox.elf $(OBJS) -L$(OBJDIR) -lrockbox -lgcc -L$(FIRMWARE) -T$(LINKFILE) -Wl,-Map,$(OBJDIR)/rockbox.map
|
|
|
|
$(OBJDIR)/rockbox.bin : $(OBJDIR)/rockbox.elf
|
|
$(OC) -O binary $(OBJDIR)/rockbox.elf $(OBJDIR)/rockbox.bin
|
|
|
|
$(OBJDIR)/rockbox.asm: $(OBJDIR)/rockbox.bin
|
|
../tools/sh2d -sh1 $(OBJDIR)/rockbox.bin > $(OBJDIR)/rockbox.asm
|
|
|
|
$(OBJDIR)/$(OUTNAME) : $(OBJDIR)/rockbox.bin
|
|
../tools/scramble $(SCRAMBLE_OPT) $(OBJDIR)/rockbox.bin $(OBJDIR)/$(OUTNAME)
|
|
|
|
$(OBJDIR)/credits.raw: $(DOCSDIR)/CREDITS
|
|
perl credits.pl < $< > $@
|
|
|
|
$(OBJDIR)/credits.o: credits.c credits.h $(OBJDIR)/credits.raw
|
|
@mkdir -p `dirname $@`
|
|
$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
$(OBJDIR)/%.o: %.c
|
|
@mkdir -p `dirname $@`
|
|
$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
$(OBJDIR)/build.lang: lang/$(LANGUAGE).lang ../tools/uplang
|
|
perl ../tools/uplang lang/english.lang $< > $@
|
|
|
|
$(OBJDIR)/lang.o: $(OBJDIR)/build.lang ../tools/genlang
|
|
perl -s ../tools/genlang -p=$(OBJDIR)/lang $<
|
|
$(CC) $(CFLAGS) -c $(OBJDIR)/lang.c -o $@
|
|
|
|
clean:
|
|
-rm -f $(OBJS) $(OBJDIR)/$(OUTNAME) $(OBJDIR)/rockbox.asm \
|
|
$(OBJDIR)/rockbox.bin $(OBJDIR)/rockbox.elf $(OBJDIR)/rockbox.map \
|
|
$(OBJDIR)/lang.o $(OBJDIR)/build.lang $(OBJDIR)/lang.[ch] \
|
|
$(OBJDIR)/credits.raw $(LINKFILE)
|
|
-$(RM) -r $(OBJDIR)/$(DEPS)
|
|
|
|
DEPS:=.deps
|
|
DEPDIRS:=$(DEPS)
|
|
ifeq ($(ANYREC), RECORDER)
|
|
DEPDIRS += $(DEPS)/recorder
|
|
else
|
|
DEPDIRS += $(DEPS)/player
|
|
endif
|
|
|
|
DIRS = $(subst $(DEPS),".",$(DEPDIRS))
|
|
|
|
tags:
|
|
@$(SHELL) -c 'for d in $(DIRS); do { etags -o $(OBJDIR)/TAGS -a $$d/*.[ch]; }; done'
|
|
|
|
$(OBJDIR)/$(DEPS)/%.d: %.c
|
|
@$(SHELL) -c 'for d in $(DEPDIRS); do { if [ ! -d $(OBJDIR)/$$d ]; then mkdir $(OBJDIR)/$$d; fi; }; done'
|
|
@echo "Updating dependencies for $(OBJDIR)/$<"
|
|
@$(SHELL) -ec '$(CC) -MM $(CFLAGS) $< \
|
|
|sed '\''s|\($*\)\.o[ :]*|$(OBJDIR)/\1.o $(<:%.c=%.d) : |g'\'' > $@; \
|
|
[ -s $@ ] || rm -f $@'
|
|
|
|
ifdef OBJDIR
|
|
-include $(SRC:%.c=$(OBJDIR)/$(DEPS)/%.d)
|
|
endif
|