Pārlūkot izejas kodu

refactor: add targets to Makefile instead using MCU envar
feat: add help to Makefile
feat: add some development board targets to Makefile

Dmitry 8 gadi atpakaļ
vecāks
revīzija
6c19a0f802
2 mainītis faili ar 95 papildinājumiem un 60 dzēšanām
  1. 91 54
      Makefile
  2. 4 6
      readme.md

+ 91 - 54
Makefile

@@ -8,43 +8,6 @@ LD           = $(TOOLSET)gcc
 AR           = $(TOOLSET)gcc-ar
 OBJCOPY      = $(TOOLSET)objcopy
 
-STARTUP.stm32l052x8  = $(CMSISDEV)/ST/STM32L0xx/Source/Templates/gcc/startup_stm32l052xx.s
-CFLAGS.stm32l052x8   = -mcpu=cortex-m0plus -mfloat-abi=soft
-DEFINES.stm32l052x8  = STM32L0 STM32L052xx
-LDSCRIPT.stm32l052x8 = demo/stm32l052x8.ld
-
-STARTUP.stm32l100xc  = $(CMSISDEV)/ST/STM32L1xx/Source/Templates/gcc/startup_stm32l100xc.s
-CFLAGS.stm32l100xc   = -mcpu=cortex-m3 -mfloat-abi=soft
-DEFINES.stm32l100xc  = STM32L1 STM32L100xC
-LDSCRIPT.stm32l100xc = demo/stm32l100xc.ld
-
-STARTUP.stm32l476rg  = $(CMSISDEV)/ST/STM32L4xx/Source/Templates/gcc/startup_stm32l476xx.s
-CFLAGS.stm32l476rg   = -mcpu=cortex-m4
-DEFINES.stm32l476rg  = STM32L4 STM32L476xx
-LDSCRIPT.stm32l476rg = demo/stm32l476xg.ld
-
-STARTUP.stm32f103x6  = $(CMSISDEV)/ST/STM32F1xx/Source/Templates/gcc/startup_stm32f103x6.s
-CFLAGS.stm32f103x6   = -mcpu=cortex-m3
-DEFINES.stm32f103x6  = STM32F1 STM32F103x6
-LDSCRIPT.stm32f103x6 = demo/stm32f103x6.ld
-
-MCU         ?= stm32l100xc
-LDFLAGS     ?= --specs=nano.specs -nostartfiles -Wl,--gc-sections
-DSRC         = $(wildcard demo/*.c) $(wildcard demo/*.S) $(STARTUP.$(MCU))
-DOBJ         = $(call fixpath, $(addsuffix .o, $(basename $(DSRC))))
-DOUT         = cdc-loop
-LDSCRIPT     = $(call fixpath, $(LDSCRIPT.$(MCU)))
-
-
-MODULE      ?= libusb_stm32.a
-CFLAGS      ?= $(CFLAGS.$(MCU))
-CFLAGS2      = -mthumb -Os -std=gnu99
-DEFINES     ?= $(DEFINES.$(MCU)) FORCE_C_DRIVER
-INCLUDES    ?= $(CMSISDEV)/ST $(CMSISCORE) inc
-SOURCES      = $(wildcard src/*.c) $(wildcard src/*.S)
-OBJECTS      = $(addsuffix .o, $(basename $(SOURCES)))
-ARFLAGS     ?= -cvq
-
 ifeq ($(OS),Windows_NT)
 	RM = del /Q
 	fixpath = $(strip $(subst /,\, $1))
@@ -53,6 +16,59 @@ else
 	fixpath = $(strip $1)
 endif
 
+MODULE      ?= libusb.a
+CFLAGS      ?= -mcpu=cortex-m3
+DEFINES     ?= STM32F1 STM32F103x6
+
+ARFLAGS      = -cvq
+LDFLAGS      = --specs=nano.specs -nostartfiles -Wl,--gc-sections
+INCLUDES     = $(CMSISDEV)/ST $(CMSISCORE) inc
+CFLAGS2      = -mthumb -Os -std=gnu99
+
+OBJDIR       = obj
+SOURCES      = $(wildcard src/*.c) $(wildcard src/*.S)
+OBJECTS      = $(addprefix $(OBJDIR)/, $(addsuffix .o, $(notdir $(basename $(SOURCES)))))
+DSRC         = $(wildcard demo/*.c) $(wildcard demo/*.S) $(STARTUP)
+DOBJ         = $(addprefix $(OBJDIR)/, $(addsuffix .o, $(notdir $(basename $(DSRC)))))
+DOUT         = cdc_loop
+
+SRCPATH      = $(sort $(dir $(SOURCES) $(DSRC)))
+vpath %.c $(SRCPATH)
+vpath %.S $(SRCPATH)
+vpath %.s $(SRCPATH)
+
+
+help all:
+	@echo 'Usage: make target [program]'
+	@echo 'Available targets are:'
+	@echo '  bluepill'
+	@echo '  stm32f103x6   CDC loopback demo for STM32F103 based boards'
+	@echo '  32l100c-disco'
+	@echo '  stm32l100xc   CDC loopback demo for STM32L100xC based boards'
+	@echo '  32l476rg-nucleo'
+	@echo '  stm32l476rg   CDC loopback demo for STM32L476xG based boards'
+	@echo '  stm32l052x8   CDC loopback demo for STM32L052x8 based boards'
+	@echo '  doc           DOXYGEN documentation'
+	@echo '  module        static library module using following envars (defaults)'
+	@echo '                MODULE  module name (libusb.a)'
+	@echo '                CFLAGS  mcu specified compiler flags (-mcpu=cortex-m3)'
+	@echo '                DEFINES mcu and module specified defines (STM32F1 STM32F103x6)'
+	@echo '                        see USB Device HW driver and core API section for the'
+	@echo '                        compile-time control macros'
+	@echo ' '
+	@echo 'Environmental variables (defaults):'
+	@echo '  CMSIS         Path to the CMSIS V4 or CMSIS V5 root folder ($(CMSIS))'
+	@echo '  CMSISCORE     Path to the CMSIS Core include folder(s) ($(CMSISCORE))'
+	@echo '  CMSISDEV      Path to the CMSIS Device folder ($(CMSISDEV))'
+	@echo '  FLASH         st-link flash utility ($(FLASH))'
+	@echo ' '
+	@echo 'Examples:'
+	@echo '  make bluepill program'
+	@echo '  make module MODULE="usbd.a" CFLAGS="-mcpu=cotrex-m4" DEFINES="STM32L4 STM32L476xx USBD_VBUS_DETECT"'
+
+$(OBJDIR):
+	@mkdir $@
+
 program: $(DOUT).hex
 	$(FLASH) --reset --format ihex write $(DOUT).hex
 
@@ -62,35 +78,56 @@ $(DOUT).hex : $(DOUT).elf
 	@echo building $@
 	@$(OBJCOPY) -O ihex $< $@
 
-$(DOUT).elf : $(DOBJ) $(OBJECTS)
-	@echo building $@ for $(MCU)
-	@$(LD) $(CFLAGS) $(CFLAGS2) $(LDFLAGS) -Wl,--script='$(LDSCRIPT)' -Wl,-Map=$(DOUT).map $(DOBJ) -lc $(OBJECTS) -o $@
+$(DOUT).elf : $(OBJDIR) $(DOBJ) $(OBJECTS)
+	@echo building $@
+	@$(LD) $(CFLAGS) $(CFLAGS2) $(LDFLAGS) -Wl,--script='$(LDSCRIPT)' -Wl,-Map=$(DOUT).map $(DOBJ) $(OBJECTS) -o $@
 
 clean:
-	$(RM) $(DOUT).* $(OBJECTS)
+	@$(RM) $(DOUT).*
+	@$(RM) $(call fixpath, $(OBJDIR)/*.*)
 
 doc:
 	doxygen
 
-module: $(MODULE)
+module: clean $(MODULE)
 
-
-$(MODULE): $(OBJECTS)
+$(MODULE): $(OBJDIR) $(OBJECTS)
 	@$(AR) $(ARFLAGS) $(MODULE) $(OBJECTS)
 
-%.o: %.c
-	@echo compiling $@
+$(OBJDIR)/%.o: %.c
+	@echo compiling $<
 	@$(CC) $(CFLAGS) $(CFLAGS2) $(addprefix -D, $(DEFINES)) $(addprefix -I, $(INCLUDES)) -c $< -o $@
 
-%.o: %.S
-	@echo assembling $@
+$(OBJDIR)/%.o: %.S
+	@echo assembling $<
 	@$(CC) $(CFLAGS) $(CFLAGS2) $(addprefix -D, $(DEFINES)) $(addprefix -I, $(INCLUDES)) -c $< -o $@
 
-%.o: %.s
-	@echo assembling $@
+$(OBJDIR)/%.o: %.s
+	@echo assembling $<
 	@$(CC) $(CFLAGS) $(CFLAGS2) $(addprefix -D, $(DEFINES)) $(addprefix -I, $(INCLUDES)) -c $< -o $@
 
-
-.INTERMEDIATE: $(OBJECTS) $(DOBJ)
-
-.PHONY: module doc demo clean program
+.PHONY: module doc demo clean program help all
+
+stm32f103x6 bluepill:
+	@$(MAKE) clean demo STARTUP='$(CMSISDEV)/ST/STM32F1xx/Source/Templates/gcc/startup_stm32f103x6.s' \
+						LDSCRIPT='demo/stm32f103x6.ld' \
+						DEFINES='STM32F1 STM32F103x6 USBD_SOF_DISABLED USBD_ASM_DRIVER' \
+						CFLAGS='-mcpu=cortex-m3 -mthumb'
+
+stm32l052x8:
+	@$(MAKE) clean demo STARTUP='$(CMSISDEV)/ST/STM32L0xx/Source/Templates/gcc/startup_stm32l052xx.s' \
+						LDSCRIPT='demo/stm32l052x8.ld' \
+						DEFINES='STM32L0 STM32L052xx USBD_SOF_DISABLED' \
+						CFLAGS='-mcpu=cortex-m0plus -mthumb'
+
+stm32l100xc 32l100c-disco:
+	@$(MAKE) clean demo STARTUP='$(CMSISDEV)/ST/STM32L1xx/Source/Templates/gcc/startup_stm32l100xc.s' \
+						LDSCRIPT='demo/stm32l100xc.ld' \
+						DEFINES='STM32L1 STM32L100xC USBD_SOF_DISABLED' \
+						CFLAGS='-mcpu=cortex-m3 -mthumb'
+
+stm32l476xg 32l476rg-nucleo:
+	@$(MAKE) clean demo STARTUP='$(CMSISDEV)/ST/STM32L4xx/Source/Templates/gcc/startup_stm32l476xx.s' \
+						LDSCRIPT='demo/stm32l476xg.ld' \
+						DEFINES='STM32L4 STM32L476xx USBD_SOF_DISABLED' \
+						CFLAGS='-mcpu=cortex-m4 -mthumb'

+ 4 - 6
readme.md

@@ -44,14 +44,12 @@ make module MODULE=path/module.a DEFINES="mcu spcified defines" CFLAGS="cpu cpec
 ```
 + to build demo
 ```
-make demo MCU=stm32l100xc
-make demo MCU=stm32l052x8
-make demo MCU=stm32l476rg
-make demo MCU=stm32f103x6
+make bluepill program
+make stm32l052x8
 ```
-+ to flash demo using st-flash
++ to get a help
 ```
-make program
+make help
 ```
 
 ### Default values: ###