#!/usr/bin/make -f # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 # cuda-gdb/README mentions --enable-targets="x86_64-apple-darwin,x86_64-unknown-linux-gnu,arm-elf-linux-gnu,m68k-unknown-linux-gnu" CUDA_GDB_FLAGS = CUDA_GDB_FLAGS += --program-prefix=cuda- CUDA_GDB_FLAGS += --with-gdb-datadir='$${prefix}/share/cuda-gdb' CUDA_GDB_FLAGS += --with-jit-reader-dir='$${libdir}/cuda-gdb' CUDA_GDB_FLAGS += --with-system-gdbinit='$${sysconfdir}/cuda-gdb/gdbinit' CUDA_GDB_FLAGS += --enable-cuda CUDA_GDB_FLAGS += --enable-targets="$(DEB_HOST_GNU_TYPE),m68k-unknown-linux-gnu" CUDA_GDB_FLAGS += --disable-nls # the following flags were taken from gdb 8.2 in buster CUDA_GDB_FLAGS += --disable-gdbtk CUDA_GDB_FLAGS += --disable-shared CUDA_GDB_FLAGS += --disable-readline CUDA_GDB_FLAGS += --with-system-readline CUDA_GDB_FLAGS += --with-expat CUDA_GDB_FLAGS += --with-system-zlib CUDA_GDB_FLAGS += --without-guile CUDA_GDB_FLAGS += --with-babeltrace ifneq (,$(filter $(DEB_HOST_ARCH),amd64)) CUDA_GDB_FLAGS += --with-intel-pt endif CUDA_GDB_FLAGS += --enable-tui CUDA_GDB_FLAGS += --with-lzma CUDA_GDB_FLAGS += --without-python CUDA_GDB_FLAGS += --enable-64-bit-bfd CUDA_GDB_FLAGS += --disable-sim DEB_BUILD_MAINT_OPTIONS = hardening=+all DEB_CPPFLAGS_MAINT_APPEND = -I$(CURDIR)/nvidia-cuda-tree-$(DEB_HOST_ARCH)/cuda_cudart/include DEB_CFLAGS_MAINT_APPEND = -fcommon DEB_LDFLAGS_MAINT_APPEND = -pthread include /usr/share/dpkg/architecture.mk include /usr/share/dpkg/buildflags.mk include /usr/share/dpkg/pkg-info.mk VENDOR ?= $(call dpkg_late_eval,VENDOR,dpkg-vendor --derives-from Ubuntu && echo Ubuntu || echo Debian) aval = $(or $($(strip $1).$(or $(strip $2),$(DEB_HOST_ARCH))),$($(strip $1).default),$(error Not defined: $(strip $1)($(or $(strip $2),$(DEB_HOST_ARCH))))) -include debian/rules.version include debian/rules.soversion include debian/rules.version_prefix include debian/rules.defs CUDA_ARCH_LIST ?= amd64 CUDA_ARCH_LIST_NO_DRIVER ?= CUDA_ARCH_LIST_NO_OPENJDK ?= CUDA_VERSION_TOOLKIT ?= $(DEB_VERSION_UPSTREAM) CUDA_VERSION_MAJOR ?= $(word 1,$(subst ., ,$(CUDA_VERSION_TOOLKIT))) CUDA_VERSION_MINOR ?= $(word 2,$(subst ., ,$(CUDA_VERSION_TOOLKIT))) version_driver = $(call aval,CUDA_VERSION_DRIVER_MINIMAL) watch_url = $(CUDA_WATCH_URL) PACKAGE_LIST := $(shell dh_listpackages) CUDA_GDB_VERSION ?= $(CUDA_VERSION_cuda_gdb) DEFAULT_GCC_VERSION ?= $(error Undefined DEFAULT_GCC_VERSION) THRUST_VERSION ?= $(or $(strip $(shell perl -ne 'if (/define\s+THRUST_VERSION\s+(\d*)/) { printf "%d.%d.%d\n", $$1 / 100000, $$1 / 100 % 1000, $$1 % 100; }' nvidia-cuda/cuda_cudart/include/thrust/version.h)),$(error empty THRUST_VERSION)) CUDA_JAVA_HOME ?= /usr/lib/jvm/java-8-openjdk-$(DEB_HOST_ARCH) libdir = usr/lib/$(DEB_HOST_MULTIARCH) jre_pkg ?= $(filter nvidia-openjdk-8-jre,$(PACKAGE_LIST)) thrust_pkg ?= $(filter libthrust-dev,$(PACKAGE_LIST)) nvidia_profiler_pkg ?= $(filter nvidia-profiler,$(PACKAGE_LIST)) visual_profiler_pkg ?= $(filter nvidia-visual-profiler,$(PACKAGE_LIST)) export NSIGHT_COMPUTE_DESKTOP_DIR = $(NSIGHT_COMPUTE_DESKTOP_DIR.$(DEB_HOST_ARCH)) export NSIGHT_SYSTEMS_HOST_DIR = $(NSIGHT_SYSTEMS_HOST_DIR.$(DEB_HOST_ARCH)) export NSIGHT_SYSTEMS_TARGET_DIR = $(NSIGHT_SYSTEMS_TARGET_DIR.$(DEB_HOST_ARCH)) package_libcuda1 = $(package_libcuda1.$(VENDOR)) package_libcuda1 += libcuda.so.1 (>= $${nvidia:MinVersion}) | package_libcuda1 += libcuda-$(CUDA_VERSION_MAJOR).$(CUDA_VERSION_MINOR)-1 | package_libcuda1 += no-libcuda1 [$${cuda:arch:has-no-driver}] | package_libnvidia-ml1 = $(package_libnvidia-ml1.$(VENDOR)) package_libnvidia-ml1 += libnvidia-ml.so.1 (>= $${nvidia:MinVersion}) | package_libnvidia-ml1 += no-libcuda1 [$${cuda:arch:has-no-driver}] | package_driver = $(package_driver.$(VENDOR)) # do not build nvidia-openjdk-8-jre on Ubuntu ifneq (,$(jre_pkg)) ifeq ($(VENDOR),Ubuntu) export DH_OPTIONS := $(DH_OPTIONS) -N$(jre_pkg) jre_pkg = endif endif OPENJDK_VERSION = $(call aval,OPENJDK_VERSION,$(DEB_HOST_ARCH)) make_component_version ?= $(subst -deb,-d,$(subst +,-,$(subst ~,-,$1))) get_openjdk_component ?= openjdk-8-$1-$(call make_component_version,$(call aval,OPENJDK_VERSION,$2)) get_openjdk_source_component ?= $(call get_openjdk_component,source,$1) get_openjdk_jre_component ?= $(call get_openjdk_component,jre-$1,$1) jre_pkg_dep ?= $(if $(jre_pkg),$(jre_pkg) (>= 9.+8u252)) jre_depends.Debian ?= $(if $(jre_pkg),$(jre_pkg_dep) |) openjdk-8-jre jre_depends.Ubuntu ?= openjdk-8-jre | $(jre_pkg_dep) ifneq (,$(jre_pkg)) $(jre_pkg).VERSION = $(subst ~,~~,$(OPENJDK_VERSION)) endif ifneq (,$(thrust_pkg)) $(thrust_pkg).DEB_VERSION = $(THRUST_VERSION) endif TEMPLATES := $(wildcard debian/*.in debian/patches/*.in) SOVERTEMPLATES := $(wildcard debian/*SOVER*) AUTOGEN += $(patsubst %.in,%,$(TEMPLATES)) AUTOGEN += $(foreach t,$(sort $(patsubst %.in,%,$(SOVERTEMPLATES))),$(subst SOVER,$(or $($(firstword $(subst SOVER, ,$(notdir $t))).SOVERSION),XXX),$t)) AUTOGEN += debian/g++ AUTOKEEP = debian/watch AUTOCLEAN = $(filter-out $(AUTOKEEP),$(AUTOGEN)) AUTOCLEAN += debian/shlibs.local .PHONY: autogen prepare autogen: $(AUTOGEN) prepare: autogen unpack-stamp compare-copyright-license prepare: update-version-prefix # deep copy, files will get irreversibly modified via hardlinks in the build target define nvidia-cuda-unpack-repack dh_testdir $(RM) -r $@ $@.tmp cp -a $1 $@ endef nvidia-cuda-tree-%: $(call nvidia-cuda-unpack-$(call aval,CUDA_TAR_TYPE,$*),$*) unpack-stamp: $(filter debian/patches%,$(AUTOGEN)) unpack-stamp: nvidia-cuda-tree-$(DEB_HOST_ARCH) $(RM) nvidia-cuda ln -sf nvidia-cuda-tree-$(DEB_HOST_ARCH) nvidia-cuda $(RM) -r cuda-gdb-$(CUDA_GDB_VERSION) cuda-gdb ifneq (arm64,$(DEB_HOST_ARCH)) tar xf nvidia-cuda/cuda_gdb/extras/cuda-gdb-$(CUDA_GDB_VERSION).src.tar.gz else tar xf amd64/cuda_gdb/extras/cuda-gdb-$(CUDA_GDB_VERSION).src.tar.gz endif mv cuda-gdb-$(CUDA_GDB_VERSION) cuda-gdb ifneq (,$(jre_pkg)) $(RM) -r openjdk-8-jre dpkg -x $(call get_openjdk_jre_component,$(DEB_HOST_ARCH))/openjdk-8-jre-headless_$(OPENJDK_VERSION)_$(DEB_HOST_ARCH).deb openjdk-8-jre dpkg -x $(call get_openjdk_jre_component,$(DEB_HOST_ARCH))/openjdk-8-jre_$(OPENJDK_VERSION)_$(DEB_HOST_ARCH).deb openjdk-8-jre cp openjdk-8-jre/usr/share/doc/openjdk-8-jre-headless/copyright debian/$(jre_pkg).copyright endif QUILT_PATCHES=debian/patches QUILT_SERIES=series-postunpack quilt --quiltrc /dev/null push -a || test $$? = 2 touch $@ # Reformat the EULA to the format needed for debian/copyright. nvidia-cuda/EULA.txt: unpack-stamp EULA.fmt: nvidia-cuda/EULA.txt cat $< \ | fromdos | fromdos | expand \ | iconv -f UTF-8 -t latin1//TRANSLIT \ | fold -s -w 80 \ | sed -e 's/ *$$//;s/^$$/./;s/^/ /;' \ > $@ # Compare the license in debian/copyright with the EULA shipped in the archive. compare-copyright-license: EULA.fmt sed -e '1,/^License: other-NVIDIA-CUDA-TOOLKIT/d; /^$$/,$$d; /^ .$$/d' debian/copyright > copyright.tmp sed -e '/^ .$$/d' EULA.fmt > EULA.tmp diff -w copyright.tmp EULA.tmp rm -f copyright.tmp EULA.tmp dpkg-compare-versions = $(shell dpkg --compare-versions "$(1)" "$(2)" "$(3)" && echo "$(2)") # $1 = key, $2 = value, $3 = append_to_file define echokv echo '$(shell printf "%-39s" $(1)) = $(2)' >> $(3) endef define update-version-prefix $(if $($(1).VERSION_PREFIX),$(if $(call dpkg-compare-versions,$($(1).VERSION_PREFIX),le,$(call get-upstream-version,$(1),1)), : DROP PREFIX $(1) $($(1).VERSION_PREFIX) $(call get-upstream-version,$(1),1) $(eval $(1).VERSION_PREFIX =))) $(if $(call dpkg-compare-versions,$($(1).PREV_VERSION),le,$(call get-current-version,$(1))),, $(if $(call get-upstream-version,$(1),),,$(error MISSING VERSION FOR $(1))) : ADD PREFIX $(1) $($(1).PREV_VERSION) $(call get-current-version,$(1)) $(eval $(1).VERSION_PREFIX = $($(1).PREV_VERSION)+~)) echo '' >> $(2) $(if $($(1).VERSION_PREFIX),$(call echokv,$(1).VERSION_PREFIX,$($(1).VERSION_PREFIX),$(2))) $(call echokv,$(1).PREV_VERSION,$(call get-current-version,$(1)),$(2)) endef update-version-prefix: echo "# This file is generated/updated by 'debian/rules update-version-prefix'." > debian/rules.version_prefix.new $(foreach pkg,$(OTHER_PACKAGES) $(LIB_PACKAGES),$(call update-version-prefix,$(pkg),debian/rules.version_prefix.new)) mv debian/rules.version_prefix.new debian/rules.version_prefix .PHONY: binary binary-arch binary-indep build build-arch build-indep clean install binary binary-arch binary-indep build build-arch build-indep clean install: dh $@ build-stamp: unpack-stamp $(RM) -r build cp -al nvidia-cuda-tree-$(DEB_HOST_ARCH)/ build test -d build/libcublas/src || cp -alv amd64/libcublas/src build/libcublas/ test -d build/libcusparse/src || cp -alv amd64/libcusparse/src build/libcusparse/ test -d build/cuda_cupti/extras/CUPTI/doc/Cupti || cp -alv amd64/cuda_cupti/extras/CUPTI/doc build/cuda_cupti/extras/CUPTI/ # fix permissions ifneq (,$(visual_profiler_pkg)) chmod -x build/cuda_nvvp/libnvvp/*.xpm endif chmod -x build/cuda_nvcc/nvvm/libnvvm-samples/build.bat # remove rpath chrpath -d build/cuda_sanitizer_api/compute-sanitizer/libTreeLauncherTargetInjection.so # remove tracking scripts find build \( -name google-analytics-tracker.js -o -name google-analytics-write.js -o -name tynt.js \) -exec rm -v {} + # remove tracking images @set -e -x ; for dir in \ build/nsight_compute/docs \ build/cuda_cupti/extras/CUPTI/doc \ build/cuda_sanitizer_api/compute-sanitizer/docs \ ; do test ! -d $$dir || find $$dir \ -name '*.html' -exec sed -r -i \ -e '\,http://omniture.nvidia.com/b/ss/nvidiacudadocs/1/H.17--NS/0, { s,(