1 2NRF5_SDK_ROOT ?= /Users/mringwal/Projects/Nordic/nRF5_SDK_17.0.2_d674dde 3 4# unset GNU_INSTALL_ROOT will select arm-none-eabi-gcc from your PATH 5export GNU_INSTALL_ROOT ?= 6 7OUTPUT_DIRECTORY := build 8 9SDK_ROOT := $(NRF5_SDK_ROOT) 10PROJ_DIR := ../.. 11 12BTSTACK_ROOT = ../../../.. 13 14LINKER_SCRIPT := nrf52832_xxaa.ld 15 16# Source files common to all targets 17C_SOURCES = \ 18 $(SDK_ROOT)/modules/nrfx/mdk/system_nrf52.c \ 19 $(SDK_ROOT)/components/boards/boards.c \ 20 $(PROJ_DIR)/main.c \ 21 $(PROJ_DIR)/port/hal_timer_nrf5.c \ 22 $(PROJ_DIR)/port/ll_nrf5.c \ 23 $(PROJ_DIR)/port/radio_nrf5.c \ 24 ${BTSTACK_ROOT}/3rd-party/micro-ecc/uECC.c \ 25 ${BTSTACK_ROOT}/3rd-party/rijndael/rijndael.c \ 26 ${BTSTACK_ROOT}/3rd-party/segger-rtt/SEGGER_RTT.c \ 27 ${BTSTACK_ROOT}/3rd-party/segger-rtt/SEGGER_RTT_printf.c \ 28 ${BTSTACK_ROOT}/3rd-party/segger-rtt/SEGGER_RTT_Syscalls_GCC.c \ 29 ${BTSTACK_ROOT}/chipset/cinnamon/controller.c \ 30 ${BTSTACK_ROOT}/chipset/cinnamon/hci_event.c \ 31 ${BTSTACK_ROOT}/chipset/cinnamon/hopping.c \ 32 ${BTSTACK_ROOT}/platform/embedded/btstack_run_loop_embedded.c \ 33 ${BTSTACK_ROOT}/platform/embedded/hci_dump_embedded_stdout.c \ 34 ${BTSTACK_ROOT}/platform/embedded/hci_dump_segger_rtt_stdout.c \ 35 ${BTSTACK_ROOT}/platform/embedded/hci_dump_segger_rtt_binary.c \ 36 ${BTSTACK_ROOT}/src/ad_parser.c \ 37 ${BTSTACK_ROOT}/src/ble/att_db.c \ 38 ${BTSTACK_ROOT}/src/ble/att_dispatch.c \ 39 ${BTSTACK_ROOT}/src/ble/att_server.c \ 40 ${BTSTACK_ROOT}/src/ble/gatt-service/ancs_client.c \ 41 ${BTSTACK_ROOT}/src/ble/gatt-service/battery_service_client.c \ 42 ${BTSTACK_ROOT}/src/ble/gatt-service/battery_service_server.c \ 43 ${BTSTACK_ROOT}/src/ble/gatt-service/device_information_service_client.c \ 44 ${BTSTACK_ROOT}/src/ble/gatt-service/device_information_service_server.c \ 45 ${BTSTACK_ROOT}/src/ble/gatt-service/hids_device.c \ 46 ${BTSTACK_ROOT}/src/ble/gatt_client.c \ 47 ${BTSTACK_ROOT}/src/ble/le_device_db_memory.c \ 48 ${BTSTACK_ROOT}/src/ble/le_device_db_tlv.c \ 49 ${BTSTACK_ROOT}/src/ble/sm.c \ 50 ${BTSTACK_ROOT}/src/btstack_audio.c \ 51 ${BTSTACK_ROOT}/src/btstack_crypto.c \ 52 ${BTSTACK_ROOT}/src/btstack_hid_parser.c \ 53 ${BTSTACK_ROOT}/src/btstack_linked_list.c \ 54 ${BTSTACK_ROOT}/src/btstack_linked_queue.c \ 55 ${BTSTACK_ROOT}/src/btstack_memory.c \ 56 ${BTSTACK_ROOT}/src/btstack_memory_pool.c \ 57 ${BTSTACK_ROOT}/src/btstack_resample.c \ 58 ${BTSTACK_ROOT}/src/btstack_ring_buffer.c \ 59 ${BTSTACK_ROOT}/src/btstack_run_loop.c \ 60 ${BTSTACK_ROOT}/src/btstack_tlv.c \ 61 ${BTSTACK_ROOT}/src/btstack_tlv_none.c \ 62 ${BTSTACK_ROOT}/src/btstack_util.c \ 63 ${BTSTACK_ROOT}/src/hci.c \ 64 ${BTSTACK_ROOT}/src/hci_cmd.c \ 65 ${BTSTACK_ROOT}/src/hci_dump.c \ 66 ${BTSTACK_ROOT}/src/hci_transport_h4.c \ 67 ${BTSTACK_ROOT}/src/l2cap.c \ 68 ${BTSTACK_ROOT}/src/l2cap_signaling.c \ 69 70ASM_SOURCES= \ 71 $(SDK_ROOT)/modules/nrfx/mdk/gcc_startup_nrf52.S \ 72 73# Include folders common to all targets 74INC_FOLDERS += \ 75 $(PROJ_DIR) \ 76 $(SDK_ROOT)/integration/nrfx \ 77 $(SDK_ROOT)/integration/nrfx/legacy \ 78 $(SDK_ROOT)/modules/nrfx \ 79 $(SDK_ROOT)/modules/nrfx/hal \ 80 $(SDK_ROOT)/modules/nrfx/mdk \ 81 $(SDK_ROOT)/modules/nrfx/drivers/include/ \ 82 $(SDK_ROOT)/components/boards \ 83 $(SDK_ROOT)/components/drivers_nrf/nrf_soc_nosd \ 84 $(SDK_ROOT)/components/libraries/bsp \ 85 $(SDK_ROOT)/components/toolchain/cmsis/include \ 86 $(SDK_ROOT)/components/libraries/util \ 87 $(SDK_ROOT)/components/libraries/delay \ 88 $(SDK_ROOT)/components/libraries/log/ \ 89 $(SDK_ROOT)//components/libraries/log/src \ 90 $(SDK_ROOT)/components/libraries/experimental_section_vars/ \ 91 $(BTSTACK_ROOT)/3rd-party/segger-rtt \ 92 $(BTSTACK_ROOT)/chipset/cinnamon \ 93 $(BTSTACK_ROOT)/src/ \ 94 $(BTSTACK_ROOT)/platform/embedded \ 95 ../config \ 96 ../../port \ 97 $(OUTPUT_DIRECTORY)\ 98 99# Libraries common to all targets 100LIB_FILES += \ 101 102# Optimization flags 103# OPT = -O3 -g3 104# Uncomment the line below to enable link time optimization 105#OPT += -flto 106OPT = -Os -g 107 108# C flags common to all targets 109CFLAGS += $(OPT) 110CFLAGS += -DBOARD_PCA10040 111CFLAGS += -DBSP_DEFINES_ONLY 112CFLAGS += -DCONFIG_GPIO_AS_PINRESET 113CFLAGS += -DFLOAT_ABI_HARD 114CFLAGS += -DNRF52 115CFLAGS += -DNRF52832_XXAA 116CFLAGS += -DNRF52_PAN_74 117CFLAGS += -mcpu=cortex-m4 118CFLAGS += -mthumb -mabi=aapcs 119CFLAGS += -Wall -Werror 120CFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16 121# keep every function in a separate section, this allows linker to discard unused ones 122CFLAGS += -ffunction-sections -fdata-sections -fno-strict-aliasing 123CFLAGS += -fno-builtin -fshort-enums 124 125# C++ flags common to all targets 126CXXFLAGS += $(OPT) 127# Assembler flags common to all targets 128ASMFLAGS += -g3 129ASMFLAGS += -mcpu=cortex-m4 130ASMFLAGS += -mthumb -mabi=aapcs 131ASMFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16 132ASMFLAGS += -DBOARD_PCA10040 133ASMFLAGS += -DBSP_DEFINES_ONLY 134ASMFLAGS += -DCONFIG_GPIO_AS_PINRESET 135ASMFLAGS += -DFLOAT_ABI_HARD 136ASMFLAGS += -DNRF52 137ASMFLAGS += -DNRF52832_XXAA 138ASMFLAGS += -DNRF52_PAN_74 139 140# Linker flags 141LDFLAGS += $(OPT) 142LDFLAGS += -mthumb -mabi=aapcs -L$(SDK_ROOT)/modules/nrfx/mdk -T$(LINKER_SCRIPT) 143LDFLAGS += -mcpu=cortex-m4 144LDFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16 145# let linker dump unused sections 146LDFLAGS += -Wl,--gc-sections 147# use newlib in nano version 148LDFLAGS += --specs=nano.specs 149 150# Add standard libraries at the very end of the linker input, after all objects 151# that may need symbols provided by these libraries. 152LIB_FILES += -lc -lnosys -lm 153 154# default action: build all 155EXAMPLES = \ 156 gap_le_advertisements \ 157 gatt_counter \ 158 gatt_streamer_server \ 159# require encryption: 160# hog_keyboard_demo \ 161# hog_mouse_demo \ 162# sm_pairing_peripheral \ 163 164GATT_FILES = \ 165 gatt_counter.gatt \ 166 gatt_streamer_server.gatt \ 167# require encryption: 168# hog_keyboard_demo.gatt \ 169# hog_mouse_demo.gatt \ 170# sm_pairing_peripheral.gatt \ 171 172# list of objects 173OBJECTS = $(addprefix $(OUTPUT_DIRECTORY)/,$(notdir $(C_SOURCES:.c=.o))) 174vpath %.c $(sort $(dir $(C_SOURCES))) 175# list of ASM program objects 176OBJECTS += $(addprefix $(OUTPUT_DIRECTORY)/,$(notdir $(ASM_SOURCES:.S=.o))) 177vpath %.S $(sort $(dir $(ASM_SOURCES))) 178 179.PHONY: default help 180 181# VPATH to find .gatt files 182VPATH += ${BTSTACK_ROOT}/example 183 184# Default target - first one defined 185default: \ 186 $(OBJECTS) \ 187 $(addprefix $(OUTPUT_DIRECTORY)/,$(GATT_FILES:.gatt=.h)) \ 188 $(addprefix $(OUTPUT_DIRECTORY)/,$(EXAMPLES:=.elf)) \ 189 $(addprefix $(OUTPUT_DIRECTORY)/,$(EXAMPLES:=.jdebug)) \ 190 191$(OUTPUT_DIRECTORY)/%.h: %.gatt | $(OUTPUT_DIRECTORY) 192 python3 ${BTSTACK_ROOT}/tool/compile_gatt.py $< $@ 193 194$(OUTPUT_DIRECTORY)/%.o: %.S Makefile | $(OUTPUT_DIRECTORY) 195 $(CC) -c $(ASMFLAGS) $< -o $@ 196 197$(OUTPUT_DIRECTORY)/%.o: %.c Makefile | $(OUTPUT_DIRECTORY) 198 $(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(OUTPUT_DIRECTORY)/$(notdir $(<:.c=.lst)) $< -o $@ 199 200$(OUTPUT_DIRECTORY)/%.elf: Makefile $(OBJECTS) $(OUTPUT_DIRECTORY)/%.o 201 $(CC) $(filter-out Makefile,$^) $(LDFLAGS) -o $@ 202 $(SIZE) $@ 203 204$(OUTPUT_DIRECTORY)/%.jdebug: ozone.jdebug | $(OUTPUT_DIRECTORY) 205 sed -e "s|EXAMPLE|$(basename $(notdir $@))|" $< > $@ 206 207TEMPLATE_PATH := $(SDK_ROOT)/components/toolchain/gcc 208 209include $(TEMPLATE_PATH)/Makefile.common 210 211# Convert INC_FOLDERS into CFLAGS 212$(eval INC_PATHS := $(call get_inc_paths, $(INC_FOLDERS) $(call target_specific, INC_FOLDERS, $(1)))) 213CFLAGS += ${INC_PATHS} 214