Subversion Repositories freemyipod

Rev

Rev 727 | Rev 870 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
725 theseven 1
NAME := installer-ipodnano4g
2
STACKSIZE := 4096
3
COMPRESS := false
4
AUTOBUILD_FLASHFILES ?= true
5
 
6
EMCOREDIR ?= ../../emcore/trunk/
7
BOOTMENUDIR ?= ../bootmenu-ipodnano4g/
8
LIBBOOTDIR ?= ../../libs/boot/
9
LIBPNGDIR ?= ../../libs/png/
10
LIBUIDIR ?= ../../libs/ui/
11
LIBMKFAT32DIR ?= ../../libs/mkfat32/
12
UMSBOOTDIR ?= ../../umsboot/
13
TOOLSDIR ?= ../../tools/
14
 
15
FLASHFILES = flashfiles/boot.emcorelib flashfiles/png.emcorelib flashfiles/ui.emcorelib flashfiles/mkfat32.emcorelib \
16
             flashfiles/bootmenu-ipodnano4g.emcoreapp flashfiles/background.png flashfiles/icons.png flashfiles/rockbox.png \
17
             flashfiles/emcoreldr-ipodnano4g.bin flashfiles/emcore-ipodnano4g.ucl flashfiles/umsboot-ipodnano4g.ucl
18
 
19
ifeq ($(shell uname),WindowsNT)
20
CCACHE :=
21
else
22
CCACHE := $(shell which ccache)
23
endif
24
 
25
CROSS   ?= arm-elf-eabi-
26
CC      := $(CCACHE) $(CROSS)gcc
27
AS      := $(CROSS)as
28
LD      := $(CROSS)ld
29
OBJCOPY := $(CROSS)objcopy
30
ELF2ECA := $(CROSS)elf2emcoreapp
31
UCLPACK := ucl2e10singleblk
32
STUBEMBED := python tools/stubembed.py
33
EMCOREBOOTCFG := python $(EMCOREDIR)/tools/emcorebootcfg.py
34
EMCOREEMBEDAPP := python $(EMCOREDIR)/tools/emcoreembedapp.py
35
GENPWN := python $(EMCOREDIR)/tools/ipodcrypt.py s5l8720-genpwnage
36
 
37
LIBINCLUDES := -I$(LIBPNGDIR)/export -I$(LIBUIDIR)/export -I$(LIBMKFAT32DIR)/export
38
 
727 theseven 39
CFLAGS  += -Os -fno-pie -fno-stack-protector -fomit-frame-pointer -I. -I$(EMCOREDIR)/export $(LIBINCLUDES) -ffunction-sections -fdata-sections -mcpu=arm1176jz-s -DARM_ARCH=6
725 theseven 40
LDFLAGS += "$(shell $(CC) -print-libgcc-file-name)" --emit-relocs --gc-sections
41
 
42
preprocess = $(shell $(CC) $(PPCFLAGS) $(2) -E -P -x c $(1) | grep -v "^\#")
43
preprocesspaths = $(shell $(CC) $(PPCFLAGS) $(2) -E -P -x c $(1) | grep -v "^\#" | sed -e "s:^..*:$(dir $(1))&:" | sed -e "s:^\\./::")
44
 
45
REVISION := $(shell svnversion .)
46
REVISIONINT := $(shell echo $(REVISION) | sed -e "s/[^0-9].*$$//")
47
 
48
HELPERS := build/__emcore_armhelpers.o
49
 
50
SRC := $(call preprocesspaths,SOURCES,-I. -I..)
51
OBJ := $(SRC:%.c=build/%.o)
52
OBJ := $(OBJ:%.S=build/%.o) $(HELPERS)
53
 
54
all: $(NAME)
55
 
56
-include $(OBJ:%=%.dep)
57
 
58
$(NAME): build/bootstrap-ipodnano4g.dfu build/$(NAME).ubi
59
 
60
build/bootstrap-ipodnano4g.dfu: build/bootstrap.bin
61
	@echo [GENPWN] $<
62
	@$(GENPWN) $< $@
63
 
64
build/bootstrap.bin: build/bootstub.bin $(UMSBOOTDIR)/build/ipodnano4g/umsboot.bin
65
	@echo [STUBEM] $@
66
	@$(STUBEMBED) $^ $@
67
 
68
build/$(NAME).ubi: $(EMCOREDIR)/build/ipodnano4g/emcore.bin build/$(NAME).emcoreapp
69
	@echo [EMBAPP] $@
70
	@$(EMCOREEMBEDAPP) $^ $@
71
 
72
build/bootstub.bin: build/bootstub.elf
73
	@echo [OC]     $<
74
	@$(OBJCOPY) -O binary $^ $@
75
 
76
build/bootstub.elf: bootstub/ls.x build/bootstub/bootstub.o
77
	@echo [LD]     $@
78
	@$(LD) $(LDFLAGS) -o $@ -T bootstub/ls.x build/bootstub/bootstub.o
79
 
80
build/$(NAME).emcoreapp: build/$(NAME).elf
81
	@echo [EMCAPP] $<
82
ifeq ($(COMPRESS),true)
83
	@$(ELF2ECA) -z -s $(STACKSIZE) -o $@ $^
84
else
85
	@$(ELF2ECA) -s $(STACKSIZE) -o $@ $^
86
endif
87
 
88
ifeq ($(AUTOBUILD_FLASHFILES),true)
89
build/resources.o: $(FLASHFILES)
90
else
91
build/resources.o: flashfiles.built
92
endif
93
 
94
build/$(NAME).elf: ls.x $(OBJ)
95
	@echo [LD]     $@
96
	@$(LD) $(LDFLAGS) -o $@ -T ls.x $(OBJ)
97
 
98
build/%.o: %.c build/version.h
99
	@echo [CC]     $<
100
ifeq ($(shell uname),WindowsNT)
101
	@-if not exist $(subst /,\,$(dir $@)) md $(subst /,\,$(dir $@))
102
else
103
	@-mkdir -p $(dir $@)
104
endif
105
	@$(CC) -c $(CFLAGS) -o $@ $<
106
	@$(CC) -MM $(CFLAGS) $< > $@.dep.tmp
107
	@sed -e "s|.*:|$@:|" < $@.dep.tmp > $@.dep
108
ifeq ($(shell uname),WindowsNT)
109
	@sed -e "s/.*://" -e "s/\\$$//" < $@.dep.tmp | fmt -1 | sed -e "s/^ *//" -e "s/$$/:/" >> $@.dep
110
else
111
	@sed -e 's/.*://' -e 's/\\$$//' < $@.dep.tmp | fmt -1 | sed -e 's/^ *//' -e 's/$$/:/' >> $@.dep
112
endif
113
	@rm -f $@.dep.tmp
114
 
115
build/%.o: %.S build/version.h
116
	@echo [CC]     $<
117
ifeq ($(shell uname),WindowsNT)
118
	@-if not exist $(subst /,\,$(dir $@)) md $(subst /,\,$(dir $@))
119
else
120
	@-mkdir -p $(dir $@)
121
endif
122
	@$(CC) -c $(CFLAGS) -o $@ $<
123
	@$(CC) -MM $(CFLAGS) $< > $@.dep.tmp
124
	@sed -e "s|.*:|$@:|" < $@.dep.tmp > $@.dep
125
ifeq ($(shell uname),WindowsNT)
126
	@sed -e "s/.*://" -e "s/\\$$//" < $@.dep.tmp | fmt -1 | sed -e "s/^ *//" -e "s/$$/:/" >> $@.dep
127
else
128
	@sed -e 's/.*://' -e 's/\\$$//' < $@.dep.tmp | fmt -1 | sed -e 's/^ *//' -e 's/$$/:/' >> $@.dep
129
endif
130
	@rm -f $@.dep.tmp
131
 
132
build/__emcore_%.o: $(EMCOREDIR)/export/%.c
133
	@echo [CC]     $<
134
ifeq ($(shell uname),WindowsNT)
135
	@-if not exist $(subst /,\,$(dir $@)) md $(subst /,\,$(dir $@))
136
else
137
	@-mkdir -p $(dir $@)
138
endif
139
	@$(CC) -c $(CFLAGS) -o $@ $<
140
 
141
build/__emcore_%.o: $(EMCOREDIR)/export/%.S
142
	@echo [CC]     $<
143
ifeq ($(shell uname),WindowsNT)
144
	@-if not exist $(subst /,\,$(dir $@)) md $(subst /,\,$(dir $@))
145
else
146
	@-mkdir -p $(dir $@)
147
endif
148
	@$(CC) -c $(CFLAGS) -o $@ $<
149
 
150
build/version.h: version.h .svn/entries
151
	@echo [PP]     $<
152
ifeq ($(shell uname),WindowsNT)
153
	@-if not exist build md build
154
	@sed -e "s/\$$REVISION\$$/$(REVISION)/" -e "s/\$$REVISIONINT\$$/$(REVISIONINT)/" < $< > $@
155
else
156
	@-mkdir -p build
157
	@sed -e 's/\$$REVISION\$$/$(REVISION)/' -e 's/\$$REVISIONINT\$$/$(REVISIONINT)/' < $< > $@
158
endif
159
 
160
flashfiles: $(FLASHFILES)
161
	@touch flashfiles.built
162
 
163
$(LIBBOOTDIR)/build/boot.emcorelib: libboot
164
	@$(MAKE) -C $(LIBBOOTDIR)
165
 
166
flashfiles/boot.emcorelib: $(LIBBOOTDIR)/build/boot.emcorelib
167
	@echo [CP]     $@
168
	@cp $< $@
169
 
170
$(LIBPNGDIR)/build/png.emcorelib: libpng
171
	@$(MAKE) -C $(LIBPNGDIR)
172
 
173
flashfiles/png.emcorelib: $(LIBPNGDIR)/build/png.emcorelib
174
	@echo [CP]     $@
175
	@cp $< $@
176
 
177
$(LIBUIDIR)/build/ui.emcorelib: libui
178
	@$(MAKE) -C $(LIBUIDIR)
179
 
180
flashfiles/ui.emcorelib: $(LIBUIDIR)/build/ui.emcorelib
181
	@echo [CP]     $@
182
	@cp $< $@
183
 
184
$(LIBMKFAT32DIR)/build/mkfat32.emcorelib: libmkfat32
185
	@$(MAKE) -C $(LIBMKFAT32DIR)
186
 
187
flashfiles/mkfat32.emcorelib: $(LIBMKFAT32DIR)/build/mkfat32.emcorelib
188
	@echo [CP]     $@
189
	@cp $< $@
190
 
191
$(UMSBOOTDIR)/build/ipodnano4g/umsboot-ipodnano4g.ucl $(UMSBOOTDIR)/build/ipodnano4g/umsboot.bin: umsboot
192
	@$(MAKE) -C $(UMSBOOTDIR) ipodnano4g
193
 
194
flashfiles/umsboot-ipodnano4g.ucl: $(UMSBOOTDIR)/build/ipodnano4g/umsboot-ipodnano4g.ucl
195
	@echo [CP]     $@
196
	@cp $< $@
197
 
198
$(BOOTMENUDIR)/build/bootmenu-ipodnano4g.emcoreapp: bootmenu-ipodnano4g
199
	@$(MAKE) -C $(BOOTMENUDIR)
200
 
201
flashfiles/bootmenu-ipodnano4g.emcoreapp: $(BOOTMENUDIR)/build/bootmenu-ipodnano4g.emcoreapp
202
	@echo [CP]     $@
203
	@cp $< $@
204
 
205
flashfiles/background.png: $(BOOTMENUDIR)/images/background.png
206
	@echo [CP]     $@
207
	@cp $< $@
208
 
209
flashfiles/icons.png: $(BOOTMENUDIR)/images/icons.png
210
	@echo [CP]     $@
211
	@cp $< $@
212
 
213
flashfiles/rockbox.png: $(BOOTMENUDIR)/images/rockbox.png
214
	@echo [CP]     $@
215
	@cp $< $@
216
 
217
$(EMCOREDIR)/loader/ipodnano4g/build/emcoreldr-ipodnano4g.bin: emcoreldr-ipodnano4g
218
	@$(MAKE) -C $(EMCOREDIR)/loader/ipodnano4g
219
 
220
flashfiles/emcoreldr-ipodnano4g.bin: $(EMCOREDIR)/loader/ipodnano4g/build/emcoreldr-ipodnano4g.bin
221
	@echo [CP]     $@
222
	@cp $< $@
223
 
224
flashfiles/emcore-ipodnano4g.ucl: flashfiles/emcore-ipodnano4g.bin
225
	@echo [UCL]    $<
226
	@$(UCLPACK) $< $@
227
 
228
$(EMCOREDIR)/build/ipodnano4g/emcore.bin: emcore
229
	@$(MAKE) -C $(EMCOREDIR) ipodnano4g
230
 
231
flashfiles/emcore-ipodnano4g.bin: $(EMCOREDIR)/build/ipodnano4g/emcore.bin
232
	@echo [EMBCFG] $@
233
	@$(EMCOREBOOTCFG) $< $@ "(3, '/.boot/init.emcoreapp', None, (2, 'bootmenu', None, None))"
234
 
235
clean:
236
	@rm -rf build
237
 
238
.PHONY: all clean emcore emcoreldr-ipodnano4g bootmenu-ipodnano4g libboot libpng libui libmkfat32 umsboot libucl flashfiles $(NAME)