aboutsummaryrefslogtreecommitdiffstats
path: root/Makefile
blob: 60a74902d62bef460070cfa35db50e71d32c5394 (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
138
139
140
141
142
CROSS = arm-none-eabi-
CC = $(CROSS)gcc
CXX = $(CROSS)g++
OBJCOPY = $(CROSS)objcopy
NRFUTIL = adafruit-nrfutil

COMFLAGS = -DARDUINO=100 -DFLOAT_ABI_HARD \
	-DNRF52 -DNRF52832_XXAA -DS132 \
	-Wno-register

MCUFLAGS = -mcpu=cortex-m4 -mthumb -mabi=aapcs \
	-mfloat-abi=hard -mfpu=fpv4-sp-d16 \
	-ffunction-sections -fdata-sections

CFLAGS = $(MCUFLAGS) --std=gnu99
CXXFLAGS = $(MCUFLAGS) --std=c++17 -fno-builtin -fno-exceptions \
	-fno-strict-aliasing

SFLAGS = $(MCUFLAGS) -x assembler-with-cpp \
	-DCONFIG_GPIO_AS_PINRESET \
	-DBLE_STACK_SUPPORT_REQD \
	-DBSP_DEFINES_ONLY \
	-DSWI_DISABLE0 \
	-DSOFTDEVICE_PRESENT

SSRC = $(ARDUINO)/cores/nRF5/linker/gcc_startup_nrf52.S

CSRC = $(wildcard $(ARDUINO)/cores/nRF5/freertos/Source/*.c) \
	$(ARDUINO)/cores/nRF5/freertos/portable/CMSIS/nrf52/port_cmsis.c \
	$(ARDUINO)/cores/nRF5/freertos/portable/CMSIS/nrf52/port_cmsis_systick.c \
	$(ARDUINO)/cores/nRF5/freertos/portable/GCC/nrf52/port.c \
	$(ARDUINO)/cores/nRF5/freertos/Source/portable/MemMang/heap_3.c \
	$(ARDUINO)/cores/nRF5/flash/flash_nrf5x.c \
	$(ARDUINO)/cores/nRF5/flash/flash_cache.c \
	$(ARDUINO)/cores/nRF5/nordic/nrfx/mdk/system_nrf52.c \
	$(ARDUINO)/cores/nRF5/wiring.c \
	$(ARDUINO)/cores/nRF5/wiring_digital.c \
	$(ARDUINO)/libraries/FileSystem/src/littlefs/lfs.c \
	$(ARDUINO)/libraries/FileSystem/src/littlefs/lfs_util.c \
	$(ARDUINO)/libraries/Bluefruit52Lib/src/utility/bootloader_util.c \
	drivers_nrf/nrf_drv_common.c \
	drivers_nrf/rtc/nrf_drv_rtc.c

CXXSRC = $(wildcard source/*.cpp) \
	$(wildcard source/sharp/*.cpp) \
	$(ARDUINO)/libraries/Bluefruit52Lib/src/BLEAdvertising.cpp \
	$(ARDUINO)/libraries/Bluefruit52Lib/src/BLECentral.cpp \
	$(ARDUINO)/libraries/Bluefruit52Lib/src/BLECharacteristic.cpp \
	$(ARDUINO)/libraries/Bluefruit52Lib/src/BLEClientCharacteristic.cpp \
	$(ARDUINO)/libraries/Bluefruit52Lib/src/BLEClientService.cpp \
	$(ARDUINO)/libraries/Bluefruit52Lib/src/BLEDiscovery.cpp \
	$(ARDUINO)/libraries/Bluefruit52Lib/src/BLEGap.cpp \
	$(ARDUINO)/libraries/Bluefruit52Lib/src/BLEGatt.cpp \
	$(ARDUINO)/libraries/Bluefruit52Lib/src/BLEService.cpp \
	$(ARDUINO)/libraries/Bluefruit52Lib/src/BLEScanner.cpp \
	$(ARDUINO)/libraries/Bluefruit52Lib/src/BLEUuid.cpp \
	$(ARDUINO)/libraries/Bluefruit52Lib/src/bluefruit.cpp \
	$(ARDUINO)/libraries/Bluefruit52Lib/src/services/BLEUart.cpp \
	$(ARDUINO)/libraries/Bluefruit52Lib/src/services/BLEDfu.cpp \
	$(ARDUINO)/libraries/Bluefruit52Lib/src/utility/bonding.cpp \
	$(ARDUINO)/libraries/Bluefruit52Lib/src/utility/AdaMsg.cpp \
	$(ARDUINO)/libraries/SoftwareSerial/SoftwareSerial.cpp \
	$(ARDUINO)/libraries/FileSystem/src/InternalFS.cpp \
	$(ARDUINO)/libraries/FileSystem/src/Bluefruit_FileIO.cpp \
	$(ARDUINO)/variants/feather_nrf52832/variant.cpp \
	$(ARDUINO)/cores/nRF5/utility/adafruit_fifo.cpp \
	$(ARDUINO)/cores/nRF5/delay.cpp \
	$(ARDUINO)/cores/nRF5/Print.cpp \
	$(ARDUINO)/cores/nRF5/RingBuffer.cpp \
	$(ARDUINO)/cores/nRF5/Uart.cpp \
	$(ARDUINO)/cores/nRF5/rtos.cpp \
	$(ARDUINO)/cores/nRF5/utility/AdaCallback.cpp \
	$(ARDUINO)/cores/nRF5/main.cpp

OBJ = $(patsubst %.cpp, %.o, $(CXXSRC)) \
      $(patsubst %.c, %.o, $(CSRC)) \
      $(patsubst %.S, %.o, $(SSRC))
OUTELF = main.elf
OUTHEX = $(patsubst %.elf, %.hex, $(OUTELF))
OUTDFU = $(patsubst %.elf, %_dfu.zip, $(OUTELF))

ARDUINO = arduino
INCLUDES = -I$(ARDUINO)/libraries/Bluefruit52Lib/src \
	-I$(ARDUINO)/libraries/SoftwareSerial \
	-I$(ARDUINO)/libraries/FileSystem/src \
	-I$(ARDUINO)/cores/nRF5 \
	-I$(ARDUINO)/cores/nRF5/nordic \
	-I$(ARDUINO)/cores/nRF5/nordic/nrfx \
	-I$(ARDUINO)/cores/nRF5/nordic/nrfx/hal \
	-I$(ARDUINO)/cores/nRF5/nordic/nrfx/mdk \
	-I$(ARDUINO)/cores/nRF5/cmsis/include \
	-I$(ARDUINO)/cores/nRF5/nordic/softdevice/s132_nrf52_6.1.1_API/include \
	-I$(ARDUINO)/cores/nRF5/freertos/config \
	-I$(ARDUINO)/cores/nRF5/freertos/Source/include \
	-I$(ARDUINO)/cores/nRF5/freertos/portable/CMSIS/nrf52 \
	-I$(ARDUINO)/cores/nRF5/freertos/portable/GCC/nrf52 \
	-I$(ARDUINO)/variants/feather_nrf52832 \
	-Isource/sharp \
	-Idrivers_nrf

all: $(OUTELF) $(OUTHEX) $(OUTDFU)

$(OUTELF): $(OBJ)
	@echo "  LINK  " $(OUTELF)
	@$(CXX) $(MCUFLAGS) -Wl,--gc-sections --specs=nano.specs -lc -lnosys \
		-L$(ARDUINO)/cores/nRF5/linker \
		-T$(ARDUINO)/cores/nRF5/linker/nrf52832_s132_v6.ld \
		$(OBJ) -o $(OUTELF)

$(OUTHEX): $(OUTELF)
	@echo "        " $(OUTHEX)
	@$(OBJCOPY) $(OUTELF) -Oihex $(OUTHEX)

$(OUTDFU): $(OUTHEX)
	@echo "        " $(OUTDFU)
	@$(NRFUTIL) dfu genpkg --dev-type 0x0052 --application $(OUTHEX) \
		$(OUTDFU)

cleancpp:
	@echo "  CLEAN"
	@rm -f $(OBJ) $(OUTELF) $(OUTHEX) $(OUTDFU)

clean:
	@echo "  CLEAN"
	@rm -f $(OBJ) $(OUTELF) $(OUTHEX) $(OUTDFU)

upload: $(OUTDFU)
	@echo "Uploading: " $(OUTDFU)
	@$(NRFUTIL) dfu serial --package $(OUTDFU) -p /dev/ttyUSB0 -b 115200

%.o: %.cpp
	@echo "  CXX   " $<
	@$(CXX) $(COMFLAGS) $(CXXFLAGS) $(INCLUDES) -c $< -o $@

%.o: %.c
	@echo "  CC    " $<
	@$(CC) $(COMFLAGS) $(CFLAGS) $(INCLUDES) -c $< -o $@

%.o: %.S
	@echo "  AS    " $<
	@$(CC) $(COMFLAGS) $(SFLAGS) -c $< -o $@