#####
##### Copyright (C) 2020-2021 Aloysius Indrayanto
#####
##### This file is part of the eCxx library, see LICENSE file for the license details.
#####


AVR_MCU      = atmega4808
F_CPU        = 16000000UL
DFP_DIR      = ${HOME}/Atmel.ATmega_DFP.1.5.362


GCC_DIR      = /opt/arduino-1.8.13/hardware/tools/avr
INCLUDE_DIR  = -I"$(DFP_DIR)/include" -I"$(GCC_DIR)/avr/include" -I"../../include"
LIBRARY_DIR  = -L"$(GCC_DIR)/avr/lib/gcc/avr" -L"$(wildcard $(DFP_DIR)/gcc/dev/$(AVR_MCU)/avr*)"
AVR_LINKLIBS = -lc


CXX          = "$(GCC_DIR)/bin/avr-g++"
OBJCOPY      = "$(GCC_DIR)/bin/avr-objcopy"
OBJSIZE      = $(LD_PATH) "$(GCC_DIR)/bin/avr-objdump"


MCUFLAGS      = -mmcu=$(AVR_MCU) -DF_CPU=$(F_CPU) -B"$(DFP_DIR)/gcc/dev/$(AVR_MCU)" -D__AVR_ARCH_X__
CXXFLAGS      = -Wall -Wextra -Wfatal-errors -std=c++11 -fno-exceptions -fno-unwind-tables -fno-rtti -fmerge-constants -fmerge-all-constants
CXXFLAGS     += $(MCUFLAGS) -g -Os -fdiagnostics-color=always
CXXFLAGS     += -fdata-sections -ffunction-sections -fno-threadsafe-statics -fpack-struct -fshort-enums
CXXFLAGS     += -Wl,--relax -Wl,--gc-sections -flto -fno-fat-lto-objects
OBJCOPYFLAGS += -R .eeprom -O ihex
OBJSIZEFLAGS = -Pmem-usage


test:
	@clear
	@$(MAKE) -s clear test_direct test_indirect
	@(diff -q test_direct.hex test_indirect.hex | grep --color -i 'differ' && echo; exit 0)
	@$(MAKE) -s clear

test_direct: test_direct.cpp
	@$(CXX) $(INCLUDE_DIR) $(CXXFLAGS) $< -o $@
	@$(OBJCOPY) $(OBJCOPYFLAGS) $@ $@.hex
	@$(OBJSIZE) $(OBJSIZEFLAGS) $@

test_indirect: test_indirect.cpp
	@$(CXX) $(INCLUDE_DIR) $(CXXFLAGS) $< -o $@
	@$(OBJCOPY) $(OBJCOPYFLAGS) $@ $@.hex
	@$(OBJSIZE) $(OBJSIZEFLAGS) $@

clear:
	@rm -f test_direct   test_direct.hex
	@rm -f test_indirect test_indirect.hex
