xref: /btstack/port/nrf5-cinnamon/pca10040/armgcc/Makefile (revision 2c4f9bbb6d93b3f1a90ed62ac67e4cd019f0736a)
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