Fixed "Error: SVC is not permitted on this architecture" error on newer ARM compilers
[nrf5x-base-fork.git] / make / Makefile
blob882bc731bfd181ebcccc21b59f4be9f77a986f3d
1 ################################################################################
2 ## Makefile for compiling apps against the nRF51 SDK
3 ################################################################################
5 ################################################################################
6 ## Usage
7 ##
8 ## In your application Makefile, set the following variables:
9 ## - APPLICATION_SRCS : List of all .c files to be compiled.
10 ## - LIBRARY_PATHS : List of directories with .h files
11 ## - SOURCE_PATHS : List of directories with .c files
12 ## - SOFTDEVICE_MODEL : s110 | s120 | s130 | s210 | s310 | or do not set for no softdevice
14 ## Optional
15 ## - SOFTDEVICE_VERSION : Full version number of the softdevice.
16 ## - SOFTDEVICE : Path to the softdevice to use
17 ## - START_CODE : .s file to execute first
18 ## - SYSTEM_FILE : Base nRF .c file.
19 ## - NRF_MODEL : nrf51 | nrf52 : Also set by the NRF_IC used
20 ## - NRF_IC : nrf51422 | nrf51802 | nrf51822 | nrf52832 | nrf52840
21 ## - BOARD : Hardware board being used. Will get set as #define.
22 ## - RAM_KB : Size of RAM on chip
23 ## - FLASH_KB : Size of flash on chip
24 ## - SDK_VERSION : Major version number of the SDK to use. Defaults to 10 for nrf51, 12 for nrf52
25 ## - GDB_PORT_NUMBER : Defaults to 2331
26 ## - USE_GZLL : link in the Gazell library and pairing source
27 ## - USE_GZP : include Gazell pairing source (implies USE_GZLL)
28 ## - USE_ESB : include the Enhanced ShockBurst source
31 ## Then at the end of the Makefile do something like:
32 ## NRF_BASE_PATH ?= ../../nrf5x-base
33 ## include $(NRF_BASE_PATH)/make/Makefile
35 # Helper for relative paths
36 BASE_DIR := $(dir $(lastword $(MAKEFILE_LIST)))..
38 # Setup the compilers to use
39 TOOLCHAIN_PREFIX ?= arm-none-eabi
40 AS = $(TOOLCHAIN_PATH)$(TOOLCHAIN_PREFIX)-as
41 CC = $(TOOLCHAIN_PATH)$(TOOLCHAIN_PREFIX)-gcc
42 LD = $(TOOLCHAIN_PATH)$(TOOLCHAIN_PREFIX)-gcc
43 OBJCOPY = $(TOOLCHAIN_PATH)$(TOOLCHAIN_PREFIX)-objcopy
44 OBJDUMP = $(TOOLCHAIN_PATH)$(TOOLCHAIN_PREFIX)-objdump
45 SIZE = $(TOOLCHAIN_PATH)$(TOOLCHAIN_PREFIX)-size
46 GDB = $(TOOLCHAIN_PATH)$(TOOLCHAIN_PREFIX)-gdb
48 # Set default board
49 BOARD ?= BOARD_NULL
51 # TODO: Guess NRF_MODEL from famous BOARD
54 # ---- Guess/Check NRF_MODEL from NRF_IC (if NRF_IC defined)
55 ifdef NRF_IC
56 #if NRF_IC == nrf51422 or nrf51802 or nrf51822
57 ifneq (,$(filter $(NRF_IC),nrf51422 nrf51802 nrf51822))
58 ifdef NRF_MODEL
59 ifneq ($(NRF_MODEL), nrf51)
60 $(error NRF_MODEL $(NRF_MODEL) is not valid for NRF_IC $(NRF_IC))
61 endif
62 endif
63 NRF_MODEL = nrf51
64 #else if NRF_IC == nrf52832 or nrf52840
65 else ifneq (,$(filter $(NRF_IC),nrf52832 nrf52840))
66 ifdef NRF_MODEL
67 ifneq ($(NRF_MODEL), nrf52)
68 $(error NRF_MODEL $(NRF_MODEL) is not valid for NRF_IC $(NRF_IC))
69 endif
70 endif
71 NRF_MODEL = nrf52
72 endif
73 endif
75 # ---- NRF_MODEL Default to nrf51
76 NRF_MODEL ?= nrf51
78 # ---- Force NRF_MODEL for OLD SDK
79 ifneq (,$(filter $(SDK_VERSION),9 10))
80 ifneq ($(NRF_MODEL), nrf51)
81 $(error NRF_MODEL $(NRF_MODEL) is not valid for SDK_VERSION $(SDK_VERSION))
82 endif
83 NRF_MODEL = nrf51
84 endif
86 # --- NRF_IC: Default to nrf51822 for nrf51
87 ifeq ($(NRF_MODEL), nrf51)
88 NRF_IC ?= nrf51822
89 # --- NRF_IC: Default to nrf52832 for nrf52
90 else ifeq ($(NRF_MODEL), nrf52)
91 NRF_IC ?= nrf52832
92 endif
95 # ---- Set hardware memory sizes
96 ifneq (,$(filter $(NRF_IC),nrf51422 nrf51802 nrf51822))
97 RAM_KB ?= 16# can be also 32
98 FLASH_KB ?= 256# can be also 128
99 else ifeq ($(NRF_IC), nrf52832)
100 RAM_KB ?= 64
101 FLASH_KB ?= 512
102 else ifeq ($(NRF_IC), nrf52840)
103 RAM_KB ?= 256
104 FLASH_KB ?= 1024
105 endif
107 # ---- Set SDK if not SET
108 # Default to SDK 10 for nrf51
109 ifeq ($(NRF_MODEL), nrf51)
110 SDK_VERSION ?= 10
111 # Default to SDK 12 for nrf52
112 else ifeq ($(NRF_MODEL), nrf52)
113 SDK_VERSION ?= 12
114 endif
117 # Set this for using GDB
118 GDB_PORT_NUMBER ?= 2331
121 #------ Now select/check SOFTDEVICE version if used (depending SDK version)
122 ifdef SOFTDEVICE_MODEL
123 # SDK 9 or 10
124 ifneq (,$(filter $(SDK_VERSION),9 10))
125 WAITED_NRF_MODEL = nrf51
126 ifeq ($(SOFTDEVICE_MODEL), s110)
127 USE_BLE = 1
128 SOFTDEVICE_VERSION ?= 8.0.0
129 WAITED_SOFTDEVICE_VERSION = 8.0.0
130 else ifeq ($(SOFTDEVICE_MODEL), s120)
131 USE_BLE = 1
132 SOFTDEVICE_VERSION ?= 2.1.0
133 WAITED_SOFTDEVICE_VERSION = 2.1.0
134 else ifeq ($(SOFTDEVICE_MODEL), s130)
135 USE_BLE = 1
136 SOFTDEVICE_VERSION ?= 1.0.0
137 WAITED_SOFTDEVICE_VERSION = 1.0.0
138 else ifeq ($(SOFTDEVICE_MODEL), s210)
139 # ANT only softDevice
140 SOFTDEVICE_VERSION ?= 5.0.0
141 WAITED_SOFTDEVICE_VERSION = 5.0.0
142 else ifeq ($(SOFTDEVICE_MODEL), s310)
143 USE_BLE = 1
144 SOFTDEVICE_VERSION ?= 3.0.0
145 WAITED_SOFTDEVICE_VERSION = 3.0.0
146 endif
147 endif
149 # SDK 11
150 ifeq ($(SDK_VERSION), 11)
151 ifeq ($(SOFTDEVICE_MODEL), s130)
152 USE_BLE = 1
153 SOFTDEVICE_VERSION ?= 2.0.0
154 WAITED_SOFTDEVICE_VERSION = 2.0.0
155 WAITED_NRF_MODEL = nrf51
156 else ifeq ($(SOFTDEVICE_MODEL), s132)
157 USE_BLE = 1
158 SOFTDEVICE_VERSION ?= 2.0.0
159 WAITED_SOFTDEVICE_VERSION = 2.0.0
160 WAITED_NRF_MODEL = nrf52
161 else ifeq ($(SOFTDEVICE_MODEL), s212)
162 # ANT only softDevice
163 SOFTDEVICE_VERSION ?= 0.9.1
164 WAITED_SOFTDEVICE_VERSION = 0.9.1
165 WAITED_NRF_MODEL = nrf52
166 else ifeq ($(SOFTDEVICE_MODEL), s332)
167 USE_BLE = 1
168 SOFTDEVICE_VERSION ?= 0.9.1
169 WAITED_SOFTDEVICE_VERSION = 0.9.1
170 WAITED_NRF_MODEL = nrf52
171 endif
172 endif
174 # SDK 12
175 ifeq ($(SDK_VERSION), 12)
176 ifeq ($(SOFTDEVICE_MODEL), s130)
177 USE_BLE = 1
178 SOFTDEVICE_VERSION ?= 2.0.1
179 WAITED_SOFTDEVICE_VERSION = 2.0.1
180 WAITED_NRF_MODEL = nrf51
181 else ifeq ($(SOFTDEVICE_MODEL), s132)
182 USE_BLE = 1
183 SOFTDEVICE_VERSION ?= 3.0.0
184 WAITED_SOFTDEVICE_VERSION = 3.0.0
185 WAITED_NRF_MODEL = nrf52
186 else ifeq ($(SOFTDEVICE_MODEL), s212)
187 # ANT only softDevice
188 SOFTDEVICE_VERSION ?= 2.0.0
189 WAITED_SOFTDEVICE_VERSION = 2.0.0
190 WAITED_NRF_MODEL = nrf52
191 else ifeq ($(SOFTDEVICE_MODEL), s332)
192 USE_BLE = 1
193 SOFTDEVICE_VERSION ?= 2.0.0
194 WAITED_SOFTDEVICE_VERSION = 2.0.0
195 WAITED_NRF_MODEL = nrf52
196 endif
197 endif
199 SOFTDEVICE_VERSION ?= $(WAITED_SOFTDEVICE_VERSION)
200 ifneq ($(SOFTDEVICE_VERSION), $(WAITED_SOFTDEVICE_VERSION))
201 $(error FOR SDK$(SDK_VERSION) Supported SoftDevice Version for $(SOFTDEVICE_MODEL) is $(WAITED_SOFTDEVICE_VERSION). You selected $(SOFTDEVICE_VERSION))
202 endif
204 ifneq ($(WAITED_NRF_MODEL), $(NRF_MODEL))
205 $(error SoftDevice $(SOFTDEVICE_MODEL) is only compatible with $(WAITED_NRF_MODEL). You selected $(SOFTDEVICE_MODEL))
206 endif
208 endif # ifdef SOFTDEVICE_MODEL
211 # Print some helpful info about what the user is compiling for
212 space :=
213 space +=
214 $(info BUILD OPTIONS:)
215 $(info $(space) SoftDevice $(SOFTDEVICE_MODEL))
216 $(info $(space) SDK $(SDK_VERSION))
217 $(info $(space) nRF $(NRF_IC))
218 $(info $(space) RAM $(RAM_KB) kB)
219 $(info $(space) FLASH $(FLASH_KB) kB)
220 $(info $(space) Board $(BOARD))
221 $(info $(space))
223 # Need capital letters for the device in GCC
224 DEVICE ?= $(shell echo $(NRF_MODEL) | tr a-z A-Z)
226 # Required files to compile
227 START_CODE ?= startup_$(NRF_MODEL).s
228 SYSTEM_FILE ?= system_$(NRF_MODEL).c
230 BOOTLOADER_REGION_START = $(addprefix 0x, $(shell echo "obase=16; (${FLASH_KB}-18)*1024" | bc ))
231 BOOTLOADER_SETTINGS_ADDRESS = $(addprefix 0x, $(shell echo "obase=16; (${FLASH_KB}-2)*1024" | bc))
233 # Need some common options for interacting with the chip over JTAG
234 ifeq ($(NRF_IC), nrf52832)
235 JLINK_OPTIONS = -device nrf52 -if swd -speed 1000
236 else
237 JLINK_OPTIONS = -device $(NRF_IC) -if swd -speed 1000
238 endif
240 # If not set in app makefile, lets optimize for size
241 CFLAGS += -Os
242 CFLAGS += -fomit-frame-pointer
244 # Add useful paths from nRF5x-base
245 LIBRARY_PATHS += $(BASE_DIR)/advertisement/
246 LIBRARY_PATHS += $(BASE_DIR)/devices/
247 LIBRARY_PATHS += $(BASE_DIR)/devices/tcmp441/
248 LIBRARY_PATHS += $(BASE_DIR)/devices/tcmp441/libqrencode/
249 LIBRARY_PATHS += $(BASE_DIR)/lib/
250 LIBRARY_PATHS += $(BASE_DIR)/lib/simple_logger/
251 LIBRARY_PATHS += $(BASE_DIR)/lib/simple_logger/chanfs
252 LIBRARY_PATHS += $(BASE_DIR)/lib/simple_logger/mem-ffs
253 LIBRARY_PATHS += $(BASE_DIR)/peripherals/
254 LIBRARY_PATHS += $(BASE_DIR)/services/
256 SOURCE_PATHS += $(BASE_DIR)/advertisement/
257 SOURCE_PATHS += $(BASE_DIR)/devices/
258 SOURCE_PATHS += $(BASE_DIR)/devices/tcmp441/
259 SOURCE_PATHS += $(BASE_DIR)/devices/tcmp441/libqrencode/
260 SOURCE_PATHS += $(BASE_DIR)/lib/
261 SOURCE_PATHS += $(BASE_DIR)/lib/simple_logger/
262 SOURCE_PATHS += $(BASE_DIR)/lib/simple_logger/chanfs
263 SOURCE_PATHS += $(BASE_DIR)/lib/simple_logger/mem-ffs
264 SOURCE_PATHS += $(BASE_DIR)/peripherals/
265 SOURCE_PATHS += $(BASE_DIR)/services/
266 SOURCE_PATHS += $(BASE_DIR)/startup/
268 # Add paths for each SDK version
269 ifeq ($(NRF_MODEL), $(filter $(NRF_MODEL),nrf51 nrf52))
270 ifeq ($(SDK_VERSION), 12)
272 # Set the path
273 SDK_PATH ?= $(BASE_DIR)/sdk/nrf5_sdk_12.2.0/
275 # Other knowns about the SDK paths
276 SDK_INCLUDE_PATH = $(SDK_PATH)components/
277 SDK_SOURCE_PATH = $(SDK_PATH)components/
278 CMSIS_INCLUDE_PATH = $(SDK_PATH)components/toolchain/gcc/
280 # Need to add the paths for all the directories in the SDK.
281 # Note that we do not use * because some folders have conflicting files.
282 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)libraries/*/)
283 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)libraries/*/src/)
284 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/adc/)
285 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/ble_flash/)
286 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/clock/)
287 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/common/)
288 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/delay/)
289 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/gpiote/)
290 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/hal/)
291 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/lpcomp/)
292 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/ppi/)
293 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/pstorage/)
294 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/pstorage/config/)
295 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/radio_config/)
296 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/rng/)
297 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/rtc/)
298 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/sdio/)
299 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/spi_master/)
300 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/spi_slave/)
301 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/swi/)
302 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/timer/)
303 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/twi_master/)
304 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/uart/)
305 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/wdt/)
306 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/validation/)
307 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_ext/*/)
308 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)device/)
309 LIBRARY_PATHS += $(SDK_INCLUDE_PATH)toolchain/gcc/
310 LIBRARY_PATHS += $(SDK_INCLUDE_PATH)toolchain/
311 LIBRARY_PATHS += $(SDK_INCLUDE_PATH)toolchain/cmsis/include/
313 SOURCE_PATHS += $(SDK_SOURCE_PATH)
314 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)*/)
315 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)libraries/*/)
316 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)libraries/*/src/)
317 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)drivers_nrf/*/)
318 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)drivers_ext/*/)
320 ifdef SERIALIZATION_MODE
321 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)serialization/*/)
322 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)serialization/common/transport/)
323 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)serialization/$(SERIALIZATION_MODE)/codecs/common/)
324 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)serialization/$(SERIALIZATION_MODE)/hal/)
325 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)serialization/$(SERIALIZATION_MODE)/transport/)
326 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)serialization/common/)
327 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)serialization/common/transport/ser_phy/)
328 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)serialization/common/transport/ser_phy/config/)
330 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)serialization/*/)
331 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)serialization/common/transport/)
332 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)serialization/$(SERIALIZATION_MODE)/codecs/common/)
333 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)serialization/$(SERIALIZATION_MODE)/hal/)
334 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)serialization/$(SERIALIZATION_MODE)/transport/)
335 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)serialization/common/)
336 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)serialization/common/transport/ser_phy/)
337 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)serialization/common/transport/ser_phy/config/)
339 # Add defines based on if we are "connectivity" or "application"
340 ifeq ($(SERIALIZATION_MODE), connectivity)
341 CFLAGS += -DSER_CONNECTIVITY -DAPP_SCHEDULER_WITH_PAUSE -DBLE_STACK_SUPPORT_REQD -DHCI_TIMER2 -DSOFTDEVICE_PRESENT
342 endif
343 ifeq ($(SERIALIZATION_MODE), application)
344 CFLAGS += -DSVCALL_AS_NORMAL_FUNCTION -DBLE_STACK_SUPPORT_REQD
345 endif
346 endif
348 ifdef USE_BLE
349 # How many central/peripherals are defined changes how much memory the
350 # softdevice requires. Change the amount of memory allotted in a custom ld
351 # file if your configuration is different than default.
353 ifeq ($(RAM_KB), 16)
354 # limit 16 kB RAM nRFs to only act as peripherals. Doing otherwise
355 # requires careful balancing of memory requirements and should be done
356 # manually, not automatically
357 CENTRAL_LINK_COUNT ?= 0
358 PERIPHERAL_LINK_COUNT ?= 1
359 else
360 CENTRAL_LINK_COUNT ?= 1
361 PERIPHERAL_LINK_COUNT ?= 1
362 endif
364 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)ble/*/)
365 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)ble/ble_services/*/)
366 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)ble/*/)
367 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)ble/ble_services/*/)
368 CFLAGS += -DBLE_STACK_SUPPORT_REQD -DSOFTDEVICE_PRESENT -DCENTRAL_LINK_COUNT=$(CENTRAL_LINK_COUNT) -DPERIPHERAL_LINK_COUNT=$(PERIPHERAL_LINK_COUNT)
369 endif
371 ifdef USE_ANT
372 CFLAGS += -DANT_STACK_SUPPORT_REQD
373 endif
375 ifdef USE_GZP
376 USE_GZLL = 1
377 SOURCE_PATHS += $(SDK_SOURCE_PATH)proprietary_rf/gzll
378 APPLICATION_SRCS += nrf_gzp.c
379 APPLICATION_SRCS += nrf_gzp_device.c
380 APPLICATION_SRCS += nrf_gzp_host.c
381 APPLICATION_SRCS += nrf_gzp_host_nrf5x.c
382 endif
384 ifdef USE_GZLL
385 LIBRARY_PATHS += $(SDK_INCLUDE_PATH)proprietary_rf/gzll
386 LIBS += $(SDK_INCLUDE_PATH)proprietary_rf/gzll/gcc/gzll_nrf51_sd_resources_gcc.a
387 endif
389 ifdef USE_ESB
390 SOURCE_PATHS += $(SDK_SOURCE_PATH)proprietary_rf/esb
391 APPLICATION_SRCS += nrf_esb.c
392 endif
394 ifdef ENABLE_WIRELESS_DFU
395 CFLAGS += -DENABLE_DFU
396 APPLICATION_SRCS += bootloader_util.c
397 endif
399 ifdef SOFTDEVICE_MODEL
400 LIBRARY_PATHS += $(SDK_INCLUDE_PATH)softdevice/common/softdevice_handler/
401 LIBRARY_PATHS += $(SDK_INCLUDE_PATH)softdevice/$(SOFTDEVICE_MODEL)/headers/
402 LIBRARY_PATHS += $(SDK_INCLUDE_PATH)softdevice/$(SOFTDEVICE_MODEL)/headers/nrf51
404 SOURCE_PATHS += $(SDK_SOURCE_PATH)softdevice/common/softdevice_handler/
405 SOURCE_PATHS += $(SDK_SOURCE_PATH)softdevice/$(SOFTDEVICE_MODEL)/headers/
406 SOURCE_PATHS += $(SDK_SOURCE_PATH)softdevice/$(SOFTDEVICE_MODEL)/headers/nrf51
408 ifdef SERIALIZATION_MODE
409 # Load the sources from the serialization library
410 LIBRARY_PATHS += $(SDK_INCLUDE_PATH)serialization/$(SERIALIZATION_MODE)/codecs/$(SOFTDEVICE_MODEL)/middleware/
411 LIBRARY_PATHS += $(SDK_INCLUDE_PATH)serialization/$(SERIALIZATION_MODE)/codecs/$(SOFTDEVICE_MODEL)/serializers/
412 LIBRARY_PATHS += $(SDK_INCLUDE_PATH)serialization/common/struct_ser/$(SOFTDEVICE_MODEL)/
414 SOURCE_PATHS += $(SDK_SOURCE_PATH)serialization/$(SERIALIZATION_MODE)/codecs/$(SOFTDEVICE_MODEL)/middleware/
415 SOURCE_PATHS += $(SDK_SOURCE_PATH)serialization/$(SERIALIZATION_MODE)/codecs/$(SOFTDEVICE_MODEL)/serializers/
416 SOURCE_PATHS += $(SDK_SOURCE_PATH)serialization/common/struct_ser/$(SOFTDEVICE_MODEL)/
417 endif
418 else
419 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/nrf_soc_nosd/)
420 SOFTDEVICE_MODEL = blank
421 endif
423 endif # SDK 12
425 ifeq ($(SDK_VERSION), 11)
427 # Set the path
428 SDK_PATH ?= $(BASE_DIR)/sdk/nrf51_sdk_11.0.0/
430 # Other knowns about the SDK paths
431 SDK_INCLUDE_PATH = $(SDK_PATH)components/
432 SDK_SOURCE_PATH = $(SDK_PATH)components/
433 CMSIS_INCLUDE_PATH = $(SDK_PATH)components/toolchain/gcc/
435 # Need to add the paths for all the directories in the SDK.
436 # Note that we do not use * because some folders have conflicting files.
437 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)libraries/*/)
438 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/adc/)
439 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/ble_flash/)
440 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/clock/)
441 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/common/)
442 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/delay/)
443 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/gpiote/)
444 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/hal/)
445 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/lpcomp/)
446 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/ppi/)
447 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/pstorage/)
448 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/pstorage/config/)
449 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/radio_config/)
450 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/rng/)
451 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/rtc/)
452 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/sdio/)
453 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/spi_master/)
454 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/spi_slave/)
455 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/swi/)
456 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/timer/)
457 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/twi_master/)
458 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/uart/)
459 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/wdt/)
460 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/validation/)
461 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_ext/*/)
462 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)device/)
463 LIBRARY_PATHS += $(SDK_INCLUDE_PATH)toolchain/gcc/
464 LIBRARY_PATHS += $(SDK_INCLUDE_PATH)toolchain/
465 LIBRARY_PATHS += $(SDK_INCLUDE_PATH)toolchain/CMSIS/Include/
467 SOURCE_PATHS += $(SDK_SOURCE_PATH)
468 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)*/)
469 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)libraries/*/)
470 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)drivers_nrf/*/)
471 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)drivers_ext/*/)
473 ifdef SERIALIZATION_MODE
474 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)serialization/*/)
475 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)serialization/common/transport/)
476 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)serialization/$(SERIALIZATION_MODE)/codecs/common/)
477 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)serialization/$(SERIALIZATION_MODE)/hal/)
478 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)serialization/$(SERIALIZATION_MODE)/transport/)
479 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)serialization/common/)
480 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)serialization/common/transport/ser_phy/)
481 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)serialization/common/transport/ser_phy/config/)
483 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)serialization/*/)
484 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)serialization/common/transport/)
485 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)serialization/$(SERIALIZATION_MODE)/codecs/common/)
486 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)serialization/$(SERIALIZATION_MODE)/hal/)
487 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)serialization/$(SERIALIZATION_MODE)/transport/)
488 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)serialization/common/)
489 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)serialization/common/transport/ser_phy/)
490 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)serialization/common/transport/ser_phy/config/)
492 # Add defines based on if we are "connectivity" or "application"
493 ifeq ($(SERIALIZATION_MODE), connectivity)
494 CFLAGS += -DSER_CONNECTIVITY -DAPP_SCHEDULER_WITH_PAUSE -DBLE_STACK_SUPPORT_REQD -DHCI_TIMER2 -DSOFTDEVICE_PRESENT
495 endif
496 ifeq ($(SERIALIZATION_MODE), application)
497 CFLAGS += -DSVCALL_AS_NORMAL_FUNCTION -DBLE_STACK_SUPPORT_REQD
498 endif
499 endif
501 ifdef USE_BLE
502 # How many central/peripherals are defined changes how much memory the
503 # softdevice requires. Change the amount of memory allotted in a custom ld
504 # file if your configuration is different than default.
506 ifeq ($(RAM_KB), 16)
507 # limit 16 kB RAM nRFs to only act as peripherals. Doing otherwise
508 # requires careful balancing of memory requirements and should be done
509 # manually, not automatically
510 CENTRAL_LINK_COUNT ?= 0
511 PERIPHERAL_LINK_COUNT ?= 1
512 else
513 CENTRAL_LINK_COUNT ?= 1
514 PERIPHERAL_LINK_COUNT ?= 1
515 endif
517 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)ble/*/)
518 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)ble/ble_services/*/)
519 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)ble/*/)
520 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)ble/ble_services/*/)
521 CFLAGS += -DBLE_STACK_SUPPORT_REQD -DSOFTDEVICE_PRESENT -DCENTRAL_LINK_COUNT=$(CENTRAL_LINK_COUNT) -DPERIPHERAL_LINK_COUNT=$(PERIPHERAL_LINK_COUNT)
522 endif
524 ifdef USE_ANT
525 CFLAGS += -DANT_STACK_SUPPORT_REQD
526 endif
528 ifdef ENABLE_WIRELESS_DFU
529 CFLAGS += -DENABLE_DFU
530 APPLICATION_SRCS += bootloader_util.c
531 endif
533 ifdef SOFTDEVICE_MODEL
534 LIBRARY_PATHS += $(SDK_INCLUDE_PATH)softdevice/common/softdevice_handler/
535 LIBRARY_PATHS += $(SDK_INCLUDE_PATH)softdevice/$(SOFTDEVICE_MODEL)/headers/
536 LIBRARY_PATHS += $(SDK_INCLUDE_PATH)softdevice/$(SOFTDEVICE_MODEL)/headers/nrf51
538 SOURCE_PATHS += $(SDK_SOURCE_PATH)softdevice/common/softdevice_handler/
539 SOURCE_PATHS += $(SDK_SOURCE_PATH)softdevice/$(SOFTDEVICE_MODEL)/headers/
540 SOURCE_PATHS += $(SDK_SOURCE_PATH)softdevice/$(SOFTDEVICE_MODEL)/headers/nrf51
542 ifdef SERIALIZATION_MODE
543 # Load the sources from the serialization library
544 LIBRARY_PATHS += $(SDK_INCLUDE_PATH)serialization/$(SERIALIZATION_MODE)/codecs/$(SOFTDEVICE_MODEL)/middleware/
545 LIBRARY_PATHS += $(SDK_INCLUDE_PATH)serialization/$(SERIALIZATION_MODE)/codecs/$(SOFTDEVICE_MODEL)/serializers/
546 LIBRARY_PATHS += $(SDK_INCLUDE_PATH)serialization/common/struct_ser/$(SOFTDEVICE_MODEL)/
548 SOURCE_PATHS += $(SDK_SOURCE_PATH)serialization/$(SERIALIZATION_MODE)/codecs/$(SOFTDEVICE_MODEL)/middleware/
549 SOURCE_PATHS += $(SDK_SOURCE_PATH)serialization/$(SERIALIZATION_MODE)/codecs/$(SOFTDEVICE_MODEL)/serializers/
550 SOURCE_PATHS += $(SDK_SOURCE_PATH)serialization/common/struct_ser/$(SOFTDEVICE_MODEL)/
551 endif
552 else
553 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/nrf_soc_nosd/)
554 SOFTDEVICE_MODEL = blank
555 endif
557 endif # SDK 11
559 ifeq ($(SDK_VERSION), 10)
561 # Set the path
562 SDK_PATH ?= $(BASE_DIR)/sdk/nrf51_sdk_10.0.0/
564 # Other knowns about the SDK paths
565 SDK_INCLUDE_PATH = $(SDK_PATH)components/
566 SDK_SOURCE_PATH = $(SDK_PATH)components/
567 CMSIS_INCLUDE_PATH = $(SDK_PATH)components/toolchain/gcc/
569 # Need to add the paths for all the directories in the SDK.
570 # Note that we do not use * because some folders have conflicting files.
571 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)libraries/*/)
572 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/ble_flash/)
573 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/clock/)
574 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/common/)
575 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/delay/)
576 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/gpiote/)
577 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/hal/)
578 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/lpcomp/)
579 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/ppi/)
580 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/pstorage/)
581 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/pstorage/config/)
582 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/radio_config/)
583 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/rng/)
584 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/rtc/)
585 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/sdio/)
586 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/spi_master/)
587 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/spi_slave/)
588 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/swi/)
589 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/timer/)
590 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/twi_master/)
591 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/uart/)
592 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/wdt/)
593 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/validation/)
594 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_ext/*/)
595 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)device/)
596 LIBRARY_PATHS += $(SDK_INCLUDE_PATH)toolchain/gcc/
597 LIBRARY_PATHS += $(SDK_INCLUDE_PATH)toolchain/
599 SOURCE_PATHS += $(SDK_SOURCE_PATH)
600 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)*/)
601 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)libraries/*/)
602 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)drivers_nrf/*/)
603 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)drivers_ext/*/)
605 ifdef SERIALIZATION_MODE
606 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)serialization/*/)
607 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)serialization/common/transport/)
608 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)serialization/$(SERIALIZATION_MODE)/codecs/common/)
609 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)serialization/$(SERIALIZATION_MODE)/hal/)
610 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)serialization/$(SERIALIZATION_MODE)/transport/)
611 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)serialization/common/)
612 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)serialization/common/transport/ser_phy/)
613 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)serialization/common/transport/ser_phy/config/)
615 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)serialization/*/)
616 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)serialization/common/transport/)
617 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)serialization/$(SERIALIZATION_MODE)/codecs/common/)
618 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)serialization/$(SERIALIZATION_MODE)/hal/)
619 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)serialization/$(SERIALIZATION_MODE)/transport/)
620 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)serialization/common/)
621 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)serialization/common/transport/ser_phy/)
622 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)serialization/common/transport/ser_phy/config/)
624 # Add defines based on if we are "connectivity" or "application"
625 ifeq ($(SERIALIZATION_MODE), connectivity)
626 CFLAGS += -DSER_CONNECTIVITY -DAPP_SCHEDULER_WITH_PAUSE -DBLE_STACK_SUPPORT_REQD -DHCI_TIMER2 -DSOFTDEVICE_PRESENT
627 endif
628 ifeq ($(SERIALIZATION_MODE), application)
629 CFLAGS += -DSVCALL_AS_NORMAL_FUNCTION -DBLE_STACK_SUPPORT_REQD
630 endif
631 else
632 ifdef SOFTDEVICE_MODEL
633 CFLAGS += -DSOFTDEVICE_PRESENT
634 endif
635 endif
637 ifdef USE_BLE
638 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)ble/*/)
639 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)ble/ble_services/*/)
640 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)ble/*/)
641 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)ble/ble_services/*/)
642 CFLAGS += -DBLE_STACK_SUPPORT_REQD
643 endif
645 ifdef USE_ANT
646 CFLAGS += -DANT_STACK_SUPPORT_REQD
647 endif
649 ifdef ENABLE_WIRELESS_DFU
650 CFLAGS += -DENABLE_DFU
651 APPLICATION_SRCS += bootloader_util.c
652 endif
654 ifdef SOFTDEVICE_MODEL
655 LIBRARY_PATHS += $(SDK_INCLUDE_PATH)softdevice/common/softdevice_handler/
656 LIBRARY_PATHS += $(SDK_INCLUDE_PATH)softdevice/$(SOFTDEVICE_MODEL)/headers/
658 SOURCE_PATHS += $(SDK_SOURCE_PATH)softdevice/common/softdevice_handler/
659 SOURCE_PATHS += $(SDK_SOURCE_PATH)softdevice/$(SOFTDEVICE_MODEL)/headers/
661 ifdef SERIALIZATION_MODE
662 # Load the sources from the serialization library
663 LIBRARY_PATHS += $(SDK_INCLUDE_PATH)serialization/$(SERIALIZATION_MODE)/codecs/$(SOFTDEVICE_MODEL)/middleware/
664 LIBRARY_PATHS += $(SDK_INCLUDE_PATH)serialization/$(SERIALIZATION_MODE)/codecs/$(SOFTDEVICE_MODEL)/serializers/
665 LIBRARY_PATHS += $(SDK_INCLUDE_PATH)serialization/common/struct_ser/$(SOFTDEVICE_MODEL)/
667 SOURCE_PATHS += $(SDK_SOURCE_PATH)serialization/$(SERIALIZATION_MODE)/codecs/$(SOFTDEVICE_MODEL)/middleware/
668 SOURCE_PATHS += $(SDK_SOURCE_PATH)serialization/$(SERIALIZATION_MODE)/codecs/$(SOFTDEVICE_MODEL)/serializers/
669 SOURCE_PATHS += $(SDK_SOURCE_PATH)serialization/common/struct_ser/$(SOFTDEVICE_MODEL)/
670 endif
671 else
672 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/nrf_soc_nosd/)
673 SOFTDEVICE_MODEL = blank
674 endif
676 endif # SDK 10
679 ifeq ($(SDK_VERSION), 9)
681 # Set the path
682 SDK_PATH ?= $(BASE_DIR)/sdk/nrf51_sdk_9.0.0/
684 SOFTDEVICE ?= $(SDK_PATH)/components/softdevice/$(SOFTDEVICE_MODEL)/hex/$(SOFTDEVICE_MODEL)_softdevice.hex
686 # Other knowns about the SDK paths
687 SDK_INCLUDE_PATH = $(SDK_PATH)components/
688 SDK_SOURCE_PATH = $(SDK_PATH)components/
689 CMSIS_INCLUDE_PATH = $(SDK_PATH)components/toolchain/gcc/
691 # Need to add the paths for all the directories in the SDK.
692 # Note that we do not use * because some folders have conflicting files.
693 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)libraries/*/)
694 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/ble_flash/)
695 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/clock/)
696 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/common/)
697 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/gpiote/)
698 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/hal/)
699 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/lpcomp/)
700 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/ppi/)
701 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/pstorage/)
702 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/radio_config/)
703 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/rng/)
704 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/rtc/)
705 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/sdio/)
706 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/spi_master/)
707 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/spi_slave/)
708 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/swi/)
709 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/timer/)
710 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/twi_master/)
711 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/uart/)
712 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/wdt/)
713 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_ext/*/)
714 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)device/)
715 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)serialization/*/)
716 LIBRARY_PATHS += $(SDK_INCLUDE_PATH)toolchain/gcc/
717 LIBRARY_PATHS += $(SDK_INCLUDE_PATH)toolchain/
719 SOURCE_PATHS += $(SDK_SOURCE_PATH)
720 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)*/)
721 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)libraries/*/)
722 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)drivers_nrf/*/)
723 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)drivers_ext/*/)
724 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)serialization/*/)
726 ifdef USE_BLE
727 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)ble/*/)
728 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)ble/ble_services/*/)
729 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)ble/*/)
730 SOURCE_PATHS += $(wildcard $(SDK_SOURCE_PATH)ble/ble_services/*/)
731 CFLAGS += -DBLE_STACK_SUPPORT_REQD
732 endif
734 ifdef USE_ANT
735 CFLAGS += -DANT_STACK_SUPPORT_REQD
736 endif
738 ifdef ENABLE_WIRELESS_DFU
739 CFLAGS += -DENABLE_DFU
740 APPLICATION_SRCS += bootloader_util.c
741 endif
743 ifdef SOFTDEVICE_MODEL
744 LIBRARY_PATHS += $(SDK_INCLUDE_PATH)softdevice/common/softdevice_handler/
745 LIBRARY_PATHS += $(SDK_INCLUDE_PATH)softdevice/$(SOFTDEVICE_MODEL)/headers/
746 SOURCE_PATHS += $(SDK_INCLUDE_PATH)softdevice/common/softdevice_handler/
747 SOURCE_PATHS += $(SDK_INCLUDE_PATH)softdevice/$(SOFTDEVICE_MODEL)/headers/
748 else
749 LIBRARY_PATHS += $(wildcard $(SDK_INCLUDE_PATH)drivers_nrf/nrf_soc_nosd/)
750 SOFTDEVICE_MODEL = blank
751 endif
753 endif # SDK 9
754 endif # nrf51
757 # Set the Softdevice path
758 SOFTDEVICE ?= $(SDK_PATH)/components/softdevice/$(SOFTDEVICE_MODEL)/hex/$(SOFTDEVICE_MODEL)_$(NRF_MODEL)_$(SOFTDEVICE_VERSION)_softdevice.hex
760 ifeq ($(SOFTDEVICE_MODEL), blank)
761 SOFTDEVICE_VERSION = 0
762 endif
764 # Location for BLE Address if stored in Flash
765 ifeq ($(FLASH_KB), 256)
766 # 256 KB Flash
767 CFLAGS += -DBLEADDR_FLASH_LOCATION=0x0003FFF8
768 BLEADDR_FLASH_LOCATION ?= 0x0003FFF8
769 else
770 # Assume 128 KB Flash
771 CFLAGS += -DBLEADDR_FLASH_LOCATION=0x0001FFF8
772 BLEADDR_FLASH_LOCATION ?= 0x0001FFF8
773 endif
775 # Hardware and Firmware version numbers
776 HW_REVISION ?= none
777 FW_REVISION ?= none
778 ENABLE_DIS ?= false
779 ifneq ($(HW_REVISION), none)
780 CFLAGS += -DHW_REVISION=\"$(HW_REVISION)\"
781 ENABLE_DIS = true
782 endif
783 ifneq ($(FW_REVISION), none)
784 CFLAGS += -DFW_REVISION=\"$(FW_REVISION)\"
785 ENABLE_DIS = true
786 endif
787 ifeq ($(ENABLE_DIS), true)
788 APPLICATION_SRCS += ble_dis.c
789 APPLICATION_SRCS += device_info_service.c
790 endif
792 # Needed for SDK12
793 NRF_IC_UPPER = $(shell echo $(NRF_IC) | tr a-z A-Z)
795 print-% : ; @echo $* = $($*)
797 LINKER_SCRIPT ?= $(BASE_DIR)/make/ld/gcc_$(NRF_MODEL)_$(SOFTDEVICE_MODEL)_$(SOFTDEVICE_VERSION)_$(RAM_KB)_$(FLASH_KB).ld
798 OUTPUT_NAME ?= $(addsuffix _$(SOFTDEVICE_MODEL), $(PROJECT_NAME))
799 DFU_OUTPUT_NAME ?= $(addsuffix _$(FLASH_KB), $(addsuffix _$(RAM_KB), $(addsuffix _$(SOFTDEVICE_MODEL), dfu)))
801 LIBRARY_INCLUDES = $(addprefix -I,$(LIBRARY_PATHS))
802 CMSIS_INCLUDE = $(addprefix -I,$(CMSIS_INCLUDE_PATH))
804 VPATH = $(SOURCE_PATHS)
806 OUTPUT_PATH ?= _build/
808 ifneq (,$(filter $(NRF_IC),nrf52832 nrf52833 nrf52840))
809 #CPUFLAGS = -mthumb -mabi=aapcs -mcpu=cortex-m4 -march=armv7e-m -mfloat-abi=soft -mfpu=fpv4-sp-d16
810 CPUFLAGS = -mthumb -mcpu=cortex-m4 -march=armv7e-m
811 else
812 CPUFLAGS = -mthumb -mcpu=cortex-m0 -march=armv6s-m
813 endif
815 CFLAGS += -std=gnu99 -c $(CPUFLAGS) -Wall -Wextra -Wno-unused-parameter -Werror=return-type -D$(DEVICE) -D$(BOARD) -D$(NRF_IC_UPPER) -DSDK_VERSION_$(SDK_VERSION) -DSOFTDEVICE_$(SOFTDEVICE_MODEL)
816 CFLAGS += -s -ffunction-sections -fdata-sections
817 CFLAGS += -D$(shell echo $(SOFTDEVICE_MODEL) | tr a-z A-Z)
818 CFLAGS += $(CMSIS_INCLUDE) $(LIBRARY_INCLUDES) -MD
819 LDFLAGS += $(CPUFLAGS) -L $(BASE_DIR)/make/ld -T $(LINKER_SCRIPT) -Wl,--gc-sections -Wl,-Map=$(OUTPUT_PATH)$(OUTPUT_NAME).Map
820 OBJDUMP_FLAGS += --disassemble-all --source --disassembler-options=force-thumb -C --section-headers
823 DFUHEX = $(BASE_DIR)/dfu/_build/$(DFU_OUTPUT_NAME).hex
824 DFUELF = $(BASE_DIR)/dfu/_build/$(DFU_OUTPUT_NAME).elf
825 DFUBIN = $(BASE_DIR)/dfu/_build/$(DFU_OUTPUT_NAME).bin
827 HEX = $(OUTPUT_PATH)$(OUTPUT_NAME).hex
828 ELF = $(OUTPUT_PATH)$(OUTPUT_NAME).elf
829 BIN = $(OUTPUT_PATH)$(OUTPUT_NAME).bin
830 LST = $(OUTPUT_PATH)$(OUTPUT_NAME).lst
832 SRCS = $(SYSTEM_FILE) $(notdir $(APPLICATION_SRCS))
833 OBJS = $(addprefix $(OUTPUT_PATH), $(SRCS:.c=.o)) $(addprefix $(OUTPUT_PATH),$(APPLICATION_LIBS))
834 DEPS = $(addprefix $(OUTPUT_PATH), $(SRCS:.c=.d))
835 SRCS_AS = $(START_CODE)
836 OBJS_AS = $(addprefix $(OUTPUT_PATH), $(SRCS_AS:.s=.os))
838 ### Verbosity control. Use make V=1 to get verbose builds.
840 ifeq ($(V),1)
841 PRINT_CC =
842 PRINT_LD =
843 PRINT_AR =
844 PRINT_AS =
845 PRINT_HEX =
846 PRINT_BIN =
847 PRINT_SIZ =
849 else
850 PRINT_CC = @echo " CC " $<
851 PRINT_LD = @echo " LD " $(ELF)
852 PRINT_AR = @echo " AR " $@
853 PRINT_AS = @echo " AS " $<
854 PRINT_HEX = @echo " HEX " $(HEX)
855 PRINT_BIN = @echo " BIN " $(BIN)
856 PRINT_LST = @echo " LST " $(LST)
857 PRINT_SIZ = @echo " SIZE " $(ELF)
859 endif
861 ifdef ENABLE_WIRELESS_DFU
862 all: $(OBJS) $(OBJS_AS) $(HEX) bootloader
863 else
864 all: $(OBJS) $(OBJS_AS) $(HEX)
865 endif
867 debug: CFLAGS += -g
868 ifdef ENABLE_WIRELESS_DFU
869 debug: $(OBJS) $(OBJS_AS) $(HEX) bootloader
870 else
871 debug: $(OBJS) $(OBJS_AS) $(HEX)
872 endif
874 rebuild: clean all
876 # if using mingw/msys, this test will fail and you will correctly get the posix Makefile
877 ifeq ($(OS)$(MSYSTEM),Windows_NT)
878 include $(BASE_DIR)/make/Makefile.windows
879 else
880 include $(BASE_DIR)/make/Makefile.posix
881 endif
883 $(HEX): $(OBJS) $(OBJS_AS)
884 $(PRINT_LD)
885 $(Q)$(LD) $(LDFLAGS) $(OBJS_AS) $(OBJS) $(LIBS) -o $(ELF)
886 $(PRINT_HEX)
887 $(Q)$(OBJCOPY) -Oihex $(ELF) $(HEX)
888 $(PRINT_BIN)
889 $(Q)$(OBJCOPY) -Obinary $(ELF) $(BIN)
890 $(PRINT_LST)
891 $(Q)$(OBJDUMP) $(OBJDUMP_FLAGS) $(ELF) > $(LST)
892 $(PRINT_SIZ)
893 $(Q)$(SIZE) $(ELF)
895 size: $(ELF)
896 $(SIZE) $(ELF)
898 $(OUTPUT_PATH)%.o: %.c
899 @$(MAKE_BUILD_FOLDER)
900 $(PRINT_CC)
901 $(Q)$(CC) $(LDFLAGS) $(CFLAGS) $< -o $@
903 $(OUTPUT_PATH)%.os: %.s
904 @$(MAKE_BUILD_FOLDER)
905 $(PRINT_AS)
906 $(Q)$(AS) $< -o $@
908 -include $(DEPS)
910 .PHONY: all clean rebuild size