#!/usr/bin/make -f

include /usr/share/dpkg/pkg-info.mk

TARGET_RISCV=riscv64-unknown-elf
PACKAGE_GCC_RISCV=gcc-$(TARGET_RISCV)
PACKAGE_GCC_SOURCE=gcc-riscv64-unknown-elf-source
PACKAGE_LIBSTDCXX_RISCV=libstdc++-$(TARGET_RISCV)
TOP_DIR=$(shell pwd)

GCC_BUILD_DIR_RISCV=$(TOP_DIR)/build-$(TARGET_RISCV)
GCC_SOURCE_DIR=$(TOP_DIR)/src
GCC_DEB_TMP_DIR_RISCV=$(TOP_DIR)/debian/$(PACKAGE_LIBSTDCXX_RISCV)-tmp

LIBSTDCXX_BUILD_DIR_RISCV=$(GCC_BUILD_DIR_RISCV)/libstdc++-v3

STAMP_DIR=$(TOP_DIR)/debian/stamp
UNPACK=$(STAMP_DIR)/unpack
GCC_SOURCE_VERSION := $(shell dpkg-query -W -f="\$${Version}\n" $(PACKAGE_GCC_SOURCE))
PACKAGE_VERSION := $(GCC_SOURCE_VERSION)+$(DEB_VERSION)

# these need to match the flags used in gcc-riscv64-unknown-elf

export DEB_BUILD_MAINT_OPTIONS=hardening=-format
BUILDFLAGS:=$(shell dpkg-buildflags --export=configure) INHIBIT_LIBC_CFLAGS="-DUSE_TM_CLONE_REGISTRY=0"

TARGET_TOOLS_RISCV=\
	AR_FOR_TARGET=$(TARGET_RISCV)-ar \
	AS_FOR_TARGET=$(TARGET_RISCV)-as \
	LD_FOR_TARGET=$(TARGET_RISCV)-ld \
	NM_FOR_TARGET=$(TARGET_RISCV)-nm \
	OBJDUMP_FOR_TARGET=$(TARGET_RISCV)-objdump \
	RANLIB_FOR_TARGET=$(TARGET_RISCV)-ranlib \
	READELF_FOR_TARGET=$(TARGET_RISCV)-readelf \
	STRIP_FOR_TARGET=$(TARGET_RISCV)-strip

CONFIGURE_GCC_FLAGS_LIBSTDC = \
	--enable-libstdcxx \
	--enable-hosted-libstdcxx

CONFIGURE_GCC_FLAGS_COMMON = \
	--with-gcc-major-version-only \
	--mandir=/usr/share/man \
	--enable-languages=c,c++,lto \
	--enable-multilib-space \
	--disable-decimal-float \
	--disable-libffi \
	--disable-libgomp \
	--disable-libmudflap \
	--disable-libquadmath \
	--disable-libssp \
	--disable-libstdcxx-pch \
	--disable-nls \
	--disable-shared \
	--disable-threads \
	--enable-tls \
	--build=$(DEB_BUILD_GNU_TYPE) \
	--with-system-zlib \
	--with-gnu-as \
	--with-gnu-ld \
	"--with-pkgversion=$(DEB_VERSION)" \
	--without-included-gettext \
	--prefix=/usr \
	--libexecdir=/usr/libexec \
	--libdir=/usr/lib \
	--host=$(DEB_HOST_GNU_TYPE) \
	--with-headers=no \
	--with-picolibc \
	--without-newlib \
	$(CONFIGURE_GCC_FLAGS_LIBSTDC) \
	$(BUILDFLAGS) \
	SED=/bin/sed \
	SHELL=/bin/sh \
	BASH=/bin/bash \
	CONFIG_SHELL=/bin/bash \

CONFIGURE_GCC_FLAGS_RISCV = \
	$(CONFIGURE_GCC_FLAGS_COMMON) \
	--target=$(TARGET_RISCV) \
	--enable-multilib \
	--includedir=/usr/$(TARGET_RISCV)/include \
	--infodir=/usr/share/doc/$(PACKAGE_GCC_RISCV)/info \
	--htmldir=/usr/share/doc/$(PACKAGE_GCC_RISCV)/html \
	--pdfdir=/usr/share/doc/$(PACKAGE_GCC_RISCV)/pdf \
	--with-cmodel=medany \
	--with-arch=rv64imafdc \
	$(TARGET_TOOLS_RISCV)

%:
	dh $@

override_dh_auto_configure: $(UNPACK)
	dh_auto_configure -D$(GCC_SOURCE_DIR) -Bbuild-$(TARGET_RISCV) -- $(CONFIGURE_GCC_FLAGS_RISCV)

override_dh_auto_build:
	dh_auto_build -Bbuild-$(TARGET_RISCV) -- all-target-libstdc++-v3

# remove the libtool dregs
override_dh_auto_install:
	$(MAKE) install-target-libstdc++-v3 -C$(GCC_BUILD_DIR_RISCV) DESTDIR=$(GCC_DEB_TMP_DIR_RISCV)
	find $(GCC_DEB_TMP_DIR_RISCV) -name *.la -exec rm '{}' +

override_dh_auto_test:
	@echo "no testing, that's way too painful"

override_dh_clean:
	rm -rf build-$(TARGET_RISCV)
	rm -rf $(GCC_BUILD_DIR_RISCV)
	rm -rf $(GCC_DEB_TMP_DIR_RISCV)
	rm -rf $(GCC_SOURCE_DEB_TMP_DIR)
	dh_clean

override_dh_strip:
	dh_strip -X.a

override_dh_install:
	dh_install -p$(PACKAGE_LIBSTDCXX_RISCV) --sourcedir $(GCC_DEB_TMP_DIR_RISCV)

$(UNPACK):
	mkdir -p $(STAMP_DIR)
	mkdir -p $(GCC_SOURCE_DIR)
	tar xf /usr/src/$(PACKAGE_GCC_SOURCE).tar.* -C $(GCC_SOURCE_DIR)
	touch $@

override_dh_gencontrol:
	dh_gencontrol -- -v$(PACKAGE_VERSION) -Vgcc:Version=$(GCC_SOURCE_VERSION)

