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

# Derivative
distribution := $(shell lsb_release --id --short)
distrel := $(shell lsb_release --codename --short)
derivative := $(shell if dpkg-vendor --derives-from Ubuntu; then echo Ubuntu; \
               elif dpkg-vendor --derives-from Debian; then echo Debian; \
               else echo Unknown; fi)
ifeq ($(distrel),n/a)
  distrel := sid
endif

# 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-20-openj9-$(DEB_HOST_ARCH)
endif

ifeq ($(distrel),bullseye)
WITH_OPENSSL=fetched
else
WITH_OPENSSL=system
endif

# Same naming as in openjdk official Debian build
origin		= openj9
shortver	= 21
jdirname	= java-$(shortver)-$(origin)-$(DEB_HOST_ARCH)
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="-Wno-error" \
	DEB_CXXFLAGS_MAINT_STRIP="-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)

ifeq ($(DEB_HOST_ARCH),arm64)
ifeq ($(distribution),ubuntu)
# Optimize for Raspberry Pi 5
EXTRA_CPPFLAGS_ARGEO += -march=armv8.2-a+crypto+fp16+rcpc+dotprod
endif
endif

ifeq ($(DEB_HOST_ARCH),amd64)
# Optimize for AVX-512
#EXTRA_CPPFLAGS_ARGEO += -march=skylake-avx512
endif

ENABLE_JITSERVER=--enable-jitserver

# Extra Argeo flags
# -fpermissive: avoid issues with newer compilers
# -DNDEBUG: disable assertions
EXTRA_CPPFLAGS_ARGEO=-O3 -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) \
	--with-extra-cflags='$(EXTRA_CPPFLAGS_HS) $(EXTRA_CFLAGS_HS) $(EXTRA_CPPFLAGS_ARGEO) $(EXTRA_CFLAGS_ARGEO)' \
	--with-extra-cxxflags='$(EXTRA_CPPFLAGS_HS) $(EXTRA_CXXFLAGS_HS) $(EXTRA_CPPFLAGS_ARGEO) $(EXTRA_CXXFLAGS_ARGEO)' \
	--with-extra-ldflags='$(EXTRA_LDFLAGS_HS) $(EXTRA_LDFLAGS_ARGEO) $(LDFLAGS)' \
	--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-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)/

#	--enable-cuda --with-cuda=/usr \

override_dh_auto_build:
	make jdk-image

override_dh_auto_test:
	echo Skip tests

override_dh_auto_install:
	mkdir -p $(CURDIR)/$(d_jrehl)-jdk/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)-jdk/$(basedir)
	
	# jmods
	mkdir -p $(CURDIR)/$(d_jrehl)-jmods/$(basedir)
	mv $(CURDIR)/$(d_jrehl)-jdk/$(basedir)/jmods $(CURDIR)/$(d_jrehl)-jmods/$(basedir)
	
	# source
	mkdir -p $(CURDIR)/$(d_jrehl)-source/$(basedir)/lib
	mv $(CURDIR)/$(d_jrehl)-jdk/$(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
