mirror of
https://github.com/sergeyyarkov/atmega8a_rgb-night-light.git
synced 2026-10-11 02:19:12 +03:00
104 lines
3.1 KiB
Makefile
104 lines
3.1 KiB
Makefile
TARGET=firmware
|
|
|
|
# === Directories path =============================================================================
|
|
SRC_DIR=./src
|
|
OBJ_DIR=./obj
|
|
ASM_DIR=./asm
|
|
OUT_DIR=./build
|
|
# ==================================================================================================
|
|
|
|
|
|
|
|
# === Device configuration =========================================================================
|
|
MCU=atmega8a
|
|
FUSE_HIGH=0xd9
|
|
FUSE_LOW=0xff
|
|
# ==================================================================================================
|
|
|
|
|
|
|
|
# === Toolchain ====================================================================================
|
|
OBJCOPY=avr-objcopy
|
|
OBJDUMP=avr-objdump
|
|
SIZE=avr-size
|
|
CC=avr-gcc
|
|
# ==================================================================================================
|
|
|
|
|
|
|
|
# === Programmer options ===========================================================================
|
|
# MPLAB SNAP: snap_jtag (or isp)
|
|
# USBtiny: usbtiny
|
|
AVRDUDE_DEVICE=m8a
|
|
AVRDUDE_PROGRAMMER=snap_isp
|
|
AVRDUDE_SPEED=128kHz
|
|
AVRDUDE_FLAGS=-c $(AVRDUDE_PROGRAMMER) -p $(AVRDUDE_DEVICE) -B $(AVRDUDE_SPEED)
|
|
# ==================================================================================================
|
|
|
|
|
|
|
|
# === Compiler options =============================================================================
|
|
CC_FLAGS=-Wall -Wextra
|
|
ifeq ($(DEBUG), true)
|
|
CC_FLAGS+=-ggdb -Og
|
|
CC_FLAGS+=-Wl,-Map=$(OUT_DIR)/$(TARGET).map
|
|
CC_FLAGS+=-DDEBUG_BUILD=TRUE
|
|
else
|
|
CC_FLAGS+=-Os
|
|
endif
|
|
CC_FLAGS+=-mmcu=$(MCU)
|
|
CC_FLAGS+=-std=c11
|
|
# ==================================================================================================
|
|
|
|
OBJS=$(subst $(SRC_DIR),$(OBJ_DIR),$(patsubst %.c,%.o,$(wildcard $(SRC_DIR)/*.c)))
|
|
ASMS=$(subst $(SRC_DIR),$(ASM_DIR),$(patsubst %.c,%.S,$(wildcard $(SRC_DIR)/*.c)))
|
|
|
|
.PHONY: all asms hex clean size prog_flash prog_test prog_read_eep prog_read_fuses prog_flash_fuses
|
|
|
|
all: hex size
|
|
hex: $(OUT_DIR)/$(TARGET).hex
|
|
asms: $(ASMS)
|
|
prog_flash:
|
|
avrdude $(AVRDUDE_FLAGS) -V -U flash:w:"$(OUT_DIR)/$(TARGET).hex":i
|
|
prog_test:
|
|
avrdude $(AVRDUDE_FLAGS)
|
|
prog_read_eep:
|
|
avrdude $(AVRDUDE_FLAGS) -U eeprom:r:"$(OUT_DIR)/eeprom.hex":i
|
|
prog_read_fuses:
|
|
avrdude $(AVRDUDE_FLAGS) -U hfuse:r:"$(OUT_DIR)/h_fuse.hex":h -U lfuse:r:"$(OUT_DIR)/l_fuse.hex":h
|
|
prog_flash_fuses:
|
|
avrdude $(AVRDUDE_FLAGS) -U hfuse:w:$(FUSE_HIGH):m -U lfuse:w:$(FUSE_LOW):m
|
|
|
|
$(OUT_DIR)/$(TARGET).hex: $(OUT_DIR)/$(TARGET).elf $(OUT_DIR)/$(TARGET).S
|
|
$(OBJCOPY) -R .eeprom -R .fuse -R .lock -R .signature -O ihex $< $@
|
|
|
|
$(OUT_DIR)/$(TARGET).elf: $(OBJS) | $(OUT_DIR)
|
|
$(CC) $(CC_FLAGS) $^ -o $@
|
|
|
|
$(OUT_DIR)/$(TARGET).S: $(OBJS) | $(OUT_DIR)
|
|
$(OBJDUMP) -D $(OUT_DIR)/$(TARGET).elf > $@
|
|
|
|
## Compile to object files
|
|
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c $(SRC_DIR)/%.h | $(OBJ_DIR)
|
|
$(CC) $(CC_FLAGS) -c $(SRC_DIR)/$(patsubst %.o,%.c, $(notdir $@)) -o $@
|
|
|
|
## Compile to assembler files (optional)
|
|
$(ASM_DIR)/%.S: $(SRC_DIR)/%.c $(SRC_DIR)/%.h | $(ASM_DIR)
|
|
$(CC) -S -fverbose-asm $(CC_FLAGS) -c $(SRC_DIR)/$(patsubst %.S,%.c, $(notdir $@)) -o $@
|
|
|
|
$(OUT_DIR):
|
|
mkdir $@
|
|
|
|
$(OBJ_DIR):
|
|
mkdir $@
|
|
|
|
$(ASM_DIR):
|
|
mkdir $@
|
|
|
|
clean:
|
|
rm -rf $(OBJ_DIR)
|
|
rm -rf $(OUT_DIR)
|
|
rm -rf $(ASM_DIR)
|
|
|
|
size: $(OUT_DIR)/$(TARGET).elf
|
|
$(SIZE) --mcu=$(MCU) --format=avr $<
|