Subversion Repositories freemyipod

Rev

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

Rev Author Line No. Line
99 theseven 1
NAME := helloworld
454 theseven 2
STACKSIZE := 4096
491 theseven 3
COMPRESS := false
99 theseven 4
 
454 theseven 5
EMCOREDIR ?= ../../emcore/trunk/
491 theseven 6
LIBPNGDIR ?= ../../libs/png/
110 theseven 7
 
462 theseven 8
ifeq ($(shell uname),WindowsNT)
9
CCACHE :=
10
else
11
CCACHE := $(shell which ccache)
12
endif
13
 
454 theseven 14
CROSS   ?= arm-elf-eabi-
462 theseven 15
CC      := $(CCACHE) $(CROSS)gcc
99 theseven 16
AS      := $(CROSS)as
17
LD      := $(CROSS)ld
18
OBJCOPY := $(CROSS)objcopy
454 theseven 19
ELF2ECA := $(CROSS)elf2emcoreapp
99 theseven 20
 
491 theseven 21
LIBINCLUDES := -I$(LIBPNGDIR)/export 
489 theseven 22
 
491 theseven 23
CFLAGS  += -Os -fno-pie -fno-stack-protector -fomit-frame-pointer -I. -I$(EMCOREDIR)/export $(LIBINCLUDES) -ffunction-sections -fdata-sections -mcpu=arm940t -DARM_ARCH=4
24
LDFLAGS += "$(shell $(CC) -print-libgcc-file-name)" --emit-relocs --gc-sections
99 theseven 25
 
26
preprocess = $(shell $(CC) $(PPCFLAGS) $(2) -E -P -x c $(1) | grep -v "^\#")
27
preprocesspaths = $(shell $(CC) $(PPCFLAGS) $(2) -E -P -x c $(1) | grep -v "^\#" | sed -e "s:^..*:$(dir $(1))&:")
28
 
29
REVISION := $(shell svnversion .)
30
REVISIONINT := $(shell echo $(REVISION) | sed -e "s/[^0-9].*$$//")
31
 
454 theseven 32
HELPERS := build/__emcore_armhelpers.o
147 theseven 33
 
99 theseven 34
SRC := $(call preprocesspaths,SOURCES,-I. -I..)
35
OBJ := $(SRC:%.c=build/%.o)
147 theseven 36
OBJ := $(OBJ:%.S=build/%.o) $(HELPERS)
99 theseven 37
 
38
all: $(NAME)
39
 
40
-include $(OBJ:%=%.dep)
41
 
454 theseven 42
$(NAME): build/$(NAME).emcoreapp
99 theseven 43
 
454 theseven 44
build/$(NAME).emcoreapp: build/$(NAME).elf
489 theseven 45
	@echo [EMCAPP] $<
454 theseven 46
ifeq ($(COMPRESS),true)
47
	@$(ELF2ECA) -z -s $(STACKSIZE) -o $@ $^
48
else
49
	@$(ELF2ECA) -s $(STACKSIZE) -o $@ $^
50
endif
99 theseven 51
 
52
build/$(NAME).elf: ls.x $(OBJ)
458 theseven 53
	@echo [LD]     $@
111 theseven 54
	@$(LD) $(LDFLAGS) -o $@ -T ls.x $(OBJ)
99 theseven 55
 
56
build/%.o: %.c build/version.h
458 theseven 57
	@echo [CC]     $<
99 theseven 58
ifeq ($(shell uname),WindowsNT)
59
	@-if not exist $(subst /,\,$(dir $@)) md $(subst /,\,$(dir $@))
60
else
61
	@-mkdir -p $(dir $@)
62
endif
111 theseven 63
	@$(CC) -c $(CFLAGS) -o $@ $<
99 theseven 64
	@$(CC) -MM $(CFLAGS) $< > $@.dep.tmp
65
	@sed -e "s|.*:|$@:|" < $@.dep.tmp > $@.dep
66
ifeq ($(shell uname),WindowsNT)
67
	@sed -e "s/.*://" -e "s/\\$$//" < $@.dep.tmp | fmt -1 | sed -e "s/^ *//" -e "s/$$/:/" >> $@.dep
68
else
69
	@sed -e 's/.*://' -e 's/\\$$//' < $@.dep.tmp | fmt -1 | sed -e 's/^ *//' -e 's/$$/:/' >> $@.dep
70
endif
71
	@rm -f $@.dep.tmp
72
 
73
build/%.o: %.S build/version.h
458 theseven 74
	@echo [CC]     $<
99 theseven 75
ifeq ($(shell uname),WindowsNT)
76
	@-if not exist $(subst /,\,$(dir $@)) md $(subst /,\,$(dir $@))
77
else
78
	@-mkdir -p $(dir $@)
79
endif
111 theseven 80
	@$(CC) -c $(CFLAGS) -o $@ $<
99 theseven 81
	@$(CC) -MM $(CFLAGS) $< > $@.dep.tmp
82
	@sed -e "s|.*:|$@:|" < $@.dep.tmp > $@.dep
83
ifeq ($(shell uname),WindowsNT)
84
	@sed -e "s/.*://" -e "s/\\$$//" < $@.dep.tmp | fmt -1 | sed -e "s/^ *//" -e "s/$$/:/" >> $@.dep
85
else
86
	@sed -e 's/.*://' -e 's/\\$$//' < $@.dep.tmp | fmt -1 | sed -e 's/^ *//' -e 's/$$/:/' >> $@.dep
87
endif
88
	@rm -f $@.dep.tmp
89
 
491 theseven 90
build/__emcore_%.o: $(EMCOREDIR)/export/%.c
91
	@echo [CC]     $<
92
ifeq ($(shell uname),WindowsNT)
93
	@-if not exist $(subst /,\,$(dir $@)) md $(subst /,\,$(dir $@))
94
else
95
	@-mkdir -p $(dir $@)
96
endif
97
	@$(CC) -c $(CFLAGS) -o $@ $<
98
 
454 theseven 99
build/__emcore_%.o: $(EMCOREDIR)/export/%.S
458 theseven 100
	@echo [CC]     $<
147 theseven 101
ifeq ($(shell uname),WindowsNT)
102
	@-if not exist $(subst /,\,$(dir $@)) md $(subst /,\,$(dir $@))
103
else
104
	@-mkdir -p $(dir $@)
105
endif
106
	@$(CC) -c $(CFLAGS) -o $@ $<
107
 
99 theseven 108
build/version.h: version.h .svn/entries build
458 theseven 109
	@echo [PP]     $<
99 theseven 110
ifeq ($(shell uname),WindowsNT)
111
	@sed -e "s/\$$REVISION\$$/$(REVISION)/" -e "s/\$$REVISIONINT\$$/$(REVISIONINT)/" < $< > $@
112
else
113
	@sed -e 's/\$$REVISION\$$/$(REVISION)/' -e 's/\$$REVISIONINT\$$/$(REVISIONINT)/' < $< > $@
114
endif
115
 
116
build:
117
	@mkdir $@
118
 
119
clean:
120
	rm -rf build
121
 
122
.PHONY: all clean $(NAME)