#!/bin/sh
set -e

CXX=${1:-g++}

AUTOPKGTEST_TMP=${AUTOPKGTEST_TMP:-$(mktemp -d)}

parallel=$(echo " $DEB_BUILD_OPTIONS " | sed -rn 's/.* parallel=([0-9]+) .*/\1/p')

cp -a /usr/share/doc/nvidia-cuda-toolkit/examples $AUTOPKGTEST_TMP
cd $AUTOPKGTEST_TMP/examples

rm -rfv Common/GL

uname_m="$(uname -m)"

FILTER_OUT=

# Samples/matrixMulDynlinkJIT/cuda_drvapi_dynlink.c is non-distributable
FILTER_OUT="$FILTER_OUT Samples/matrixMulDynlinkJIT/Makefile"

if [ "$uname_m" != "amd64" ]; then

# fatal error: cudla.h: No such file or directory
FILTER_OUT="$FILTER_OUT Samples/cuDLAErrorReporting/Makefile"
FILTER_OUT="$FILTER_OUT Samples/cuDLAHybridMode/Makefile"

# fatal error: rendercheck_gles.h: No such file or directory
FILTER_OUT="$FILTER_OUT Samples/fluidsGLES/Makefile"

# fatal error: screen/screen.h: No such file or directory
FILTER_OUT="$FILTER_OUT Samples/nbody_screen/Makefile"
FILTER_OUT="$FILTER_OUT Samples/simpleGLES_screen/Makefile"

fi

if [ "$uname_m" = "aarch64" ]; then

#nvlink error   : Undefined reference to 'cudaStreamCreateWithFlags' in 'cdpAdvancedQuicksort.o' (target: sm_72)
#nvlink error   : Undefined reference to 'cudaMemcpyAsync' in 'cdpAdvancedQuicksort.o' (target: sm_72)
#nvlink error   : Undefined reference to 'cudaGetParameterBufferV2' in 'cdpAdvancedQuicksort.o' (target: sm_72)
#nvlink error   : Undefined reference to 'cudaLaunchDeviceV2' in 'cdpAdvancedQuicksort.o' (target: sm_72)
#nvlink error   : Undefined reference to 'cudaPeekAtLastError' in 'cdpAdvancedQuicksort.o' (target: sm_72)
#nvlink error   : Undefined reference to 'cudaGetErrorString' in 'cdpAdvancedQuicksort.o' (target: sm_72)
#nvlink error   : Undefined reference to 'cudaGetLastError' in 'cdpAdvancedQuicksort.o' (target: sm_72)
FILTER_OUT="$FILTER_OUT Samples/cdpAdvancedQuicksort/Makefile"

#nvlink error   : Undefined reference to 'cudaFree' in 'BezierLineCDP.o' (target: sm_72)
#nvlink error   : Undefined reference to 'cudaMalloc' in 'BezierLineCDP.o' (target: sm_72)
#nvlink error   : Undefined reference to 'cudaGetParameterBufferV2' in 'BezierLineCDP.o' (target: sm_72)
#nvlink error   : Undefined reference to 'cudaLaunchDeviceV2' in 'BezierLineCDP.o' (target: sm_72)
FILTER_OUT="$FILTER_OUT Samples/cdpBezierTessellation/Makefile"

#nvlink error   : Undefined reference to 'cudaGetParameterBufferV2' in 'cdpQuadtree.o' (target: sm_72)
#nvlink error   : Undefined reference to 'cudaLaunchDeviceV2' in 'cdpQuadtree.o' (target: sm_72)
FILTER_OUT="$FILTER_OUT Samples/cdpQuadtree/Makefile"

#nvlink error   : Undefined reference to 'cudaGetParameterBufferV2' in 'cdpSimplePrint.o' (target: sm_72)
#nvlink error   : Undefined reference to 'cudaLaunchDeviceV2' in 'cdpSimplePrint.o' (target: sm_72)
FILTER_OUT="$FILTER_OUT Samples/cdpSimplePrint/Makefile"

#nvlink error   : Undefined reference to 'cudaStreamCreateWithFlags' in 'cdpSimpleQuicksort.o' (target: sm_72)
#nvlink error   : Undefined reference to 'cudaGetParameterBufferV2' in 'cdpSimpleQuicksort.o' (target: sm_72)
#nvlink error   : Undefined reference to 'cudaLaunchDeviceV2' in 'cdpSimpleQuicksort.o' (target: sm_72)
#nvlink error   : Undefined reference to 'cudaStreamDestroy' in 'cdpSimpleQuicksort.o' (target: sm_72)
FILTER_OUT="$FILTER_OUT Samples/cdpSimpleQuicksort/Makefile"

#nvlink error   : Undefined reference to 'cudaCGGetIntrinsicHandle' in 'conjugateGradientMultiDeviceCG.o' (target: sm_72)
#nvlink error   : Undefined reference to 'cudaCGSynchronize' in 'conjugateGradientMultiDeviceCG.o' (target: sm_72)
#nvlink error   : Undefined reference to 'cudaCGGetSize' in 'conjugateGradientMultiDeviceCG.o' (target: sm_72)
#nvlink error   : Undefined reference to 'cudaCGGetRank' in 'conjugateGradientMultiDeviceCG.o' (target: sm_72)
FILTER_OUT="$FILTER_OUT Samples/conjugateGradientMultiDeviceCG/Makefile"

fi

if [ "$uname_m" = "ppc64le" ]; then

# fatal error: cudaEGL.h: No such file or directory
FILTER_OUT="$FILTER_OUT Samples/EGLStream_CUDA_CrossGPU/Makefile"
FILTER_OUT="$FILTER_OUT Samples/EGLStream_CUDA_Interop/Makefile"
FILTER_OUT="$FILTER_OUT Samples/EGLStreams_CUDA_Interop/Makefile"
FILTER_OUT="$FILTER_OUT Samples/EGLSync_CUDAEvent_Interop/Makefile"

fi

make ${parallel:+-j${parallel}} -k \
	HOST_COMPILER="$CXX" \
	DISTRO="ubuntu" \
	EXTRA_NVCCFLAGS="-Wno-deprecated-gpu-targets -Wno-deprecated-declarations" \
	CUDA_INSTALL_TARGET_DIR= \
	FILTER_OUT="$FILTER_OUT" \
