summaryrefslogtreecommitdiff
path: root/Makefile
blob: 77f5cff3a3ee34d0d9037f999d2e7bfcf83c84bb (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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
export PYTHONPATH := $(PWD)/tools/nrfutil:$(PWD)/tools/intelhex:$(PYTHONPATH)

PYTHON ?= python3
PYTEST ?= pytest-3

all : bootloader reloader micropython

# If BOARD is undefined then set it up so that expanding it issues an
# error. That ensures that rules that expand BOARD will be automatically
# disabled (and give a useful error message) but it creates an additional
# problem which is that we must never unconditionally expand BOARD.
# We workaround this by using BOARD_SAFE for every unconditional
# expansion.
ifdef BOARD
BOARD_SAFE = $(BOARD)
endif
BOARD ?= $(error Please set BOARD=)
VERSION ?= $(patsubst v%,%,$(shell git describe --tags))

clean :
	$(RM) -r \
		bootloader/_build-$(BOARD)_nrf52832 \
		reloader/build-$(BOARD) reloader/src/boards/$(BOARD)/bootloader.h \
		micropython/mpy-cross/build \
		micropython/ports/nrf/build-$(BOARD)-s132 \
		wasp/boards/$(BOARD)/watch.py

# Avoid a recursive update... it grabs far too much
submodules :
	git submodule update --init
	(cd bootloader; git submodule update --init)
	(cd micropython/ports/nrf; $(MAKE) submodules)
	(cd reloader; git submodule update --init)
	(cd wasp/modules/bma42x-upy; git submodule update --init)

bootloader: build-$(BOARD_SAFE)
	$(RM) bootloader/_build-$(BOARD)_nrf52832//$(BOARD)_nrf52832_bootloader-*-nosd.hex
	$(MAKE) -C bootloader/ BOARD=$(BOARD)_nrf52832 all genhex
	$(PYTHON) tools/hexmerge.py \
		bootloader/_build-$(BOARD)_nrf52832/$(BOARD)_nrf52832_bootloader-*-nosd.hex \
		bootloader/lib/softdevice/s132_nrf52_6.1.1/s132_nrf52_6.1.1_softdevice.hex \
		-o build-$(BOARD)/bootloader.hex
	$(PYTHON) tools/hex2c.py build-$(BOARD)/bootloader.hex > \
		reloader/src/boards/$(BOARD)/bootloader.h
	$(PYTHON) -m nordicsemi dfu genpkg \
		--bootloader bootloader/_build-$(BOARD)_nrf52832//$(BOARD)_nrf52832_bootloader-*-nosd.hex \
		--softdevice bootloader/lib/softdevice/s132_nrf52_6.1.1/s132_nrf52_6.1.1_softdevice.hex \
		build-$(BOARD)/bootloader-daflasher.zip

reloader: bootloader build-$(BOARD_SAFE)
	$(MAKE) -C reloader/ BOARD=$(BOARD)
	cp reloader/build-$(BOARD)/reloader*.zip build-$(BOARD)

softdevice:
	micropython/ports/nrf/drivers/bluetooth/download_ble_stack.sh

wasp/boards/$(BOARD_SAFE)/watch.py : wasp/boards/$(BOARD_SAFE)/watch.py.in
	(cd wasp; ../tools/preprocess.py boards/$(BOARD)/watch.py.in > boards/$(BOARD)/watch.py) \
		|| ($(RM) wasp/boards/$(BOARD)/watch.py; false)

micropython: build-$(BOARD_SAFE) wasp/boards/$(BOARD_SAFE)/watch.py
	$(MAKE) -C micropython/mpy-cross
	$(RM) micropython/ports/nrf/build-$(BOARD)-s132/frozen_content.c
	$(MAKE) -C micropython/ports/nrf \
		BOARD=$(BOARD) SD=s132 \
		MICROPY_VFS_LFS2=1 \
		FROZEN_MANIFEST=$(PWD)/wasp/boards/$(BOARD)/manifest.py \
		USER_C_MODULES=$(PWD)/wasp/modules
	$(PYTHON) -m nordicsemi dfu genpkg \
		--dev-type 0x0052 \
		--application micropython/ports/nrf/build-$(BOARD)-s132/firmware.hex \
		build-$(BOARD)/micropython.zip

build-$(BOARD_SAFE):
	mkdir -p build-$(BOARD)

dfu:
	$(PYTHON) -m nordicsemi dfu serial --package micropython.zip --port /dev/ttyACM0

flash:
	pyocd erase -t nrf52 --mass
	pyocd flash -t nrf52 bootloader.hex

debug:
	arm-none-eabi-gdb \
		bootloader/_build-$(BOARD)_nrf52832/$(BOARD)_nrf52832_bootloader-*-nosd.out \
		-ex "target extended-remote /dev/ttyACM0" \
		-ex "monitor swdp_scan" \
		-ex "attach 1" \
		-ex "load"

docs:
	$(RM) -rf docs/build/html/*
	$(MAKE) -C docs html
	touch docs/build/html/.nojekyll

sim:
	PYTHONDONTWRITEBYTECODE=1 PYTHONPATH=.:wasp/boards/simulator:wasp \
	$(PYTHON) -i wasp/boards/simulator/main.py

ifeq ("$(origin K)", "command line")
  PYTEST_RESTRICT = -k '$(K)'
endif

check:
	PYTHONDONTWRITEBYTECODE=1 PYTHONPATH=.:wasp/boards/simulator:wasp \
	$(PYTEST) -v -W ignore $(PYTEST_RESTRICT) wasp/boards/simulator


.PHONY: bootloader reloader docs micropython

dist: DIST=../wasp-os-$(VERSION)
dist: k9
k9: p8
p8: pinetime
pinetime : mrproper
mrproper :
	$(RM) -r \
		$(DIST) build-* \
		bootloader/_build-* \
		reloader/build-* \
		reloader/src/boards/*/bootloader.h \
		micropython/mpy-cross/build \
		micropython/ports/nrf/build-*
k9 p8 pinetime:
	$(RM) wasp/boards/$@/watch.py
	$(MAKE) BOARD=$@ all
dist: docs
	mkdir -p $(DIST)/docs
	cp COPYING COPYING.LGPL README.rst $(DIST)
	cp -r docs/build/html/* $(DIST)/docs
	cp -r build-*/ $(DIST)
	cp -r tools/ $(DIST)
	(cd $(DIST); ln -s docs/_images/ res)
	find $(DIST) -name __pycache__ | xargs $(RM) -r
	tar -C .. -zcf $(DIST).tar.gz $(notdir $(DIST))
	(cd ..; zip -9r $(DIST).zip $(notdir $(DIST)))