#!/usr/bin/make -f

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

MULTILIB_LIST_ARM="--with-multilib-list=rmprofile,aprofile"

PACKAGE_GCC_ARM=gcc-arm-none-eabi
PACKAGE_GCC_AARCH64=gcc-aarch64-none-elf
PACKAGE_GCC_SOURCE=gcc-arm-none-eabi-source
TARGET_ARM=arm-none-eabi
TARGET_AARCH64=aarch64-none-elf
TOP_DIR=$(shell pwd)
NPROC=$(shell nproc)

UPSTREAM_URL=https://developer.arm.com/-/media/Files/downloads/gnu/15.2.rel1/srcrel/arm-gnu-toolchain-src-snapshot-15.2.rel1.tar.xz
GCC_BUILD_DIR_ARM=$(TOP_DIR)/build-$(TARGET_ARM)
GCC_BUILD_DIR_AARCH64=$(TOP_DIR)/build-$(TARGET_AARCH64)
GCC_SOURCE_DIR=$(TOP_DIR)
GCC_DEB_TMP_DIR_ARM=$(TOP_DIR)/debian/$(PACKAGE_GCC_ARM)-tmp
GCC_DEB_TMP_DIR_AARCH64=$(TOP_DIR)/debian/$(PACKAGE_GCC_AARCH64)-tmp
GCC_SOURCE_DEB_TMP_DIR=$(TOP_DIR)/debian/$(PACKAGE_GCC_SOURCE)-tmp

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

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

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

CONFIGURE_GCC_FLAGS_LIBSTDC = \
	--disable-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_ARM = \
	$(CONFIGURE_GCC_FLAGS_COMMON) \
	--target=$(TARGET_ARM) \
	--enable-multilib \
	--includedir=/usr/$(TARGET_ARM)/include \
	--infodir=/usr/share/doc/$(PACKAGE_GCC_ARM)/info \
	--htmldir=/usr/share/doc/$(PACKAGE_GCC_ARM)/html \
	--pdfdir=/usr/share/doc/$(PACKAGE_GCC_ARM)/pdf \
	$(MULTILIB_LIST_ARM) \
	$(TARGET_TOOLS_ARM)

CONFIGURE_GCC_FLAGS_AARCH64 = \
	$(CONFIGURE_GCC_FLAGS_COMMON) \
	--target=$(TARGET_AARCH64) \
	--disable-multilib \
	--includedir=/usr/$(TARGET_AARCH64)/include \
	--infodir=/usr/share/doc/$(PACKAGE_GCC_AARCH64)/info \
	--htmldir=/usr/share/doc/$(PACKAGE_GCC_AARCH64)/html \
	--pdfdir=/usr/share/doc/$(PACKAGE_GCC_AARCH64)/pdf \
	$(TARGET_TOOLS_AARCH64)

%:
	dh $@ --with autoreconf

override_dh_autoreconf:
	autoreconf2.69 -f $(GCC_SOURCE_DIR)

override_dh_auto_configure:
	dh_auto_configure -Bbuild-$(TARGET_AARCH64) -- $(CONFIGURE_GCC_FLAGS_AARCH64)
	dh_auto_configure -Bbuild-$(TARGET_ARM) -- $(CONFIGURE_GCC_FLAGS_ARM)

override_dh_auto_build: build-aarch64 build-arm

build-aarch64:
	dh_auto_build -Bbuild-$(TARGET_AARCH64) -- -j$(NPROC)

build-arm:
	dh_auto_build -Bbuild-$(TARGET_ARM) -- -j$(NPROC)

override_dh_auto_install:
	$(MAKE) install -C$(GCC_BUILD_DIR_ARM) DESTDIR=$(GCC_DEB_TMP_DIR_ARM)
	$(MAKE) install -C$(GCC_BUILD_DIR_AARCH64) DESTDIR=$(GCC_DEB_TMP_DIR_AARCH64)

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

override_dh_clean:
	rm -rf build-$(TARGET_ARM)
	rm -rf build-$(TARGET_AARCH64)
	rm -rf $(GCC_BUILD_DIR_ARM)
	rm -rf $(GCC_BUILD_DIR_AARCH64)
	rm -rf $(GCC_DEB_TMP_DIR_ARM)
	rm -rf $(GCC_DEB_TMP_DIR_ARM_AARCH64)
	rm -rf $(GCC_SOURCE_DEB_TMP_DIR)
	dh_clean

override_dh_strip:
	dh_strip -X.a

override_dh_install:
	dh_install -p$(PACKAGE_GCC_ARM) --sourcedir $(GCC_DEB_TMP_DIR_ARM)
	dh_install -p$(PACKAGE_GCC_AARCH64) --sourcedir $(GCC_DEB_TMP_DIR_AARCH64)
	mkdir -p $(GCC_SOURCE_DEB_TMP_DIR)/usr/src
	tar --exclude=build-$(TARGET_ARM) --exclude=build-$(TARGET_AARCH64) --exclude=.git --exclude=debian --exclude=autom4te.cache --sort=name --mtime="@$(SOURCE_DATE_EPOCH)" --owner=0 --group=0 --numeric-owner --mode=go-w,u+rw -C $(TOP_DIR) -c -f - . | xz -T0 > $(GCC_SOURCE_DEB_TMP_DIR)/usr/src/$(PACKAGE_GCC_SOURCE).tar.xz
	dh_install -p$(PACKAGE_GCC_SOURCE) --sourcedir $(GCC_SOURCE_DEB_TMP_DIR)

override_dh_compress:
	dh_compress -Xexamples/
