2 # Open \______ \ ____ ____ | | _\_ |__ _______ ___
3 # Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
4 # Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
5 # Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 # $Id: Makefile 19082 2008-11-10 23:54:24Z zagor $
10 include $(TOOLSDIR
)/functions.make
12 DEFINES
= -DROCKBOX
-DMEMORYSIZE
=$(MEMORYSIZE
) -DMEM
=$(MEMORYSIZE
) $(TARGET
) \
13 -DTARGET_ID
=$(TARGET_ID
) -DTARGET_NAME
=\"$(MODELNAME
)\" \
14 -DAPPSVERSION
=\"$(VERSION
)\" $(BUILDDATE
) \
15 $(EXTRA_DEFINES
) # <-- -DSIMULATOR or not
16 INCLUDES
= -I
$(BUILDDIR
) $(TARGET_INC
)
18 CFLAGS
= $(INCLUDES
) $(DEFINES
) $(GCCOPTS
)
19 PPCFLAGS
= $(filter-out -Dmain
=SDL_main
,$(CFLAGS
)) # cygwin sdl-config fix
21 TOOLS
= $(TOOLSDIR
)/rdf2binary
$(TOOLSDIR
)/convbdf \
22 $(TOOLSDIR
)/codepages
$(TOOLSDIR
)/scramble
$(TOOLSDIR
)/bmp2rb \
23 $(TOOLSDIR
)/uclpack
$(TOOLSDIR
)/mktccboot
$(TOOLSDIR
)/mkboot
25 # list suffixes to be understood by $*
26 .SUFFIXES
: .rock .codec .map .elf .c .S .o .bmp .a
28 .PHONY
: all clean tags zip tools manual bin build
info langs
30 DEPFILE
= $(BUILDDIR
)/make.dep
34 # Subdir makefiles. their primary purpose is to populate SRC & OTHER_SRC
35 # but they also define special dependencies and compile rules
36 include $(TOOLSDIR
)/tools.make
37 include $(FIRMDIR
)/firmware.make
38 include $(ROOTDIR
)/apps
/bitmaps
/bitmaps.make
40 ifneq (,$(findstring bootloader
,$(APPSDIR
)))
41 include $(APPSDIR
)/bootloader.make
42 else ifneq (,$(findstring bootbox
,$(APPSDIR
)))
43 BOOTBOXLDOPTS
= -Wl
,--gc-sections
44 include $(APPSDIR
)/bootbox.make
46 include $(APPSDIR
)/apps.make
47 include $(APPSDIR
)/lang
/lang.make
50 include $(APPSDIR
)/codecs
/codecs.make
54 include $(APPSDIR
)/plugins
/bitmaps
/pluginbitmaps.make
55 include $(APPSDIR
)/plugins
/plugins.make
59 include $(ROOTDIR
)/uisimulator
/uisimulator.make
66 OBJ
:= $(subst $(ROOTDIR
),$(BUILDDIR
),$(OBJ
))
68 build
: $(TOOLS
) $(BUILDDIR
)/$(BINARY
) $(CODECS
) $(ROCKS
) $(ARCHOSROM
)
69 $(SILENT
)$(TOOLSDIR
)/mkinfo.pl
$(BUILDDIR
)/rockbox-info.txt
71 ifneq (clean,$(findstring clean,$(MAKECMDGOALS
))) # don't build deps before cleaning
73 $(call PRINTS
,Generating dependencies
)
74 @echo foo
> /dev
/null
# there must be a "real" command in the rule
75 $(call mkdepfile
,$(DEPFILE
),$(SRC
) $(OTHER_SRC
))
76 $(call bmpdepfile
,$(DEPFILE
),$(BMP
) $(PBMP
))
79 bin
: $(DEPFILE
) $(TOOLS
) $(BUILDDIR
)/$(BINARY
)
80 rocks
: $(DEPFILE
) $(TOOLS
) $(ROCKS
)
81 codecs
: $(DEPFILE
) $(TOOLS
) $(CODECS
)
86 $(SILENT
)rm -rf
$(TOOLS
)
89 $(SILENT
)echo Cleaning build directory
90 $(SILENT
)rm -rf rockbox.zip rockbox
.7z rockbox.
tar rockbox.
tar.gz rockbox.
tar.bz2 TAGS apps firmware comsim sim lang.
[ch
] manual
*.pdf
*.a credits.raw rockbox.ipod bitmaps pluginbitmaps UI256.bmp rockbox-full.zip html txt rockbox-manual
*.zip sysfont.h rockbox-info.txt voicefontids
*.wav
*.mp3
*.voice max_language_size.h
$(CLEANOBJS
) $(LINKRAM
) $(LINKROM
) rockbox.elf rockbox.map rockbox.bin
$(DEPFILE
) rombox.elf rombox.map rombox.bin
$(BINARY
) $(FLASHFILE
) uisimulator bootloader flash
92 #### linking the binaries: ####
98 ifeq (,$(findstring bootloader
,$(APPSDIR
)))
102 RAMLDS
:= $(FIRMDIR
)/target
/$(CPU
)/$(MANUFACTURER
)/app.lds
103 LINKRAM
:= $(BUILDDIR
)/ram.link
104 ROMLDS
:= $(FIRMDIR
)/rom.lds
105 LINKROM
:= $(BUILDDIR
)/rom.link
107 $(LINKRAM
): $(RAMLDS
)
108 $(call PRINTS
,PP
$(@F
))
109 $(call preprocess2file
,$<,$@
,-DLOADADDRESS
=$(LOADADDRESS
))
111 $(LINKROM
): $(ROMLDS
)
112 $(call PRINTS
,PP
$(@F
))
113 $(call preprocess2file
,$<,$@
,-DLOADADDRESS
=$(LOADADDRESS
))
115 $(BUILDDIR
)/rockbox.elf
: $$(OBJ
) $$(FIRMLIB
) $$(VOICESPEEXLIB
) $$(LINKRAM
)
116 $(call PRINTS
,LD
$(@F
))$(CC
) $(GCCOPTS
) -Os
-nostdlib
-o
$@
$(OBJ
) \
117 -L
$(BUILDDIR
)/firmware
-lfirmware \
118 -L
$(BUILDDIR
)/apps
/codecs
$(VOICESPEEXLIB
:lib
%.a
=-l
%) \
119 -lgcc
$(BOOTBOXLDOPTS
) \
120 -T
$(LINKRAM
) -Wl
,-Map
,$(BUILDDIR
)/rockbox.map
122 $(BUILDDIR
)/rombox.elf
: $$(OBJ
) $$(FIRMLIB
) $$(VOICESPEEXLIB
) $$(LINKROM
)
123 $(call PRINTS
,LD
$(@F
))$(CC
) $(GCCOPTS
) -Os
-nostdlib
-o
$@
$(OBJ
) \
124 $(VOICESPEEXLIB
) $(FIRMLIB
) -lgcc
-L
$(BUILDDIR
)/firmware \
125 -T
$(LINKROM
) -Wl
,-Map
,$(BUILDDIR
)/rockbox.map
127 $(BUILDDIR
)/rockbox.bin
: $(BUILDDIR
)/rockbox.elf
128 $(call PRINTS
,OC
$(@F
))$(OC
) $(if
$(filter yes
, $(USE_ELF
)), -S
-x
, -O binary
) $< $@
130 $(BUILDDIR
)/rombox.bin
: $(BUILDDIR
)/rombox.elf
131 $(call PRINTS
,OC
$(@F
))$(OC
) -O binary
$< $@
134 # If there's a flashfile defined for this target (rockbox.ucl for Archos
135 # models) Then check if the mkfirmware script fails, as then it is (likely)
136 # because the image is too big and we need to create a compressed image
139 $(BUILDDIR
)/$(BINARY
) : $(BUILDDIR
)/rockbox.bin
$(FLASHFILE
)
140 $(call PRINTS
,SCRAMBLE
$(notdir $@
))($(MKFIRMWARE
) $< $@
; \
142 if
test -n
"$(FLASHFILE)"; then \
143 if
test "$$stat" -ne
0; then \
144 echo
"Image too big, making a compressed version!"; \
145 $(MAKE
) -C
$(FIRMDIR
)/decompressor OBJDIR
=$(BUILDDIR
)/firmware
/decompressor
; \
146 $(MKFIRMWARE
) $(BUILDDIR
)/firmware
/decompressor
/compressed.bin
$@
; \
151 $(BUILDDIR
)/rockbox.ucl
: $(BUILDDIR
)/rockbox.bin
152 $(call PRINTS
,UCLPACK
$(@F
))$(TOOLSDIR
)/uclpack
--best
--2e
-b1048576
$< $@
>/dev
/null
2>&1
154 MAXINFILE
= $(BUILDDIR
)/temp.txt
155 MAXOUTFILE
= $(BUILDDIR
)/romstart.txt
157 $(BUILDDIR
)/rombox.ucl
: $(BUILDDIR
)/rombox.bin
$(MAXOUTFILE
)
158 $(call PRINTS
,UCLPACK
$(@F
))$(TOOLSDIR
)/uclpack
--none
$< $@
>/dev
/null
; \
159 perl
$(TOOLSDIR
)/romsizetest.pl
`cat $(MAXOUTFILE)` $<; \
160 if
test $$?
-ne
0; then \
161 echo
"removing UCL file again, making it a fake one"; \
166 $(call PRINTS
,Creating
$(@F
))
167 $(SILENT
)$(shell echo
'#include "config.h"' > $(MAXINFILE
))
168 $(SILENT
)$(shell echo
"ROM_START" >> $(MAXINFILE
))
169 $(call preprocess2file
,$(MAXINFILE
),$(MAXOUTFILE
))
170 $(SILENT
)rm $(MAXINFILE
)
173 $(BUILDDIR
)/rombox.iriver
: $(BUILDDIR
)/rombox.bin
174 $(call PRINTS
,Build ROM file
)$(MKFIRMWARE
) $< $@
181 $(SILENT
)$(MAKE
) -C
$(TOOLSDIR
) CC
=$(HOSTCC
) AR
=$(HOSTAR
) rbspeexenc voicefont wavtrim
185 $(SILENT
)etags
-o
$(BUILDDIR
)/TAGS
$(filter-out %.o
,$(SRC
) $(OTHER_SRC
))
188 $(SILENT
)$(TOOLSDIR
)/buildzip.pl
$(VERBOSEOPT
) -t
\"$(MODELNAME
)\" -r
"$(ROOTDIR)" -f
1 -o rockbox-fonts.zip
$(TARGET
) $(BINARY
)
191 $(SILENT
)for f in
`cat $(BUILDDIR)/apps/features`; do feat
="$$feat:$$f" ; done
; \
192 $(TOOLSDIR
)/buildzip.pl
$(VERBOSEOPT
) -t
\"$(MODELNAME
)$$feat\" -i
\"$(TARGET_ID
)\" -r
"$(ROOTDIR)" $(TARGET
) $(BINARY
)
195 $(SILENT
)find .
-name
"*.map" | xargs zip rockbox-maps.zip
198 $(SILENT
)for f in
`cat $(BUILDDIR)/apps/features`; do feat
="$$feat:$$f" ; done
; \
199 $(TOOLSDIR
)/buildzip.pl
$(VERBOSEOPT
) -t
\"$(MODELNAME
)$$feat\" -i
\"$(TARGET_ID
)\" -r
"$(ROOTDIR)" -f
2 -o rockbox-full.zip
$(TARGET
) $(BINARY
)
202 $(SILENT
)for f in
`cat $(BUILDDIR)/apps/features`; do feat
="$$feat:$$f" ; done
; \
203 $(TOOLSDIR
)/buildzip.pl
$(VERBOSEOPT
) -t
\"$(MODELNAME
)$$feat\" -i
\"$(TARGET_ID
)\" -o
"rockbox.7z" -z
"7za a -mx=9" -r
"$(ROOTDIR)" $(TARGET
) $(BINARY
)
206 $(SILENT
)rm -f rockbox.
tar
207 $(SILENT
)for f in
`cat $(BUILDDIR)/apps/features`; do feat
="$$feat:$$f" ; done
; \
208 $(TOOLSDIR
)/buildzip.pl
$(VERBOSEOPT
) -t
\"$(MODELNAME
)$$feat\" -i
\"$(TARGET_ID
)\" -o
"rockbox.tar" -z
"tar -cf" -r
"$(ROOTDIR)" $(TARGET
) $(BINARY
)
211 $(SILENT
)bzip2
-f9 rockbox.
tar
214 $(SILENT
)gzip
-f9 rockbox.
tar
217 $(SILENT
)$(MAKE
) -C
$(MANUALDIR
) OBJDIR
=$(BUILDDIR
)/manual manual-pdf
219 $(SILENT
)$(MAKE
) -C
$(MANUALDIR
) OBJDIR
=$(BUILDDIR
)/manual manual-html
220 manual-zhtml
: manual-zip
222 $(SILENT
)$(MAKE
) -C
$(MANUALDIR
) OBJDIR
=$(BUILDDIR
)/manual manual-txt
224 $(SILENT
)$(MAKE
) -C
$(MANUALDIR
) OBJDIR
=$(BUILDDIR
)/manual manual-txt-zip
226 $(SILENT
)$(MAKE
) -C
$(MANUALDIR
) OBJDIR
=$(BUILDDIR
)/manual manual-zip
230 voice
: voicetools features
231 $(SILENT
)for f in
`cat $(BUILDDIR)/apps/features`; do feat
="$$feat:$$f" ; done
; \
232 for lang in
`echo $(VOICELANGUAGE) |sed "s/,/ /g"`; do
$(TOOLSDIR
)/voice.pl
-V
-l
=$$lang -t
=$(MODELNAME
)$$feat -i
=$(TARGET_ID
) -e
="$(ENCODER)" -E
="$(ENC_OPTS)" -s
=$(TTS_ENGINE
) -S
="$(TTS_OPTS)"; done \
239 @echo
"Installing your build in your archos dir"
240 $(SILENT
)for f in
`cat $(BUILDDIR)/apps/features`; do feat
="$$feat:$$f" ; done
; \
241 $(TOOLSDIR
)/buildzip.pl
$(VERBOSEOPT
) -t
\"$(MODELNAME
)$$feat\" -i
\"$(TARGET_ID
)\" -s
-r
"$(ROOTDIR)" -f
0 $(TARGET
) $(BINARY
)
244 @echo
"Installing a full setup in your archos dir"
245 $(SILENT
)for f in
`cat $(BUILDDIR)/apps/features`; do feat
="$$feat:$$f" ; done
; \
246 $(TOOLSDIR
)/buildzip.pl
$(VERBOSEOPT
) -t
\"$(MODELNAME
)$$feat\" -i
\"$(TARGET_ID
)\" -s
-r
"$(ROOTDIR)" -f
2 $(TARGET
) $(BINARY
)
251 @echo
"A few helpful make targets"
253 @echo
"all - builds a full Rockbox (default), including tools"
254 @echo
"bin - builds only the Rockbox.<target name> file"
255 @echo
"rocks - builds only plugins"
256 @echo
"codecs - builds only codecs"
257 @echo
"dep - regenerates make dependency database"
258 @echo
"clean - cleans a build directory (not tools)"
259 @echo
"veryclean - cleans the build and tools directories"
260 @echo
"manual - builds a manual (pdf)"
261 @echo
"manual-html - HTML manual"
262 @echo
"manual-zip - HTML manual (zipped)"
263 @echo
"manual-txt - txt manual"
264 @echo
"fullzip - creates a rockbox.zip of your build with fonts"
265 @echo
"zip - creates a rockbox.zip of your build (no fonts)"
266 @echo
"gzip - creates a rockbox.tar.gz of your build (no fonts)"
267 @echo
"bzip2 - creates a rockbox.tar.bz2 of your build (no fonts)"
268 @echo
"7zip - creates a rockbox.7z of your build (no fonts)"
269 @echo
"fontzip - creates rockbox-fonts.zip"
270 @echo
"mapzip - creates rockbox-maps.zip with all .map files"
271 @echo
"tools - builds the tools only"
272 @echo
"voice - creates the voice clips (voice builds only)"
273 @echo
"voicetools - builds the voice tools only"
274 @echo
"install - installs your build (for simulator builds only, no fonts)"
275 @echo
"fullinstall - installs your build (for simulator builds only, with fonts)"
277 ### general compile rules:
279 # when source and object are in different locations (normal):
280 $(BUILDDIR
)/%.o
: $(ROOTDIR
)/%.c
281 $(SILENT
)mkdir
-p
$(dir $@
)
282 $(call PRINTS
,CC
$(subst $(ROOTDIR
)/,,$<))$(CC
) $(CFLAGS
) -c
$< -o
$@
284 $(BUILDDIR
)/%.o
: $(ROOTDIR
)/%.S
285 $(SILENT
)mkdir
-p
$(dir $@
)
286 $(call PRINTS
,CC
$(subst $(ROOTDIR
)/,,$<))$(CC
) $(CFLAGS
) -c
$< -o
$@
288 # when source and object are both in BUILDDIR (generated code):
290 $(SILENT
)mkdir
-p
$(dir $@
)
291 $(call PRINTS
,CC
$(subst $(ROOTDIR
)/,,$<))$(CC
) $(CFLAGS
) -c
$< -o
$@
294 $(SILENT
)mkdir
-p
$(dir $@
)
295 $(call PRINTS
,CC
$(subst $(ROOTDIR
)/,,$<))$(CC
) $(CFLAGS
) -c
$< -o
$@