#!/usr/bin/make -f

# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1

unexport LANG LC_ALL

version_date = $(shell date --iso-8601)

# Linux-style architecture
LINUX_HOST_ARCH=$(shell uname -m)

# Use OpenJDK as bootstrap if it exists
ifneq (,$(wildcard /usr/lib/jvm/java-21-openjdk-$(DEB_HOST_ARCH)))
BOOT_JDK=/usr/lib/jvm/java-21-openjdk-$(DEB_HOST_ARCH)
else
BOOT_JDK=/usr/lib/jvm/java-21-openj9-$(DEB_HOST_ARCH)
endif

ifeq ($(DEB_HOST_ARCH),arm64)
GCC_VERSION=10
WITH_OPENSSL=fetched
else
GCC_VERSION=12
WITH_OPENSSL=system
endif

# Same naming as in openjdk official Debian build
origin		= openj9
shortver	= 22
jdirname	= java-$(shortver)-$(origin)-$(DEB_HOST_ARCH)
ifneq ($(OPENJ9_MARCH),)
jdirname   += $(jdirname)-$(OPENJ9_MARCH)
endif
d_jvmlib	= /usr/lib/jvm
basedir	= $(d_jvmlib)/$(jdirname)

basename	= $(origin)-$(shortver)
p_jrehl	= $(basename)
d_jrehl	= debian/$(p_jrehl)

absarchdir = $(CURDIR)/$(d_jrehl)/$(basedir)/lib
shlibdeps_ld_path =$(absarchdir):$(absarchdir)/j9vm:$(absarchdir)/compressedrefs

dpkg_buildflags_hs = \
	DEB_BUILD_MAINT_OPTIONS="$(DEB_BUILD_MAINT_OPTIONS)" \
	DEB_CFLAGS_MAINT_STRIP="-O3 -Wno-error" \
	DEB_CXXFLAGS_MAINT_STRIP="-O3 -Wno-error" \
	DEB_CFLAGS_MAINT_APPEND="-fno-stack-protector -Wno-deprecated-declarations" \
	DEB_CXXFLAGS_MAINT_APPEND="-fno-stack-protector -Wno-deprecated-declarations$(if $(filter $(DEB_HOST_ARCH), armel armhf), -fpermissive)"
# jdk/make/CompileDemos.gmk (SetupJVMTIDemo) doesn't like commas in flags
dpkg_buildflags_hs += \
	DEB_LDFLAGS_MAINT_STRIP="-Wl,-z,relro -Wl,-Bsymbolic-functions" \
	DEB_LDFLAGS_MAINT_APPEND="-Xlinker -z -Xlinker relro -Xlinker -Bsymbolic-functions"
dpkg_buildflags_hs += dpkg-buildflags
export EXTRA_CPPFLAGS_HS := $(shell $(dpkg_buildflags_hs) --get CPPFLAGS)
export EXTRA_CFLAGS_HS   := $(shell $(dpkg_buildflags_hs) --get CFLAGS; $(dpkg_buildflags_hs) --get CPPFLAGS)
export EXTRA_CXXFLAGS_HS := $(shell $(dpkg_buildflags_hs) --get CXXFLAGS) -Wno-deprecated-declarations
export EXTRA_LDFLAGS_HS  := $(shell $(dpkg_buildflags_hs) --get LDFLAGS)

ifneq ($(OPENJ9_MARCH),)
EXTRA_CPPFLAGS_HS += -march=$(OPENJ9_MARCH)
endif

ifneq ($(LINUX_HOST_ARCH),aarch64)
ENABLE_JITSERVER=--enable-jitserver
endif

# actually work on bookworm
DISABLE_DDR=--disable-ddr

# Extra Argeo flags
# -fpermissive: avoid issues with newer compilers
# -DNDEBUG: disable assertions
#EXTRA_CPPFLAGS_ARGEO=-Wno-narrowing -Wno-error=narrowing -DNDEBUG
#EXTRA_CXXFLAGS_ARGEO=-fpermissive

%:
	dh $@

override_dh_auto_clean:
	if [ -d "./build" ]; then make dist-clean; rm -rf ./build; fi
	rm -f *.log

override_dh_auto_configure:
	bash ./configure \
	$(ENABLE_JITSERVER) \
	$(DISABLE_DDR) \
	--with-extra-cflags='$(EXTRA_CPPFLAGS_ARGEO) $(EXTRA_CFLAGS_ARGEO) $(EXTRA_CPPFLAGS_HS) $(EXTRA_CFLAGS_HS) $(CFLAGS)' \
	--with-extra-cxxflags='$(EXTRA_CPPFLAGS_ARGEO) $(EXTRA_CXXFLAGS_ARGEO) $(EXTRA_CPPFLAGS_HS) $(EXTRA_CXXFLAGS_HS) $(CXXFLAGS)' \
	--with-extra-ldflags='$(EXTRA_LDFLAGS_HS) $(LDFLAGS)' \
	--enable-cuda --with-cuda=/usr \
	--with-jni-libpath=/usr/lib/$(DEB_HOST_MULTIARCH)/jni:/usr/lib/jni:/lib/jni:$(basedir)/lib:/usr/lib/$(DEB_HOST_MULTIARCH):/usr/lib:/lib/$(DEB_HOST_MULTIARCH):/lib \
	--disable-warnings-as-errors \
	--disable-warnings-as-errors-omr \
	--disable-warnings-as-errors-openj9 \
	--with-debug-level=release \
	--with-openj9-cc=/usr/bin/$(LINUX_HOST_ARCH)-linux-gnu-gcc-$(GCC_VERSION) \
	--with-openj9-cxx=/usr/bin/$(LINUX_HOST_ARCH)-linux-gnu-g++-$(GCC_VERSION) \
	--with-stdc++lib=dynamic \
	--with-openssl=$(WITH_OPENSSL) \
	--with-libjpeg=system \
	--with-giflib=system \
	--with-libpng=system \
	--with-zlib=system \
	--with-lcms=system \
	--with-harfbuzz=system \
	--with-freetype=system \
	--with-version-pre=argeo \
	--with-version-opt= \
	--with-version-date=$(version_date) \
	--with-boot-jdk=$(BOOT_JDK)/

override_dh_auto_build:
	make jdk-image

override_dh_auto_test:
	echo Skip tests

override_dh_auto_install:
	#find ./build/ -name "*debuginfo" -delete
	mkdir -p $(CURDIR)/$(d_jrehl)/usr/lib/jvm
	
	# copy the whole built JDK and then dispatch files to the subpackages 
	cp -rp ./build/linux-$(LINUX_HOST_ARCH)-server-release/images/jdk $(CURDIR)/$(d_jrehl)/$(basedir)
	
	cp debian/.java-$(shortver)-openj9-$(DEB_HOST_ARCH).jinfo $(CURDIR)/$(d_jrehl)/usr/lib/jvm/
	
	# jmods
	mkdir -p $(CURDIR)/$(d_jrehl)-jmods/$(basedir)
	mv $(CURDIR)/$(d_jrehl)/$(basedir)/jmods $(CURDIR)/$(d_jrehl)-jmods/$(basedir)
	
	# source
	mkdir -p $(CURDIR)/$(d_jrehl)-source/$(basedir)/lib
	mv $(CURDIR)/$(d_jrehl)/$(basedir)/lib/src.zip $(CURDIR)/$(d_jrehl)-source/$(basedir)/lib
	
override_dh_shlibdeps:
	dh_shlibdeps -a -L $(p_jrehl) -l$(shlibdeps_ld_path) --

override_dh_dwz:
	echo Disable dh_dwz since it is failing

# dh_make generated override targets
# This is example for Cmake (See https://bugs.debian.org/641051 )
#override_dh_auto_configure:
#	dh_auto_configure -- \
#	-DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH)
