#!/usr/bin/make -f

# Currently gcc can not be compiled with format-security and it is not needed
# for Ada code anyway
export DEB_BUILD_MAINT_OPTIONS = hardening=+all,-format

#export DH_VERBOSE = 1

include /usr/share/dpkg/default.mk
include /usr/share/ada/debian_packaging-8.mk

# This variable is used in Makefile.in to adjust src/version.in
export PKG_VERSION := $(DEB_VENDOR) $(DEB_VERSION)

# These variables are used to find and unpack the gcc source
GCC_DIR := /usr/src/gcc-8
GCC_VER := 8
GCC_TARBALL := $(notdir $(wildcard $(GCC_DIR)/gcc-*.tar.*))

# Get parallel option to parallelize the gcc build specifically (Ada builds
# are already parallelized by code included from debian_packaging-*.mk above).
ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
    MAKEPARALLEL = -j$(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
endif

# build profile control over what backends get built
ifeq ($(filter pkg.ghdl.nomcode,$(DEB_BUILD_PROFILES)),)
    WITH_MCODE := 1
endif
ifeq ($(filter pkg.ghdl.nogcc,$(DEB_BUILD_PROFILES)),)
    WITH_GCC   := 1
endif
ifeq ($(filter pkg.ghdl.nollvm,$(DEB_BUILD_PROFILES)),)
    WITH_LLVM  := 1
endif

# force disable mcode build on non-x86 architectures where it isn't supported
ifeq ($(filter amd64 i386,$(DEB_HOST_ARCH_CPU)),)
    WITH_MCODE :=
endif

BUILDDIR := $(CURDIR)/builddir
CC := gnatgcc
export CC


%:
	dh ${@}

override_dh_missing:
	dh_missing --list-missing

override_dh_auto_configure:
	mkdir -p $(BUILDDIR)/mcode $(BUILDDIR)/llvm $(BUILDDIR)/gcc
	@echo
	@echo ------------------------------------------------------------
	@echo Configuring with mcode backend
	@echo ------------------------------------------------------------
	if [ -n "$(WITH_MCODE)" ]; then \
		cd $(BUILDDIR)/mcode; \
		../../configure --srcdir=../.. --prefix=/usr \
			--libdir=lib/ghdl/mcode --incdir=lib/ghdl/include \
			--enable-openieee; \
	fi
	@echo
	@echo ------------------------------------------------------------
	@echo Configuring with llvm backend
	@echo ------------------------------------------------------------
	if [ -n "$(WITH_LLVM)" ]; then \
		cd $(BUILDDIR)/llvm; \
		../../configure --srcdir=../.. --prefix=/usr \
			--libdir=lib/ghdl/llvm --incdir=lib/ghdl/include \
			--enable-openieee --with-llvm-config; \
	fi
	@echo
	@echo ------------------------------------------------------------
	@echo Configuring with gcc backend
	@echo ------------------------------------------------------------
	# gcc unpack sequence cribbed from gcc-7-cross debian/rules
	set -e; \
	if [ -n "$(WITH_GCC)" ]; then \
		cd $(BUILDDIR)/gcc; \
		ln -sf ${GCC_DIR}/$(GCC_TARBALL) $(GCC_TARBALL); \
		cp -a  ${GCC_DIR}/debian/ .; \
		if [ -n "$$(grep -v '^\#' ${CURDIR}/debian/patches/gcc-${GCC_VER}/series)" ]; then \
			cp -n ${CURDIR}/debian/patches/gcc-${GCC_VER}/*.diff debian/patches/ ; \
			cat ${CURDIR}/debian/patches/gcc-${GCC_VER}/series >> debian/patches/series ; \
		fi; \
		debian/rules patch; \
		../../configure --srcdir=../.. --prefix=/usr \
			--libdir=lib/ghdl/gcc --incdir=lib/ghdl/include \
			--enable-openieee --with-gcc=src; \
		make copy-sources; \
		mkdir gccbuild; \
		cd gccbuild; \
		../src/configure --prefix=/usr/lib/ghdl/gcc --enable-languages=vhdl \
			--enable-default-pie \
			--disable-bootstrap --disable-lto --disable-multilib \
			--disable-libssp --disable-libgomp --disable-libquadmath \
			--with-system-zlib --without-isl; \
	fi

override_dh_auto_build:
	@echo
	@echo ------------------------------------------------------------
	@echo Building with mcode backend
	@echo ------------------------------------------------------------
	if [ -n "$(WITH_MCODE)" ]; then \
		$(MAKE) -C $(BUILDDIR)/mcode; \
	fi
	@echo
	@echo ------------------------------------------------------------
	@echo Building with llvm backend
	@echo ------------------------------------------------------------
	if [ -n "$(WITH_LLVM)" ]; then \
		$(MAKE) -C $(BUILDDIR)/llvm; \
	fi
	@echo
	@echo ------------------------------------------------------------
	@echo Building with gcc backend
	@echo ------------------------------------------------------------
	if [ -n "$(WITH_GCC)" ]; then \
		$(MAKE) $(MAKEPARALLEL) -C $(BUILDDIR)/gcc/gccbuild; \
		$(MAKE) -C $(BUILDDIR)/gcc lib/ghdl/gcc/libgrt.a all.vpi; \
		$(MAKE) -C $(BUILDDIR)/gcc ghdllib \
			GHDL_GCC_BIN=$(BUILDDIR)/gcc/gccbuild/gcc/ghdl \
			GHDL1_GCC_BIN="--GHDL1=$(BUILDDIR)/gcc/gccbuild/gcc/ghdl1"; \
	fi

override_dh_auto_install:
	install -pD debian/ghdl.wrapper $(CURDIR)/debian/tmp/usr/bin/ghdl
	@echo
	@echo ------------------------------------------------------------
	@echo Installing with mcode backend
	@echo ------------------------------------------------------------
	if [ -n "$(WITH_MCODE)" ]; then \
		$(MAKE) -C $(BUILDDIR)/mcode install DESTDIR=../../debian/tmp; \
	fi
	@echo
	@echo ------------------------------------------------------------
	@echo Installing with llvm backend
	@echo ------------------------------------------------------------
	if [ -n "$(WITH_LLVM)" ]; then \
		$(MAKE) -C $(BUILDDIR)/llvm install DESTDIR=../../debian/tmp; \
	fi
	@echo
	@echo ------------------------------------------------------------
	@echo Installing with gcc backend
	@echo ------------------------------------------------------------
	if [ -n "$(WITH_GCC)" ]; then \
		$(MAKE) -C $(BUILDDIR)/gcc/gccbuild install \
			DESTDIR=$(CURDIR)/debian/tmp; \
		$(MAKE) -C $(BUILDDIR)/gcc install DESTDIR=$(CURDIR)/debian/tmp; \
		mv debian/tmp/usr/lib/ghdl/gcc/bin/ghdl-gcc debian/tmp/usr/bin/ghdl-gcc; \
		mv debian/tmp/usr/lib/ghdl/gcc/lib/ghdl/libbacktrace.a debian/tmp/usr/lib/ghdl/gcc/vhdl/libbacktrace.a; \
	fi
	@echo
	@echo ------------------------------------------------------------
	@echo Moving parts to required locations
	@echo ------------------------------------------------------------
	if [ -n "$(WITH_MCODE)" ]; then \
		$(RM) -r debian/tmp/usr/lib/ghdl/src; \
		mv debian/tmp/usr/lib/ghdl/mcode/vhdl/src debian/tmp/usr/lib/ghdl; \
		ln -s ../../src debian/tmp/usr/lib/ghdl/mcode/vhdl/src; \
	fi
	if [ -n "$(WITH_LLVM)" ]; then \
		$(RM) -r debian/tmp/usr/lib/ghdl/src; \
		mv debian/tmp/usr/lib/ghdl/llvm/vhdl/src debian/tmp/usr/lib/ghdl; \
		ln -s ../../src debian/tmp/usr/lib/ghdl/llvm/vhdl/src; \
	fi
	if [ -n "$(WITH_GCC)" ]; then \
		$(RM) -r debian/tmp/usr/lib/ghdl/src; \
		mv debian/tmp/usr/lib/ghdl/gcc/vhdl/src debian/tmp/usr/lib/ghdl; \
		ln -s ../../src debian/tmp/usr/lib/ghdl/gcc/vhdl/src; \
	fi
