#!/usr/bin/make -f

# Compute CUDA stuff
CUDA_VERSION    := $(shell dpkg-query -W -f='$${Version}' nvidia-cuda-toolkit | cut -d. -f1,2)
# List of CUDA level according to CUDA version
ifeq ($(CUDA_VERSION),9.1)
  CUDA_CAP      := 30;35;37;50;52;53;60;61;70
else ifeq ($(CUDA_VERSION),9.0)
  CUDA_CAP      := 30;35;37;50;52;53;60;61;70
else ifeq ($(CUDA_VERSION),8.0)
  CUDA_CAP      := 30;35;37;50;52;53;60;61
else ifeq ($(CUDA_VERSION),7.5)
  CUDA_CAP      := 30;35;37;50;52;53
else
  CUDA_CAP      := Unsupported
endif
# Distrib with CUDA 7.5 or 8.0 will use 4.9
# Newer will use 6.4
ifeq ($(shell dpkg --compare-versions $(CUDA_VERSION) ge 9.0 && echo yes),yes)
  CUDACC        := /usr/bin/gcc-6
else
  CUDACC        := /usr/bin/gcc-4.9
endif

# Get version from changelog as well as lsb_release
# to compute unique build version (useful for repo mirroring systems doing file pooling)
PKG_VERSION  := $(shell dpkg-parsechangelog | grep -E '^Version:' | cut -d' ' -f2)
DIST_NAME    := $(shell lsb_release -si)
DIST_RELEASE := $(shell lsb_release -sc)
DIST_VERSION := $(shell lsb_release -sr)
DOT         := .
SEMICOLON   := ;
CUDA_CAP_DOT_SEP := $(subst $(SEMICOLON),$(DOT),$(CUDA_CAP))
PKG_VERSION_TAG     := $(PKG_VERSION)+$(DIST_NAME).$(DIST_RELEASE).$(DIST_VERSION)+Cuda.$(CUDA_VERSION).Levels.$(CUDA_CAP_DOT_SEP)+OpenCL

# Common configure args
COMMON_CONFIGURE_ARGS += -DMICROHTTPD_ENABLE=ON
COMMON_CONFIGURE_ARGS += -DOpenSSL_ENABLE=ON
COMMON_CONFIGURE_ARGS += -DCMAKE_BUILD_TYPE=Release
COMMON_CONFIGURE_ARGS += -DXMR-STAK_COMPILE=generic

# CPU related option
CPU_CONFIGURE_ARGS += -DCPU_ENABLE=ON
CPU_CONFIGURE_ARGS += -DHWLOC_ENABLE=ON

# NVIDIA CUDA related option
CUDA_CONFIGURE_ARGS += -DCUDA_CAP="$(CUDA_CAP)"
CUDA_CONFIGURE_ARGS += -DCUDA_HOST_COMPILER=$(CUDACC)
CUDA_CONFIGURE_ARGS += -DCUDA_ENABLE=ON

# AMD OpenCL related option
OPENCL_CONFIGURE_ARGS += -DOpenCL_ENABLE=ON

# Build with gcc-5 / g++-5 on Debian Jessie and enable static GCC linking
# To avoid installation of my backported gcc-5 packages
ifeq (jessie,$(DIST_RELEASE))
  EXTRA_CONFIGURE_ARGS += -DCMAKE_LINK_STATIC=ON
  export CC=/usr/bin/gcc-5
  export CXX=/usr/bin/g++-5
  export DEB_CXXFLAGS_MAINT_APPEND=-std=c++11
else
  EXTRA_CONFIGURE_ARGS += -DCMAKE_LINK_STATIC=OFF
endif

DESTDIR := $(CURDIR)/debian/tmp

%:
	dh $@ --parallel --with systemd

override_dh_auto_configure:
	# Fix default config file to match debian packaging
	sed -i 's|config.txt|/etc/xmr-stak/config.txt|' xmrstak/params.hpp
	# Disable donation
	sed -i 's|fDevDonationLevel\s*=\s*.*;|fDevDonationLevel = 0.0;|' xmrstak/donate-level.hpp
	# Enable all features	
	dh_auto_configure --builddirectory=$${BUILDDIR} \
			  -- $(COMMON_CONFIGURE_ARGS) \
	               	     $(CPU_CONFIGURE_ARGS) \
	                     $(CUDA_CONFIGURE_ARGS) \
	                     $(OPENCL_CONFIGURE_ARGS) \
	       	             $(EXTRA_CONFIGURE_ARGS)

override_dh_auto_install:
	dh_auto_install
	install -D -o root -g root -m 0644 \
		"xmrstak/config.tpl" \
		"$(DESTDIR)/etc/xmr-stak/config.tpl"

override_dh_auto_clean:
	dh_auto_clean
	# Restore default config.txt path and donation level
	sed -i 's|/etc/xmr-stak/config.txt|config.txt|' xmrstak/params.hpp
	sed -i 's|fDevDonationLevel\s*=\s*.*;|fDevDonationLevel = 2.0 / 100.0;|' xmrstak/donate-level.hpp

override_dh_systemd_enable:
	dh_systemd_enable --no-enable

override_dh_systemd_start:
	dh_systemd_start --no-start

override_dh_gencontrol:
	dh_gencontrol -- -v"$(PKG_VERSION_TAG)"
