######################### # IAR Makefile for STM8 # ######################### # Взял из проекта atomthreads и переиначил. # Location of build tools and atomthreads sources EWSTM8_DIR=C:\IAR\Embedded Workbench 7.0\stm8 APP_SRC=src APP_INC=inc PERIPHS_SRC=StdPerphDrv/src PERIPHS_INC=StdPerphDrv/inc EWSTM8_BIN=C:/IAR/Embedded\ Workbench\ 7.0/stm8/bin CC=$(EWSTM8_BIN)/iccstm8 ASM=$(EWSTM8_BIN)/iasmstm8 LINK=$(EWSTM8_BIN)/ilinkstm8 HEX=$(EWSTM8_BIN)/ielftool PROJECT=VAPC # CPU part number PART = STM8L05X_LD_VL ICF = lnkstm8l051f3.icf LIB_MODEL = dlstm8ssn.h # Directory for built objects OUT_DIR = Out OBJ_DIR = $(OUT_DIR)/Obj LIST_DIR = $(OUT_DIR)/List CODE_MODEL = small DATA_MODEL = small # Application object files #APP_OBJECTS = board.o delay.o HD44780.o stm8l15x_it.o APP_OBJECTS = $(notdir $(patsubst %.c,%.o,$(wildcard $(APP_SRC)/*.c))) #APP_ASM_OBJECTS = atomport-asm-iar.o # STM8S Peripheral driver object files PERIPH_OBJECTS = stm8l15x_adc.o #PERIPH_OBJECTS += stm8l15x_aes.o #PERIPH_OBJECTS += stm8l15x_beep.o PERIPH_OBJECTS += stm8l15x_clk.o #PERIPH_OBJECTS += stm8l15x_comp.o #PERIPH_OBJECTS += stm8l15x_dac.o PERIPH_OBJECTS += stm8l15x_dma.o PERIPH_OBJECTS += stm8l15x_exti.o #PERIPH_OBJECTS += stm8l15x_flash.o PERIPH_OBJECTS += stm8l15x_gpio.o #PERIPH_OBJECTS += stm8l15x_i2c.o #PERIPH_OBJECTS += stm8l15x_irtim.o PERIPH_OBJECTS += stm8l15x_itc.o #PERIPH_OBJECTS += stm8l15x_iwdg.o #PERIPH_OBJECTS += stm8l15x_lcd.o #PERIPH_OBJECTS += stm8l15x_pwr.o #PERIPH_OBJECTS += stm8l15x_rst.o PERIPH_OBJECTS += stm8l15x_rtc.o PERIPH_OBJECTS += stm8l15x_spi.o PERIPH_OBJECTS += stm8l15x_syscfg.o PERIPH_OBJECTS += stm8l15x_tim1.o PERIPH_OBJECTS += stm8l15x_tim2.o PERIPH_OBJECTS += stm8l15x_tim3.o PERIPH_OBJECTS += stm8l15x_tim4.o #PERIPH_OBJECTS += stm8l15x_tim5.o PERIPH_OBJECTS += stm8l15x_usart.o #PERIPH_OBJECTS += stm8l15x_wfe.o #PERIPH_OBJECTS += stm8l15x_wwdg.o ###PERIPH_OBJECTS = $(notdir $(patsubst %.c,%.o,$(wildcard $(PERIPHS_SRC)/*.c))) # Kernel object files #KERNEL_OBJECTS = atomkernel.o atomsem.o atommutex.o atomtimer.o atomqueue.o # Collection of built objects (excluding test applications) ALL_OBJECTS = $(APP_OBJECTS) $(PERIPH_OBJECTS) BUILT_OBJECTS = $(patsubst %,$(OUT_DIR)/%,$(ALL_OBJECTS)) # Test object files (dealt with separately as only one per application build) #PROJ_OBJECTS = $(notdir $(patsubst %.c,%.o,$(wildcard $(APP_SRC)/*.c))) #PROJ_OBJECTS = main.o # Target application filenames (.elf) for each test object #PROJ_ELFS = $(patsubst %.o,%.elf,$(PROJ_OBJECTS)) #PROJ_S19S = $(patsubst %.o,%.s19,$(PROJ_OBJECTS)) PROJ_ELFS = $(PROJECT).elf PROJ_S19S = $(PROJECT).s19 PROJ_IHEX = $(PROJECT).hex # Search build/output directory for dependencies vpath %.c $(APP_SRC) vpath %.c $(PERIPHS_SRC) vpath %.o .\$(OBJ_DIR) vpath %.elf .\$(OUT_DIR) vpath %.hex .\$(OUT_DIR) # Include paths INCLUDES = -I $(APP_INC) INCLUDES += -I $(PERIPHS_INC) # Compiler/Assembler flags CFLAGS = -e -Oh CFLAGS += --code_model $(CODE_MODEL) --data_model $(DATA_MODEL) CFLAGS += --dlib_config "$(EWSTM8_DIR)\lib\$(LIB_MODEL)" CFLAGS += -D NDEBUG -D $(PART) CFLAGS += -lCN $(LIST_DIR) -lBN $(LIST_DIR) CFLAGS += --diag_suppress Pa050 DBG_CFLAGS = -e -Ol --no_cse --no_unroll --no_inline --no_code_motion --no_tbaa DBG_CFLAGS += --no_cross_call --debug --code_model $(CODE_MODEL) --data_model $(DATA_MODEL) DBG_CFLAGS += --dlib_config "$(EWSTM8_DIR)\lib\$(LIB_MODEL)" -D $(PART) DBG_CFLAGS += -lC $(LIST_DIR) -lB $(LIST_DIR) DBG_CFLAGS += --diag_suppress Pa050 ASMFLAGS = -M'<>' -ld $(OUT_DIR)\list --diag_suppress Pa050 ASMFLAGS += --code_model small --data_model small DBG_ASMFLAGS = -M'<>' -r -ld $(OUT_DIR)\list --diag_suppress Pa050 DBG_ASMFLAGS += --code_model $(CODE_MODEL) --data_model $(DATA_MODEL) LINKFLAGS = --redirect _Printf=_PrintfTinyNoMb LINKFLAGS += --redirect _Scanf=_ScanfSmallNoMb LINKFLAGS += --config "$(EWSTM8_DIR)\config\$(ICF)" LINKFLAGS += --config_def _CSTACK_SIZE=0x100 LINKFLAGS += --config_def _HEAP_SIZE=0x100 LINKFLAGS += --map $(OUT_DIR) LINKFLAGS += --entry __iar_program_start LINKFLAGS += --merge_duplicate_sections LINKFLAGS += --strip LINKFLAGS += -f "$(EWSTM8_DIR)\config\math_small.xcl" DBG_LINKFLAGS = --redirect _Printf=_PrintfTinyNoMb --redirect _Scanf=_ScanfSmallNoMb DBG_LINKFLAGS += --config "$(EWSTM8_DIR)\config\$(ICF)" --config_def DBG_LINKFLAGS += _CSTACK_SIZE=0x100 --config_def _HEAP_SIZE=0x100 DBG_LINKFLAGS += --entry __iar_program_start ################# # Build targets # ################# # All tests all: $(OUT_DIR) $(PROJ_S19S) $(PROJ_IHEX) # Make build/output directory $(OUT_DIR): mkdir $(OUT_DIR) @mkdir $(OBJ_DIR) @mkdir $(LIST_DIR) # Test HEX files (one application build for each test) $(PROJ_S19S): %.s19: $(PROJECT).elf @echo @echo Building $@ @$(HEX) $(OUT_DIR)/$(notdir $<) $(OUT_DIR)/$@ --srec --silent $(PROJ_IHEX): %.hex: $(PROJECT).elf @echo Building $@ @$(HEX) $(OUT_DIR)/$(notdir $<) $(OUT_DIR)/$@ --ihex --silent # Test ELF files (one application build for each test) $(PROJ_ELFS): %.elf: $(PERIPH_OBJECTS) $(APP_OBJECTS) @echo @echo Linking $@ @$(LINK) $(OBJ_DIR)/*.o $(LINKFLAGS) -o $(OUT_DIR)/$@ # $(LINK) $(OUT_DIR)/$(notdir $<) $(BUILT_OBJECTS) $(LINKFLAGS) -o $(OUT_DIR)/$@ # Kernel objects builder #$(KERNEL_OBJECTS): %.o: $(KERNEL_DIR)/%.c # @echo Compiling $@ # $(CC) $< $(CFLAGS) -I . -I $(PERIPHS_SRC) -o $(OUT_DIR) # Project objects builder #$(PROJ_OBJECTS): %.o: main.c # @echo Compiling $@ # $(CC) $< $(CFLAGS) $(INCLUDES) -o $(OBJ_DIR) # Peripheral objects builder #$(PERIPH_OBJECTS): %.o: %.c # @echo # @echo Compiling $@ # @$(CC) $< $(CFLAGS) $(INCLUDES) -o $(OBJ_DIR) # Application C objects builder #$(APP_OBJECTS): %.o: %.c # @echo # @echo Compiling $@ # @$(CC) $< $(CFLAGS) $(INCLUDES) -o $(OBJ_DIR) # All C objects builder $(ALL_OBJECTS): %.o: %.c @echo @echo Compiling $@ @$(CC) $< $(CFLAGS) $(INCLUDES) -o $(OBJ_DIR) # Application asm objects builder #$(APP_ASM_OBJECTS): %.o: ./%.s # @echo Compiling $@ # @$(ASM) $< $(ASMFLAGS) $(INCLUDES) -o $(OUT_DIR)/$(notdir $@) # Clean clean: rm -f *.o *.elf *.map *.hex *.bin *.lst *.stm8 *.s19 *.out *.s *.lst rm -rf $(LIST_DIR) rm -rf $(OBJ_DIR) rm -rf $(OUT_DIR)