Rev 3 | Rev 9 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 2 | mjames | 1 | ############################################# |
| 2 | # sort out basic conditional information FIRST |
||
| 3 | |||
| 4 | #put object paths in the right place |
||
| 5 | FLASH_OUTPUT="ERROR no FLASH_OUTPUT for "$(MAKECMDGOALS) |
||
| 6 | |||
| 7 | ifeq ($(MAKECMDGOALS),clean-debug-enginebay-l152) |
||
| 8 | FLASH_OUTPUT=debug-enginebay-l152 |
||
| 9 | endif |
||
| 10 | |||
| 11 | ifeq ($(MAKECMDGOALS),clean-release-enginebay-l152) |
||
| 12 | FLASH_OUTPUT=release-enginebay-l152 |
||
| 13 | endif |
||
| 14 | |||
| 15 | ifeq ($(MAKECMDGOALS),debug-enginebay-l152) |
||
| 16 | CFLAGS += -g -Og -DDEBUG |
||
| 17 | ASFLAGS+= -g |
||
| 18 | LDFLAGS+= -g |
||
| 19 | FLASH_OUTPUT=debug-enginebay-l152 |
||
| 20 | endif |
||
| 21 | |||
| 22 | |||
| 23 | ifeq ($(MAKECMDGOALS),release-enginebay-l152) |
||
| 24 | CFLAGS += $(OPTIMIZATION) -DRELEASE |
||
| 25 | FLASH_OUTPUT=release-enginebay-l152 |
||
| 26 | endif |
||
| 27 | |||
| 28 | |||
| 29 | |||
| 30 | #------------------------------------------------------------------------------- |
||
| 31 | # User-modifiable options |
||
| 32 | #------------------------------------------------------------------------------- |
||
| 33 | |||
| 34 | # Tool suffix when cross-compiling |
||
| 35 | CROSS_COMPILE = arm-none-eabi- |
||
| 36 | |||
| 37 | CC = $(CROSS_COMPILE)gcc |
||
| 38 | SIZE = $(CROSS_COMPILE)size |
||
| 39 | STRIP = $(CROSS_COMPILE)strip |
||
| 40 | OBJCOPY = $(CROSS_COMPILE)objcopy |
||
| 41 | OBJDUMP = $(CROSS_COMPILE)objdump |
||
| 42 | LD = $(CROSS_COMPILE)ld |
||
| 43 | AS = $(CROSS_COMPILE)as |
||
| 44 | AR = $(CROSS_COMPILE)ar |
||
| 45 | |||
| 46 | ######################################################### |
||
| 47 | CPUFLAGS = -mfloat-abi=soft -mcpu=cortex-m3 -mthumb |
||
| 48 | CFLAGS += -Wall -fno-common -c $(CPUFLAGS) |
||
| 49 | CFLAGS += $(INCLUDES) -DTRACE_LEVEL=$(TRACE_LEVEL) |
||
| 50 | CFLAGS += -DUSE_STDPERIPH_DRIVER |
||
| 51 | CFLAGS += -DHSE_Value=8000000L |
||
| 52 | CFLAGS += -DEMB_FLASH -DSTM32L152xE -DUSE_USB_FS |
||
| 53 | #-DSTM32F10X_MD |
||
| 54 | CFLAGS += -fdata-sections -ffunction-sections |
||
| 55 | ASFLAGS = -mapcs-32 |
||
| 56 | LDFLAGS += -nostartfiles |
||
| 57 | LDFLAGS += $(CPUFLAGS) --specs=nano.specs |
||
| 58 | OBJCOPYFLAGS = -O binary |
||
| 59 | OBJDUMPFLAGS = -x --syms -S |
||
| 60 | |||
| 61 | # Trace level used for compilation |
||
| 62 | # (can be overriden by adding TRACE_LEVEL=#number to the command-line) |
||
| 63 | # TRACE_LEVEL_DEBUG 5 |
||
| 64 | # TRACE_LEVEL_INFO 4 |
||
| 65 | # TRACE_LEVEL_WARNING 3 |
||
| 66 | # TRACE_LEVEL_ERROR 2 |
||
| 67 | # TRACE_LEVEL_FATAL 1 |
||
| 68 | # TRACE_LEVEL_NO_TRACE 0 |
||
| 69 | |||
| 70 | TRACE_LEVEL = 0 |
||
| 71 | |||
| 72 | # Optimization level |
||
| 73 | OPTIMIZATION = -O2 |
||
| 74 | # Output file basename |
||
| 75 | |||
| 76 | #tell gcc to generate dependency file |
||
| 77 | CFLAGS += -MMD |
||
| 78 | |||
| 79 | FLASH_LINKER_SCRIPT = STM32L152RETx_FLASH.ld |
||
| 80 | |||
| 81 | #where the project is based relative to this directory |
||
| 82 | PROJROOT = . |
||
| 83 | # Output directories |
||
| 84 | BIN = $(PROJROOT)/Build |
||
| 85 | |||
| 86 | OBJPATH = $(BIN)/$(FLASH_OUTPUT) |
||
| 87 | |||
| 88 | DEPENDS = Makefile |
||
| 89 | |||
| 90 | |||
| 91 | ############################################# |
||
| 92 | PRJ_SRC = ./Src |
||
| 93 | PRJ_INC = ./Inc |
||
| 94 | |||
| 95 | PRJ_OBJ = $(OBJPATH)/PRJ_Obj |
||
| 96 | INCLUDES += -I$(PRJ_INC) |
||
| 97 | |||
| 98 | PRJ_OBJECTS = $(PRJ_OBJ)/main.o |
||
| 99 | PRJ_OBJECTS += $(PRJ_OBJ)/stm32l1xx_hal_msp.o |
||
| 100 | PRJ_OBJECTS += $(PRJ_OBJ)/stm32l1xx_it.o |
||
| 3 | mjames | 101 | PRJ_OBJECTS += $(PRJ_OBJ)/ap_math.o |
| 102 | PRJ_OBJECTS += $(PRJ_OBJ)/misc.o |
||
| 6 | mjames | 103 | PRJ_OBJECTS += $(PRJ_OBJ)/serial.o |
| 2 | mjames | 104 | |
| 3 | mjames | 105 | C_OBJECTS += $(PRJ_OBJECTS) |
| 2 | mjames | 106 | |
| 107 | $(PRJ_OBJ)/%.o: $(PRJ_SRC)/%.c $(DEPENDS) |
||
| 108 | $(CC) $(CFLAGS) $< -o $@ |
||
| 109 | |||
| 110 | |||
| 111 | |||
| 112 | |||
| 113 | ##################################################### |
||
| 114 | #Drivers for CMSIS |
||
| 115 | DRV_PATH= Drivers/CMSIS/Device/ST/STM32L1xx |
||
| 116 | DRV_SRC = $(DRV_PATH)/Source/Templates |
||
| 117 | DRV_INC = $(DRV_PATH)/Include |
||
| 118 | DRV_OBJ = $(OBJPATH)/Drv_Obj |
||
| 119 | |||
| 120 | INCLUDES += -I$(DRV_INC) |
||
| 121 | INCLUDES += -IDrivers/CMSIS/Include |
||
| 122 | |||
| 123 | DRV_OBJECTS = $(DRV_OBJ)/system_stm32l1xx.o |
||
| 124 | |||
| 125 | C_OBJECTS += $(DRV_OBJECTS) |
||
| 126 | |||
| 127 | $(DRV_OBJ)/%.o: $(DRV_SRC)/%.c $(DEPENDS) |
||
| 128 | $(CC) $(CFLAGS) $< -o $@ |
||
| 129 | |||
| 130 | |||
| 131 | ##################################################### |
||
| 132 | #Drivers for HAL |
||
| 133 | HAL_PATH= Drivers/STM32L1xx_HAL_Driver |
||
| 134 | HAL_SRC = $(HAL_PATH)/Src |
||
| 135 | HAL_INC = $(HAL_PATH)/Inc |
||
| 136 | HAL_OBJ = $(OBJPATH)/Hal_Obj |
||
| 137 | |||
| 138 | INCLUDES += -I$(HAL_INC) |
||
| 139 | |||
| 140 | HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_adc_ex.o |
||
| 141 | HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_adc.o |
||
| 142 | |||
| 143 | HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_cortex.o |
||
| 144 | #HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_dac_ex.o |
||
| 145 | #HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_dac.o |
||
| 146 | HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_dma.o |
||
| 147 | HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_flash_ex.o |
||
| 148 | HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_flash_ramfunc.o |
||
| 149 | HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_flash.o |
||
| 150 | HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_gpio.o |
||
| 151 | #HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_i2c.o |
||
| 152 | #HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_irda.o |
||
| 153 | #HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_pcd_ex.o |
||
| 154 | #HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_pcd.o |
||
| 155 | HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_pwr_ex.o |
||
| 156 | HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_pwr.o |
||
| 157 | HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_rcc_ex.o |
||
| 158 | HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_rcc.o |
||
| 159 | HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_spi_ex.o |
||
| 160 | HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_spi.o |
||
| 161 | HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_tim_ex.o |
||
| 162 | HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_tim.o |
||
| 163 | HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_uart.o |
||
| 164 | HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal.o |
||
| 165 | |||
| 166 | C_OBJECTS += $(HAL_OBJECTS) |
||
| 167 | |||
| 168 | $(HAL_OBJ)/%.o: $(HAL_SRC)/%.c $(DEPENDS) |
||
| 169 | $(CC) $(CFLAGS) $< -o $@ |
||
| 170 | |||
| 171 | |||
| 172 | ############################################# |
||
| 173 | |||
| 174 | # this one has assembler too |
||
| 175 | $(DRV_OBJ)/startup_stm32l152xe.o : $(DRV_SRC)/gcc/startup_stm32l152xe.s $(DEPENDS) |
||
| 176 | $(AS) $(ASFLAGS) $< -o $@ |
||
| 177 | |||
| 178 | ASM_OBJECTS += $(DRV_OBJ)/startup_stm32l152xe.o |
||
| 179 | |||
| 180 | ############################################# |
||
| 181 | # USB CDC |
||
| 182 | |||
| 183 | |||
| 184 | CDC_PATH = Middlewares/ST/STM32_USB_Device_Library/Class/CDC |
||
| 185 | CDC_SRC = $(CDC_PATH)/Src |
||
| 186 | CDC_INC = $(CDC_PATH)/Inc |
||
| 187 | CDC_OBJ = $(OBJPATH)/CDC_Obj |
||
| 188 | INCLUDES += -I$(CDC_INC) |
||
| 189 | |||
| 190 | #CDC_OBJECTS = $(CDC_OBJ)/usbd_cdc_if_template.o |
||
| 191 | #CDC_OBJECTS += $(CDC_OBJ)/usbd_cdc.o |
||
| 192 | |||
| 193 | C_OBJECTS += $(CDC_OBJECTS) |
||
| 194 | |||
| 195 | $(CDC_OBJ)/%.o: $(CDC_SRC)/%.c $(DEPENDS) |
||
| 196 | $(CC) $(CFLAGS) $< -o $@ |
||
| 197 | |||
| 198 | |||
| 199 | ####################################################### |
||
| 200 | |||
| 201 | USB_CORE = Middlewares/ST/STM32_USB_Device_Library/Core |
||
| 202 | USB_SRC = $(USB_CORE)/Src |
||
| 203 | USB_INC = $(USB_CORE)/Inc |
||
| 204 | |||
| 205 | USB_OBJ = $(OBJPATH)/USB_Obj |
||
| 206 | INCLUDES += -I$(USB_INC) |
||
| 207 | |||
| 208 | #USB_OBJECTS = $(USB_OBJ)/usbd_conf_template.o |
||
| 209 | #USB_OBJECTS += $(USB_OBJ)/usbd_core.o |
||
| 210 | #USB_OBJECTS += $(USB_OBJ)/usbd_ctlreq.o |
||
| 211 | #USB_OBJECTS += $(USB_OBJ)/usbd_ioreq.o |
||
| 212 | |||
| 213 | C_OBJECTS += $(USB_OBJECTS) |
||
| 214 | |||
| 215 | |||
| 216 | $(USB_OBJ)/%.o: $(USB_SRC)/%.c $(DEPENDS) |
||
| 217 | $(CC) $(CFLAGS) $< -o $@ |
||
| 218 | |||
| 219 | ############################################# |
||
| 220 | # SPI OLED screen |
||
| 221 | |||
| 222 | |||
| 223 | OLED_PATH = SSD1306_lib |
||
| 224 | OLED_SRC = $(OLED_PATH) |
||
| 225 | OLED_INC = $(OLED_PATH) |
||
| 226 | OLED_OBJ = $(OBJPATH)/OLED_Obj |
||
| 227 | INCLUDES += -I$(OLED_INC) |
||
| 228 | |||
| 229 | OLED_OBJECTS += $(OLED_OBJ)/SSD1306.o |
||
| 230 | OLED_OBJECTS += $(OLED_OBJ)/Font.o |
||
| 231 | |||
| 232 | C_OBJECTS += $(OLED_OBJECTS) |
||
| 233 | |||
| 234 | $(OLED_OBJ)/%.o: $(OLED_SRC)/%.c $(DEPENDS) |
||
| 235 | $(CC) $(CFLAGS) $< -o $@ |
||
| 236 | |||
| 237 | |||
| 238 | ############################################# |
||
| 239 | # for version.h |
||
| 240 | INCLUDES += -I. |
||
| 241 | |||
| 242 | $(OBJPATH)/.exist: |
||
| 243 | mkdir -p $(OBJPATH) |
||
| 244 | mkdir -p $(DRV_OBJ) |
||
| 245 | mkdir -p $(HAL_OBJ) |
||
| 246 | mkdir -p $(USB_OBJ) |
||
| 247 | mkdir -p $(CDC_OBJ) |
||
| 248 | mkdir -p $(PRJ_OBJ) |
||
| 249 | mkdir -p $(OLED_OBJ) |
||
| 250 | touch $@ |
||
| 251 | |||
| 252 | |||
| 253 | -include $(HAL_OBJECTS:.o=.d) |
||
| 254 | -include $(DRV_OBJECTS:.o=.d) |
||
| 255 | -include $(CDC_OBJECTS:.o=.d) |
||
| 256 | -include $(USB_OBJECTS:.o=.d) |
||
| 257 | -include $(PRJ_OBJECTS:.o=.d) |
||
| 258 | -include $(OLED_OBJECTS:.o=.d) |
||
| 259 | |||
| 260 | |||
| 261 | |||
| 262 | ########################################### |
||
| 263 | # clean rules |
||
| 264 | clean-debug-enginebay-l152: clean-base |
||
| 265 | -rm -f $(BIN)/debug-enginebay-l152.* |
||
| 266 | |||
| 267 | clean-release-enginebay-l152: clean-base |
||
| 268 | -rm -f $(BIN)/release-enginebay-l152.* |
||
| 269 | |||
| 270 | |||
| 271 | #common clean rule |
||
| 272 | clean-base: |
||
| 273 | rm -f $(DRV_OBJ)/* |
||
| 274 | rm -f $(HAL_OBJ)/* |
||
| 275 | rm -f $(USB_OBJ)/* |
||
| 276 | rm -f $(CDC_OBJ)/* |
||
| 277 | rm -f $(PRJ_OBJ)/* |
||
| 278 | rm -f $(OLED_OBJ)/* |
||
| 279 | |||
| 280 | #Macro expansion in the makefile change the paths used |
||
| 281 | BUILD_TARGETS = $(OBJPATH)/.exist revision flash |
||
| 282 | |||
| 283 | debug-enginebay-l152: $(BUILD_TARGETS) |
||
| 284 | @echo "done debug usb_l152" |
||
| 285 | |||
| 286 | release-enginebay-l152: $(BUILD_TARGETS) |
||
| 287 | @echo "done release usb_l152" |
||
| 288 | |||
| 289 | FINAL_BUILD=$(BIN)/$(FLASH_OUTPUT) |
||
| 290 | |||
| 291 | |||
| 292 | |||
| 293 | |||
| 294 | |||
| 295 | # updated to separate the debug info from the hex file |
||
| 296 | $(FINAL_BUILD).out: $(C_OBJECTS) $(ASM_OBJECTS) $(FLASH_LINKER_SCRIPT) |
||
| 297 | @ echo "..linking" |
||
| 298 | $(CC) $(LDFLAGS) -Wl,--gc-sections -Wl,-Map,$(FINAL_BUILD).map -T$(FLASH_LINKER_SCRIPT) -o $(FINAL_BUILD).out $(C_OBJECTS) $(ASM_OBJECTS) |
||
| 299 | $(OBJCOPY) --only-keep-debug $(FINAL_BUILD).out $(FINAL_BUILD).debug |
||
| 300 | $(OBJCOPY) --strip-all --strip-debug --add-gnu-debuglink=$(FINAL_BUILD).debug --output-target srec --image-base 0x08000000 $(FINAL_BUILD).out $(FINAL_BUILD).s19 |
||
| 301 | |||
| 302 | %.bin : %.out; |
||
| 303 | # $(OBJCOPY) $(OBJCOPYFLAGS) $< $@ |
||
| 304 | $(OBJDUMP) $(OBJDUMPFLAGS) $< > $<.list |
||
| 305 | # $(OBJDUMP) $(OBJDUMPFLAGS) $< |
||
| 306 | @ echo "...completed." |
||
| 307 | |||
| 308 | #getting the Subversion Repository information |
||
| 309 | #This requires that $(PROJROOT)/src/versions.h is NOT under SVN control (or always will see (Modified) version status) |
||
| 310 | revision: |
||
| 311 | touch $(PROJROOT)/versions.h |
||
| 312 | # @echo subWCrev . $(PROJROOT)/versions_base.h $(PROJROOT)/versions.h |
||
| 313 | |||
| 314 | #final target |
||
| 315 | flash:$(FINAL_BUILD).bin |
||
| 316 | |||
| 317 |