# Tested on four different NVIDIA GPUs.

gpp=/usr/bin/g++
gcc=/usr/bin/gcc
CUDA=/usr/local/cuda/include
CUDALIB=/usr/local/cuda/lib64
QDsrc=../../Ada/Math_Lib/QD

# the architecture flag for Tesla C2050
# smflag=sm_20
# the architecture flag for Kepler K20C
# smflag=sm_35
# the architecture flag for Pascal P100
# smflag=sm_60
# the architecture flag for Volta V100
smflag=sm_70

double_double_gpufun.o:
	@-echo ">>> compiling double double gpu functions ..."
	nvcc -ccbin=$(gpp) -arch=$(smflag) -c double_double_gpufun.cu

dbl2_sqrt_kernels.o:
	@-echo ">>> compiling sqrt kernels for double doubles ..."
	nvcc -ccbin=$(gcc) -arch=$(smflag) -c dbl2_sqrt_kernels.cu

dbl3_sqrt_kernels.o:
	@-echo ">>> compiling sqrt kernels for triple doubles ..."
	nvcc -ccbin=$(gcc) -arch=$(smflag) -c dbl3_sqrt_kernels.cu

dbl4_sqrt_kernels.o:
	@-echo ">>> compiling sqrt kernels for quad doubles ..."
	nvcc -ccbin=$(gcc) -arch=$(smflag) -c dbl4_sqrt_kernels.cu

dbl5_sqrt_kernels.o:
	@-echo ">>> compiling sqrt kernels for penta doubles ..."
	nvcc -ccbin=$(gcc) -arch=$(smflag) -c dbl5_sqrt_kernels.cu

dbl8_sqrt_kernels.o:
	@-echo ">>> compiling sqrt kernels for octo doubles ..."
	nvcc -ccbin=$(gcc) -arch=$(smflag) -c dbl8_sqrt_kernels.cu

dbl10_sqrt_kernels.o:
	@-echo ">>> compiling sqrt kernels for deca doubles ..."
	nvcc -ccbin=$(gcc) -arch=$(smflag) -c dbl10_sqrt_kernels.cu

dbl_norm_kernels.o:
	@-echo ">>> compiling vector norm kernels for doubles ..."
	nvcc -ccbin=$(gcc) -arch=$(smflag) -c dbl_norm_kernels.cu

dbl2_norm_kernels.o:
	@-echo ">>> compiling vector norm kernels for double doubles ..."
	nvcc -ccbin=$(gcc) -arch=$(smflag) -c dbl2_norm_kernels.cu

dbl3_norm_kernels.o:
	@-echo ">>> compiling vector norm kernels for triple doubles ..."
	nvcc -ccbin=$(gcc) -arch=$(smflag) -c dbl3_norm_kernels.cu

dbl4_norm_kernels.o:
	@-echo ">>> compiling vector norm kernels for quad doubles ..."
	nvcc -ccbin=$(gcc) -arch=$(smflag) -c dbl4_norm_kernels.cu

dbl5_norm_kernels.o:
	@-echo ">>> compiling vector norm kernels for penta doubles ..."
	nvcc -ccbin=$(gcc) -arch=$(smflag) -c dbl5_norm_kernels.cu

dbl8_norm_kernels.o:
	@-echo ">>> compiling vector norm kernels for octo doubles ..."
	nvcc -ccbin=$(gcc) -arch=$(smflag) -c dbl8_norm_kernels.cu

dbl10_norm_kernels.o:
	@-echo ">>> compiling vector norm kernels for deca doubles ..."
	nvcc -ccbin=$(gcc) -arch=$(smflag) -c dbl10_norm_kernels.cu

cmplx_norm_kernels.o:
	@-echo ">>> compiling norm kernels for complex doubles ..."
	nvcc -ccbin=$(gcc) -arch=$(smflag) -c cmplx_norm_kernels.cu

cmplx2_norm_kernels.o:
	@-echo ">>> compiling norm kernels for complex double doubles ..."
	nvcc -ccbin=$(gcc) -arch=$(smflag) -c cmplx2_norm_kernels.cu

cmplx3_norm_kernels.o:
	@-echo ">>> compiling norm kernels for complex triple doubles ..."
	nvcc -ccbin=$(gcc) -arch=$(smflag) -c cmplx3_norm_kernels.cu

cmplx4_norm_kernels.o:
	@-echo ">>> compiling norm kernels for complex quad doubles ..."
	nvcc -ccbin=$(gcc) -arch=$(smflag) -c cmplx4_norm_kernels.cu

cmplx5_norm_kernels.o:
	@-echo ">>> compiling norm kernels for complex penta doubles ..."
	nvcc -ccbin=$(gcc) -arch=$(smflag) -c cmplx5_norm_kernels.cu

cmplx8_norm_kernels.o:
	@-echo ">>> compiling norm kernels for complex octo doubles ..."
	nvcc -ccbin=$(gcc) -arch=$(smflag) -c cmplx8_norm_kernels.cu

cmplx10_norm_kernels.o:
	@-echo ">>> compiling norm kernels for complex deca doubles ..."
	nvcc -ccbin=$(gcc) -arch=$(smflag) -c cmplx10_norm_kernels.cu

double_double.o:
	@-echo ">>> compiling double_double ..."
	$(gpp) -c -I$(QDsrc) $(QDsrc)/double_double.c

double_double_functions.o:
	@-echo ">>> compiling double double functions ..."
	$(gpp) -O3 -c double_double_functions.cpp

triple_double_functions.o:
	@-echo ">>> compiling triple double functions ..."
	$(gpp) -O3 -c triple_double_functions.cpp

quad_double_functions.o:
	@-echo ">>> compiling quad double functions ..."
	$(gpp) -O3 -c quad_double_functions.cpp

penta_double_functions.o:
	@-echo ">>> compiling penta double functions ..."
	$(gpp) -O3 -c penta_double_functions.cpp

octo_double_functions.o:
	@-echo ">>> compiling octo double functions ..."
	$(gpp) -O3 -c octo_double_functions.cpp

deca_double_functions.o:
	@-echo ">>> compiling deca double functions ..."
	$(gpp) -O3 -c deca_double_functions.cpp

test_double_doubles: double_double.o double_double_functions.o \
                     dbl2_sqrt_kernels.o
	@-echo ">>> compiling test_double_doubles ..."
	$(gpp) -c -I$(QDsrc) -I$(CUDA) test_double_doubles.cpp
	@-echo ">>> linking test_double_doubles ..."
	$(gpp) -o test_double_doubles \
                  double_double.o double_double_functions.o \
                  test_double_doubles.o dbl2_sqrt_kernels.o \
               -lcuda -lcudart -L$(CUDALIB)

test_triple_doubles: triple_double_functions.o double_double_functions.o \
                     dbl3_sqrt_kernels.o
	@-echo ">>> compiling test_triple_doubles ..."
	$(gpp) -c -I$(QDsrc) -I$(CUDA) test_triple_doubles.cpp
	@-echo ">>> linking test_triple_doubles ..."
	$(gpp) -o test_triple_doubles double_double_functions.o \
                  triple_double_functions.o dbl3_sqrt_kernels.o \
                  test_triple_doubles.o -lcuda -lcudart -L$(CUDALIB)

test_quad_doubles: quad_double_functions.o double_double_functions.o \
                   dbl4_sqrt_kernels.o
	@-echo ">>> compiling test_quad_doubles ..."
	$(gpp) -c -I$(QDsrc) -I$(CUDA)  test_quad_doubles.cpp
	@-echo ">>> linking test_quad_doubles ..."
	$(gpp) -o test_quad_doubles double_double_functions.o \
                  quad_double_functions.o dbl4_sqrt_kernels.o \
                  test_quad_doubles.o -lcuda -lcudart -L$(CUDALIB)

test_penta_doubles: penta_double_functions.o double_double_functions.o \
                    dbl5_sqrt_kernels.o
	@-echo ">>> compiling test_penta_doubles ..."
	$(gpp) -c -I$(QDsrc) -I$(CUDA) test_penta_doubles.cpp
	@-echo ">>> linking test_penta_doubles ..."
	$(gpp) -o test_penta_doubles double_double_functions.o \
                  penta_double_functions.o dbl5_sqrt_kernels.o \
                  test_penta_doubles.o -lcuda -lcudart -L$(CUDALIB)

test_octo_doubles: octo_double_functions.o double_double_functions.o \
                   quad_double_functions.o dbl8_sqrt_kernels.o
	@-echo ">>> compiling test_octo_doubles ..."
	$(gpp) -c -I$(QDsrc) -I$(CUDA) test_octo_doubles.cpp
	@-echo ">>> linking test_octo_doubles ..."
	$(gpp) -o test_octo_doubles double_double_functions.o \
                  quad_double_functions.o octo_double_functions.o \
                  test_octo_doubles.o dbl8_sqrt_kernels.o \
               -lcuda -lcudart -L$(CUDALIB)

test_deca_doubles: deca_double_functions.o double_double_functions.o \
                   quad_double_functions.o octo_double_functions.o \
                   dbl10_sqrt_kernels.o
	@-echo ">>> compiling test_deca_doubles ..."
	$(gpp) -c -I$(QDsrc) -I$(CUDA) test_deca_doubles.cpp
	@-echo ">>> linking test_deca_doubles ..."
	$(gpp) -o test_deca_doubles double_double_functions.o \
                  quad_double_functions.o octo_double_functions.o \
                  deca_double_functions.o dbl10_sqrt_kernels.o \
                  test_deca_doubles.o -lcuda -lcudart -L$(CUDALIB)

random_numbers.o:
	@-echo ">>> compiling random number generators ..."
	$(gpp) -O3 -c random_numbers.cpp

random_vectors.o:
	@-echo ">>> compiling double precision random vector generators ..."
	$(gpp) -O3 -c random_vectors.cpp

random2_vectors.o:
	@-echo ">>> compiling double double random vector generators ..."
	$(gpp) -O3 -c random2_vectors.cpp

random3_vectors.o:
	@-echo ">>> compiling triple double random vector generators ..."
	$(gpp) -O3 -c random3_vectors.cpp

random4_vectors.o:
	@-echo ">>> compiling quad double random vector generators ..."
	$(gpp) -O3 -c random4_vectors.cpp

random5_vectors.o:
	@-echo ">>> compiling penta double random vector generators ..."
	$(gpp) -O3 -c random5_vectors.cpp

random8_vectors.o:
	@-echo ">>> compiling octo double random vector generators ..."
	$(gpp) -O3 -c random8_vectors.cpp

random10_vectors.o:
	@-echo ">>> compiling deca double random vector generators ..."
	$(gpp) -O3 -c random10_vectors.cpp

parse_run_arguments.o:
	@-echo ">>> compiling parse_run_arguments ..."
	$(gpp) -O3 -c parse_run_arguments.cpp

dbl_norm_host.o:
	@-echo ">>> compiling dbl_norm_host ..."
	$(gpp) -O3 -c dbl_norm_host.cpp

dbl2_norm_host.o:
	@-echo ">>> compiling dbl2_norm_host ..."
	$(gpp) -O3 -c dbl2_norm_host.cpp

dbl3_norm_host.o:
	@-echo ">>> compiling dbl3_norm_host ..."
	$(gpp) -O3 -c dbl3_norm_host.cpp

dbl4_norm_host.o:
	@-echo ">>> compiling dbl4_norm_host ..."
	$(gpp) -O3 -c dbl4_norm_host.cpp

dbl5_norm_host.o:
	@-echo ">>> compiling dbl5_norm_host ..."
	$(gpp) -O3 -c dbl5_norm_host.cpp

dbl8_norm_host.o:
	@-echo ">>> compiling dbl8_norm_host ..."
	$(gpp) -O3 -c dbl8_norm_host.cpp

dbl10_norm_host.o:
	@-echo ">>> compiling dbl10_norm_host ..."
	$(gpp) -O3 -c dbl10_norm_host.cpp

cmplx_norm_host.o:
	@-echo ">>> compiling cmplx_norm_host ..."
	$(gpp) -O3 -c cmplx_norm_host.cpp

cmplx2_norm_host.o:
	@-echo ">>> compiling cmplx2_norm_host ..."
	$(gpp) -O3 -c cmplx2_norm_host.cpp

cmplx3_norm_host.o:
	@-echo ">>> compiling cmplx3_norm_host ..."
	$(gpp) -O3 -c cmplx3_norm_host.cpp

cmplx4_norm_host.o:
	@-echo ">>> compiling cmplx4_norm_host ..."
	$(gpp) -O3 -c cmplx4_norm_host.cpp

cmplx5_norm_host.o:
	@-echo ">>> compiling cmplx5_norm_host ..."
	$(gpp) -O3 -c cmplx5_norm_host.cpp

cmplx8_norm_host.o:
	@-echo ">>> compiling cmplx8_norm_host ..."
	$(gpp) -O3 -c cmplx8_norm_host.cpp

cmplx10_norm_host.o:
	@-echo ">>> compiling cmplx10_norm_host ..."
	$(gpp) -O3 -c cmplx10_norm_host.cpp

run_dbl_norm.o:
	@-echo ">>> compiling run_dbl_norm ..."
	$(gpp) -I$(CUDA) -O3 -c run_dbl_norm.cpp

run_dbl2_norm.o:
	@-echo ">>> compiling run_dbl2_norm ..."
	$(gpp) -I$(CUDA) -O3 -c run_dbl2_norm.cpp

run_dbl3_norm.o:
	@-echo ">>> compiling run_dbl3_norm ..."
	$(gpp) -I$(CUDA) -O3 -c run_dbl3_norm.cpp

run_dbl4_norm.o:
	@-echo ">>> compiling run_dbl4_norm ..."
	$(gpp) -I$(CUDA) -O3 -c run_dbl4_norm.cpp

run_dbl5_norm.o:
	@-echo ">>> compiling run_dbl5_norm ..."
	$(gpp) -I$(CUDA) -O3 -c run_dbl5_norm.cpp

run_dbl8_norm.o:
	@-echo ">>> compiling run_dbl8_norm ..."
	$(gpp) -I$(CUDA) -O3 -c run_dbl8_norm.cpp

run_dbl10_norm.o:
	@-echo ">>> compiling run_dbl10_norm ..."
	$(gpp) -I$(CUDA) -O3 -c run_dbl10_norm.cpp

run_cmplx_norm.o:
	@-echo ">>> compiling run_cmplx_norm ..."
	$(gpp) -I$(CUDA) -O3 -c run_cmplx_norm.cpp

run_cmplx2_norm.o:
	@-echo ">>> compiling run_cmplx2_norm ..."
	$(gpp) -I$(QDsrc) -I$(CUDA) -O3 -c run_cmplx2_norm.cpp

run_cmplx3_norm.o:
	@-echo ">>> compiling run_cmplx3_norm ..."
	$(gpp) -I$(CUDA) -O3 -c run_cmplx3_norm.cpp

run_cmplx4_norm.o:
	@-echo ">>> compiling run_cmplx4_norm ..."
	$(gpp) -I$(CUDA) -O3 -c run_cmplx4_norm.cpp

run_cmplx5_norm.o:
	@-echo ">>> compiling run_cmplx5_norm ..."
	$(gpp) -I$(CUDA) -O3 -c run_cmplx5_norm.cpp

run_cmplx8_norm.o:
	@-echo ">>> compiling run_cmplx8_norm ..."
	$(gpp) -I$(CUDA) -O3 -c run_cmplx8_norm.cpp

run_cmplx10_norm.o:
	@-echo ">>> compiling run_cmplx10_norm ..."
	$(gpp) -I$(CUDA) -O3 -c run_cmplx10_norm.cpp

test_dbl_norm.o:
	@-echo ">>> compiling test_dbl_norm ..."
	$(gpp) -I$(CUDA) -O3 -c test_dbl_norm.cpp

test_dbl2_norm.o:
	@-echo ">>> compiling test_dbl2_norm ..."
	$(gpp) -I$(QDsrc) -I$(CUDA) -O3 -c test_dbl2_norm.cpp

test_dbl3_norm.o:
	@-echo ">>> compiling test_dbl3_norm ..."
	$(gpp) -I$(CUDA) -O3 -c test_dbl3_norm.cpp

test_dbl4_norm.o:
	@-echo ">>> compiling test_dbl4_norm ..."
	$(gpp) -I$(CUDA) -O3 -c test_dbl4_norm.cpp

test_dbl5_norm.o:
	@-echo ">>> compiling test_dbl5_norm ..."
	$(gpp) -I$(CUDA) -O3 -c test_dbl5_norm.cpp

test_dbl8_norm.o:
	@-echo ">>> compiling test_dbl8_norm ..."
	$(gpp) -I$(CUDA) -O3 -c test_dbl8_norm.cpp

test_dbl10_norm.o:
	@-echo ">>> compiling test_dbl10_norm ..."
	$(gpp) -I$(CUDA) -O3 -c test_dbl10_norm.cpp

test_cmplx_norm.o:
	@-echo ">>> compiling test_cmplx_norm ..."
	$(gpp) -I$(CUDA) -O3 -c test_cmplx_norm.cpp

test_cmplx2_norm.o:
	@-echo ">>> compiling test_cmplx2_norm ..."
	$(gpp) -I$(QDsrc) -I$(CUDA) -O3 -c test_cmplx2_norm.cpp

test_cmplx3_norm.o:
	@-echo ">>> compiling test_cmplx3_norm ..."
	$(gpp) -I$(CUDA) -O3 -c test_cmplx3_norm.cpp

test_cmplx4_norm.o:
	@-echo ">>> compiling test_cmplx4_norm ..."
	$(gpp) -I$(CUDA) -O3 -c test_cmplx4_norm.cpp

test_cmplx5_norm.o:
	@-echo ">>> compiling test_cmplx5_norm ..."
	$(gpp) -I$(CUDA) -O3 -c test_cmplx5_norm.cpp

test_cmplx8_norm.o:
	@-echo ">>> compiling test_cmplx8_norm ..."
	$(gpp) -I$(CUDA) -O3 -c test_cmplx8_norm.cpp

test_cmplx10_norm.o:
	@-echo ">>> compiling test_cmplx10_norm ..."
	$(gpp) -I$(CUDA) -O3 -c test_cmplx10_norm.cpp

run_dbl_norm: dbl_norm_kernels.o dbl_norm_host.o \
              random_numbers.o random_vectors.o \
              parse_run_arguments.o run_dbl_norm.o
	@-echo ">>> linking ..."
	$(gpp) -o run_dbl_norm dbl_norm_kernels.o dbl_norm_host.o \
                  random_numbers.o random_vectors.o \
                  parse_run_arguments.o run_dbl_norm.o \
            -lcuda -lcudart -L$(CUDALIB)

run_dbl2_norm: dbl2_norm_kernels.o dbl2_norm_host.o \
               random_numbers.o random2_vectors.o double_double.o \
               parse_run_arguments.o run_dbl2_norm.o double_double_functions.o
	@-echo ">>> linking ..."
	$(gpp) -o run_dbl2_norm dbl2_norm_kernels.o dbl2_norm_host.o \
                  random_numbers.o random2_vectors.o parse_run_arguments.o \
                  double_double.o double_double_functions.o run_dbl2_norm.o \
            -lcuda -lcudart -L$(CUDALIB)

run_dbl3_norm: dbl3_norm_kernels.o dbl3_norm_host.o \
               random_numbers.o random3_vectors.o double_double_functions.o \
               parse_run_arguments.o run_dbl3_norm.o triple_double_functions.o
	@-echo ">>> linking ..."
	$(gpp) -o run_dbl3_norm dbl3_norm_kernels.o dbl3_norm_host.o \
                  random_numbers.o random3_vectors.o parse_run_arguments.o \
                  double_double_functions.o triple_double_functions.o \
                  run_dbl3_norm.o -lcuda -lcudart -L$(CUDALIB)

run_dbl4_norm: dbl4_norm_kernels.o dbl4_norm_host.o \
               random_numbers.o random4_vectors.o double_double_functions.o \
               parse_run_arguments.o run_dbl4_norm.o quad_double_functions.o
	@-echo ">>> linking ..."
	$(gpp) -o run_dbl4_norm dbl4_norm_kernels.o dbl4_norm_host.o \
                  random_numbers.o random4_vectors.o parse_run_arguments.o \
                  double_double_functions.o quad_double_functions.o \
                  run_dbl4_norm.o -lcuda -lcudart -L$(CUDALIB)

run_dbl5_norm: dbl5_norm_kernels.o dbl5_norm_host.o \
               random_numbers.o random5_vectors.o double_double_functions.o \
               parse_run_arguments.o run_dbl5_norm.o penta_double_functions.o
	@-echo ">>> linking ..."
	$(gpp) -o run_dbl5_norm dbl5_norm_kernels.o dbl5_norm_host.o \
                  random_numbers.o random5_vectors.o parse_run_arguments.o \
                  double_double_functions.o penta_double_functions.o \
                  run_dbl5_norm.o -lcuda -lcudart -L$(CUDALIB)

run_dbl8_norm: dbl8_norm_kernels.o dbl8_norm_host.o \
               random_numbers.o random8_vectors.o double_double_functions.o \
               parse_run_arguments.o run_dbl8_norm.o quad_double_functions.o \
               octo_double_functions.o
	@-echo ">>> linking ..."
	$(gpp) -o run_dbl8_norm dbl8_norm_kernels.o dbl8_norm_host.o \
                  random_numbers.o random8_vectors.o parse_run_arguments.o \
                  double_double_functions.o quad_double_functions.o \
                  octo_double_functions.o run_dbl8_norm.o \
            -lcuda -lcudart -L$(CUDALIB)

run_dbl10_norm: dbl10_norm_kernels.o dbl10_norm_host.o \
                random_numbers.o random10_vectors.o double_double_functions.o \
                parse_run_arguments.o run_dbl10_norm.o quad_double_functions.o \
                octo_double_functions.o deca_double_functions.o
	@-echo ">>> linking ..."
	$(gpp) -o run_dbl10_norm dbl10_norm_kernels.o dbl10_norm_host.o \
                  random_numbers.o random10_vectors.o parse_run_arguments.o \
                  double_double_functions.o quad_double_functions.o \
                  octo_double_functions.o deca_double_functions.o \
                  run_dbl10_norm.o -lcuda -lcudart -L$(CUDALIB)

run_cmplx_norm: cmplx_norm_kernels.o cmplx_norm_host.o \
                random_numbers.o random_vectors.o \
                parse_run_arguments.o run_cmplx_norm.o
	@-echo ">>> linking ..."
	$(gpp) -o run_cmplx_norm cmplx_norm_kernels.o cmplx_norm_host.o \
                  random_numbers.o random_vectors.o parse_run_arguments.o \
                  run_cmplx_norm.o -lcuda -lcudart -L$(CUDALIB)

run_cmplx2_norm: cmplx2_norm_kernels.o cmplx2_norm_host.o \
                 random_numbers.o random2_vectors.o \
                 double_double.o double_double_functions.o \
                 parse_run_arguments.o run_cmplx2_norm.o
	@-echo ">>> linking ..."
	$(gpp) -o run_cmplx2_norm cmplx2_norm_kernels.o cmplx2_norm_host.o \
                  random_numbers.o random2_vectors.o parse_run_arguments.o \
                  double_double.o double_double_functions.o \
                  run_cmplx2_norm.o -lcuda -lcudart -L$(CUDALIB)

run_cmplx3_norm: cmplx3_norm_kernels.o cmplx3_norm_host.o \
                 random_numbers.o random3_vectors.o \
                 double_double_functions.o triple_double_functions.o \
                 parse_run_arguments.o run_cmplx3_norm.o
	@-echo ">>> linking ..."
	$(gpp) -o run_cmplx3_norm cmplx3_norm_kernels.o cmplx3_norm_host.o \
                  random_numbers.o random3_vectors.o parse_run_arguments.o \
                  double_double_functions.o triple_double_functions.o \
                  run_cmplx3_norm.o -lcuda -lcudart -L$(CUDALIB)

run_cmplx4_norm: cmplx4_norm_kernels.o cmplx4_norm_host.o \
                 random_numbers.o random4_vectors.o \
                 double_double_functions.o quad_double_functions.o \
                 parse_run_arguments.o run_cmplx4_norm.o
	@-echo ">>> linking ..."
	$(gpp) -o run_cmplx4_norm cmplx4_norm_kernels.o cmplx4_norm_host.o \
                  random_numbers.o random4_vectors.o parse_run_arguments.o \
                  double_double_functions.o quad_double_functions.o \
                  run_cmplx4_norm.o -lcuda -lcudart -L$(CUDALIB)

run_cmplx5_norm: cmplx5_norm_kernels.o cmplx5_norm_host.o \
                 random_numbers.o random5_vectors.o \
                 double_double_functions.o penta_double_functions.o \
                 parse_run_arguments.o run_cmplx5_norm.o
	@-echo ">>> linking ..."
	$(gpp) -o run_cmplx5_norm cmplx5_norm_kernels.o cmplx5_norm_host.o \
                  random_numbers.o random5_vectors.o parse_run_arguments.o \
                  double_double_functions.o penta_double_functions.o \
                  run_cmplx5_norm.o -lcuda -lcudart -L$(CUDALIB)

run_cmplx8_norm: cmplx8_norm_kernels.o cmplx8_norm_host.o \
                 random_numbers.o random8_vectors.o \
                 double_double_functions.o quad_double_functions.o \
                 octo_double_functions.o \
                 parse_run_arguments.o run_cmplx8_norm.o
	@-echo ">>> linking ..."
	$(gpp) -o run_cmplx8_norm cmplx8_norm_kernels.o cmplx8_norm_host.o \
                  random_numbers.o random8_vectors.o parse_run_arguments.o \
                  double_double_functions.o quad_double_functions.o \
                  octo_double_functions.o run_cmplx8_norm.o \
               -lcuda -lcudart -L$(CUDALIB)

run_cmplx10_norm: cmplx10_norm_kernels.o cmplx10_norm_host.o \
                 random_numbers.o random10_vectors.o \
                 double_double_functions.o quad_double_functions.o \
                 octo_double_functions.o deca_double_functions.o \
                 parse_run_arguments.o run_cmplx10_norm.o
	@-echo ">>> linking ..."
	$(gpp) -o run_cmplx10_norm cmplx10_norm_kernels.o cmplx10_norm_host.o \
                  random_numbers.o random10_vectors.o parse_run_arguments.o \
                  double_double_functions.o quad_double_functions.o \
                  octo_double_functions.o deca_double_functions.o \
                  run_cmplx10_norm.o -lcuda -lcudart -L$(CUDALIB)

test_dbl_norm: dbl_norm_kernels.o dbl_norm_host.o \
               random_numbers.o random_vectors.o test_dbl_norm.o
	@-echo ">>> linking ..."
	$(gpp) -o test_dbl_norm dbl_norm_kernels.o dbl_norm_host.o \
                  random_numbers.o random_vectors.o test_dbl_norm.o \
               -lcuda -lcudart -L$(CUDALIB)

test_dbl2_norm: double_double.o double_double_functions.o \
                random_numbers.o random2_vectors.o \
                dbl2_norm_host.o test_dbl2_norm.o dbl2_norm_kernels.o
	@-echo ">>> linking ..."
	$(gpp) -o test_dbl2_norm double_double.o double_double_functions.o \
                  random_numbers.o random2_vectors.o dbl2_norm_host.o \
                  dbl2_norm_kernels.o test_dbl2_norm.o \
               -lcuda -lcudart -L$(CUDALIB)

test_dbl3_norm: double_double_functions.o triple_double_functions.o \
                random_numbers.o random3_vectors.o \
                dbl3_norm_host.o dbl3_norm_kernels.o test_dbl3_norm.o
	@-echo ">>> linking ..."
	$(gpp) -o test_dbl3_norm test_dbl3_norm.o \
                  double_double_functions.o triple_double_functions.o \
                  random_numbers.o random3_vectors.o \
                  dbl3_norm_host.o dbl3_norm_kernels.o \
               -lcuda -lcudart -L$(CUDALIB)

test_dbl4_norm: double_double_functions.o quad_double_functions.o \
                random_numbers.o random4_vectors.o test_dbl4_norm.o \
                dbl4_norm_host.o dbl4_norm_kernels.o
	@-echo ">>> linking ..."
	$(gpp) -o test_dbl4_norm test_dbl4_norm.o \
                  double_double_functions.o quad_double_functions.o \
                  random_numbers.o random4_vectors.o \
                  dbl4_norm_host.o dbl4_norm_kernels.o \
               -lcuda -lcudart -L$(CUDALIB)

test_dbl5_norm: double_double_functions.o penta_double_functions.o \
                random_numbers.o random5_vectors.o test_dbl5_norm.o \
                dbl5_norm_host.o dbl5_norm_kernels.o
	@-echo ">>> linking ..."
	$(gpp) -o test_dbl5_norm test_dbl5_norm.o \
                  double_double_functions.o penta_double_functions.o \
                  random_numbers.o random5_vectors.o \
                  dbl5_norm_host.o dbl5_norm_kernels.o \
               -lcuda -lcudart -L$(CUDALIB)

test_dbl8_norm: double_double_functions.o quad_double_functions.o \
                octo_double_functions.o random_numbers.o random8_vectors.o \
                dbl8_norm_host.o dbl8_norm_kernels.o test_dbl8_norm.o
	@-echo ">>> linking ..."
	$(gpp) -o test_dbl8_norm test_dbl8_norm.o dbl8_norm_host.o \
                  double_double_functions.o quad_double_functions.o \
                  octo_double_functions.o random_numbers.o random8_vectors.o \
                  dbl8_norm_kernels.o -lcuda -lcudart -L$(CUDALIB)

test_dbl10_norm: double_double_functions.o quad_double_functions.o \
                 octo_double_functions.o deca_double_functions.o \
                 random_numbers.o random10_vectors.o \
                 test_dbl10_norm.o dbl10_norm_host.o dbl10_norm_kernels.o
	@-echo ">>> linking ..."
	$(gpp) -o test_dbl10_norm test_dbl10_norm.o \
                  double_double_functions.o quad_double_functions.o \
                  octo_double_functions.o deca_double_functions.o \
                  random_numbers.o random10_vectors.o \
                  dbl10_norm_host.o dbl10_norm_kernels.o \
               -lcuda -lcudart -L$(CUDALIB)

test_cmplx_norm: cmplx_norm_kernels.o cmplx_norm_host.o \
                 random_numbers.o random_vectors.o test_cmplx_norm.o
	@-echo ">>> linking ..."
	$(gpp) -o test_cmplx_norm cmplx_norm_kernels.o cmplx_norm_host.o \
                  random_numbers.o random_vectors.o test_cmplx_norm.o \
               -lcuda -lcudart -L$(CUDALIB)

test_cmplx2_norm: random_numbers.o random2_vectors.o \
                  double_double.o double_double_functions.o \
                  cmplx2_norm_host.o cmplx2_norm_kernels.o \
                  test_cmplx2_norm.o
	@-echo ">>> linking ..."
	$(gpp) -o test_cmplx2_norm test_cmplx2_norm.o \
                  double_double.o double_double_functions.o \
                  random_numbers.o random2_vectors.o \
                  cmplx2_norm_host.o cmplx2_norm_kernels.o \
               -lcuda -lcudart -L$(CUDALIB)

test_cmplx3_norm: random_numbers.o random3_vectors.o \
                  double_double_functions.o triple_double_functions.o \
                  cmplx3_norm_host.o cmplx3_norm_kernels.o \
                  test_cmplx3_norm.o
	@-echo ">>> linking ..."
	$(gpp) -o test_cmplx3_norm test_cmplx3_norm.o \
                  double_double_functions.o triple_double_functions.o \
                  random_numbers.o random3_vectors.o \
                  cmplx3_norm_host.o cmplx3_norm_kernels.o \
               -lcuda -lcudart -L$(CUDALIB)

test_cmplx4_norm: random_numbers.o random4_vectors.o \
                  double_double_functions.o quad_double_functions.o \
                  cmplx4_norm_host.o cmplx4_norm_kernels.o \
                  test_cmplx4_norm.o
	@-echo ">>> linking ..."
	$(gpp) -o test_cmplx4_norm test_cmplx4_norm.o \
                  double_double_functions.o quad_double_functions.o \
                  random_numbers.o random4_vectors.o \
                  cmplx4_norm_host.o cmplx4_norm_kernels.o \
               -lcuda -lcudart -L$(CUDALIB)

test_cmplx5_norm: random_numbers.o random5_vectors.o \
                  double_double_functions.o penta_double_functions.o \
                  cmplx5_norm_host.o cmplx5_norm_kernels.o \
                  test_cmplx5_norm.o
	@-echo ">>> linking ..."
	$(gpp) -o test_cmplx5_norm test_cmplx5_norm.o \
                  double_double_functions.o penta_double_functions.o \
                  random_numbers.o random5_vectors.o \
                  cmplx5_norm_host.o cmplx5_norm_kernels.o \
               -lcuda -lcudart -L$(CUDALIB)

test_cmplx8_norm: random_numbers.o random8_vectors.o \
                  double_double_functions.o quad_double_functions.o \
                  octo_double_functions.o cmplx8_norm_kernels.o \
                  cmplx8_norm_host.o test_cmplx8_norm.o
	@-echo ">>> linking ..."
	$(gpp) -o test_cmplx8_norm test_cmplx8_norm.o \
                  double_double_functions.o quad_double_functions.o \
                  octo_double_functions.o \
                  random_numbers.o random8_vectors.o \
                  cmplx8_norm_host.o cmplx8_norm_kernels.o \
               -lcuda -lcudart -L$(CUDALIB)

test_cmplx10_norm: random_numbers.o random10_vectors.o \
                   double_double_functions.o quad_double_functions.o \
                   octo_double_functions.o deca_double_functions.o \
                   cmplx10_norm_host.o cmplx10_norm_kernels.o \
                   test_cmplx10_norm.o
	@-echo ">>> linking ..."
	$(gpp) -o test_cmplx10_norm test_cmplx10_norm.o \
                  double_double_functions.o quad_double_functions.o \
                  octo_double_functions.o deca_double_functions.o \
                  random_numbers.o random10_vectors.o \
                  cmplx10_norm_host.o cmplx10_norm_kernels.o \
               -lcuda -lcudart -L$(CUDALIB)

clean:
	/bin/rm -f -r double_double.o double_double_functions.o
	/bin/rm -f -r dbl2_sqrt_kernels.o
	/bin/rm -f -r test_double_doubles.o test_double_doubles
	/bin/rm -f -r triple_double_functions.o dbl3_sqrt_kernels.o
	/bin/rm -f -r test_triple_doubles.o test_triple_doubles
	/bin/rm -f -r quad_double_functions.o dbl4_sqrt_kernels.o
	/bin/rm -f -r test_quad_doubles.o test_quad_doubles
	/bin/rm -f -r penta_double_functions.o dbl5_sqrt_kernels.o
	/bin/rm -f -r test_penta_doubles.o test_penta_doubles
	/bin/rm -f -r octo_double_functions.o dbl8_sqrt_kernels.o
	/bin/rm -f -r test_octo_doubles.o test_octo_doubles
	/bin/rm -f -r deca_double_functions.o dbl10_sqrt_kernels.o
	/bin/rm -f -r test_deca_doubles.o test_deca_doubles
	/bin/rm -f -r parse_run_arguments.o 
	/bin/rm -f -r random_numbers.o 
	/bin/rm -f -r random_vectors.o random2_vectors.o
	/bin/rm -f -r random3_vectors.o random4_vectors.o
	/bin/rm -f -r random5_vectors.o random8_vectors.o
	/bin/rm -f -r random10_vectors.o
	/bin/rm -f -r dbl_norm_kernels.o dbl_norm_host.o
	/bin/rm -f -r run_dbl_norm.o run_dbl_norm
	/bin/rm -f -r test_dbl_norm.o test_dbl_norm
	/bin/rm -f -r cmplx_norm_kernels.o cmplx_norm_host.o
	/bin/rm -f -r run_cmplx_norm.o run_cmplx_norm
	/bin/rm -f -r test_cmplx_norm.o test_cmplx_norm
	/bin/rm -f -r double_double_gpufun.o
	/bin/rm -f -r dbl2_norm_kernels.o dbl2_norm_host.o
	/bin/rm -f -r run_dbl2_norm.o run_dbl2_norm
	/bin/rm -f -r run_dbl3_norm.o run_dbl3_norm
	/bin/rm -f -r run_dbl4_norm.o run_dbl4_norm
	/bin/rm -f -r run_dbl5_norm.o run_dbl5_norm
	/bin/rm -f -r run_dbl8_norm.o run_dbl8_norm
	/bin/rm -f -r run_dbl10_norm.o run_dbl10_norm
	/bin/rm -f -r test_dbl2_norm.o test_dbl2_norm
	/bin/rm -f -r cmplx2_norm_host.o cmplx2_norm_kernels.o
	/bin/rm -f -r run_cmplx2_norm.o run_cmplx2_norm
	/bin/rm -f -r run_cmplx3_norm.o run_cmplx3_norm
	/bin/rm -f -r run_cmplx4_norm.o run_cmplx4_norm
	/bin/rm -f -r run_cmplx5_norm.o run_cmplx5_norm
	/bin/rm -f -r run_cmplx8_norm.o run_cmplx8_norm
	/bin/rm -f -r run_cmplx10_norm.o run_cmplx10_norm
	/bin/rm -f -r test_cmplx2_norm.o test_cmplx2_norm
	/bin/rm -f -r dbl3_norm_kernels.o dbl3_norm_host.o
	/bin/rm -f -r test_dbl3_norm.o test_dbl3_norm
	/bin/rm -f -r cmplx3_norm_host.o cmplx3_norm_kernels.o
	/bin/rm -f -r test_cmplx3_norm.o test_cmplx3_norm 
	/bin/rm -f -r dbl4_norm_host.o dbl4_norm_kernels.o
	/bin/rm -f -r test_dbl4_norm.o test_dbl4_norm
	/bin/rm -f -r cmplx4_norm_host.o cmplx4_norm_kernels.o
	/bin/rm -f -r test_cmplx4_norm.o test_cmplx4_norm 
	/bin/rm -f -r dbl5_norm_host.o dbl5_norm_kernels.o
	/bin/rm -f -r test_dbl5_norm.o test_dbl5_norm
	/bin/rm -f -r cmplx5_norm_host.o cmplx5_norm_kernels.o
	/bin/rm -f -r test_cmplx5_norm.o test_cmplx5_norm 
	/bin/rm -f -r dbl8_norm_host.o dbl8_norm_kernels.o
	/bin/rm -f -r test_dbl8_norm.o test_dbl8_norm
	/bin/rm -f -r cmplx8_norm_host.o cmplx8_norm_kernels.o
	/bin/rm -f -r test_cmplx8_norm.o test_cmplx8_norm 
	/bin/rm -f -r dbl10_norm_host.o dbl10_norm_kernels.o
	/bin/rm -f -r test_dbl10_norm.o test_dbl10_norm
	/bin/rm -f -r cmplx10_norm_host.o cmplx10_norm_kernels.o
	/bin/rm -f -r test_cmplx10_norm.o test_cmplx10_norm 
