Advertisement
ShadowAdu

Makefile

Jan 13th, 2020
315
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.23 KB | None | 0 0
  1. PROJECT_NAME := Ball_app
  2.  
  3. #path variables, customize to your system
  4. SDK_PATH = G:/Nordic/SDK/Completed/SDK
  5. OUTPUT_BINARY_DIRECTORY := _build
  6. GNU_INSTALL_ROOT = G:/Nordic/GNU Tools Arm Embedded/7 2018-q2-update
  7.  
  8. #setup build directories
  9. OBJECT_DIRECTORY = _build
  10. LISTING_DIRECTORY = $(OBJECT_DIRECTORY)
  11. OUTPUT_BINARY_DIRECTORY = $(OBJECT_DIRECTORY)
  12. BUILD_DIRECTORIES := $(sort $(OBJECT_DIRECTORY) $(OUTPUT_BINARY_DIRECTORY) $(LISTING_DIRECTORY) )
  13.  
  14. #drivers C files
  15. C_SOURCE_FILES = $(SDK_PATH)/components/libraries/util/app_error.c
  16. C_SOURCE_FILES += $(SDK_PATH)/components/libraries/fifo/app_fifo.c
  17. C_SOURCE_FILES += $(SDK_PATH)/components/libraries/util/app_util_platform.c
  18. C_SOURCE_FILES += $(SDK_PATH)/components/libraries/util/nrf_assert.c
  19. C_SOURCE_FILES += $(SDK_PATH)/components/drivers_nrf/delay/nrf_delay.c
  20. C_SOURCE_FILES += $(SDK_PATH)/components/drivers_nrf/common/nrf_drv_common.c
  21. C_SOURCE_FILES += $(SDK_PATH)/components/drivers_nrf/gpiote/nrf_drv_gpiote.c
  22. C_SOURCE_FILES += $(SDK_PATH)/components/drivers_nrf/uart/nrf_drv_uart.c
  23. C_SOURCE_FILES += $(SDK_PATH)/components/drivers_nrf/pstorage/pstorage.c
  24. C_SOURCE_FILES += $(SDK_PATH)/components/drivers_nrf/timer/nrf_drv_timer.c
  25. C_SOURCE_FILES += $(SDK_PATH)/components/drivers_nrf/ppi/nrf_drv_ppi.c
  26. C_SOURCE_FILES += $(SDK_PATH)/components/drivers_nrf/clock/nrf_drv_clock.c
  27. C_SOURCE_FILES += $(SDK_PATH)/components/drivers_nrf/twi_master/nrf_drv_twi.c
  28. C_SOURCE_FILES += $(SDK_PATH)/components/libraries/timer/app_timer.c
  29. C_SOURCE_FILES += $(SDK_PATH)/components/libraries/uart/app_uart.c
  30. C_SOURCE_FILES += $(SDK_PATH)/components/libraries/pwm/app_pwm.c
  31.  
  32.  
  33. #c source files to compile, add files from your project to compile here
  34. C_SOURCE_FILES += custom_peripheral_service.c
  35. C_SOURCE_FILES += ble_functions.c
  36. C_SOURCE_FILES += BNO055_driver.c
  37. C_SOURCE_FILES += pwm_functions.c
  38. C_SOURCE_FILES += state_definitions.c
  39. C_SOURCE_FILES += led_functions.c
  40. C_SOURCE_FILES += timers.c
  41. C_SOURCE_FILES += sensor_functions.c
  42. C_SOURCE_FILES += buzzer_functions.c
  43. C_SOURCE_FILES += twi_functions.c
  44. C_SOURCE_FILES += gauge_functions.c
  45. C_SOURCE_FILES += main.c
  46.  
  47.  
  48. #BLE C files
  49. C_SOURCE_FILES += $(SDK_PATH)/components/ble/common/ble_conn_params.c
  50. C_SOURCE_FILES += $(SDK_PATH)/components/ble/common/ble_advdata.c
  51. C_SOURCE_FILES += $(SDK_PATH)/components/ble/common/ble_srv_common.c
  52. C_SOURCE_FILES += $(SDK_PATH)/components/ble/ble_advertising/ble_advertising.c
  53. C_SOURCE_FILES += $(SDK_PATH)/components/softdevice/common/softdevice_handler/softdevice_handler.c
  54. C_SOURCE_FILES += $(SDK_PATH)/components/ble/ble_services/ble_dis/ble_dis.c
  55. #system files
  56. C_SOURCE_FILES += $(SDK_PATH)/components/toolchain/system_nrf51.c
  57.  
  58. #assembly files to compile
  59. ASM_SOURCE_FILES += $(SDK_PATH)/components/toolchain/gcc/gcc_startup_nrf51.s
  60.  
  61. #include paths
  62. INC_PATHS = -I.
  63. INC_PATHS += -I$(SDK_PATH)/examples/ble_peripheral/ble_app_hrs/config
  64. INC_PATHS += -I$(SDK_PATH)/examples/bsp
  65. INC_PATHS += -I$(SDK_PATH)/components/toolchain/gcc
  66. INC_PATHS += -I$(SDK_PATH)/components/toolchain
  67. INC_PATHS += -I$(SDK_PATH)/components/device
  68. INC_PATHS += -I$(SDK_PATH)/components/drivers_nrf/config
  69. INC_PATHS += -I$(SDK_PATH)/components/drivers_nrf/pstorage
  70. INC_PATHS += -I$(SDK_PATH)/components/drivers_nrf/gpiote
  71. INC_PATHS += -I$(SDK_PATH)/components/drivers_nrf/hal
  72. INC_PATHS += -I$(SDK_PATH)/components/drivers_nrf/delay
  73. INC_PATHS += -I$(SDK_PATH)/components/drivers_nrf/uart
  74. INC_PATHS += -I$(SDK_PATH)/components/drivers_nrf/common
  75. INC_PATHS += -I$(SDK_PATH)/components/drivers_nrf/timer
  76. INC_PATHS += -I$(SDK_PATH)/components/drivers_nrf/ppi
  77. INC_PATHS += -I$(SDK_PATH)/components/drivers_nrf/twi_master
  78. INC_PATHS += -I$(SDK_PATH)/components/drivers_nrf/clock
  79. INC_PATHS += -I$(SDK_PATH)/components/ble/common
  80. INC_PATHS += -I$(SDK_PATH)/components/ble/device_manager
  81. INC_PATHS += -I$(SDK_PATH)/components/ble/ble_services/ble_dis
  82. INC_PATHS += -I$(SDK_PATH)/components/ble/ble_advertising
  83. INC_PATHS += -I$(SDK_PATH)/components/libraries/fifo
  84. INC_PATHS += -I$(SDK_PATH)/components/libraries/util
  85. INC_PATHS += -I$(SDK_PATH)/components/libraries/sensorsim
  86. INC_PATHS += -I$(SDK_PATH)/components/libraries/button
  87. INC_PATHS += -I$(SDK_PATH)/components/libraries/pwm
  88. INC_PATHS += -I$(SDK_PATH)/components/libraries/timer
  89. INC_PATHS += -I$(SDK_PATH)/components/libraries/trace
  90. INC_PATHS += -I$(SDK_PATH)/components/libraries/uart
  91. INC_PATHS += -I$(SDK_PATH)/components/softdevice/s110/headers
  92. INC_PATHS += -I$(SDK_PATH)/components/softdevice/common/softdevice_handler
  93. #compile flags
  94. CFLAGS = -DSOFTDEVICE_PRESENT
  95. CFLAGS += -DNRF51
  96. CFLAGS += -DBOARD_PCA10031
  97. CFLAGS += -DS110
  98. CFLAGS += -DDEBUG
  99. CFLAGS += -DBLE_STACK_SUPPORT_REQD
  100. CFLAGS += -mcpu=cortex-m0
  101. CFLAGS += -mthumb -mabi=aapcs --std=gnu99
  102. CFLAGS += -Wall -O0 -g3
  103. CFLAGS += -mfloat-abi=soft
  104. # keep every function in separate section. This will allow linker to dump unused functions
  105. CFLAGS += -ffunction-sections -fdata-sections -fno-strict-aliasing
  106. CFLAGS += -fno-builtin --short-enums
  107.  
  108. #linker flags
  109. # keep every function in separate section. This will allow linker to dump unused functions
  110. export OUTPUT_FILENAME
  111. LDFLAGS += -Xlinker -Map=$(LISTING_DIRECTORY)/$(OUTPUT_FILENAME).map
  112. LDFLAGS += -mthumb -mabi=aapcs -L $(SDK_PATH)/components/toolchain/gcc -T$(LINKER_SCRIPT)
  113. LDFLAGS += -mcpu=cortex-m0
  114. # let linker to dump unused sections
  115. LDFLAGS += -Wl,--gc-sections
  116. # use newlib in nano version
  117. LDFLAGS += --specs=nano.specs -lc -lnosys
  118.  
  119. # Assembler flags
  120. ASMFLAGS += -x assembler-with-cpp
  121. ASMFLAGS += -DNRF51
  122.  
  123. ###
  124. # Everything below this line is automatic and typically unneccesary to modify
  125. ###
  126. # Toolchain commands
  127. GNU_PREFIX := arm-none-eabi
  128. CC := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-gcc"
  129. AS := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-as"
  130. AR := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ar" -r
  131. LD := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ld"
  132. NM := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-nm"
  133. OBJDUMP := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objdump"
  134. OBJCOPY := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objcopy"
  135. SIZE := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-size"
  136.  
  137. MAKEFILE_NAME := $(MAKEFILE_LIST)
  138. MAKEFILE_DIR := $(dir $(MAKEFILE_NAME) )
  139.  
  140. #command line commands
  141. MK := mkdir
  142. RM := rm -rf
  143.  
  144. #default target - first one defined
  145. default: clean nrf51422_xxaa
  146.  
  147. #building all targets
  148. all: clean
  149. $(MAKE) -f $(MAKEFILE_NAME) -C $(MAKEFILE_DIR) -e cleanobj
  150. $(MAKE) -f $(MAKEFILE_NAME) -C $(MAKEFILE_DIR) -e nrf51422_xxaa
  151.  
  152.  
  153. #function for removing duplicates in a list
  154. remduplicates = $(strip $(if $1,$(firstword $1) $(call remduplicates,$(filter-out $(firstword $1),$1))))
  155.  
  156. C_SOURCE_FILE_NAMES = $(notdir $(C_SOURCE_FILES))
  157. C_PATHS = $(call remduplicates, $(dir $(C_SOURCE_FILES) ) )
  158. C_OBJECTS = $(addprefix $(OBJECT_DIRECTORY)/, $(C_SOURCE_FILE_NAMES:.c=.o) )
  159.  
  160. ASM_SOURCE_FILE_NAMES = $(notdir $(ASM_SOURCE_FILES))
  161. ASM_PATHS = $(call remduplicates, $(dir $(ASM_SOURCE_FILES) ))
  162. ASM_OBJECTS = $(addprefix $(OBJECT_DIRECTORY)/, $(ASM_SOURCE_FILE_NAMES:.s=.o) )
  163.  
  164. vpath %.c $(C_PATHS)
  165. vpath %.s $(ASM_PATHS)
  166.  
  167. OBJECTS = $(C_OBJECTS) $(ASM_OBJECTS)
  168.  
  169. nrf51422_xxaa: OUTPUT_FILENAME := $(PROJECT_NAME)
  170. nrf51422_xxaa: LINKER_SCRIPT=ble_app_gcc_nrf51.ld
  171. nrf51422_xxaa: $(BUILD_DIRECTORIES) $(OBJECTS)
  172. @echo Linking target: $(OUTPUT_FILENAME).out
  173. $(CC) $(LDFLAGS) $(OBJECTS) $(LIBS) -o $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out
  174. $(MAKE) -f $(MAKEFILE_NAME) -C $(MAKEFILE_DIR) -e finalize
  175.  
  176. ## Create build directories
  177. $(BUILD_DIRECTORIES):
  178. echo $(MAKEFILE_NAME)
  179. $(MK) $@
  180.  
  181. # Create objects from C SRC files
  182. $(OBJECT_DIRECTORY)/%.o: %.c
  183. @echo Compiling file: $(notdir $<)
  184. $(CC) $(CFLAGS) $(INC_PATHS) -c -o $@ $<
  185.  
  186. # Assemble files
  187. $(OBJECT_DIRECTORY)/%.o: %.s
  188. @echo Compiling file: $(notdir $<)
  189. $(CC) $(ASMFLAGS) $(INC_PATHS) -c -o $@ $<
  190.  
  191.  
  192. # Link
  193. $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out: $(BUILD_DIRECTORIES) $(OBJECTS)
  194. @echo Linking target: $(OUTPUT_FILENAME).out
  195. $(CC) $(LDFLAGS) $(OBJECTS) $(LIBS) -o $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out
  196.  
  197.  
  198. ## Create binary .bin file from the .out file
  199. $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out
  200. @echo Preparing: $(OUTPUT_FILENAME).bin
  201. $(OBJCOPY) -O binary $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin
  202.  
  203. ## Create binary .hex file from the .out file
  204. $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out
  205. @echo Preparing: $(OUTPUT_FILENAME).hex
  206. $(OBJCOPY) -O ihex $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex
  207.  
  208. finalize: genbin genhex echosize
  209.  
  210. genbin:
  211. @echo Preparing: $(OUTPUT_FILENAME).bin
  212. $(OBJCOPY) -O binary $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin
  213.  
  214. ## Create binary .hex file from the .out file
  215. genhex:
  216. @echo Preparing: $(OUTPUT_FILENAME).hex
  217. $(OBJCOPY) -O ihex $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex
  218.  
  219. echosize:
  220. -@echo ""
  221. $(SIZE) $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out
  222. -@echo ""
  223.  
  224. clean:
  225. $(RM) $(BUILD_DIRECTORIES)
  226.  
  227. cleanobj:
  228. $(RM) $(BUILD_DIRECTORIES)/*.o
  229.  
  230. flash:
  231. nrf51_program_sd_app.bat
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement