Makefile 4.3 KB

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