#!/usr/bin/make -f


# List of CUDA level according to CUDA version
# https://developer.nvidia.com/cuda-gpus
CUDA_VERSION := $(shell dpkg-query -W -f='$${Version}' nvidia-cuda-toolkit | cut -d. -f1,2)
ifeq ($(CUDA_VERSION),9.0)
  #CUDA_CAP   := 30 35 37 50 52 53 60 61 70
  CUDA_CAP   := 50 52 53 60 61 70
else ifeq ($(CUDA_VERSION),8.0)
  #CUDA_CAP   := 30 35 37 50 52 53 60 61
  CUDA_CAP   := 50 52 53 60 61
else ifeq ($(CUDA_VERSION),7.5)
  #CUDA_CAP   := 30 35 37 50 52 53
  CUDA_CAP   := 50 52 53
else
  $(error Unsupported CUDA $(CUDA_VERSION). Please fix debian/rules)
endif
NVCC_ARCH := $(foreach CAP,$(CUDA_CAP),-gencode=arch=compute_$(CAP),code=\\\"sm_$(CAP),compute_$(CAP)\\\")

# 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)
NULL  :=
SPACE := $(NULL) #
DOT   := .
CUDA_CAP_DOT_SEP := $(subst $(SPACE),$(DOT),$(CUDA_CAP))
PKG_VERSION_TAG := $(PKG_VERSION)+$(DIST_NAME).$(DIST_RELEASE).$(DIST_VERSION)+Cuda.$(CUDA_VERSION).Levels.$(CUDA_CAP_DOT_SEP)

# Inspired from configure.sh
CXXFLAGS    := -O3 -D_REENTRANT -falign-functions=16 -falign-jumps=16 -falign-labels=16
CUDA_CFLAGS := -O3 -lineno -Xcompiler -Wall -D_FORCE_INLINES
# Thanks to CUDA, I need really old GCC
ifeq ($(CUDA_VERSION),9.0)
  CC          := /usr/bin/gcc-6
  CXX         := /usr/bin/g++-6
else
  CC          := /usr/bin/gcc-4.9
  CXX         := /usr/bin/g++-4.9
endif
# C++11 compat fix for Ubuntu Xenial only
ifeq ($(DIST_RELEASE),xenial)
  CUDA_CFLAGS += -D_GLIBCXX_USE_CXX11_ABI=0
endif

BUILD_VARIANTS = $(shell dh_listpackages)


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

override_dh_auto_clean:
	dh_auto_clean
	rm -rf "$(CURDIR)/debian/build"

override_dh_auto_configure:
	for VARIANT in $(BUILD_VARIANTS); do \
          mkdir -p "$(CURDIR)/debian/build/$${VARIANT}/"; \
          rsync -a "$(CURDIR)/" "$(CURDIR)/debian/build/$${VARIANT}/" --exclude "/debian"; \
	  dh_auto_configure --sourcedirectory="$(CURDIR)/debian/build/$${VARIANT}" \
                            --builddirectory="$(CURDIR)/debian/build/$${VARIANT}" -- \
                            CXXFLAGS="$(CXXFLAGS)" \
	                    CFLAGS="$(CXXFLAGS)" \
	                    CC="$(CC)" \
	                    CXX="$(CXX)" \
                            CUDA_CFLAGS="$(CUDA_CFLAGS)" ; \
        done


override_dh_auto_build:
	dh_auto_build --sourcedirectory="$(CURDIR)/debian/build/ccminer-tpruvot" \
		      --builddirectory="$(CURDIR)/debian/build/ccminer-tpruvot" -- \
	              nvcc_ARCH="$(NVCC_ARCH)"
	dh_auto_build --sourcedirectory="$(CURDIR)/debian/build/ccminer-tpruvot" \
		      --builddirectory="$(CURDIR)/debian/build/ccminer-tpruvot" -- \
	              nvcc_ARCH="-gencode=arch=compute_52,code=\"sm_52,compute_52\""

override_dh_auto_install:
	for VARIANT in $(BUILD_VARIANTS); do \
	  dh_auto_install --builddirectory="$(CURDIR)/debian/build/$${VARIANT}" \ \
	                  --destdir="$(CURDIR)/debian/$${VARIANT}";  \
	done

override_dh_installsystemd:
	dh_installsystemd --name=ccminer

override_dh_installinit:
	dh_installinit --name=ccminer

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)"
