Statistics
| Branch: | Tag: | Revision:

root / tidsense / Makefile @ 166:1a6a85e8d2e7

History | View | Annotate | Download (4.5 kB)

1
# Tidmarsh Sensor Node Source Code
2
# Brian Mayton <bmayton@media.mit.edu>
3
# Responsive Environments Group
4
# (c) 2012-2014 Massachusetts Institute of Technology
5
6
-include config.mk
7
8
# Build tools; set TOOLCHAIN to the path to the Atmel GCC toolchain you 
9
# unzipped, or leave blank if the tools are installed in your $PATH
10
11
TOOLCHAIN ?= ~/avr8-gnu-toolchain-linux_x86_64/bin/
12
13
PROGRAMMER ?= jtag2pdi
14
CC = $(TOOLCHAIN)avr-gcc
15
OBJCOPY = $(TOOLCHAIN)avr-objcopy
16
AR = $(TOOLCHAIN)avr-ar
17
AVR_SIZE = $(TOOLCHAIN)avr-size
18
AVRDUDE ?= avrdude
19
20
21
# Application configuration
22
23
APP = tidsense
24
APP_OBJECTS = \
25
	tidsense.o \
26
    debug.o \
27
    power.o \
28
    sysclock.o \
29
	dma.o \
30
    led.o \
31
    nv.o \
32
    sensors.o \
33
    adc.o \
34
	analog.o \
35
    i2cmaster.o \
36
	spi.o \
37
	vs1063.o \
38
	vs1063_encpatches.o \
39
	network.o \
40
	command.o \
41
	ota.o \
42
	version.o \
43
	scheduler.o \
44
	assoc.o \
45
	uart.o \
46
	event.o \
47
	report.o \
48
	audio_power.o \
49
50
SENSOR_OBJECTS_V2 = \
51
	board_v2.o \
52
	sht21.o \
53
	isl29023.o \
54
	bmp180.o \
55
	lt3652.o \
56
	adxl362.o \
57
	vwc.o \
58
	tx22u.o
59
60
# Atmel Lightweight Mesh framework
61
62
LWM_HAL = atxmegaA4
63
LWM_PHY = at86rf231
64
65
LWM_INCLUDE_DIRS = \
66
	lwm/hal/$(LWM_HAL)/inc \
67
	lwm/hal/drivers/$(LWM_HAL) \
68
	lwm/phy/$(LWM_PHY)/inc \
69
	lwm/sys/inc \
70
	lwm/nwk/inc
71
	
72
LWM_HAL_OBJECTS = \
73
	lwm/hal/$(LWM_HAL)/src/hal.o \
74
	lwm/hal/$(LWM_HAL)/src/halPhy.o \
75
	lwm/hal/drivers/$(LWM_HAL)/halSleep.o \
76
	lwm/hal/$(LWM_HAL)/src/halTimer.o \
77
	lwm/hal/drivers/$(LWM_HAL)/halUart.o
78
79
LWM_PHY_OBJECTS = \
80
	lwm/phy/$(LWM_PHY)/src/phy.o
81
82
LWM_SYS_OBJECTS = \
83
	lwm/sys/src/sys.o \
84
	lwm/sys/src/sysEncrypt.o \
85
	lwm/sys/src/sysTimer.o
86
87
LWM_NWK_OBJECTS = \
88
	lwm/nwk/src/nwk.o \
89
	lwm/nwk/src/nwkRouteDiscovery.o \
90
	lwm/nwk/src/nwkRoute.o \
91
	lwm/nwk/src/nwkRx.o \
92
	lwm/nwk/src/nwkDataReq.o \
93
	lwm/nwk/src/nwkFrame.o \
94
	lwm/nwk/src/nwkGroup.o \
95
	lwm/nwk/src/nwkSecurity.o \
96
	lwm/nwk/src/nwkTx.o
97
98
LWM_OBJECTS = \
99
	$(LWM_HAL_OBJECTS) \
100
	$(LWM_PHY_OBJECTS) \
101
	$(LWM_SYS_OBJECTS) \
102
	$(LWM_NWK_OBJECTS) 
103
104
OBJECTS = $(APP_OBJECTS) $(LWM_OBJECTS)
105
106
107
# Board-specific code (sensor set, etc.) differs between two PCB revs
108
109
ADDR ?= 0x811F
110
VERSION ?= 2
111
112
ifeq ($(VERSION),2)
113
	MCU = atxmega128a4u
114
	OBJECTS += $(SENSOR_OBJECTS_V2)
115
	CFLAGS += -DBOARD_V2
116
	APPTABLE_START = 0x1E000
117
endif
118
119
GENERATED_HEADERS = 
120
121
# Build tool configuration
122
123
INCLUDE_FLAGS = $(patsubst %,-I%,$(LWM_INCLUDE_DIRS))
124
CFLAGS += -mmcu=$(MCU) -Wall -I. -funsigned-char -funsigned-bitfields \
125
	-fpack-struct -fshort-enums -fno-strict-aliasing -Os -DXMEGA -DAVR -std=gnu99 \
126
	$(INCLUDE_FLAGS) -DAPP_ADDR=$(ADDR) 
127
128
	
129
LDFLAGS=-mmcu=$(MCU) -Wl,-section-start=.apptable=$(APPTABLE_START)
130
131
# miscellaneous Makefile options
132
133
SHELL:=/bin/bash
134
export SHELLOPTS:=pipefail
135
.PHONY: clean app all fuses
136
export
137
138
# targets
139
140
all: app
141
142
# Rules for building the application
143
144
app: lwm $(APP).hex $(APP).eep
145
146
%.hex: %.elf
147
	$(OBJCOPY) -j .text -j .data -j .apptable -O ihex $< $@
148
149
%.eep: %.elf
150
	$(OBJCOPY) -j .eeprom -O binary $< $@
151
152
%.tbl: %.elf
153
	$(OBJCOPY) -j .apptable -O ihex $< $@
154
155
$(APP).elf: $(OBJECTS)
156
	$(CC) $(LDFLAGS) -o $@ $^ -lm 2>&1 | util/hl
157
	$(AVR_SIZE) -C --mcu=$(MCU) $@
158
	$(AVR_SIZE) --mcu=$(MCU) $@
159
160
$(APP).bin: $(APP).elf
161
	$(OBJCOPY) -j .text -j .data -j .apptable -O binary $< $@
162
163
.PHONY: image
164
image: $(APP).img
165
166
$(APP).img: $(APP).bin version.bin
167
	util/make_image version.bin $< $@
168
169
%.o: %.c $(GENERATED_HEADERS)
170
	$(CC) $(CFLAGS) -c $< -o $@ 2>&1 | util/hl
171
172
version.o: version.c version.h .FORCE
173
	$(CC) $(CFLAGS) -DREVISION=$(shell hg id -n | sed s/+//) \
174
		-DHASH="\"$(shell hg id -i)\"" -c $< -o $@
175
176
version.bin: version.o
177
	$(OBJCOPY) -O binary $< $@
178
	hexdump -C $@
179
180
install: $(APP).hex $(APP).tbl
181
	$(AVRDUDE) -p $(MCU) -c $(PROGRAMMER) -P usb -B 0.5 -U application:w:$< 
182
183
tblinstall: $(APP).tbl
184
	$(AVRDUDE) -p $(MCU) -c $(PROGRAMMER) -P usb -U flash:w:$(APP).tbl
185
186
nvinstall: $(APP).eep
187
	$(AVRDUDE) -p $(MCU) -c $(PROGRAMMER) -P usb -U eeprom:w:$<:r
188
189
.PHONY: usersig
190
usersig: 
191
	$(CC) $(CFLAGS) -c -o usersig.o usersig.c \
192
		2>&1 | util/hl
193
	$(OBJCOPY) -j .usersig -O binary usersig.o usersig.bin
194
	hexdump -C usersig.bin
195
	$(AVRDUDE) -p $(MCU) -c $(PROGRAMMER) -P usb \
196
		-U user:w:usersig.bin:r
197
198
fullinstall: $(APP).hex $(APP).eep
199
	$(AVRDUDE) -p $(MCU) -c $(PROGRAMMER) -P usb -e \
200
		-U flash:w:$(APP).hex \
201
		-U eeprom:w:$(APP).eep:r
202
203
lwm:
204
	hg clone http://simonetti.media.mit.edu/hg/lwm
205
206
.PHONY: reset
207
reset:
208
	$(AVRDUDE) -p $(MCU) -c $(PROGRAMMER) -P usb 
209
210
.PHONY: doxygen
211
doxygen:
212
	doxygen
213
214
.PHONY: .FORCE
215
.FORCE:
216
217
clean:
218
	rm -f *.o
219
	rm -f lwm/hal/$(LWM_HAL)/src/*.o
220
	rm -f lwm/hal/drivers/$(LWM_HAL)/*.o
221
	rm -f lwm/phy/$(LWM_PHY)/src/*.o
222
	rm -f lwm/sys/src/*.o
223
	rm -f lwm/nwk/src/*.o
224
	rm -f $(APP).{hex,elf,eep,tbl,bin,img}
225
	rm -rf doxygen/xml