Makefile 4.4 KB

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