VARIANT=native
TARGET=
TARGET_OPTIONS=
BSP=
PREFIX=./install
MKDIR=mkdir -p
INSTALL=cp -p
CP=cp
GPRBUILD=gprbuild
GPRBUILD_FLAGS=
LINKER_SCRIPT=

ifeq ($(VARIANT), powerpc-elf-psim)
   TARGET=powerpc-elf
   BSP=psim
endif

ifeq ($(VARIANT), powerpc-elf-qemu)
   TARGET=powerpc-elf
   BSP=qemu
   LINKER_SCRIPT=powerpc-elf/qemu/ppc_qemu.ld
endif

ifeq ($(VARIANT), powerpc-eabispe-qemu)
   TARGET=powerpc-eabispe
   BSP=qemu
   LINKER_SCRIPT=powerpc-elf/qemu/ppc_qemu.ld
endif

ifeq ($(VARIANT), powerpc-eabispe-itmpc5554)
   TARGET=powerpc-eabispe
   BSP=itmpc5554
   LINKER_SCRIPT=powerpc-eabispe/itmpc5554/p55.ld
endif

ifeq ($(VARIANT), avr-avrtest)
   TARGET=avr
   BSP=avrtest
   LINKER_SCRIPT=avr/avrtest/avrtest.ld
endif

ifeq ($(VARIANT), avr-at90usb128)
   TARGET=avr
   BSP=at90usb128
endif

# Default run-time is zfp.
RTS=zfp

ifeq ($(VARIANT), leon-elf-ravenscar-sfp)
  RTS=ravenscar-sfp
endif

ifeq ($(VARIANT), erc32-elf-ravenscar-sfp)
  RTS=ravenscar-sfp
endif

ifeq ($(TARGET),)
 ifneq ($(VARIANT),native)
   TARGET=$(VARIANT)
 endif
endif

ifneq ($(TARGET),)
  TARGET_OPTIONS=--target=$(TARGET)
endif

ZFP_SRCS:=$(wildcard $(addprefix zfp-src/, *.adb *.ads))
EXTRA_ZFP_SRCS:=$(wildcard $(addprefix extra-zfp-src/, *.adb *.ads))

BOARD_SRCS:=$(wildcard $(addprefix board-common/, *.adb *.ads))
ifeq ($(VARIANT), native)
  BOARD_SRCS:=$(BOARD_SRCS) $(wildcard $(addprefix native/, *.c *.adb *.ads *.h))
else
  BOARD_SRCS:=$(BOARD_SRCS) $(wildcard $(addprefix $(TARGET), *.c *.adb *.ads *.h *.s))
  ifneq ($(BSP),)
    BOARD_SRCS:=$(BOARD_SRCS) $(wildcard $(addprefix $(TARGET)/$(BSP), *.c *.adb *.ads *.h *.s))
  endif
endif

all: copy_src
	$(GPRBUILD) -p $(TARGET_OPTIONS) --RTS=$(RTS) board_support_build.gpr -XVARIANT=$(VARIANT) $(GPRBUILD_FLAGS)
	$(GPRBUILD) -p $(TARGET_OPTIONS) --RTS=$(RTS) zfp_support_build.gpr -XVARIANT=$(VARIANT) $(GPRBUILD_FLAGS)

.PHONY: install
install:
	$(MKDIR) $(PREFIX)/lib/gnat
	$(MKDIR) $(PREFIX)/include/board_support/$(VARIANT)
	$(MKDIR) $(PREFIX)/lib/board_support/$(VARIANT)
	$(INSTALL) board_support.gpr zfp_support_common.gpr $(PREFIX)/lib/gnat/
	$(INSTALL) $(BOARD_SRCS) $(PREFIX)/include/board_support/$(VARIANT)
	$(INSTALL) lib-board-$(VARIANT)/* $(PREFIX)/lib/board_support/$(VARIANT)
	if [ "$(LINKER_SCRIPT)" != "" ] ; then \
	  $(INSTALL) $(LINKER_SCRIPT) $(PREFIX)/lib/board_support/$(VARIANT) ; \
	fi
	$(MKDIR) $(PREFIX)/include/zfp_support/$(VARIANT)
	$(MKDIR) $(PREFIX)/lib/zfp_support/$(VARIANT)
	$(INSTALL) zfp_support.gpr $(PREFIX)/lib/gnat/
	$(INSTALL) $(ZFP_SRCS) $(EXTRA_ZFP_SRCS) $(PREFIX)/include/zfp_support/$(VARIANT)
	$(INSTALL) lib-zfp-$(VARIANT)/* $(PREFIX)/lib/zfp_support/$(VARIANT)

# Copy shared sources.
.PHONY: copy_src
copy_src:
	$(CP) powerpc-elf/a-textio.adb powerpc-eabispe/qemu

clean:
	rm -rf lib-$(VARIANT)
	rm -rf obj-$(VARIANT)

.PHONY: check
check:
	cd test-hello; \
	$(GPRBUILD) -p $(TARGET_OPTIONS) --RTS=$(RTS) -XVARIANT=$(VARIANT) $(GPRBUILD_FLAGS) -Pt t.adb

