Refactor Makefiles

This commit is contained in:
Lexi / Zoe 2021-04-03 18:35:38 +02:00
parent b5f86d5972
commit fccd19dbf4
Signed by: binaryDiv
GPG Key ID: F8D4956E224DA232
2 changed files with 78 additions and 52 deletions

27
Makefile Normal file
View File

@ -0,0 +1,27 @@
# Project makefile (depends on firmware/Makefile)
# ===============================================
FIRMWARE_DIR = firmware
.PHONY: all clean build firmware firmware-clean firmware-build firmware-flash
# Default target (build firmware)
all: firmware
# Shortcuts
clean: firmware-clean
build: firmware-build
# Firmware
# --------
firmware: firmware-build
firmware-clean:
make -C $(FIRMWARE_DIR) clean
firmware-build:
make -C $(FIRMWARE_DIR) build
firmware-flash:
make -C $(FIRMWARE_DIR) flash

View File

@ -1,10 +1,10 @@
################
# CONFIGURATION
################
# Makefile for the EEPROM programmer microcontroller firmware
# ===========================================================
# Compiler and tools
CC = avr-gcc
OBJCOPY = avr-objcopy
AVRDUDE = avrdude
# Compiler and linker flags
CFLAGS = -Wall -std=c11 -Os
@ -14,63 +14,62 @@ LDFLAGS =
GCC_MCU = atmega16a
AVRDUDE_PARTNO = m16
AVRDUDE_PROGRAMMER = usbtiny
AVRDUDE_CMD = $(AVRDUDE) -p $(AVRDUDE_PARTNO) -c $(AVRDUDE_PROGRAMMER)
# Make target and object files
TARGET = build/eepprog
OBJECTS = build/main.o build/uart.o build/eeprom.o build/protocol.o
HEADERS = src/config.h src/BitIO.h src/uart.h src/eeprom.h src/protocol.h
# Directories
SOURCE_DIR = src
BUILD_DIR = build
# Make targets and object files
SOURCE_FILES = $(wildcard $(SOURCE_DIR)/*.c)
HEADER_FILES = $(wildcard $(SOURCE_DIR)/*.h)
OBJECT_FILES = $(patsubst $(SOURCE_DIR)/%.c,$(BUILD_DIR)/%.o,$(SOURCE_FILES))
TARGET_NAME = eepprog
TARGET_ELF = $(BUILD_DIR)/$(TARGET_NAME).elf
TARGET_HEX = $(BUILD_DIR)/$(TARGET_NAME).hex
.PHONY: all clean build flash writeflash readfuse writefuse
# Default target (build hex file)
all: hex
all: build
################
# BUILD TARGETS
################
# Shortcuts for build targets
hex: $(TARGET).hex
elf: $(TARGET).elf
# Convert elf binary to ihex format
$(TARGET).hex: $(TARGET).elf
$(OBJCOPY) -O ihex $(TARGET).elf $(TARGET).hex
# Elf binary
$(TARGET).elf: $(OBJECTS)
$(CC) -mmcu=$(GCC_MCU) $(LDFLAGS) -o $(TARGET).elf $(OBJECTS)
# Object files
build/%.o: src/%.c $(HEADERS)
@mkdir -p build/
$(CC) -mmcu=$(GCC_MCU) $(CFLAGS) -c -o $@ $<
##############
# PROGRAMMING
##############
# Program controller
program: writeflash
writeflash: $(TARGET).hex
sudo avrdude -p $(AVRDUDE_PARTNO) -c $(AVRDUDE_PROGRAMMER) -U flash:w:$(TARGET).hex
readfuse:
sudo avrdude -p $(AVRDUDE_PARTNO) -c $(AVRDUDE_PROGRAMMER) -U lfuse:r:m -U hfuse:r:m
writefuse:
sudo avrdude -p $(AVRDUDE_PARTNO) -c $(AVRDUDE_PROGRAMMER) -U lfuse:w:0xef:m -U hfuse:w:0xd9:m
################
# OTHER TARGETS
################
# General
# -------
# Clean generated files
clean:
rm -f $(OBJECTS) $(TARGET).elf $(TARGET).hex
rm -rf $(BUILD_DIR)
.PHONY: all hex elf program writeflash clean
# Build firmware
# --------------
build: $(TARGET_HEX)
# Compile C code to object files
$(BUILD_DIR)/%.o: $(SOURCE_DIR)/%.c $(HEADER_FILES)
@mkdir -p $(BUILD_DIR)
$(CC) -mmcu=$(GCC_MCU) $(CFLAGS) -c -o $@ $<
# Link object files to ELF binary
$(TARGET_ELF): $(OBJECT_FILES)
$(CC) -mmcu=$(GCC_MCU) $(LDFLAGS) -o $(TARGET_ELF) $(OBJECT_FILES)
# Convert ELF binary to ihex format (which can be flashed to the microcontroller)
$(TARGET_HEX): $(TARGET_ELF)
$(OBJCOPY) -O ihex $(TARGET_ELF) $(TARGET_HEX)
# Flash firmware
# --------------
flash: writeflash
writeflash: $(TARGET_HEX)
$(AVRDUDE_CMD) -U flash:w:$(TARGET_HEX)
readfuse:
$(AVRDUDE_CMD) -U lfuse:r:m -U hfuse:r:m
writefuse:
$(AVRDUDE_CMD) -U lfuse:w:0xef:m -U hfuse:w:0xd9:m