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


AVR_MCU      = atmega328p
F_CPU        = 16000000UL


GCC_DIR      = /opt/arduino-1.8.13/hardware/tools/avr
INCLUDE_DIR  = -I"$(GCC_DIR)/avr/include" -I"../../include"
LIBRARY_DIR  = -L"$(GCC_DIR)/avr/lib/gcc/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)
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
