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

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

include /usr/share/dpkg/default.mk
include /usr/share/ada/debian_packaging-$(GCC_VER).mk

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

# 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_clean:
	# An .orig file exists in the release, don't delete it to not create
	# spurious differences to the tarball/git.
	dh_clean -Xtestsuite/synth/synth14/top.vhdl.orig

override_dh_auto_clean:
	# dh_auto_clean complains about python-distutils and fails if it
	# doesn't see a Makefile, so override to only do a distclean when the
	# Makefile exists and do nothing otherwise.
	if [ -f Makefile ]; then \
		$(MAKE) distclean; \
	fi

override_dh_installdocs:
	dh_installdocs --link-doc=ghdl-common

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 \
			--disable-libghdl --enable-gplcompat; \
	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 \
			--disable-libghdl --enable-gplcompat \
			--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 ; \
			sed -i "s/\(^series_stamp.*\)/debian_patches += $$(grep -v '^#' ${CURDIR}/debian/patches/gcc-${GCC_VER}/series|sed 's/\..*//'|tr '\n' ' ')\n\n\1/" debian/rules.patch ; \
		fi; \
		debian/rules patch; \
		../../configure --srcdir=../.. --prefix=/usr \
			--libdir=lib/ghdl/gcc --incdir=lib/ghdl/include \
			--disable-libghdl --enable-gplcompat \
			--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
	$(RM) debian/tmp/usr/lib/ghdl/src/ieee2008/LICENSE

override_dh_auto_test:
	# Avoid running dh_auto_test as it stumbles over the lack of test or
	# check targets in the Makefile and complains about python-distutils
	# because of pyGHDL.
