Makefile 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. ######################################
  2. # STM32F0xx Makefile
  3. ######################################
  4. ######################################
  5. # target
  6. ######################################
  7. TARGET = El12
  8. ######################################
  9. # programmator
  10. ######################################
  11. PROGRAMMATOR = "C:/ARM/STMicroelectronics/STM32 ST-LINK Utility/ST-LINK Utility/ST-LINK_CLI.exe"
  12. ######################################
  13. # building variables
  14. ######################################
  15. # debug build?
  16. DEBUG = 0
  17. #######################################
  18. # paths
  19. #######################################
  20. # source path
  21. VPATH = src MCU
  22. # firmware library path
  23. PERIPHLIBPATH = MCU
  24. VPATH += $(PERIPHLIBPATH)/CMSIS/Device/ST/STM32F0xx/Source
  25. # Build path
  26. BUILD_DIR = build
  27. # #####################################
  28. # source
  29. # #####################################
  30. SRCS = \
  31. main.c \
  32. board.c \
  33. rtos.c \
  34. system_stm32f0xx.c
  35. SRCSASM = startup_stm32f030x6.s
  36. # #####################################
  37. # firmware library
  38. # #####################################
  39. PERIPHLIB_SOURCES =
  40. #######################################
  41. # binaries
  42. #######################################
  43. CC = arm-none-eabi-gcc
  44. AS = arm-none-eabi-gcc -x assembler-with-cpp
  45. CP = arm-none-eabi-objcopy
  46. AR = arm-none-eabi-ar
  47. SZ = arm-none-eabi-size
  48. HEX = $(CP) -O ihex
  49. BIN = $(CP) -O binary -S
  50. #######################################
  51. # CFLAGS
  52. #######################################
  53. # macros for gcc
  54. DEFS = -DSTM32F030 -DSTM32F030x6
  55. ifeq ($(DEBUG), 1)
  56. DEFS += -DDEBUG -D_DEBUG
  57. endif
  58. # includes for gcc
  59. INCLUDES = -I./inc
  60. INCLUDES += -I$(PERIPHLIBPATH)/CMSIS/Include
  61. INCLUDES += -I$(PERIPHLIBPATH)/CMSIS/Device/ST/STM32F0xx/Include
  62. # optimization
  63. ifeq ($(DEBUG), 1)
  64. OPT = -O0 -ggdb
  65. else
  66. OPT = -O2
  67. endif
  68. OPT += -ffunction-sections -fdata-sections
  69. OPT += -fomit-frame-pointer -falign-functions=16
  70. OPT += -fno-strict-aliasing -ffast-math -msoft-float -mfloat-abi=soft
  71. # compile gcc flags
  72. CFLAGS = -mthumb -mcpu=cortex-m0 -mtune=cortex-m0 $(DEFS) $(INCLUDES) $(OPT)
  73. ifeq ($(DEBUG), 1)
  74. CFLAGS += -g -gdwarf-2
  75. endif
  76. # Generate dependency information
  77. CFLAGS += -MD -MP -MF .dep/$(@F).d
  78. CFLAGS += -std=gnu99 -Wall -pedantic
  79. #######################################
  80. # LDFLAGS
  81. #######################################
  82. # link script
  83. LDSCRIPT = MCU/STM32F030K6_FLASH.ld
  84. # libraries
  85. LIBS = -lc -lm -lnosys
  86. LIBDIR =
  87. LDFLAGS = -mthumb -mcpu=cortex-m0 -specs=nano.specs -T$(LDSCRIPT) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections
  88. # default action: build all
  89. all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex
  90. load: $(BUILD_DIR)/$(TARGET).hex mcu_prog
  91. #######################################
  92. # build the application
  93. #######################################
  94. # list of firmware library objects
  95. PERIPHLIB_OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(PERIPHLIB_SOURCES:.c=.o)))
  96. # list of C program objects
  97. OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(SRCS:.c=.o)))
  98. # list of ASM program objects
  99. OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(SRCSASM:.s=.o)))
  100. $(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR)
  101. @echo Compiling: $<
  102. @$(CC) -c $(CFLAGS) $< -o $@
  103. $(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR)
  104. @echo Compiling asm: $<
  105. @$(AS) -c $(CFLAGS) $< -o $@
  106. $(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) $(PERIPHLIB_OBJECTS) Makefile
  107. @echo Linking: $@
  108. @$(CC) $(OBJECTS) $(PERIPHLIB_OBJECTS) $(LDFLAGS) -o $@
  109. @echo '--------------------------------------------------------------------'
  110. @$(SZ) $@
  111. @rm -f $(BUILD_DIR)/*.o
  112. $(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
  113. @$(HEX) $< $@
  114. $(BUILD_DIR):
  115. @mkdir -p $@
  116. #######################################
  117. # Load firmware
  118. #######################################
  119. mcu_prog:
  120. @$(PROGRAMMATOR) -c SWD -ME
  121. @$(PROGRAMMATOR) -c SWD -P "$(BUILD_DIR)/$(TARGET).hex" -V "$(BUILD_DIR)/$(TARGET).hex" -Q -Rst -Run
  122. #######################################
  123. # reset mcu
  124. #######################################
  125. mcu_reset:
  126. @$(PROGRAMMATOR) -c SWD -Rst -Run
  127. #######################################
  128. # delete all user application files
  129. #######################################
  130. clean:
  131. @-rm -fR .dep $(BUILD_DIR)
  132. #######################################
  133. # custom
  134. #######################################
  135. flash: all
  136. @flash.cmd
  137. default: all
  138. #
  139. # Include the dependency files, should be the last of the makefile
  140. #
  141. -include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
  142. # *** EOF ***