Subversion Repositories freemyipod

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 theseven 1
NAME := embios
2
TARGETS := ipodnano2g
3
 
4
CROSS   := arm-none-eabi-
5
CC      := $(CROSS)gcc
6
AS      := $(CROSS)as
7
LD      := $(CROSS)ld
8
OBJCOPY := $(CROSS)objcopy
9
UCLPACK := ucl2e10singleblk
10
 
11
CFLAGS  ?= -Os -fno-pie -fno-stack-protector -fomit-frame-pointer -I. -ffunction-sections -fdata-sections
12
LDFLAGS ?= "$(shell $(CC) -print-libgcc-file-name)" --gc-sections
13
 
14
preprocess = $(shell $(CC) $(PPCFLAGS) $(2) -E -P -x c $(1) | grep -v "^\#" | sed -e "s:^..*:$(dir $(1))&:")
15
 
16
define TARGET_template
5 theseven 17
SRC_$(1) := $$(call preprocess,SOURCES,-DTARGET_$(1))
2 theseven 18
OBJ_$(1) := $$(SRC_$(1):%.c=build/$(1)/%.o)
19
OBJ_$(1) := $$(OBJ_$(1):%.S=build/$(1)/%.o)
20
 
21
-include $$(OBJ_$(1):%=%.dep)
22
 
23
$(1): build/$(1)/$(NAME)-$(1).ucl
24
 
25
build/$(1)/$(NAME)-$(1).ucl: build/$(1)/$(NAME).bin
26
	$(UCLPACK) $$^ $$@
27
 
28
build/$(1)/$(NAME).bin: build/$(1)/$(NAME).elf
29
	$(OBJCOPY) -O binary $$^ $$@
30
 
31
build/$(1)/$(NAME).elf: target/$(1)/ls.x build/$(1)/target/$(1)/crt0.o $$(OBJ_$(1))
32
	$(LD) $(LDFLAGS) -o $$@ -T target/$(1)/ls.x $$(OBJ_$(1))
33
 
34
build/$(1)/%.o: %.c
35
ifeq ($(shell uname),WindowsNT)
36
	@-if not exist $$(subst /,\,$$(dir $$@)) md $$(subst /,\,$$(dir $$@))
37
else
38
	@-mkdir -p $$(dir $$@)
39
endif
5 theseven 40
	$(CC) -c $(CFLAGS) -Itarget/$(1) -DTARGET_$(1) -o $$@ $$<
41
	@$(CC) -MM $(CFLAGS) -Itarget/$(1) -DTARGET_$(1) $$< > $$@.dep
2 theseven 42
	@mv -f $$@.dep $$@.dep.tmp
43
	@sed -e "s|.*:|$$@:|" < $$@.dep.tmp > $$@.dep
4 farthen 44
	@sed -e "s/.*://" -e "s/\\\\\\\\$$$$//" < $$@.dep.tmp | fmt -1 | sed -e "s/^ *//" -e "s/$$$$/:/" >> $$@.dep
2 theseven 45
	@rm -f $$@.dep.tmp
46
 
47
build/$(1)/%.o: %.S
48
ifeq ($(shell uname),WindowsNT)
49
	@-if not exist $$(subst /,\,$$(dir $$@)) md $$(subst /,\,$$(dir $$@))
50
else
51
	@-mkdir -p $$(dir $$@)
52
endif
5 theseven 53
	$(CC) -c $(CFLAGS) -Itarget/$(1) -DTARGET_$(1) -o $$@ $$<
54
	@$(CC) -MM $(CFLAGS) -Itarget/$(1) -DTARGET_$(1) $$< > $$@.dep
2 theseven 55
	@mv -f $$@.dep $$@.dep.tmp
56
	@sed -e "s|.*:|$$@:|" < $$@.dep.tmp > $$@.dep
4 farthen 57
	@sed -e "s/.*://" -e "s/\\\\\\\\$$$$//" < $$@.dep.tmp | fmt -1 | sed -e "s/^ *//" -e "s/$$$$/:/" >> $$@.dep
2 theseven 58
	@rm -f $$@.dep.tmp
59
endef
60
 
61
all: $(TARGETS)
62
 
63
$(foreach target,$(TARGETS),$(eval $(call TARGET_template,$(target))))
64
 
65
clean:
66
	rm -rf build
67
 
68
.PHONY: all clean $(TARGETS)