# -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 !!!!

# TO DO: remove the -Wno- defines one by one and examine the sources to see why they're issuing warnings.

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/

INI_DIR = ini

LOADER_OBJ := 	$(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_OBJ := 	$(PITREX_DIR)$(BUILD_DIR)bcm2835.o \
		$(PITREX_DIR)$(BUILD_DIR)pitrexio-gpio.o \

VECTREX_OBJ :=	$(VECTREX_DIR)$(BUILD_DIR)vectrexInterface.o \
		$(VECTREX_DIR)$(BUILD_DIR)osWrapper.o \
		$(VECTREX_DIR)$(BUILD_DIR)baremetalUtil.o 

COMMON_OBJ := 	$(LOADER_OBJ) $(PITREX_OBJ) $(VECTREX_OBJ)

CINE_OBJ := 	$(BUILD_DIR)cineops.o \
		$(BUILD_DIR)cinemu.o \
		$(BUILD_DIR)inifile.o \
		$(BUILD_DIR)options.o

# CFLAGS = -DPITREX=1 -DPIZERO -I$(BASE) -I$(PITREX) -I$(VECTREX)  -I$(COMMON)
CFLAGS := -Wall -fuse-ld=bfd -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 -DINI_DIR="\"$(INI_DIR)\""
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 cine.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

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

$(BUILD_DIR)options.o: options.c inifile.h options.h cines.h
	$(CC) $(CFLAGS) -DO_BINARY=0 -Wno-missing-braces -Wno-unused-variable -Wno-pointer-sign -Wno-maybe-uninitialized -c -o $(BUILD_DIR)options.o options.c

$(BUILD_DIR)inifile.o: inifile.c inifile.h
	$(CC) $(CFLAGS) -DO_BINARY=0 -c -o $(BUILD_DIR)inifile.o inifile.c

$(BUILD_DIR)cineops.o: cineops.c cinedbg.i  cineops.i  startframe.i  clip.i
	$(CC) $(CFLAGS) -Wno-unused-variable -Wno-unused-but-set-variable -Wno-unused-label -c -o $(BUILD_DIR)cineops.o cineops.c

$(BUILD_DIR)cinemu.o: cinemu.c cines.h inifile.h options.h # $(VECTREX)vectrexInterface.h $(VECTREX)vectorFont.i
	$(CC) $(CFLAGS) -Wno-main -c -o $(BUILD_DIR)cinemu.o cinemu.c

cine.img: pitrexLib loaderObjects $(CINE_OBJ)
	$(CC) $(CFLAGS) -o $(BUILD_DIR)cine.elf.img \
	$(COMMON_OBJ) \
	$(CINE_OBJ) \
	-lm -lff12c  -ldebug  -lhal  -lconsole -lff12c -lbob -li2c -lbcm2835 -larm $(LIB_DIR)/linkerHeapDefBoot.ld
	$(RM) cine.img
	arm-none-eabi-objcopy $(BUILD_DIR)cine.elf.img -O binary cine.img

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


