Refactor Makefiles
This commit is contained in:
parent
b5f86d5972
commit
fccd19dbf4
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue