Experimenting with USER
[kugel-rb.git] / apps / Makefile
blob319ed316bb51151b276b336a361aca2c25396c62
1 # __________ __ ___.
2 # Open \______ \ ____ ____ | | _\_ |__ _______ ___
3 # Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
4 # Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
5 # Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
6 # \/ \/ \/ \/ \/
7 # $Id$
10 # $@ is the name to the left of the colon
11 # $> is the first name to the right of the colon
13 CC = sh-elf-gcc
14 LD = sh-elf-ld
15 AR = sh-elf-ar
16 AS = sh-elf-as
17 OC = sh-elf-objcopy
19 LANGUAGE = english
21 FIRMWARE := ../firmware
22 DOCSDIR := ../docs
24 INCLUDES= -I$(FIRMWARE)/include -I$(FIRMWARE)/export -I. -I$(OBJDIR)
26 CFLAGS = -O -W -Wall -m1 -nostdlib -ffreestanding -Wstrict-prototypes \
27 -fomit-frame-pointer -fschedule-insns $(INCLUDES) $(TARGET) $(DEFINES) \
28 -DAPPSVERSION=\"$(VERSION)\" $(EXTRA_DEFINES) -DMEM=${MEM} -DPLUGIN=1
29 AFLAGS += -small -relax
31 # Check if this is a kind of Recorder
32 ANYREC = $(findstring RECORDER, $(TARGET))
34 # scramble tool
35 TOOL = scramble
37 ifndef MEM
38 # if MEM is not set, assume 2MB
39 MEM=2
40 endif
42 LDS := $(FIRMWARE)/app.lds
44 ifdef DEBUG
45 DEFINES := -DDEBUG
46 CFLAGS += -g
47 endif
49 SRC := $(wildcard *.c)
51 ifeq ($(TARGET), -DARCHOS_FMRECORDER)
52 TOOL_OPT = -fm
53 endif
54 ifeq ($(TARGET), -DARCHOS_RECORDERV2)
55 TOOL_OPT = -v2
56 endif
58 ifeq ($(ANYREC), RECORDER)
59 SRC += $(wildcard recorder/*.c)
60 CFLAGS += -Irecorder
61 OUTNAME = ajbrec.ajz
62 else
63 ifeq ($(TARGET), -DARCHOS_PLAYER)
64 SRC += $(wildcard player/*.c)
65 CFLAGS += -Iplayer
66 OUTNAME = archos.mod
67 else
68 # some kind of Neo
69 SRC += $(wildcard neo/*.c)
70 CFLAGS += -Ineo
71 OUTNAME = Rockbox.bin
72 TOOL_OPT = -neo
73 endif
74 endif
76 OBJS := $(OBJDIR)/lang.o $(SRC:%.c=$(OBJDIR)/%.o)
78 LINKFILE = $(OBJDIR)/linkage.lds
80 ifndef OBJDIR
81 no_configure:
82 @echo "Don't run make here. Run the tools/configure script from your own build"
83 @echo "directory, then run make there."
84 @echo
85 @echo "More help on how to build rockbox can be found here:"
86 @echo "http://rockbox.haxx.se/docs/how_to_compile.html"
87 endif
89 ifndef TOOLSDIR
90 TOOLSDIR=../tools
91 endif
93 ifdef DEBUG
94 all : $(OBJDIR)/rockbox.elf rocks
95 else
96 all : $(OBJDIR)/$(OUTNAME) $(OBJDIR)/rockbox.ucl rocks
97 endif
99 rocks:
100 $(MAKE) -C plugins TARGET=$(TARGET) DEBUG=$(DEBUG) OBJDIR=$(OBJDIR) VERSION=$(VERSION) EXTRA_DEFINES="$(EXTRA_DEFINES)" MEM=${MEM}
102 $(OBJDIR)/librockbox.a:
103 make -C $(FIRMWARE) TARGET=$(TARGET) DEBUG=$(DEBUG) OBJDIR=$(OBJDIR)
105 # MEM should be passed on to this makefile with the chosen memory size given
106 # in number of MB
107 $(LINKFILE): $(LDS)
108 cat $< | $(CC) -DMEMORYSIZE=$(MEM) $(INCLUDES) $(TARGET) $(DEFINES) -E -P - >$@
110 $(OBJDIR)/rockbox.elf : $(OBJS) $(LINKFILE) $(OBJDIR)/librockbox.a
111 $(CC) -Os -nostdlib -o $@ $(OBJS) -L$(OBJDIR) -lrockbox -lgcc -L$(FIRMWARE) -T$(LINKFILE) -Wl,-Map,$(OBJDIR)/rockbox.map
113 $(OBJDIR)/rockbox.bin : $(OBJDIR)/rockbox.elf
114 $(OC) -O binary $< $@
116 $(OBJDIR)/rockbox.asm: $(OBJDIR)/rockbox.bin
117 $(TOOLSDIR)/sh2d -sh1 $< > $@
119 $(OBJDIR)/$(OUTNAME) : $(OBJDIR)/rockbox.bin
120 $(TOOLSDIR)/$(TOOL) $(TOOL_OPT) $< $@
122 $(OBJDIR)/rockbox.ucl: $(OBJDIR)/rockbox.bin
123 @a=`uclpack -h 2>/dev/null`; \
124 if test -n "$$a"; then \
125 echo uclpack --best --2e $< $@ ; \
126 uclpack --best --2e $< $@ >/dev/null 2>&1; \
127 else \
128 echo "no uclpack command found, makes a fake UCL file"; \
129 echo "fake" > $@; \
132 $(OBJDIR)/credits.raw: $(DOCSDIR)/CREDITS
133 perl credits.pl < $< > $@
135 $(OBJDIR)/credits.o: credits.c credits.h $(OBJDIR)/credits.raw
136 @mkdir -p `dirname $@`
137 $(CC) $(CFLAGS) -c $< -o $@
139 $(OBJDIR)/%.o: %.c
140 @mkdir -p `dirname $@`
141 $(CC) $(CFLAGS) -c $< -o $@
143 $(OBJDIR)/build.lang: lang/$(LANGUAGE).lang $(TOOLSDIR)/uplang
144 perl $(TOOLSDIR)/uplang lang/english.lang $< > $@
146 $(OBJDIR)/lang.o: $(OBJDIR)/build.lang $(TOOLSDIR)/genlang
147 perl -s $(TOOLSDIR)/genlang -p=$(OBJDIR)/lang $<
148 $(CC) $(CFLAGS) -c $(OBJDIR)/lang.c -o $@
150 clean:
151 -rm -f $(OBJS) $(OBJDIR)/$(OUTNAME) $(OBJDIR)/rockbox.asm \
152 $(OBJDIR)/rockbox.bin $(OBJDIR)/rockbox.elf $(OBJDIR)/*.map \
153 $(OBJDIR)/lang.o $(OBJDIR)/build.lang $(OBJDIR)/lang.[ch] \
154 $(OBJDIR)/credits.raw $(LINKFILE) $(OBJDIR)/rockbox.ucl
155 -$(RM) -r $(OBJDIR)/$(DEPS)
156 $(MAKE) -C plugins clean
158 DEPS:=.deps
159 DEPDIRS:=$(DEPS)
160 ifeq ($(ANYREC), RECORDER)
161 DEPDIRS += $(DEPS)/recorder
162 else
163 ifeq ($(TARGET), -DARCHOS_PLAYER)
164 DEPDIRS += $(DEPS)/player
165 else
166 # some kind of Neo
167 DEPDIRS += $(DEPS)/neo
168 endif
169 endif
171 DIRS = $(subst $(DEPS),".",$(DEPDIRS))
173 tags:
174 @$(SHELL) -c 'for d in $(DIRS); do { etags -o $(OBJDIR)/TAGS -a $$d/*.[ch]; }; done'
176 $(OBJDIR)/$(DEPS)/%.d: %.c
177 @$(SHELL) -c 'for d in $(DEPDIRS); do { if [ ! -d $(OBJDIR)/$$d ]; then mkdir $(OBJDIR)/$$d; fi; }; done'
178 @echo "Updating dependencies for $(OBJDIR)/$<"
179 @$(SHELL) -ec '$(CC) -MM $(CFLAGS) $< \
180 |sed '\''s|\($*\)\.o[ :]*|$(OBJDIR)/\1.o $(<:%.c=%.d) : |g'\'' > $@; \
181 [ -s $@ ] || rm -f $@'
183 ifdef OBJDIR
184 -include $(SRC:%.c=$(OBJDIR)/$(DEPS)/%.d)
185 endif