cygwin_build.bat
@ECHO OFF
::----------------------------------------------------------
:: configure cross compiler path
::----------------------------------------------------------
SET COMPILER_ROOT_PATH=d:/arm-2013-11
SET COMPILER_PATH=D:\arm-2013-11
SET COMPILER_BIN=%COMPILER_PATH%\bin
::----------------------------------------------------------
:: configure Cygwin path
::----------------------------------------------------------
SET CYGWIN_ROOT=d:\cygwin
::----------------------------------------------------------
:: regular configuration, need not change
::----------------------------------------------------------
SET LANG=C.UTF-8
SET PATH=C:\WINDOWS\system32;C:\WINDOWS
SET PATH=%CYGWIN_ROOT%\bin;%COMPILER_BIN%;%PATH%
SET HOME=%~dp0
::----------------------------------------------------------
:: show system settings on start
::----------------------------------------------------------
@ECHO =======================================
@ECHO HOME = %HOME%
@ECHO COMPILER_PATH = %COMPILER_PATH%
@ECHO CYGWIN_ROOT = %CYGWIN_ROOT%
@ECHO =======================================
@bash --login -i
makefile如下:
#*******************************************************************************
# Copyright (c) 2013 semilog Tech LTD. ALL rights reserved.
#
# Filename: Makefile
# Author: gaowei [email protected]
# Date: 2017-05-28
# Version: 0.2
# Description: Created for build stm32 project under windows by using arm gcc
#
# ----------------------------- History --------------------------------------
# Author:
# Date:
# Modification:
#********************************************************************************/
# ------------------------------------------------------------------------------ #
# include other file
# ------------------------------------------------------------------------------ #
include drv_config.mk
# ------------------------------------------------------------------------------ #
# system configure
# ------------------------------------------------------------------------------ #
CPU = cortex-m3
ARCH = armv7-m
PROJECT = RF_machine
LD_SCRIPT_FILE = stm32_flash.ld
# ------------------------------------------------------------------------------ #
# Compiler configuration
# ------------------------------------------------------------------------------ #
COMPILER_ROOT = $(COMPILER_ROOT_PATH)
CROSS_COMPILE = $(COMPILER_ROOT)/bin/arm-none-eabi-
# ------------------------------------------------------------------------------ #
# Path
# ------------------------------------------------------------------------------ #
USER_DIR = ../source/user
DRIVER_DIR = ../source/driver
OUTPUT_DIR = ../output
BIN_DIR = ../bin
# ------------------------------------------------------------------------------ #
# default
# ------------------------------------------------------------------------------ #
default: all
# ------------------------------------------------------------------------------ #
# Compiler tools
# ------------------------------------------------------------------------------ #
AS = $(CROSS_COMPILE)as
LD = $(CROSS_COMPILE)ld
CC = $(CROSS_COMPILE)gcc
CPP = $(CC) -E
AR = $(CROSS_COMPILE)ar
NM = $(CROSS_COMPILE)nm
STRIP = $(CROSS_COMPILE)strip
OBJCOPY = $(CROSS_COMPILE)objcopy
OBJDUMP = $(CROSS_COMPILE)objdump
SIZE = $(CROSS_COMPILE)size
# ------------------------------------------------------------------------------ #
# shell command
# ------------------------------------------------------------------------------ #
CD = cd
MKDIR = mkdir -p
RMDIR = rm -rf
RM = rm -f
SED = sed
ECHO = echo
COPY = cp
CAT = cat
MV = mv
TEST = test
# ------------------------------------------------------------------------------ #
# DEFINE
# ------------------------------------------------------------------------------ #
DEFINE = -DUSE_STDPERIPH_DRIVER
DEFINE += -DSTM32F10X_HD
DEFINE += -DDEBUG
# ------------------------------------------------------------------------------ #
# INCLUDE
# ------------------------------------------------------------------------------ #
INCLUDE = -I$(USER_DIR)/inc
INCLUDE += -I$(DRIVER_DIR)/stm32_lib/inc
INCLUDE += -I$(DRIVER_DIR)/CMSIS/CoreSupport
INCLUDE += -I$(DRIVER_DIR)/CMSIS/STM32F10x
# ------------------------------------------------------------------------------ #
# INCLUDE
# ------------------------------------------------------------------------------ #
LDLIBS = -L$(COMPILER_ROOT)/arm-none-eabi/lib
LDLIBS += -L$(COMPILER_ROOT)/lib/gcc/arm-none-eabi/4.8.1
# ------------------------------------------------------------------------------ #
# CCFLAGS
# ------------------------------------------------------------------------------ #
CCFLAGS = -mcpu=$(CPU) -march=$(ARCH)
CCFLAGS += -mthumb -mthumb-interwork
CCFLAGS += -mapcs-frame -mabi=aapcs
CCFLAGS += -mfloat-abi=softfp
CCFLAGS += -mlittle-endian
CCFLAGS += -fdata-sections -ffunction-sections -fsigned-char
CCFLAGS += -fmessage-length=0
CCFLAGS += -Og -gdwarf-2
CCFLAGS += -Wall -Wextra
DEPFLAGS = -Wp,-MT,$@,-MMD,$(patsubst %.o,%.d,$@)
#DEPFLAGS = -MT $@ -MMD -MP -MF $(patsubst %.o,%.d,$@)
# ------------------------------------------------------------------------------ #
# ASFLAGS
# ------------------------------------------------------------------------------ #
ASFLAGS = -mcpu=$(CPU) -march=$(ARCH)
ASFLAGS += -mthumb -mthumb-interwork
ASFLAGS += -mapcs-frame -mapcs-32
ASFLAGS += -mfloat-abi=softfp
ASFLAGS += -mlittle-endian
ASFLAGS += --warn -gdwarf-2
ASFLAGS += -adhlns=$(patsubst %.o,%.lst,$@)
ASFLAGS += --MD $(patsubst %.o,%.d,$@)
# ------------------------------------------------------------------------------ #
# ARFLAGS
# ------------------------------------------------------------------------------ #
ARFLAGS = -rc
# ------------------------------------------------------------------------------ #
# LDFLAGS
# ------------------------------------------------------------------------------ #
LDFLAGS = --script=$(LD_SCRIPT_FILE)
LDFLAGS += --Map=$(OUTPUT_DIR)/$(PROJECT).map
LDFLAGS += --gc-sections
LDFLAGS += --cref
# ------------------------------------------------------------------------------ #
# ELF To bin hex s19
# ------------------------------------------------------------------------------ #
# intel 32 bit hex
ELF2HEXOUT = -O ihex
# motorola 32 bit hex
ELF2S19OUT = -O srec
# plain bin
ELF2BINOUT = -O binary
# ------------------------------------------------------------------------------ #
# C Source file
# ------------------------------------------------------------------------------ #
USER_SRC = $(wildcard $(USER_DIR)/src/*.c)
DRIVER_SRC = $(wildcard $(DRIVER_DIR)/CMSIS/CoreSupport/*.c)
DRIVER_SRC += $(wildcard $(DRIVER_DIR)/CMSIS/STM32F10x/*.c)
DRIVER_SRC += $(addprefix $(DRIVER_DIR)/stm32_lib/src/, $(LIB_SRC))
#all C Source files
C_SOURCE = $(USER_SRC) $(DRIVER_SRC)
# the c objects lists
USER_OBJECTS = $(addprefix $(OUTPUT_DIR)/, $(subst .c,.o, $(notdir $(USER_SRC))))
DRIVER_OBJECTS = $(addprefix $(OUTPUT_DIR)/, $(subst .c,.o, $(notdir $(DRIVER_SRC))))
# ------------------------------------------------------------------------------ #
# AS Source file
# ------------------------------------------------------------------------------ #
STARTUP_SRC = $(wildcard $(DRIVER_DIR)/CMSIS/STM32F10x/startup/*.s)
# all asm Source files
ASM_SOURCE = $(STARTUP_SRC)
# all asm objects lists
STARTUP_OBJECTS = $(addprefix $(OUTPUT_DIR)/, $(subst .s,.o, $(notdir $(STARTUP_SRC))))
DRIVER_OBJECTS += $(STARTUP_OBJECTS)
#===============================================================================
# Compile
#===============================================================================
ALL_OBJECTS = $(USER_OBJECTS) $(DRIVER_OBJECTS)
$(OUTPUT_DIR)/%.o:$(USER_DIR)/src/%.c
@$(ECHO) Compile $<
@-$(MKDIR) $(OUTPUT_DIR)
@$(CC) $(CCFLAGS) $(DEFINE) $(INCLUDE) $(DEPFLAGS) -c $< -o $@
@$(ECHO) Done!
$(OUTPUT_DIR)/%.o:$(DRIVER_DIR)/stm32_lib/src/%.c
@$(ECHO) Compile $<
@-$(MKDIR) $(OUTPUT_DIR)
@$(CC) $(CCFLAGS) $(DEFINE) $(INCLUDE) $(DEPFLAGS) -c $< -o $@
@$(ECHO) Done!
$(OUTPUT_DIR)/%.o:$(DRIVER_DIR)/CMSIS/CoreSupport/%.c
@$(ECHO) Compile $<
@-$(MKDIR) $(OUTPUT_DIR)
@$(CC) $(CCFLAGS) $(DEFINE) $(INCLUDE) $(DEPFLAGS) -c $< -o $@
@$(ECHO) Done!
$(OUTPUT_DIR)/%.o:$(DRIVER_DIR)/CMSIS/STM32F10x/%.c
@$(ECHO) Compile $<
@-$(MKDIR) $(OUTPUT_DIR)
@$(CC) $(CCFLAGS) $(DEFINE) $(INCLUDE) $(DEPFLAGS) -c $< -o $@
@$(ECHO) Done!
$(OUTPUT_DIR)/%.o:$(DRIVER_DIR)/CMSIS/STM32F10x/startup/%.s
@$(ECHO) Compile $<
@-$(MKDIR) $(OUTPUT_DIR)
@$(AS) $(ASFLAGS) $< -o $@
@$(ECHO) Done!
#===============================================================================
# user code Compile
#===============================================================================
user: $(USER_OBJECTS)
USER_CLEAN_OBJ = $(USER_OBJECTS)
USER_CLEAN_DEP = $(subst .o,.d, $(USER_CLEAN_OBJ))
userclean:
-$(RM) $(USER_CLEAN_OBJ)
-$(RM) $(USER_CLEAN_DEP)
@$(ECHO) ""
@$(ECHO) "-------------------------------------"
@$(ECHO) "--- User objs clean have done. ---"
@$(ECHO) "-------------------------------------"
#===============================================================================
# driver Compile (STM32 standard peripheral lib)
#===============================================================================
DRIVER_LIB = $(OUTPUT_DIR)/stm32_dirver.a
driver: $(DRIVER_LIB)
$(DRIVER_LIB): $(DRIVER_OBJECTS)
@$(ECHO) ""
@$(AR) $(ARFLAGS) $@ $(DRIVER_OBJECTS)
@$(ECHO) "======================================="
@$(ECHO) "--- make stm32 driver $@ done."
@$(ECHO) "======================================="
@$(ECHO) ""
DRIVER_CLEAN_OBJ = $(DRIVER_OBJECTS)
DRIVER_CLEAN_DEP = $(subst .o,.d,$(DRIVER_CLEAN_OBJ))
DRIVER_CLEAN_LIB = $(DRIVER_LIB)
driverclean:
-$(RM) $(DRIVER_CLEAN_OBJ)
-$(RM) $(DRIVER_CLEAN_DEP)
-$(RM) $(DRIVER_CLEAN_LIB)
@$(ECHO) ""
@$(ECHO) "-------------------------------------"
@$(ECHO) "--- DRIVER objs clean have done. ---"
@$(ECHO) "-------------------------------------"
#===============================================================================
# link
#===============================================================================
link: $(BIN_DIR)/$(PROJECT).elf HEX_OUT S19_OUT BIN_OUT
$(BIN_DIR)/$(PROJECT).elf: $(USER_OBJECTS) $(DRIVER_LIB)
@$(ECHO) "--- Linking $@"
@$(TEST) -d $(BIN_DIR) || $(MKDIR) $(BIN_DIR)
@$(LD) $(LDFLAGS) $(LDLIBS) -o $@ $^
@$(SIZE) --format=berkeley -d $@
@$(ECHO) "done"
HEX_OUT: $(BIN_DIR)/$(PROJECT).hex
S19_OUT: $(BIN_DIR)/$(PROJECT).s19
BIN_OUT: $(BIN_DIR)/$(PROJECT).bin
$(BIN_DIR)/$(PROJECT).hex: $(BIN_DIR)/$(PROJECT).elf
@$(ECHO) "--- Generating Intel 32bit Hex file $@"
@$(OBJCOPY) $(ELF2HEXOUT) $< $@
$(BIN_DIR)/$(PROJECT).s19: $(BIN_DIR)/$(PROJECT).elf
@$(ECHO) "--- Generating Motorola 32bit Hex file $@"
@$(OBJCOPY) $(ELF2S19OUT) $< $@
$(BIN_DIR)/$(PROJECT).bin: $(BIN_DIR)/$(PROJECT).elf
@$(ECHO) "--- Generating plain bin file $@"
@$(OBJCOPY) $(ELF2BINOUT) $< $@
linkclean:
-$(RM) $(BIN_DIR)/*.elf
-$(RM) $(BIN_DIR)/*.hex
-$(RM) $(BIN_DIR)/*.map
@$(ECHO) ""
@$(ECHO) "-------------------------------------"
@$(ECHO) "--- Link clean have done. ---"
@$(ECHO) "-------------------------------------"
#===============================================================================
# make all
# make allclean
#===============================================================================
all: user driver link
allclean: userclean driverclean linkclean
#===============================================================================
# help
#===============================================================================
help:
@$(ECHO) " make: all user cmsis fwlib link "
@$(ECHO) ""
@$(ECHO) "================ Make help ===================="
@$(ECHO) "make make all"
@$(ECHO) "make all[clean] compile all && link"
@$(ECHO) "make link[clean] link all"
@$(ECHO) "make user[clean] build user code"
@$(ECHO) "make driver[clean] build stm32 standard std driver"
@$(ECHO) ""
@$(ECHO) ""
#===============================================================================
# clean
#===============================================================================
clean: cleanall
cleanall:
-$(RM) $(OUTPUT_DIR)/*.d
-$(RM) $(OUTPUT_DIR)/*.o
-$(RM) $(OUTPUT_DIR)/*.map
-$(RM) $(OUTPUT_DIR)/*.lst
-$(RM) $(OUTPUT_DIR)/*.a
-$(RM) $(BIN_DIR)/*.elf
-$(RM) $(BIN_DIR)/*.hex
-$(RM) $(BIN_DIR)/*.s19
-$(RM) $(BIN_DIR)/*.bin
@$(ECHO) "-------------------------------------"
@$(ECHO) "--- Clean all have done. ---"
@$(ECHO) "-------------------------------------"
@$(ECHO) ""
#===============================================================================
# include dependency files
#===============================================================================
-include $(wildcard $(OUTPUT_DIR)/*.d)
.PHONY: all clean default user driver userclean driverclean linkclean help \
HEX_OUT S19_OUT BIN_OUT
#----------------------------- end of Makefile ----------------------------------
drv_config.mk文件:
#*******************************************************************************
# Copyright (c) 2013 semilog Tech LTD. ALL rights reserved.
#
# Filename: drv_config.mk
# Author: semilog [email protected]
# Date: 2017-05-27
# Version: 0.1
# Description: Created for configuration of stm32 peripheral devices
#
# ----------------------------- History --------------------------------------
# Author:
# Date:
# Modification:
#********************************************************************************/
# ------------------------------------------------------------------------------
# chose the needed stem32 peripheral modules
# ------------------------------------------------------------------------------
USE_ADC = yes
USE_BKP = no
USE_CAN = no
USE_CEC = no
USE_CRC = yes
USE_DAC = yes
USE_DBGMCU = no
USE_DMA = yes
USE_EXTI = yes
USE_FLASH = no
USE_FSMC = no
USE_GPIO = yes
USE_I2C = yes
USE_IWDG = no
USE_PWR = yes
USE_RCC = yes
USE_RTC = yes
USE_SDIO = no
USE_SPI = no
USE_TIM = yes
USE_USART = yes
USE_WWDG = no
# ------------------------------------------------------------------------------
# modules Define
# ------------------------------------------------------------------------------
LIB_SRC = misc.c
ifeq ($(USE_ADC),yes)
LIB_SRC += stm32f10x_adc.c
endif
ifeq ($(USE_BKP),yes)
LIB_SRC += stm32f10x_bkp.c
endif
ifeq ($(USE_CAN),yes)
LIB_SRC += stm32f10x_can.c
endif
ifeq ($(USE_CEC),yes)
LIB_SRC += stm32f10x_cec.c
endif
ifeq ($(USE_CRC),yes)
LIB_SRC += stm32f10x_crc.c
endif
ifeq ($(USE_DAC),yes)
LIB_SRC += stm32f10x_dac.c
endif
ifeq ($(USE_DBGMCU),yes)
LIB_SRC += stm32f10x_dbgmcu.c
endif
ifeq ($(USE_DMA),yes)
LIB_SRC += stm32f10x_dma.c
endif
ifeq ($(USE_EXTI),yes)
LIB_SRC += stm32f10x_exti.c
endif
ifeq ($(USE_FLASH),yes)
LIB_SRC += stm32f10x_flash.c
endif
ifeq ($(USE_FSMC),yes)
LIB_SRC += stm32f10x_fsmc.c
endif
ifeq ($(USE_GPIO),yes)
LIB_SRC += stm32f10x_gpio.c
endif
ifeq ($(USE_I2C),yes)
LIB_SRC += stm32f10x_i2c.c
endif
ifeq ($(USE_IWDG),yes)
LIB_SRC += stm32f10x_iwdg.c
endif
ifeq ($(USE_PWR),yes)
LIB_SRC += stm32f10x_pwr.c
endif
ifeq ($(USE_RCC),yes)
LIB_SRC += stm32f10x_rcc.c
endif
ifeq ($(USE_RTC),yes)
LIB_SRC += stm32f10x_rtc.c
endif
ifeq ($(USE_SDIO),yes)
LIB_SRC += stm32f10x_sdio.c
endif
ifeq ($(USE_SPI),yes)
LIB_SRC += stm32f10x_spi.c
endif
ifeq ($(USE_TIM),yes)
LIB_SRC += stm32f10x_tim.c
endif
ifeq ($(USE_USART),yes)
LIB_SRC += stm32f10x_usart.c
endif
ifeq ($(USE_WWDG),yes)
LIB_SRC += stm32f10x_wwdg.c
endif