175 lines
5.7 KiB
Makefile
175 lines
5.7 KiB
Makefile
![]() |
TOOLCHAIN_PREFIX ?= arm-none-eabi
|
||
|
|
||
|
AS = $(TOOLCHAIN_PATH)$(TOOLCHAIN_PREFIX)-as
|
||
|
CC = $(TOOLCHAIN_PATH)$(TOOLCHAIN_PREFIX)-gcc
|
||
|
LD = $(TOOLCHAIN_PATH)$(TOOLCHAIN_PREFIX)-gcc
|
||
|
OBJCOPY = $(TOOLCHAIN_PATH)$(TOOLCHAIN_PREFIX)-objcopy
|
||
|
OBJDUMP = $(TOOLCHAIN_PATH)$(TOOLCHAIN_PREFIX)-objdump
|
||
|
SIZE = $(TOOLCHAIN_PATH)$(TOOLCHAIN_PREFIX)-size
|
||
|
GDB = $(TOOLCHAIN_PATH)$(TOOLCHAIN_PREFIX)-gdb
|
||
|
|
||
|
START_CODE ?= startup_nrf51.s
|
||
|
SYSTEM_FILE ?= system_nrf51.c
|
||
|
|
||
|
ifdef DEV_BOARD
|
||
|
CFLAGS += -DDEV_BOARD
|
||
|
endif
|
||
|
|
||
|
ifeq ($(USE_SOFTDEVICE), s110)
|
||
|
CFLAGS += -DS110
|
||
|
USE_BLE = 1
|
||
|
endif
|
||
|
|
||
|
ifeq ($(USE_SOFTDEVICE), s120)
|
||
|
CFLAGS += -DS120
|
||
|
USE_BLE = 1
|
||
|
endif
|
||
|
|
||
|
ifeq ($(USE_SOFTDEVICE), s310)
|
||
|
USE_BLE = 1
|
||
|
USE_ANT = 1
|
||
|
CFLAGS += -DS310
|
||
|
endif
|
||
|
|
||
|
LIBRARY_PATHS += $(TEMPLATE_PATH)
|
||
|
LIBRARY_PATHS += $(SDK_PATH)components/toolchain/gcc/
|
||
|
LIBRARY_PATHS += $(SDK_PATH)components/toolchain/
|
||
|
LIBRARY_PATHS += $(wildcard $(SDK_PATH)components/libraries/*/)
|
||
|
|
||
|
LIBRARY_PATHS += $(SDK_PATH)/components/drivers_nrf/ble_flash/
|
||
|
LIBRARY_PATHS += $(SDK_PATH)/components/drivers_nrf/clock/
|
||
|
LIBRARY_PATHS += $(SDK_PATH)/components/drivers_nrf/common/
|
||
|
LIBRARY_PATHS += $(SDK_PATH)/components/drivers_nrf/config/
|
||
|
LIBRARY_PATHS += $(SDK_PATH)/components/drivers_nrf/delay/
|
||
|
LIBRARY_PATHS += $(SDK_PATH)/components/drivers_nrf/gpiote/
|
||
|
LIBRARY_PATHS += $(SDK_PATH)/components/drivers_nrf/hal/
|
||
|
LIBRARY_PATHS += $(SDK_PATH)/components/drivers_nrf/lpcomp/
|
||
|
LIBRARY_PATHS += $(SDK_PATH)/components/drivers_nrf/ppi/
|
||
|
LIBRARY_PATHS += $(SDK_PATH)/components/drivers_nrf/pstorage/
|
||
|
LIBRARY_PATHS += $(SDK_PATH)/components/drivers_nrf/qdec/
|
||
|
LIBRARY_PATHS += $(SDK_PATH)/components/drivers_nrf/radio_config/
|
||
|
LIBRARY_PATHS += $(SDK_PATH)/components/drivers_nrf/rng/
|
||
|
LIBRARY_PATHS += $(SDK_PATH)/components/drivers_nrf/rtc/
|
||
|
LIBRARY_PATHS += $(SDK_PATH)/components/drivers_nrf/sdio/
|
||
|
LIBRARY_PATHS += $(SDK_PATH)/components/drivers_nrf/spi_master/
|
||
|
LIBRARY_PATHS += $(SDK_PATH)/components/drivers_nrf/spi_slave/
|
||
|
LIBRARY_PATHS += $(SDK_PATH)/components/drivers_nrf/swi/
|
||
|
LIBRARY_PATHS += $(SDK_PATH)/components/drivers_nrf/timer/
|
||
|
LIBRARY_PATHS += $(SDK_PATH)/components/drivers_nrf/twi_master/
|
||
|
LIBRARY_PATHS += $(SDK_PATH)/components/drivers_nrf/uart/
|
||
|
LIBRARY_PATHS += $(SDK_PATH)/components/drivers_nrf/wdt/
|
||
|
|
||
|
LIBRARY_PATHS += $(wildcard $(SDK_PATH)components/device/)
|
||
|
LIBRARY_PATHS += $(wildcard $(SDK_PATH)components/serialization/*/)
|
||
|
|
||
|
ifdef USE_BLE
|
||
|
LIBRARY_PATHS += $(wildcard $(SDK_PATH)components/ble/*/)
|
||
|
LIBRARY_PATHS += $(wildcard $(SDK_PATH)components/ble/ble_services/*/)
|
||
|
CFLAGS += -DBLE_STACK_SUPPORT_REQD
|
||
|
endif
|
||
|
|
||
|
ifdef USE_ANT
|
||
|
CFLAGS += -DANT_STACK_SUPPORT_REQD
|
||
|
endif
|
||
|
|
||
|
ifdef USE_SOFTDEVICE
|
||
|
CFLAGS += -DSOFTDEVICE_PRESENT
|
||
|
LIBRARY_PATHS += $(SDK_PATH)components/softdevice/common/softdevice_handler/
|
||
|
LIBRARY_PATHS += $(SDK_PATH)components/softdevice/$(USE_SOFTDEVICE)/headers/
|
||
|
else
|
||
|
LIBRARY_PATHS += $(wildcard $(SDK_PATH)components/drivers_nrf/nrf_soc_nosd/)
|
||
|
USE_SOFTDEVICE = blank
|
||
|
endif
|
||
|
|
||
|
LINKER_SCRIPT ?= gcc_nrf51_$(USE_SOFTDEVICE).ld
|
||
|
OUTPUT_NAME ?= $(addsuffix _$(USE_SOFTDEVICE)_$(VERSION), $(PROJECT_NAME))
|
||
|
|
||
|
ifdef USE_EXT_SENSORS
|
||
|
LIBRARY_PATHS += $(wildcard $(SDK_PATH)components/ext_sensors/*/)
|
||
|
endif
|
||
|
|
||
|
LIBRARY_INCLUDES = $(addprefix -I,$(LIBRARY_PATHS))
|
||
|
|
||
|
VPATH = $(LIBRARY_PATHS)
|
||
|
|
||
|
OUTPUT_PATH = _build/
|
||
|
|
||
|
CPUFLAGS += -mthumb -mcpu=cortex-m0 -mabi=aapcs -mfloat-abi=soft
|
||
|
ifdef BOARD
|
||
|
CFLAGS += -DBOARD=$(BOARD)
|
||
|
endif
|
||
|
CFLAGS += -std=gnu99 -c $(CPUFLAGS) -Wall -D$(DEVICE) $(LIBRARY_INCLUDES) -MD
|
||
|
# keep every function in separate section. This will allow linker to dump unused functions
|
||
|
CFLAGS += -ffunction-sections -fdata-sections -fno-strict-aliasing
|
||
|
CFLAGS += -fno-builtin --short-enums
|
||
|
|
||
|
# keep every function in separate section. This will allow linker to dump unused functions
|
||
|
LDFLAGS += -mthumb -mabi=aapcs -L $(TEMPLATE_PATH) -T$(LINKER_SCRIPT)
|
||
|
LDFLAGS += -mcpu=cortex-m0
|
||
|
LDFLAGS += -Wl,--gc-sections
|
||
|
# use newlib in nano version
|
||
|
LDFLAGS += --specs=nano.specs -lc -lnosys
|
||
|
LDFLAGS += -Wl,-Map=$(OUTPUT_PATH)$(OUTPUT_NAME).Map
|
||
|
|
||
|
HEX = $(OUTPUT_PATH)$(OUTPUT_NAME).hex
|
||
|
ELF = $(OUTPUT_PATH)$(OUTPUT_NAME).elf
|
||
|
BIN = $(OUTPUT_PATH)$(OUTPUT_NAME).bin
|
||
|
|
||
|
SRCS = $(SYSTEM_FILE) $(notdir $(APPLICATION_SRCS))
|
||
|
OBJS = $(addprefix $(OUTPUT_PATH), $(SRCS:.c=.o)) $(addprefix $(OUTPUT_PATH),$(APPLICATION_LIBS))
|
||
|
DEPS = $(addprefix $(OUTPUT_PATH), $(SRCS:.c=.d))
|
||
|
SRCS_AS = $(START_CODE)
|
||
|
OBJS_AS = $(addprefix $(OUTPUT_PATH), $(SRCS_AS:.s=.os))
|
||
|
|
||
|
JLINK_OPTIONS = -device nrf51822 -if swd -speed 1000
|
||
|
|
||
|
all: $(OBJS) $(OBJS_AS) $(HEX)
|
||
|
|
||
|
rebuild: clean all
|
||
|
|
||
|
bootloader: clean
|
||
|
make -C bootloader
|
||
|
|
||
|
combined: bootloader all
|
||
|
srec_cat \
|
||
|
softdevice/softdevice.hex -intel \
|
||
|
bootloader/_build/sdk10_bootloader_s110.hex -intel -exclude 0x3FC00 0x3FC04 \
|
||
|
_build/hiro_s110_$(VERSION).hex -intel \
|
||
|
-generate 0x3FC00 0x3FC04 -const-le 0x01 4 \
|
||
|
-output bulk-program/$(PROJECT_NAME)-combined-$(VERSION).hex -intel
|
||
|
ln bulk-program/$(PROJECT_NAME)-combined-$(VERSION).hex bulk-program/$(PROJECT_NAME)-combined.hex
|
||
|
|
||
|
# combined: rebuild
|
||
|
# srec_cat \
|
||
|
# softdevice/softdevice.hex -intel \
|
||
|
# _build/$(PROJECT_NAME)_$(USE_SOFTDEVICE)_$(VERSION).hex -intel \
|
||
|
# -output bulk-program/combined.hex -intel
|
||
|
# ln -s bulk-program/combined.hex bulk-program/$(PROJECT_NAME)-$(VERSION)-combined.hex
|
||
|
|
||
|
ifeq ($(OS),Windows_NT)
|
||
|
include $(TEMPLATE_PATH)Makefile.windows
|
||
|
else
|
||
|
include $(TEMPLATE_PATH)Makefile.posix
|
||
|
endif
|
||
|
|
||
|
$(HEX): $(OBJS) $(OBJS_AS)
|
||
|
$(LD) $(LDFLAGS) $(OBJS_AS) $(OBJS) -o $(ELF)
|
||
|
$(OBJCOPY) -Oihex $(ELF) $(HEX)
|
||
|
$(OBJCOPY) -Obinary $(ELF) $(BIN)
|
||
|
$(SIZE) $(ELF)
|
||
|
|
||
|
size: $(ELF)
|
||
|
$(SIZE) $(ELF)
|
||
|
|
||
|
$(OUTPUT_PATH)%.o: %.c
|
||
|
$(MAKE_BUILD_FOLDER)
|
||
|
$(CC) $(LDFLAGS) $(CFLAGS) $< -o $@
|
||
|
|
||
|
$(OUTPUT_PATH)%.os: %.s
|
||
|
$(MAKE_BUILD_FOLDER)
|
||
|
$(AS) $< -o $@
|
||
|
|
||
|
-include $(DEPS)
|
||
|
|
||
|
.PHONY: all clean rebuild size
|