Guest User

nrf51_gcc_makefile

a guest
Apr 15th, 2016
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.83 KB | None | 0 0
  1. PROJECT_NAME := ble_app_beacon_s110_pca10028
  2.  
  3. export OUTPUT_FILENAME
  4. #MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
  5. MAKEFILE_NAME := $(MAKEFILE_LIST)
  6. MAKEFILE_DIR := $(dir $(MAKEFILE_NAME) )
  7.  
  8. TEMPLATE_PATH = ../../../../../../components/toolchain/gcc
  9. ifeq ($(OS),Windows_NT)
  10. include $(TEMPLATE_PATH)/Makefile.windows
  11. else
  12. include $(TEMPLATE_PATH)/Makefile.posix
  13. endif
  14.  
  15. MK := mkdir
  16. RM := rm -rf
  17.  
  18. #echo suspend
  19. ifeq ("$(VERBOSE)","1")
  20. NO_ECHO :=
  21. else
  22. NO_ECHO := @
  23. endif
  24.  
  25. # Toolchain commands
  26. CC := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-gcc'
  27. AS := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-as'
  28. AR := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ar' -r
  29. LD := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ld'
  30. NM := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-nm'
  31. OBJDUMP := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objdump'
  32. OBJCOPY := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objcopy'
  33. SIZE := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-size'
  34.  
  35. #function for removing duplicates in a list
  36. remduplicates = $(strip $(if $1,$(firstword $1) $(call remduplicates,$(filter-out $(firstword $1),$1))))
  37.  
  38. #source common to all targets
  39. C_SOURCE_FILES += \
  40. $(abspath ../../../../../../components/libraries/button/app_button.c) \
  41. $(abspath ../../../../../../components/libraries/util/app_error.c) \
  42. $(abspath ../../../../../../components/libraries/fifo/app_fifo.c) \
  43. $(abspath ../../../../../../components/libraries/timer/app_timer.c) \
  44. $(abspath ../../../../../../components/libraries/util/nrf_assert.c) \
  45. $(abspath ../../../../../../components/libraries/uart/app_uart_fifo.c) \
  46. $(abspath ../../../../../../components/drivers_nrf/delay/nrf_delay.c) \
  47. $(abspath ../../../../../../components/drivers_nrf/common/nrf_drv_common.c) \
  48. $(abspath ../../../../../../components/drivers_nrf/gpiote/nrf_drv_gpiote.c) \
  49. $(abspath ../../../../../../components/drivers_nrf/uart/nrf_drv_uart.c) \
  50. $(abspath ../../../../../bsp/bsp.c) \
  51. $(abspath ../../../main.c) \
  52. $(abspath ../../../../../../components/ble/common/ble_advdata.c) \
  53. $(abspath ../../../../../../components/ble/common/ble_conn_params.c) \
  54. $(abspath ../../../../../../components/ble/common/ble_srv_common.c) \
  55. $(abspath ../../../../../../components/toolchain/system_nrf51.c) \
  56. $(abspath ../../../../../../components/softdevice/common/softdevice_handler/softdevice_handler.c) \
  57.  
  58. #assembly files common to all targets
  59. ASM_SOURCE_FILES = $(abspath ../../../../../../components/toolchain/gcc/gcc_startup_nrf51.s)
  60.  
  61. #includes common to all targets
  62. INC_PATHS = -I$(abspath ../../../config/ble_app_beacon_s110_pca10028)
  63. INC_PATHS += -I$(abspath ../../../config)
  64. INC_PATHS += -I$(abspath ../../../../../../components/libraries/util)
  65. INC_PATHS += -I$(abspath ../../../../../../components/toolchain/gcc)
  66. INC_PATHS += -I$(abspath ../../../../../../components/toolchain)
  67. INC_PATHS += -I$(abspath ../../../../../../components/ble/common)
  68. INC_PATHS += -I$(abspath ../../../../../../components/drivers_nrf/common)
  69. INC_PATHS += -I$(abspath ../../../../../../components/softdevice/s110/headers)
  70. INC_PATHS += -I$(abspath ../../../../../../components/drivers_nrf/config)
  71. INC_PATHS += -I$(abspath ../../../../../bsp)
  72. INC_PATHS += -I$(abspath ../../../../../../components/libraries/fifo)
  73. INC_PATHS += -I$(abspath ../../../../../../components/drivers_nrf/gpiote)
  74. INC_PATHS += -I$(abspath ../../../../../../components/drivers_nrf/uart)
  75. INC_PATHS += -I$(abspath ../../../../../../components/libraries/uart)
  76. INC_PATHS += -I$(abspath ../../../../../../components/device)
  77. INC_PATHS += -I$(abspath ../../../../../../components/softdevice/common/softdevice_handler)
  78. INC_PATHS += -I$(abspath ../../../../../../components/drivers_nrf/delay)
  79. INC_PATHS += -I$(abspath ../../../../../../components/libraries/timer)
  80. INC_PATHS += -I$(abspath ../../../../../../components/drivers_nrf/hal)
  81. INC_PATHS += -I$(abspath ../../../../../../components/libraries/button)
  82.  
  83. OBJECT_DIRECTORY = _build
  84. LISTING_DIRECTORY = $(OBJECT_DIRECTORY)
  85. OUTPUT_BINARY_DIRECTORY = $(OBJECT_DIRECTORY)
  86.  
  87. # Sorting removes duplicates
  88. BUILD_DIRECTORIES := $(sort $(OBJECT_DIRECTORY) $(OUTPUT_BINARY_DIRECTORY) $(LISTING_DIRECTORY) )
  89.  
  90. #flags common to all targets
  91. CFLAGS = -DBOARD_PCA10028
  92. CFLAGS += -DSOFTDEVICE_PRESENT
  93. CFLAGS += -DNRF51
  94. CFLAGS += -DS110
  95. CFLAGS += -DBLE_STACK_SUPPORT_REQD
  96. CFLAGS += -DSWI_DISABLE0
  97. CFLAGS += -mcpu=cortex-m0
  98. CFLAGS += -mthumb -mabi=aapcs --std=gnu99
  99. CFLAGS += -Wall -Werror -O3
  100. CFLAGS += -mfloat-abi=soft
  101. # keep every function in separate section. This will allow linker to dump unused functions
  102. CFLAGS += -ffunction-sections -fdata-sections -fno-strict-aliasing
  103. CFLAGS += -fno-builtin --short-enums
  104.  
  105. # keep every function in separate section. This will allow linker to dump unused functions
  106. LDFLAGS += -Xlinker -Map=$(LISTING_DIRECTORY)/$(OUTPUT_FILENAME).map
  107. LDFLAGS += -mthumb -mabi=aapcs -L $(TEMPLATE_PATH) -T$(LINKER_SCRIPT)
  108. LDFLAGS += -mcpu=cortex-m0
  109. # let linker to dump unused sections
  110. LDFLAGS += -Wl,--gc-sections
  111. # use newlib in nano version
  112. LDFLAGS += --specs=nano.specs -lc -lnosys
  113.  
  114. # Assembler flags
  115. ASMFLAGS += -x assembler-with-cpp
  116. ASMFLAGS += -DBOARD_PCA10028
  117. ASMFLAGS += -DSOFTDEVICE_PRESENT
  118. ASMFLAGS += -DNRF51
  119. ASMFLAGS += -DS110
  120. ASMFLAGS += -DBLE_STACK_SUPPORT_REQD
  121. ASMFLAGS += -DSWI_DISABLE0
  122. #default target - first one defined
  123. default: clean nrf51422_xxac_s110
  124.  
  125. #building all targets
  126. all: clean
  127. $(NO_ECHO)$(MAKE) -f $(MAKEFILE_NAME) -C $(MAKEFILE_DIR) -e cleanobj
  128. $(NO_ECHO)$(MAKE) -f $(MAKEFILE_NAME) -C $(MAKEFILE_DIR) -e nrf51422_xxac_s110
  129.  
  130. #target for printing all targets
  131. help:
  132. @echo following targets are available:
  133. @echo nrf51422_xxac_s110
  134. @echo flash_softdevice
  135.  
  136.  
  137. C_SOURCE_FILE_NAMES = $(notdir $(C_SOURCE_FILES))
  138. C_PATHS = $(call remduplicates, $(dir $(C_SOURCE_FILES) ) )
  139. C_OBJECTS = $(addprefix $(OBJECT_DIRECTORY)/, $(C_SOURCE_FILE_NAMES:.c=.o) )
  140.  
  141. ASM_SOURCE_FILE_NAMES = $(notdir $(ASM_SOURCE_FILES))
  142. ASM_PATHS = $(call remduplicates, $(dir $(ASM_SOURCE_FILES) ))
  143. ASM_OBJECTS = $(addprefix $(OBJECT_DIRECTORY)/, $(ASM_SOURCE_FILE_NAMES:.s=.o) )
  144.  
  145. vpath %.c $(C_PATHS)
  146. vpath %.s $(ASM_PATHS)
  147.  
  148. OBJECTS = $(C_OBJECTS) $(ASM_OBJECTS)
  149.  
  150. nrf51422_xxac_s110: OUTPUT_FILENAME := nrf51422_xxac_s110
  151. nrf51422_xxac_s110: LINKER_SCRIPT=ble_app_beacon_gcc_nrf51.ld
  152. nrf51422_xxac_s110: $(BUILD_DIRECTORIES) $(OBJECTS)
  153. @echo Linking target: $(OUTPUT_FILENAME).out
  154. $(NO_ECHO)$(CC) $(LDFLAGS) $(OBJECTS) $(LIBS) -o $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out
  155. $(NO_ECHO)$(MAKE) -f $(MAKEFILE_NAME) -C $(MAKEFILE_DIR) -e finalize
  156.  
  157. ## Create build directories
  158. $(BUILD_DIRECTORIES):
  159. echo $(MAKEFILE_NAME)
  160. $(MK) $@
  161.  
  162. # Create objects from C SRC files
  163. $(OBJECT_DIRECTORY)/%.o: %.c
  164. @echo Compiling file: $(notdir $<)
  165. $(NO_ECHO)$(CC) $(CFLAGS) $(INC_PATHS) -c -o $@ $<
  166.  
  167. # Assemble files
  168. $(OBJECT_DIRECTORY)/%.o: %.s
  169. @echo Compiling file: $(notdir $<)
  170. $(NO_ECHO)$(CC) $(ASMFLAGS) $(INC_PATHS) -c -o $@ $<
  171.  
  172.  
  173. # Link
  174. $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out: $(BUILD_DIRECTORIES) $(OBJECTS)
  175. @echo Linking target: $(OUTPUT_FILENAME).out
  176. $(NO_ECHO)$(CC) $(LDFLAGS) $(OBJECTS) $(LIBS) -o $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out
  177.  
  178.  
  179. ## Create binary .bin file from the .out file
  180. $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out
  181. @echo Preparing: $(OUTPUT_FILENAME).bin
  182. $(NO_ECHO)$(OBJCOPY) -O binary $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin
  183.  
  184. ## Create binary .hex file from the .out file
  185. $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out
  186. @echo Preparing: $(OUTPUT_FILENAME).hex
  187. $(NO_ECHO)$(OBJCOPY) -O ihex $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex
  188.  
  189. finalize: genbin genhex echosize
  190.  
  191. genbin:
  192. @echo Preparing: $(OUTPUT_FILENAME).bin
  193. $(NO_ECHO)$(OBJCOPY) -O binary $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin
  194.  
  195. ## Create binary .hex file from the .out file
  196. genhex:
  197. @echo Preparing: $(OUTPUT_FILENAME).hex
  198. $(NO_ECHO)$(OBJCOPY) -O ihex $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex
  199.  
  200. echosize:
  201. -@echo ''
  202. $(NO_ECHO)$(SIZE) $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out
  203. -@echo ''
  204.  
  205. clean:
  206. $(RM) $(BUILD_DIRECTORIES)
  207.  
  208. cleanobj:
  209. $(RM) $(BUILD_DIRECTORIES)/*.o
  210.  
  211. flash: $(MAKECMDGOALS)
  212. @echo Flashing: $(OUTPUT_BINARY_DIRECTORY)/$<.hex
  213. nrfjprog --program $(OUTPUT_BINARY_DIRECTORY)/$<.hex -f nrf51 --sectorerase
  214. nrfjprog --reset
  215.  
  216. ## Flash softdevice
  217. flash_softdevice:
  218. @echo Flashing: s110_nrf51_8.0.0_softdevice.hex
  219. nrfjprog --program ../../../../../../components/softdevice/s110/hex/s110_nrf51_8.0.0_softdevice.hex -f nrf51 --chiperase
  220. nrfjprog --reset
Advertisement
Add Comment
Please, Sign In to add comment