4008-04-07 Release
[avr_bc100.git] / BaseMegaFirmware / GCC / default / Makefile
1 ###############################################################################\r
2 # Makefile for the project bc100_master\r
3 ###############################################################################\r
4 \r
5 ## General Flags\r
6 PROJECT = bc100_master\r
7 MCU = atmega644\r
8 TARGET = bc100_master.elf\r
9 CC = avr-gcc.exe\r
10 \r
11 ## Options common to compile, link and assembly rules\r
12 COMMON = -mmcu=$(MCU)\r
13 \r
14 ## Compile options common for all C compilation units.\r
15 CFLAGS = $(COMMON)\r
16 CFLAGS += -Wall -gdwarf-2 -std=gnu99           -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums\r
17 CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d \r
18 \r
19 ## Assembly specific flags\r
20 ASMFLAGS = $(COMMON)\r
21 ASMFLAGS += $(CFLAGS)\r
22 ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2\r
23 \r
24 ## Linker flags\r
25 LDFLAGS = $(COMMON)\r
26 LDFLAGS += -Wl,-u,vfprintf -lprintf_flt -Wl,-u,vfscanf -lscanf_flt -lm -Wl,-Map=bc100_master.map\r
27 \r
28 \r
29 ## Intel Hex file production flags\r
30 HEX_FLASH_FLAGS = -R .eeprom\r
31 \r
32 HEX_EEPROM_FLAGS = -j .eeprom\r
33 HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,load"\r
34 HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0 --no-change-warnings\r
35 \r
36 \r
37 ## Objects that must be built in order to link\r
38 OBJECTS = uart.o main.o mystdio.o spi.o bc100_slave.o port_ext.o timebase.o key_io.o \r
39 \r
40 ## Objects explicitly added by the user\r
41 LINKONLYOBJECTS = \r
42 \r
43 ## Build\r
44 all: $(TARGET) bc100_master.hex bc100_master.eep bc100_master.lss size\r
45 \r
46 ## Compile\r
47 uart.o: ../uart.c\r
48         $(CC) $(INCLUDES) $(CFLAGS) -c  $<\r
49 \r
50 main.o: ../main.c\r
51         $(CC) $(INCLUDES) $(CFLAGS) -c  $<\r
52 \r
53 mystdio.o: ../mystdio.c\r
54         $(CC) $(INCLUDES) $(CFLAGS) -c  $<\r
55 \r
56 spi.o: ../spi.c\r
57         $(CC) $(INCLUDES) $(CFLAGS) -c  $<\r
58 \r
59 bc100_slave.o: ../bc100_slave.c\r
60         $(CC) $(INCLUDES) $(CFLAGS) -c  $<\r
61 \r
62 port_ext.o: ../port_ext.c\r
63         $(CC) $(INCLUDES) $(CFLAGS) -c  $<\r
64 \r
65 timebase.o: ../timebase.c\r
66         $(CC) $(INCLUDES) $(CFLAGS) -c  $<\r
67 \r
68 key_io.o: ../key_io.c\r
69         $(CC) $(INCLUDES) $(CFLAGS) -c  $<\r
70 \r
71 ##Link\r
72 $(TARGET): $(OBJECTS)\r
73          $(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET)\r
74 \r
75 %.hex: $(TARGET)\r
76         avr-objcopy -O ihex $(HEX_FLASH_FLAGS)  $< $@\r
77 \r
78 %.eep: $(TARGET)\r
79         -avr-objcopy $(HEX_EEPROM_FLAGS) -O ihex $< $@ || exit 0\r
80 \r
81 %.lss: $(TARGET)\r
82         avr-objdump -h -S $< > $@\r
83 \r
84 size: ${TARGET}\r
85         @echo\r
86         @avr-size -C --mcu=${MCU} ${TARGET}\r
87 \r
88 ## Clean target\r
89 .PHONY: clean\r
90 clean:\r
91         -rm -rf $(OBJECTS) bc100_master.elf dep/* bc100_master.hex bc100_master.eep bc100_master.lss bc100_master.map\r
92 \r
93 \r
94 ## Other dependencies\r
95 -include $(shell mkdir dep 2>/dev/null) $(wildcard dep/*)\r
96 \r