aboutsummaryrefslogtreecommitdiff
path: root/Makefile.common
diff options
context:
space:
mode:
authorsprhawk <hongbo@yang.me>2014-08-29 01:48:19 +0800
committersprhawk <hongbo@yang.me>2014-08-29 01:48:19 +0800
commit214951cc8d485e826ec52a381b8e50f0e75aafa1 (patch)
treee86687a76367eae29bd6fe1328a12eea937d7054 /Makefile.common
downloadnrf51822-posix-build-scripts-214951cc8d485e826ec52a381b8e50f0e75aafa1.tar.gz
nrf51822-posix-build-scripts-214951cc8d485e826ec52a381b8e50f0e75aafa1.tar.bz2
nrf51822-posix-build-scripts-214951cc8d485e826ec52a381b8e50f0e75aafa1.tar.xz
nrf51822-posix-build-scripts-214951cc8d485e826ec52a381b8e50f0e75aafa1.zip
modified from nordic nRF51 SDK
Diffstat (limited to 'Makefile.common')
-rw-r--r--Makefile.common209
1 files changed, 209 insertions, 0 deletions
diff --git a/Makefile.common b/Makefile.common
new file mode 100644
index 0000000..9f81b00
--- /dev/null
+++ b/Makefile.common
@@ -0,0 +1,209 @@
+DEVICE := NRF51
+DEVICESERIES := nrf51
+
+SDK_INCLUDE_PATH = $(SDK_PATH)/Include/
+SDK_SOURCE_PATH = $(SDK_PATH)/Source/
+# TEMPLATE_PATH += $(SDK_SOURCE_PATH)/templates/gcc/
+OUTPUT_BINARY_DIRECTORY := _build
+
+ifeq ($(OS),Windows_NT)
+include $(TEMPLATE_PATH)Makefile.windows
+else
+include $(TEMPLATE_PATH)Makefile.posix
+endif
+
+ifeq ($(LINKER_SCRIPT),)
+ ifeq ($(USE_SOFTDEVICE), S110)
+ LINKER_SCRIPT = gcc_$(DEVICESERIES)_s110_$(DEVICE_VARIANT).ld
+ OUTPUT_FILENAME := $(OUTPUT_FILENAME)_s110_$(DEVICE_VARIANT)
+ else
+ ifeq ($(USE_SOFTDEVICE), S210)
+ LINKER_SCRIPT = gcc_$(DEVICESERIES)_s210_$(DEVICE_VARIANT).ld
+ OUTPUT_FILENAME := $(OUTPUT_FILENAME)_s210_$(DEVICE_VARIANT)
+ else
+ LINKER_SCRIPT = gcc_$(DEVICESERIES)_blank_$(DEVICE_VARIANT).ld
+ OUTPUT_FILENAME := $(OUTPUT_FILENAME)_$(DEVICE_VARIANT)
+ endif
+ endif
+else
+# Use externally defined settings
+endif
+
+CPU := cortex-m0
+
+# Toolchain commands
+JLINK := JLinkExe -Device nrf51822 -speed 100 -if swd
+CC := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-gcc"
+AS := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-as"
+AR := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ar" -r
+LD := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ld"
+NM := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-nm"
+OBJDUMP := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objdump"
+OBJCOPY := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objcopy"
+
+MK := mkdir
+RM := rm -rf
+
+OBJECT_DIRECTORY := _build
+LISTING_DIRECTORY := _build
+
+C_SOURCE_FILES += system_$(DEVICESERIES).c
+ASSEMBLER_SOURCE_FILES += gcc_startup_$(DEVICESERIES).s
+
+# Linker flags
+#LDFLAGS += -L"$(GNU_INSTALL_ROOT)/arm-none-eabi/lib/armv6-m"
+#LDFLAGS += -L"$(GNU_INSTALL_ROOT)/lib/gcc/arm-none-eabi/$(GNU_VERSION)/armv6-m"
+LDFLAGS += -Xlinker -Map=$(LISTING_DIRECTORY)/$(OUTPUT_FILENAME).map
+LDFLAGS += -mcpu=$(CPU) -mthumb -mabi=aapcs -L $(TEMPLATE_PATH) -T$(LINKER_SCRIPT)
+
+# Compiler flags
+CFLAGS += -mcpu=$(CPU) -mthumb -mabi=aapcs -D$(DEVICE) -D$(BOARD) -D$(TARGET_CHIP) --std=gnu99
+CFLAGS += -Wall -Werror
+CFLAGS += -mfloat-abi=soft
+
+# Assembler flags
+ASMFLAGS += -x assembler-with-cpp
+
+INCLUDEPATHS += -I"$(SDK_PATH)Include"
+INCLUDEPATHS += -I"$(SDK_PATH)Include/gcc"
+INCLUDEPATHS += -I"$(SDK_PATH)Include/ext_sensors"
+
+# Sorting removes duplicates
+BUILD_DIRECTORIES := $(sort $(OBJECT_DIRECTORY) $(OUTPUT_BINARY_DIRECTORY) $(LISTING_DIRECTORY) )
+
+####################################################################
+# Rules #
+####################################################################
+
+C_SOURCE_FILENAMES = $(notdir $(C_SOURCE_FILES) )
+ASSEMBLER_SOURCE_FILENAMES = $(notdir $(ASSEMBLER_SOURCE_FILES) )
+
+# Make a list of source paths
+C_SOURCE_PATHS += $(SDK_SOURCE_PATH) $(TEMPLATE_PATH) $(wildcard $(SDK_SOURCE_PATH)*/) $(wildcard $(SDK_SOURCE_PATH)ext_sensors/*/) $(wildcard $(SDK_SOURCE_PATH)ble/*/) $(BUILD_SCRIPTS_PATH)
+ASSEMBLER_SOURCE_PATHS = $(SDK_SOURCE_PATH) $(TEMPLATE_PATH) $(wildcard $(SDK_SOURCE_PATH)*/) $(BUILD_SCRIPTS_PATH)
+
+C_OBJECTS = $(addprefix $(OBJECT_DIRECTORY)/, $(C_SOURCE_FILENAMES:.c=.o) )
+ASSEMBLER_OBJECTS = $(addprefix $(OBJECT_DIRECTORY)/, $(ASSEMBLER_SOURCE_FILENAMES:.s=.o) )
+
+# Set source lookup paths
+vpath %.c $(C_SOURCE_PATHS)
+vpath %.s $(ASSEMBLER_SOURCE_PATHS)
+
+# Include automatically previously generated dependencies
+-include $(addprefix $(OBJECT_DIRECTORY)/, $(COBJS:.o=.d))
+
+### Targets
+debug: CFLAGS += -DDEBUG -g3 -O0
+debug: ASMFLAGS += -DDEBUG -g3 -O0
+debug: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex
+
+.PHONY: release
+release: clean
+release: CFLAGS += -DNDEBUG -O3
+release: ASMFLAGS += -DNDEBUG -O3
+release: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex
+
+echostuff:
+ @echo C_OBJECTS: [$(C_OBJECTS)]
+ @echo C_SOURCE_FILES: [$(C_SOURCE_FILES)]
+ @echo C_SOURCE_PATHS: [$(C_SOURCE_PATHS)]
+
+## Create build directories
+$(BUILD_DIRECTORIES):
+ $(MK) $@
+
+## Create objects from C source files
+$(OBJECT_DIRECTORY)/%.o: %.c
+# Build header dependencies
+ $(CC) $(CFLAGS) $(INCLUDEPATHS) -M $< -MF "$(@:.o=.d)" -MT $@
+# Do the actual compilation
+ $(CC) $(CFLAGS) $(INCLUDEPATHS) -c -o $@ $<
+
+## Assemble .s files
+$(OBJECT_DIRECTORY)/%.o: %.s
+ $(CC) $(ASMFLAGS) $(INCLUDEPATHS) -c -o $@ $<
+
+## Link C and assembler objects to an .out file
+$(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out: $(BUILD_DIRECTORIES) $(C_OBJECTS) $(ASSEMBLER_OBJECTS) $(LIBRARIES)
+ $(CC) $(LDFLAGS) $(C_OBJECTS) $(ASSEMBLER_OBJECTS) $(LIBRARIES) -o $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out
+
+## Create binary .bin file from the .out file
+$(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out
+ $(OBJCOPY) -O binary $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin
+
+## Create binary .hex file from the .out file
+$(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out
+ $(OBJCOPY) -O ihex $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex
+
+## Default build target
+.PHONY: all
+all: clean release
+
+clean:
+ $(RM) $(OUTPUT_BINARY_DIRECTORY)
+
+
+$(OUTPUT_BINARY_DIRECTORY)/erase_all.jlink : $(BUILD_DIRECTORIES)
+ echo " \
+r \n\
+h \n\
+w4 0x4001e504,2 # enable erase all \n\
+w4 0x4001e50c,1 # start erasing \n\
+sleep 1000 \n\
+r \n\
+qc \n\
+ " \
+ > $(OUTPUT_BINARY_DIRECTORY)/erase_all.jlink
+
+erase_all: $(OUTPUT_BINARY_DIRECTORY)/erase_all.jlink
+ $(JLINK) -CommanderScript $(OUTPUT_BINARY_DIRECTORY)/erase_all.jlink; [ "$$?" -eq 1 ]
+
+$(OUTPUT_BINARY_DIRECTORY)/flash_softdevice.jlink: $(BUILD_DIRECTORIES)
+ echo " \n\
+r \n\
+h \n\
+w4 0x4001e504,2 # enable erase \n\
+w4 0x4001e50c,1 # start erasing all \n\
+sleep 1000 \n\
+w4 0x10001000, 0x14000 \n\
+w4 0x4001e504,1 \n\
+loadbin \"$(SOFTDEVICE_BIN_PATH)\", 0x0 \n\
+r \n\
+qc \n\
+" > $(OUTPUT_BINARY_DIRECTORY)/flash_softdevice.jlink
+
+flash_softdevice: $(OUTPUT_BINARY_DIRECTORY)/flash_softdevice.jlink
+ $(JLINK) -CommanderScript $(OUTPUT_BINARY_DIRECTORY)/flash_softdevice.jlink; [ "$$?" -eq 1 ]
+
+$(OUTPUT_BINARY_DIRECTORY)/flash.jlink: $(BUILD_DIRECTORIES) $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin
+ echo " \n\
+r \n\
+h \n\
+w4 0x4001e504,2 # enable erase \n\
+" > $(OUTPUT_BINARY_DIRECTORY)/flash.jlink
+ binsize=`stat -f %z $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin`; \
+ starthexaddr=0x14000; \
+ startaddr=`printf "%d" $$starthexaddr`; \
+ page=0; \
+ while [ $$binsize -gt 0 ]; \
+ do \
+ echo "w4 0x4001e508, $$starthexaddr # start erasing code region 1 page $$page\n" >> $(OUTPUT_BINARY_DIRECTORY)/flash.jlink ; \
+ binsize=`expr $$binsize - 1024`; \
+ page=`expr $$page + 1`; \
+ startaddr=`expr $$startaddr + 1024`; \
+ starthexaddr=`printf "0x%x" $$startaddr`; \
+ done
+ echo "sleep 1000 \n\
+r \n\
+w4 0x4001e504,1 # enable write \n\
+loadbin \"$(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin\", 0x14000 \n\
+verifybin \"$(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin\", 0x14000 \n\
+r \n\
+g \n\
+qc \n\
+" >> $(OUTPUT_BINARY_DIRECTORY)/flash.jlink
+
+flash: $(OUTPUT_BINARY_DIRECTORY)/flash.jlink
+ $(JLINK) -CommanderScript $(OUTPUT_BINARY_DIRECTORY)/flash.jlink; [ "$$?" -eq 1 ]
+
+.PHONY: erase_all flash_softdevice flash