aboutsummaryrefslogtreecommitdiff
path: root/makefile
blob: 79217cc4f1cd63b2fd238e2dbba0ff9eb65306ac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
$(eval MAK_DIR = $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))))
$(eval SRC_DIR = $(shell dir=$(MAK_DIR);while [ `basename $$dir` != src ];do dir=`dirname $$dir`;done;echo $$dir))

ifeq ($(shell test -f $(SRC_DIR)/options.mak && echo exists), exists)
    include $(SRC_DIR)/options.mak
endif
include options.mak

APP_NAME = blink
APP_OBJS = $(BUILD_DIR)/$(APP_NAME).o
ARMEN_DIR = $(SRC_DIR)/armen/armen
ifdef BUILD_PREFIX
    BUILD_DIR = $(BUILD_PREFIX)/armen/$(APP_NAME)/$(MODEL)/$(T_CPU)
else
    BUILD_DIR = build/$(MODEL)/$(T_CPU)
endif

ifeq ($(MODEL), arduino)
    F_CPU = 16000000UL
    PRGFLAGS += -b 115200 -P /dev/ttyACM0
    ifeq ($(T_CPU), atmega2560)
        PRGFLAGS += -c wiring
    else
        T_CPU = atmega328p
        PRGFLAGS += -c arduino
    endif
else
    PRGFLAGS += -P /dev/usbasp -c usbasp
endif

.PHONY: all clean cleanall install list size
.DEFAULT_GOAL := all

ARMEN_FLAGS += -DCHECK_PARAM
include $(ARMEN_DIR)/armen.mak

CFLAGS += -DF_CPU=$(F_CPU)
ASFLAGS += -DF_CPU=$(F_CPU)
INCFLAGS = -I. -I$(ARMEN_DIR)
PRGFLAGS += -c $(PRGTYPE)
ifeq ($(MODEL), simu)
    CFLAGS += -Wa,-gstabs
    ASFLAGS += -g3 -gdwarf-2
endif

all: $(BUILD_DIR)/$(APP_NAME).elf $(BUILD_DIR)/$(APP_NAME).hex

$(BUILD_DIR)/$(APP_NAME).elf: $(ARMEN_OBJS) $(APP_OBJS)
	@if [ ! -d $(BUILD_DIR) ]; then mkdir -p $(BUILD_DIR); fi
	$(CC) $(CFLAGS) -o $@ $^

$(BUILD_DIR)/$(APP_NAME).o: $(MAK_DIR)/$(APP_NAME).c $(ARMEN_DIR)/armen.h
	@if [ ! -d $(BUILD_DIR) ]; then mkdir -p $(BUILD_DIR); fi
	$(CC) $(CFLAGS) $(OPTFLAGS) $(ARMEN_FLAGS) $(INCFLAGS) -c -o $@ $<

clean:
	@rm -f $(BUILD_DIR)/*.o $(BUILD_DIR)/*.lst

cleanall:
	@rm -fr $(BUILD_DIR)

install: $(BUILD_DIR)/$(APP_NAME).hex
	@$(PRG) $(PRGFLAGS) -U flash:w:$<

list: $(BUILD_DIR)/$(APP_NAME).lst

size: $(BUILD_DIR)/$(APP_NAME).elf
	@text=`$(FS) $< | tail -1 | awk '{print $$1}'`;\
	data=`$(FS) $< | tail -1 | awk '{print $$2}'`;\
	bss=`$(FS) $< | tail -1 | awk '{print $$3}'`;\
	total=`expr $$text + $$data + $$bss`;\
	echo `basename $<`" --> text:$$text + data:$$data + bss:$$bss = $$total bytes"

ifeq ($(MODEL), simu)
simu: $(BUILD_DIR)/$(APP_NAME).hex
	@$(SIM) -g -m $(T_CPU) -f `echo $(F_CPU)|cut -d'U' -f1` $< & SIMPID=$$!;\
	echo "target remote localhost:1234" >.gdbinit; sleep 1;\
        $(DBG) -q -d . -d ./avr $(BUILD_DIR)/$(APP_NAME).elf;\
	kill -9 $$SIMPID; rm -f .gdbinit
endif