# -DLOADER_START=0x4000000
# must also be defined/changed in *.S files, since they do not parse defines
# REMEMBER in bcm2835
# MEM_COHERENT_REGION s defined now as 0x3f00000 !!!!

BUILD_DIR_PURE := build.baremetal
BUILD_DIR := $(BUILD_DIR_PURE)/

LIB_DIR :=../pitrex/baremetal
INC_DIR_PITREX := ../pitrex
INC_DIR_LIBRARY := $(LIB_DIR)/lib2835
PITREX_DIR := ../pitrex/pitrex/
VECTREX_DIR := ../pitrex/vectrex/
LOADER_DIR := ../piTrexBoot/

CFLAGS := -Ofast -I$(INC_DIR_PITREX) -I$(INC_DIR_LIBRARY) -L$(LIB_DIR) -mfloat-abi=hard -nostartfiles -mfpu=vfp -march=armv6zk -mtune=arm1176jzf-s -DRPI0 -DFREESTANDING -DPITREX_DEBUG -DMHZ1000 -DLOADER_START=0x4000000
CC	= arm-none-eabi-gcc
AS	= $(CC)
LD	= arm-none-eabi-ld
AR	= arm-none-eabi-ar

.PHONY: pitrexLib
.PHONY: dirCheck
.PHONY: loaderObjects


all:	dirCheck pitrexLib loaderObjects vecxemuld.img

dirCheck:
	if [ ! -d $(BUILD_DIR_PURE) ]; then mkdir $(BUILD_DIR_PURE); fi

pitrexLib:
	$(MAKE) -C $(PITREX_DIR) -f Makefile.baremetal all
	$(MAKE) -C $(VECTREX_DIR) -f Makefile.baremetal all

simLib:
	$(MAKE) -C $(SIM_DIR) -f Makefile.baremetal all

loaderObjects:
	$(MAKE) -C $(LOADER_DIR) -f Makefile loaderObjects


$(BUILD_DIR)main.o: main.c e6809.h vecx.h
	$(CC) $(CFLAGS) -o $(BUILD_DIR)main.o -c main.c

$(BUILD_DIR)e6809.o: e6809.c e6809.h
	$(CC) $(CFLAGS) -o $(BUILD_DIR)e6809.o -c e6809.c

$(BUILD_DIR)vecx.o: vecx.c vecx.h e6809.h
	$(CC) $(CFLAGS) -o $(BUILD_DIR)vecx.o -c vecx.c

vecxemuld.img : pitrexLib loaderObjects $(BUILD_DIR)e6809.o $(BUILD_DIR)vecx.o $(BUILD_DIR)main.o
	$(CC) $(CFLAGS) -o $(BUILD_DIR)vecxemuld.elf.img \
	$(LOADER_DIR)$(BUILD_DIR)baremetalEntry.o \
	$(LOADER_DIR)$(BUILD_DIR)bareMetalMain.o \
	$(LOADER_DIR)$(BUILD_DIR)cstubs.o \
	$(LOADER_DIR)$(BUILD_DIR)rpi-armtimer.o \
	$(LOADER_DIR)$(BUILD_DIR)rpi-aux.o \
	$(LOADER_DIR)$(BUILD_DIR)rpi-gpio.o \
	$(LOADER_DIR)$(BUILD_DIR)rpi-interrupts.o \
	$(LOADER_DIR)$(BUILD_DIR)rpi-systimer.o \
	$(PITREX_DIR)$(BUILD_DIR)bcm2835.o \
	$(PITREX_DIR)$(BUILD_DIR)pitrexio-gpio.o \
	$(VECTREX_DIR)$(BUILD_DIR)vectrexInterface.o \
	$(VECTREX_DIR)$(BUILD_DIR)osWrapper.o \
	$(VECTREX_DIR)$(BUILD_DIR)baremetalUtil.o \
	$(BUILD_DIR)e6809.o \
	$(BUILD_DIR)vecx.o \
	$(BUILD_DIR)main.o \
	-lm -lff12c  -ldebug  -lhal -lutils -lconsole -lff12c -lbob -li2c -lbcm2835 -larm $(LIB_DIR)/linkerHeapDefBoot.ld
	$(RM) vecxemuld.img
	arm-none-eabi-objcopy $(BUILD_DIR)vecxemuld.elf.img -O binary vecxemuld.img
ifdef MAKE_IMAGE
	cp vecxemuld.img /media/psf/Home/ubuntu64
	cp vecxemuld.img /media/psf/macRoot/Volumes/baremetal
endif

clean:
	$(RM) $(BUILD_DIR)*.*
	$(RM) vecxemuld.img
