Files
template_avr/Makefile
2020-09-06 16:13:07 +02:00

126 lines
4.6 KiB
Makefile

SHELL := /bin/bash
# Created by bartool
# 15.03.2020
# TODO
# Create pattern for upload
# Create pattern for init (create main.c, src dir, setting.json, c_cpp_properties.json)
PROCESSOR := ATmega644PA
F_CPU := 11059200UL
DUDE_PROGRAMMER := ATB-FT232R
DUDE_PORT := ft0
SRC_DIR := src
BUILD_DIR := build/$(PROCESSOR)
OPTIMIZE = Os
AVRDUDE_PATH := C:/avr/avrdude
CC := avr-gcc
OBJCOPY := avr-objcopy
OBJDUMP := avr-objdump
OBJSIZE := avr-size
PROJECT_NAME := $(notdir $(CURDIR))
ELF := $(BUILD_DIR)/$(PROJECT_NAME).elf
LSS := $(BUILD_DIR)/$(PROJECT_NAME).lss
MAP := $(BUILD_DIR)/$(PROJECT_NAME).map
FLASH_IMAGE := $(BUILD_DIR)/$(PROJECT_NAME).hex
EEPROM_IMAGE := $(BUILD_DIR)/$(PROJECT_NAME).eep
C_FILES := $(wildcard $(SRC_DIR)/*/*.c) $(wildcard $(SRC_DIR)/*.c)
OBJ_FILES := $(patsubst src/%.c, $(BUILD_DIR)/%.o, $(C_FILES))
DIRS := $(sort $(dir $(OBJ_FILES)))
# lc = $(subst A,a,$(subst B,b,$(subst C,c,$(subst D,d,$(subst E,e,$(subst F,f,$(subst G,g,$(subst H,h,$(subst I,i,$(subst J,j,$(subst K,k,$(subst L,l,$(subst M,m,$(subst N,n,$(subst O,o,$(subst P,p,$(subst Q,q,$(subst R,r,$(subst S,s,$(subst T,t,$(subst U,u,$(subst V,v,$(subst W,w,$(subst X,x,$(subst Y,y,$(subst Z,z,$1))))))))))))))))))))))))))
MCU := $(shell echo $(PROCESSOR) | tr '[:upper:]' '[:lower:]')
# MCU = $(call lc,$(PROCESSOR))
# kratka sa oznaczene opcje wykorzystywane przez eclipse
CFLAGS = -mmcu=$(MCU)#
CFLAGS += -$(OPTIMIZE)#
CFLAGS += -g
CFLAGS += -std=gnu99#
CFLAGS += -funsigned-char#
CFLAGS += -funsigned-bitfields#
CFLAGS += -fpack-struct#
#CFLAGS += -ffreestanding
CFLAGS += -ffunction-sections#
CFLAGS += -fdata-sections#
CFLAGS += -fshort-enums#
CFLAGS += -fverbose-asm
CFLAGS += -Wall#
#CFLAGS += -Ic:/avr/avr_toolchain/avr/include
CFLAGS += -Wstrict-prototypes
CFLAGS += -DF_CPU=$(F_CPU)#
ESC := \033[
STOP := $(ESC)0m
RESET := $(ESC)$(STOP)
DEBUG := $(RESET)$(ESC)36;49;2m
FOCUS := $(RESET)$(ESC)35;49;10m
PROGRAM := $(RESET)$(ESC)33;49;1m
all: $(ELF) $(LSS) $(FLASH_IMAGE) $(EEPROM_IMAGE) sizedummy
build: $(ELF)
$(DIRS):
@echo -e "$(DEBUG)>>> Making a dir: $(FOCUS)$@$(DEBUG) <<<$(STOP)"
@mkdir -p $@
$(ELF): $(OBJ_FILES)
@echo -e "$(DEBUG)>>> Building target: $(FOCUS)$@$(DEBUG) <<<$(STOP)"
@echo -e "$(DEBUG)>>> Invoking: AVR C Linker <<<$(STOP)"
$(CC) -Wl,-Map,$(MAP) -mmcu=$(MCU) -o $(ELF) $(OBJ_FILES)
$(LSS): $(ELF)
@echo -e "$(DEBUG)>>> Invoking: AVR Create Extended Listing $(FOCUS)$@$(DEBUG) <<<$(STOP)"
$(OBJDUMP) -h -S $(ELF) > $(LSS)
$(FLASH_IMAGE): $(ELF)
@echo -e "$(DEBUG)>>> Create flash image (ihex format) $(FOCUS)$@$(DEBUG) <<<$(STOP)"
$(OBJCOPY) -j .text -j .data -O ihex $(ELF) $(FLASH_IMAGE)
$(EEPROM_IMAGE): $(ELF)
@echo -e "$(DEBUG)>>> Create eeprom image (ihex format) $(FOCUS)$@$(DEBUG) <<<$(STOP)"
$(OBJCOPY) -j .eeprom --no-change-warnings --change-section-lma .eeprom=0 -O ihex $(ELF) $(EEPROM_IMAGE)
sizedummy: $(ELF)
@echo -e "$(DEBUG)>>> Invoking: Print size <<<$(STOP)"
$(OBJSIZE) --format=avr --mcu=$(MCU) $(ELF)
clean:
@echo -e "$(DEBUG)>>> Cleaning... <<<$(STOP)"
rm -rf $(ELF) $(LSS) $(MAP) $(FLASH_IMAGE) $(EEPROM_IMAGE) $(OBJ_FILES)
rm -rf $(DIRS)
info:
@echo -e "$(DEBUG)MCU: $(MCU) F_CPU: $(F_CPU)$(STOP)"
@echo -e "$(DEBUG)Programer: $(DUDE_PROGRAMMER) Port: $(DUDE_PORT)$(STOP)"
@echo -e "$(DEBUG)Source dir: $(SRC_DIR) Build dir: $(BUILD_DIR)$(STOP)"
@echo -e "$(DEBUG)Project name: $(PROJECT_NAME)$(STOP)"
@echo -e "$(FOCUS)elf: $(ELF) lss: $(LSS) map: $(MAP)$(STOP)"
@echo -e "$(DEBUG)hex: $(FLASH_IMAGE) $(ESC)$(STOP)$(FOCUS)eep: $(EEPROM_IMAGE)$(STOP)"
@echo -e "$(DEBUG)All dirs: $(DIRS)$(STOP)"
@echo -e "$(DEBUG)All c files: $(C_FILES)$(STOP)"
@echo -e "$(DEBUG)All o files: $(OBJ_FILES)$(STOP)"
@echo -e "$(DEBUG)Cflags: $(CFLAGS)$(STOP)"
@echo $(LOWER_VAR)
@echo "done"
# nie testowane! sprawdzic poprawnosc parametrow
flash: $(FLASH_IMAGE)
@echo -e " $(PROGRAM)>>> Uplod only flash <<<$(STOP)"
$(AVRDUDE_PATH)/avrdude -p $(MCU) -P $(DUDE_PORT) -c $(DUDE_PROGRAMMER) -U flash:w:$(FLASH_IMAGE):i
flash_eeprom:
@echo -e " $(PROGRAM)>>> Upload flash and eeprom <<<$(STOP)"
avrdude -p $(MCU) -P $(DUDE_PORT) -c $(DUDE_PROGRAMMER) -U flash:w:$(FLASH_IMAGE):i -D -U eeprom:w:$(EEPROM_IMAGE):i
.SECONDEXPANSION:
$(OBJ_FILES): $(BUILD_DIR)/%.o: $(SRC_DIR)/%.c $$(wildcard $$(dir $(SRC_DIR)/%.c)*.h)
@if [ ! -d "$(dir $@)" ]; then echo -e "$(DEBUG) >>> Create dir: $(FOCUS)$(dir $@)$(DEBUG) <<<$(STOP)"; mkdir -p $(dir $@); fi
@echo -e "$(DEBUG)>>> Building file: $(FOCUS)$<$(DEBUG) --> $(FOCUS)$@$(DEBUG) <<<$(STOP)"
$(CC) $(CFLAGS) -c -o $@ $<