Rev 1102 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?
###############################################################################
# Makefile for the project pentevo
###############################################################################
# tools (optionally with path)
AVRCC ?= avr-gcc
AVRSIZE ?= avr-size
AVROBJDUMP ?= avr-objdump
AVROBJCOPY ?= avr-objcopy
# project naming
PROJECT = core
FPGACORE = top
RELEASE = zxevo
## Options common to compile, link and assembly rules
MCU = atmega128
COMMON = -mmcu=$(MCU)
## Compile options common for all C compilation units.
CFLAGS = $(COMMON)
CFLAGS += -Wall -Wextra -gdwarf-2 -std=gnu99 -Os -DF_CPU=11059200UL -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
#CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d
## Assembly specific flags
ASMFLAGS = $(COMMON)
ASMFLAGS += $(CFLAGS)
ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2
## Linker flags
LDFLAGS = $(COMMON)
LDFLAGS += -Wl,-Map=$(PROJECT).map
## Intel Hex file production flags
HEX_FLASH_FLAGS = -R .eeprom
HEX_EEPROM_FLAGS = -j .eeprom
HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,load"
HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0 --no-change-warnings
TARGETS = zx interrupts main ps2 spi depacker_dirty rs232 rtc atx joystick version tape kbmap
ifeq ($(OS),Windows_NT)
MAKEFW = "../../../tools/make_fw/make_fw.exe"
AVRSIZEOPT =
CP = copy /Y
else
MAKEFW = ../../../../../tools/make_fw/make_fw
AVRSIZEOPT = -C --mcu=${MCU}
CP = cp
endif
# Build dependencies
.PHONY: all
all: $(PROJECT).elf $(PROJECT).hex $(PROJECT).eep $(PROJECT).lss $(RELEASE).bin size
$(CP) $(RELEASE).bin zxevo_fw.bin
# must not be before .PHONY and all targets
include $(TARGETS:%=%.d)
# dependencies generation
%.d: ../src/%.c Makefile
echo $@ $(subst \, ,$(shell $(AVRCC) -MM $(CFLAGS) $<)) > $@
# Compile
%.o: ../src/%.c Makefile
$(AVRCC) $(CFLAGS) -c -o $@ $<
# Link
$(PROJECT).elf: $(TARGETS:%=%.o) $(FPGACORE).o
$(AVRCC) $(LDFLAGS) $(TARGETS:%=%.o) $(FPGACORE).o -o $(PROJECT).elf
$(FPGACORE).o: $(FPGACORE).mlz
$(AVROBJCOPY) -I binary -O elf32-avr -B avr:51 --rename-section .data=.progmem.data,contents,alloc,load,readonly,data --redefine-sym _binary_top_mlz_start=fpga --redefine-sym _binary_top_mlz_end=fpga_end $(FPGACORE).mlz $(FPGACORE).o
%.hex: $(PROJECT).elf
$(AVROBJCOPY) -O ihex $(HEX_FLASH_FLAGS) $< $@
%.eep: $(PROJECT).elf
$(AVROBJCOPY) $(HEX_EEPROM_FLAGS) -O ihex $< $@ || exit 0
%.lss: $(PROJECT).elf
$(AVROBJDUMP) -h -S $< > $@
size: $(PROJECT).elf
$(AVRSIZE) $(AVRSIZEOPT) $(PROJECT).elf
#zxevo_beta.bin: core.hex core.eep
# ../../../tools/make_fw/make_fw core.hex core.eep zxevo_beta.bin version.txt
$(RELEASE).bin: core.hex core.eep
$(MAKEFW) $(PROJECT).hex $(PROJECT).eep $(RELEASE).bin version.txt o
## Clean target
.PHONY: clean
clean:
-rm -rf $(TARGETS:%=%.o) $(TARGETS:%=%.d) $(FPGACORE).o $(PROJECT).* dep $(RELEASE).bin zxevo_fw.bin
## program chip
pgm: $(PROJECT).hex
echo no pgm supported!