#!/usr/bin/make -f
#export DH_VERBOSE = 1
export DEB_BUILD_MAINT_OPTIONS = hardening=+all

# For multiarch
include /usr/share/dpkg/architecture.mk
# For DEB_VERSION_UPSTREAM
include /usr/share/dpkg/pkg-info.mk
GGML_BUILD_NUMBER=$(subst 0.0.,,$(DEB_VERSION_UPSTREAM))

FLAGS_ARGEO=-O3 -g -DNDEBUG

# GGML_NATIVE:ON corresponds to -march=native
CMAKE_OPTS  = -DGGML_NATIVE=OFF \
              -DCMAKE_BUILD_TYPE=RelWithDebInfo \
              -DCMAKE_C_FLAGS_RELWITHDEBINFO="$(FLAGS_ARGEO)" \
              -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="$(FLAGS_ARGEO)" \
              -DGGML_BUILD_NUMBER=$(GGML_BUILD_NUMBER) \
              -DGGML_BUILD_TESTS=OFF \
              -DGGML_BUILD_EXAMPLES=OFF \
              -DGGML_BACKEND_DL=ON \

# Common backends
CMAKE_OPTS += -DGGML_RPC=ON \

ifeq ($(filter pkg.ggml.novulkan,$(DEB_BUILD_PROFILES)),)
CMAKE_OPTS += -DGGML_VULKAN=ON
endif

# Optimize for Raspberry Pi 5
ifeq ($(DEB_TARGET_ARCH),arm64)
CMAKE_OPTS += -DGGML_CPU_ALL_VARIANTS=OFF \
              -DGGML_CPU_ARM_ARCH=armv8.2-a+crypto+fp16+rcpc+dotprod

else

CMAKE_OPTS += -DGGML_CPU_ALL_VARIANTS=ON

ifeq ($(filter pkg.ggml.nocuda,$(DEB_BUILD_PROFILES)),)
CMAKE_OPTS += -DGGML_CUDA=ON \
              -DCMAKE_CUDA_FLAGS_RELWITHDEBINFO="$(FLAGS_ARGEO)" \
              -DGGML_CUDA_FORCE_MMQ=ON \
              -DGGML_CUDA_FA_ALL_QUANTS=OFF \
              -DCUDAToolkit_ROOT=/usr
endif

endif # aarch64

# Use build/ for output, so that it is in the .gitignore of upstream
%:
	dh $@ --buildsystem=cmake \
	 --builddirectory=build/$(DEB_TARGET_MULTIARCH)

override_dh_auto_configure:
	dh_auto_configure -- $(CMAKE_OPTS)

execute_after_dh_auto_install-arch:
	# Move backends *.so to libexec, as we don't want them lurking in /usr/bin 
	mkdir -p debian/tmp/usr/libexec/$(DEB_TARGET_MULTIARCH)/ggml
	for file in debian/tmp/usr/bin/libggml-*.so; do \
		mv $$file debian/tmp/usr/libexec/$(DEB_TARGET_MULTIARCH)/ggml; \
	done

override_dh_installexamples:
	dh_installexamples --exclude=.gitignore
