Added note about 2.5 being Archos only
[kugel-rb.git] / apps / Makefile
blob64bca835fc8cb9f8748cc6f6a74f73e2d8a93cba
1 # __________ __ ___.
2 # Open \______ \ ____ ____ | | _\_ |__ _______ ___
3 # Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
4 # Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
5 # Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
6 # \/ \/ \/ \/ \/
7 # $Id$
10 INCLUDES= -I$(FIRMDIR)/include -I$(FIRMDIR)/export -I. -I$(BUILDDIR) \
11 -I$(BUILDDIR)/bitmaps -I$(OBJDIR)
13 DEPFILE = $(OBJDIR)/dep-apps
14 LDS := $(FIRMDIR)/app.lds
15 ROMLDS := $(FIRMDIR)/rom.lds
17 ifdef ENABLEDPLUGINS
18 ROCKS=rocks
19 endif
21 ifdef SOFTWARECODECS
22 CODECS=build-codecs
23 endif
25 # Set up the bitmap libraries
26 BITMAPLIBS =
27 LINKBITMAPS =
28 ifneq ($(strip $(BMP2RB_MONO)),)
29 BITMAPLIBS += $(BUILDDIR)/libbitmapsmono.a
30 LINKBITMAPS += -lbitmapsmono
31 endif
32 ifneq ($(strip $(BMP2RB_NATIVE)),)
33 BITMAPLIBS += $(BUILDDIR)/libbitmapsnative.a
34 LINKBITMAPS += -lbitmapsnative
35 endif
36 ifneq ($(strip $(BMP2RB_REMOTEMONO)),)
37 BITMAPLIBS += $(BUILDDIR)/libbitmapsremotemono.a
38 LINKBITMAPS += -lbitmapsremotemono
39 endif
40 ifneq ($(strip $(BMP2RB_REMOTENATIVE)),)
41 BITMAPLIBS += $(BUILDDIR)/libbitmapsremotenative.a
42 LINKBITMAPS += -lbitmapsremotenative
43 endif
45 # This sets up 'SRC' based on the files mentioned in SOURCES
46 include $(TOOLSDIR)/makesrc.inc
48 DEFINES = $(DEBUG)
50 DIRS = .
52 ifdef APPEXTRA
53 DIRS += $(subst :, ,$(APPEXTRA))
54 INCLUDES += $(patsubst %,-I%,$(subst :, ,$(APPEXTRA)))
55 endif
57 CFLAGS = $(INCLUDES) $(GCCOPTS) $(TARGET) $(DEFINES) -DTARGET_ID=$(TARGET_ID) \
58 -DAPPSVERSION=\"$(VERSION)\" $(EXTRA_DEFINES) -DMEM=${MEMORYSIZE}
60 OBJS2 := $(OBJDIR)/lang.o $(patsubst %.c, $(OBJDIR)/%.o, $(SRC))
61 OBJS = $(patsubst %.S, $(OBJDIR)/%.o, $(OBJS2))
62 SOURCES = $(SRC)
63 LINKFILE = $(OBJDIR)/linkage.lds
64 LINKROM = $(OBJDIR)/linkrom.lds
65 MAXINFILE = $(OBJDIR)/romstart.temp
66 MAXOUTFILE = $(OBJDIR)/romstart
68 LIBROCKBOX = $(BUILDDIR)/librockbox.a
70 ifdef SIMVER
71 # this is a sim build
73 all: $(BUILDDIR)/$(BINARY) $(CODECS) $(ROCKS)
75 else
76 # regular target build
78 ifdef DEBUG
79 REALBIN = $(OBJDIR)/rockbox.elf
80 else
81 # this is not needed to get built when doing debug builds
82 REALBIN = $(BUILDDIR)/$(BINARY)
83 endif
85 all: $(REALBIN) $(FLASHFILE) $(CODECS) $(ROCKS) $(ARCHOSROM)
86 endif
88 $(DEPFILE): $(BITMAPLIBS)
90 dep: $(DEPFILE)
92 build-codecs:
93 @$(MAKE) -C codecs/lib OBJDIR=$(OBJDIR)/codecs/lib
94 @$(MAKE) -C codecs OBJDIR=$(OBJDIR)/codecs
96 build-bitmaps:
97 @$(MAKE) -C bitmaps OBJDIR=$(OBJDIR)/bitmaps
99 $(BITMAPLIBS): build-bitmaps
101 rocks: build-codecs
102 @$(MAKE) -C plugins/lib OBJDIR=$(OBJDIR)/plugins/lib
103 @$(MAKE) -C plugins OBJDIR=$(OBJDIR)/plugins
105 $(LINKFILE): $(LDS)
106 @echo "Build LDS file"
107 @cat $< | $(CC) -DLOADADDRESS=$(LOADADDRESS) -DMEMORYSIZE=$(MEMORYSIZE) $(INCLUDES) $(TARGET) $(DEFINES) -E -P $(ROMBUILD) - >$@
109 $(LINKROM): $(ROMLDS)
110 @echo "Build LDS file for Rombox"
111 @cat $< | $(CC) -DMEMORYSIZE=$(MEMORYSIZE) $(INCLUDES) $(TARGET) $(DEFINES) -E -P $(ROMBUILD) - >$@
113 $(MAXOUTFILE):
114 @echo '#include "config.h"' > $(MAXINFILE)
115 @echo "ROM_START" >> $(MAXINFILE)
116 @cat $(MAXINFILE) | $(CC) -DMEMORYSIZE=$(MEMORYSIZE) $(INCLUDES) $(TARGET) $(DEFINES) -E -P $(ROMBUILD) - > $(MAXOUTFILE)
117 @rm $(MAXINFILE)
119 $(OBJDIR)/rombox.elf : $(OBJS) $(LINKROM) $(DEPFILE) $(LIBROCKBOX) $(BITMAPLIBS)
120 @echo "LD rombox.elf"
121 @$(CC) $(GCCOPTS) -Os -nostdlib -o $@ $(OBJS) -L$(BUILDDIR) -lrockbox -lgcc $(LINKBITMAPS) -L$(BUILDDIR)/firmware -T$(LINKROM) -Wl,-Map,$(OBJDIR)/rombox.map
123 ifndef SIMVER
125 $(OBJDIR)/rockbox.elf : $(OBJS) $(LINKFILE) $(DEPFILE) $(LIBROCKBOX) $(BITMAPLIBS)
126 @echo "LD rockbox.elf"
127 @$(CC) $(GCCOPTS) -Os -nostdlib -o $@ $(OBJS) -L$(BUILDDIR)/firmware -L$(BUILDDIR) -lrockbox $(LINKBITMAPS) -lgcc -T$(LINKFILE) -Wl,-Map,$(OBJDIR)/rockbox.map
129 $(OBJDIR)/rockbox.bin : $(OBJDIR)/rockbox.elf
130 @echo "OBJCOPY "`basename $@`
131 @$(OC) -O binary $< $@
133 $(OBJDIR)/rombox.bin : $(OBJDIR)/rombox.elf
134 @echo "OBJCOPY "`basename $@`
135 @$(OC) -O binary $< $@
137 $(OBJDIR)/rockbox.asm: $(OBJDIR)/rockbox.bin
138 $(TOOLSDIR)/sh2d -sh1 $< > $@
141 # If there's a flashfile defined for this target (rockbox.ucl for Archos
142 # models) Then check if the mkfirmware script fails, as then it is (likely)
143 # because the image is too big and we need to create a compressed image
144 # instead.
146 $(BUILDDIR)/$(BINARY) : $(OBJDIR)/rockbox.bin $(FLASHFILE)
147 @echo "Build firmware file"
148 $(SILENT)($(MKFIRMWARE) $< $@; \
149 stat=$$?; \
150 if test -n "$(FLASHFILE)"; then \
151 if test "$$stat" -ne 0; then \
152 echo "Image too big, making a compressed version!"; \
153 $(MAKE) -C $(FIRMDIR)/decompressor OBJDIR=$(BUILDDIR)/firmware/decompressor; \
154 $(MKFIRMWARE) $(BUILDDIR)/firmware/decompressor/compressed.bin $@; \
155 fi \
156 fi )
158 else
159 # this is a simulator build
161 ifeq ($(SIMVER), win32)
162 # OK, this is ugly but we need it on the link line to make it do right
163 EXTRAOBJ = $(BUILDDIR)/sim/uisw32-res.o
164 LDOPTS += -lwinmm
165 endif
168 $(BUILDDIR)/$(BINARY) : $(OBJS) $(DEPFILE) $(BUILDDIR)/libsim.a \
169 $(BUILDDIR)/libcomsim.a $(LIBROCKBOX) $(BITMAPLIBS)
170 @echo "LD $(BINARY)"
171 $(SILENT)$(CC) $(GCCOPTS) -o $@ $(OBJS) -L$(BUILDDIR) -lrockbox -lsim -lcomsim $(LINKBITMAPS) $(LDOPTS) $(EXTRAOBJ) -Wl,-Map,$(OBJDIR)/rockbox.map
173 endif
175 $(BUILDDIR)/rockbox.ucl: $(OBJDIR)/rockbox.bin
176 $(SILENT)(echo "UCLPACK rockbox" ; \
177 $(TOOLSDIR)/uclpack --best --2e $< $@ >/dev/null 2>&1;)
179 $(BUILDDIR)/rombox.ucl: $(OBJDIR)/rombox.bin $(MAXOUTFILE)
180 $(SILENT)(echo "UCLPACK rombox" ; \
181 $(TOOLSDIR)/uclpack --none $< $@ >/dev/null 2>&1; \
182 perl $(TOOLSDIR)/romsizetest.pl `cat $(MAXOUTFILE)` $<; \
183 if test $$? -ne 0; then \
184 echo "removing UCL file again, making it a fake one"; \
185 echo "fake" > $@; \
188 include $(TOOLSDIR)/make.inc
190 $(OBJDIR)/build.lang: lang/$(LANGUAGE).lang $(TOOLSDIR)/uplang
191 @echo "UPLANG"
192 @mkdir -p `dirname $@`
193 @perl $(TOOLSDIR)/uplang lang/english.lang $< > $@
195 $(OBJDIR)/lang.o: $(OBJDIR)/build.lang $(TOOLSDIR)/genlang
196 @echo "GENLANG"
197 @mkdir -p `dirname $@`
198 @perl -s $(TOOLSDIR)/genlang -p=$(BUILDDIR)/lang $<
199 @echo "CC lang.c"
200 @$(CC) $(CFLAGS) -c $(BUILDDIR)/lang.c -o $@
202 clean:
203 @echo "cleaning apps"
204 @-rm -f $(OBJS) $(BUILDDIR)/$(BINARY) $(OBJDIR)/rockbox.asm \
205 $(OBJDIR)/rockbox.bin $(OBJDIR)/rockbox.elf $(OBJDIR)/*.map \
206 $(OBJDIR)/lang.o $(OBJDIR)/build.lang $(BUILDDIR)/lang.[ch] \
207 $(LINKFILE) $(BUILDDIR)/rockbox.ucl $(LINKROM) \
208 $(BUILDDIR)/rombox.ucl $(OBJDIR)/rombox.bin $(OBJDIR)/rombox.elf \
209 $(MAXOUTFILE) $(DEPFILE)
210 @$(MAKE) -C bitmaps/mono clean OBJDIR=$(OBJDIR)/bitmaps/mono
211 @$(MAKE) -C bitmaps/native clean OBJDIR=$(OBJDIR)/bitmaps/native
212 @$(MAKE) -C bitmaps/remote_mono clean OBJDIR=$(OBJDIR)/bitmaps/remote_mono
213 @$(MAKE) -C bitmaps/remote_native clean OBJDIR=$(OBJDIR)/bitmaps/remote_native
214 @$(MAKE) -C plugins clean OBJDIR=$(OBJDIR)/plugins
215 @$(MAKE) -C codecs clean OBJDIR=$(OBJDIR)/codecs
216 @rm -rf $(OBJDIR)/recorder $(OBJDIR)/player
217 @rm -rf $(BUILDDIR)/bitmaps
218 ifdef SIMVER
219 @$(MAKE) -C $(SIMDIR) clean
220 endif
222 ifneq ($(MAKECMDGOALS),clean)
223 -include $(DEPFILE)
224 endif