# Tested on four different NVIDIA GPUs.

gpp=/usr/bin/g++
MPD=../Norms
CNV=../Convolutions
CUDA=/usr/local/cuda/include
CUDALIB=/usr/local/cuda/lib64
# 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

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

random_series.o:
	@-echo ">>> compiling double random series generators ..."
	$(gpp) -O3 -c -I$(MPD) $(CNV)/random_series.cpp

random_matrices.o:
	@-echo ">>> compiling random_matrices ..."
	$(gpp) -O3 -c -I$(MPD) -I$(CNV) random_matrices.cpp

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

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

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

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

random2_matrices.o:
	@-echo ">>> compiling double double random matrix generators ..."
	$(gpp) -O3 -c -I$(MPD) random2_matrices.cpp

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

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

random4_matrices.o:
	@-echo ">>> compiling quad double random matrix generators ..."
	$(gpp) -O3 -c -I$(MPD) random4_matrices.cpp

random8_matrices.o:
	@-echo ">>> compiling octo double random matrix generators ..."
	$(gpp) -O3 -c -I$(MPD) random8_matrices.cpp

dbl_convolutions_host.o:
	@-echo ">>> compiling dbl_convolutions_host ..."
	$(gpp) -O3 -c -I$(CNV) $(CNV)/dbl_convolutions_host.cpp

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

dbl_matrices_kernels.o:
	@-echo ">>> compiling matrices kernels for doubles ..."
	nvcc -ccbin=$(gpp) -arch=$(smflag) -O3 \
             -c dbl_matrices_kernels.cu

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

test_dbl_vectors.o:
	@-echo ">>> compiling test_dbl_vectors ..."
	$(gpp) -O3 -c -I$(MPD) -I$(CNV) test_dbl_vectors.cpp

test_dbl_vectors: random_numbers.o random_series.o \
                  random_matrices.o dbl_convolutions_host.o \
                  dbl_matrices_host.o dbl_matrices_kernels.o \
                  dbl_vectors_testers.o test_dbl_vectors.o 
	@-echo ">>> linking ..."
	$(gpp) -o test_dbl_vectors test_dbl_vectors.o \
                  random_numbers.o random_series.o random_matrices.o \
                  dbl_convolutions_host.o dbl_matrices_host.o \
                  dbl_matrices_kernels.o dbl_vectors_testers.o \
               -lcuda -lcudart -L$(CUDALIB)

dbl_matrices_testers.o:
	@-echo ">>> compiling dbl_matrices_testers ..."
	$(gpp) -O3 -c -I$(MPD) -I$(CNV) dbl_matrices_testers.cpp

test_dbl_matrices.o:
	@-echo ">>> compiling test_dbl_matrices ..."
	$(gpp) -O3 -c -I$(MPD) -I$(CNV) test_dbl_matrices.cpp

test_dbl_matrices: random_numbers.o random_series.o \
                   random_matrices.o dbl_convolutions_host.o \
                   dbl_linearization.o dbl_matrices_host.o \
                   dbl_matrices_testers.o test_dbl_matrices.o 
	@-echo ">>> linking ..."
	$(gpp) -o test_dbl_matrices test_dbl_matrices.o \
                  random_numbers.o random_series.o random_matrices.o \
                  dbl_convolutions_host.o dbl_linearization.o \
                  dbl_matrices_host.o dbl_matrices_testers.o

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

test_upper_jobs: test_upper_jobs.o
	@-echo ">>> linking ..."
	$(gpp) -o test_upper_jobs test_upper_jobs.o

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

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

test_dbl_linearization: test_dbl_linearization.o random_numbers.o \
                        random_series.o random_matrices.o dbl_linearization.o
	@-echo ">>> linking ..."
	$(gpp) -o test_dbl_linearization test_dbl_linearization.o \
                  random_numbers.o random_series.o random_matrices.o \
                  dbl_linearization.o

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

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

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

test_dbl_factors: test_dbl_factors.o dbl_factors_testers.o \
                  dbl_factorizations.o \
                  random_numbers.o random_series.o random_matrices.o
	@-echo ">>> linking ..."
	$(gpp) -o test_dbl_factors test_dbl_factors.o \
                  random_numbers.o random_series.o random_matrices.o \
                  dbl_factorizations.o dbl_factors_testers.o

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

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

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

test_dbl2_factors: test_dbl2_factors.o dbl2_factors_testers.o \
                   double_double_functions.o dbl2_factorizations.o \
                   random_numbers.o random2_vectors.o random2_matrices.o
	@-echo ">>> linking ..."
	$(gpp) -o test_dbl2_factors test_dbl2_factors.o \
                  double_double_functions.o \
                  random_numbers.o random2_vectors.o random2_matrices.o \
                  dbl2_factorizations.o dbl2_factors_testers.o

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

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

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

test_dbl4_factors: test_dbl4_factors.o dbl4_factors_testers.o \
                   double_double_functions.o quad_double_functions.o \
                   dbl4_factorizations.o \
                   random_numbers.o random4_vectors.o random4_matrices.o
	@-echo ">>> linking ..."
	$(gpp) -o test_dbl4_factors test_dbl4_factors.o \
                  double_double_functions.o quad_double_functions.o \
                  random_numbers.o random4_vectors.o random4_matrices.o \
                  dbl4_factorizations.o dbl4_factors_testers.o

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

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

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

test_dbl8_factors: test_dbl8_factors.o dbl8_factors_testers.o \
                   double_double_functions.o quad_double_functions.o \
                   octo_double_functions.o dbl8_factorizations.o \
                   random_numbers.o random8_vectors.o random8_matrices.o
	@-echo ">>> linking ..."
	$(gpp) -o test_dbl8_factors test_dbl8_factors.o \
                  double_double_functions.o quad_double_functions.o \
                  octo_double_functions.o \
                  random_numbers.o random8_vectors.o random8_matrices.o \
                  dbl8_factorizations.o dbl8_factors_testers.o

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

dbl_tabs_kernels.o:
	@-echo ">>> compiling tabs kernels for doubles ..."
	nvcc -ccbin=$(gpp) -arch=$(smflag) -O3 \
             -c dbl_tabs_kernels.cu

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

dbl_tabs_flopcounts.o:
	@-echo ">>> compling dbl_tabs_flopcounts ..."
	$(gpp) -O3 -c dbl_tabs_flopcounts.cpp

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

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

test_dbl_tabs: test_dbl_tabs.o dbl_tabs_testers.o dbl_tabs_host.o \
               dbl_tabs_kernels.o dbl_factorizations.o dbl_tabs_flopcounts.o \
               dbl_convolutions_host.o dbl_test_utilities.o \
               random_numbers.o random_series.o random_matrices.o
	@-echo ">>> linking ..."
	$(gpp) -o test_dbl_tabs test_dbl_tabs.o dbl_tabs_testers.o \
                  dbl_tabs_flopcounts.o \
                  random_numbers.o random_series.o random_matrices.o \
                  dbl_factorizations.o dbl_convolutions_host.o \
                  dbl_tabs_host.o dbl_tabs_kernels.o dbl_test_utilities.o \
               -lcuda -lcudart -L$(CUDALIB)

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

dbl2_tabs_kernels.o:
	@-echo ">>> compiling tabs kernels for double doubles ..."
	nvcc -ccbin=$(gpp) -arch=$(smflag) -I$(MPD) -O3 \
             --define-macro gpufun=1 \
             -c dbl2_tabs_kernels.cu

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

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

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

test_dbl2_tabs: test_dbl2_tabs.o dbl2_tabs_testers.o dbl_tabs_flopcounts.o \
                double_double_functions.o dbl2_tabs_host.o \
                dbl_test_utilities.o dbl2_test_utilities.o dbl_data_files.o \
                dbl2_tabs_kernels.o dbl2_factorizations.o \
                random_numbers.o random2_vectors.o dbl_factorizations.o \
                random_series.o random_matrices.o random2_matrices.o
	@-echo ">>> linking ..."
	$(gpp) -o test_dbl2_tabs test_dbl2_tabs.o dbl2_tabs_testers.o \
                  dbl_test_utilities.o dbl2_test_utilities.o dbl_data_files.o \
                  dbl_tabs_flopcounts.o dbl_factorizations.o \
                  double_double_functions.o dbl2_tabs_host.o \
                  dbl2_tabs_kernels.o dbl2_factorizations.o \
                  random_numbers.o random2_vectors.o \
                  random_series.o random_matrices.o random2_matrices.o \
               -lcuda -lcudart -L$(CUDALIB)

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

dbl4_tabs_kernels.o:
	@-echo ">>> compiling tabs kernels for quad doubles ..."
	nvcc -ccbin=$(gpp) -arch=$(smflag) -I$(MPD) -O3 \
             --define-macro gpufun=1 \
             -c dbl4_tabs_kernels.cu

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

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

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

test_dbl4_tabs: test_dbl4_tabs.o \
                double_double_functions.o quad_double_functions.o \
                dbl_test_utilities.o dbl_factorizations.o \
                dbl4_test_utilities.o dbl4_tabs_testers.o \
                dbl4_factorizations.o dbl4_tabs_host.o \
                dbl4_tabs_kernels.o dbl_tabs_flopcounts.o \
                dbl_data_files.o random_numbers.o random4_vectors.o \
                random_series.o random_matrices.o random4_matrices.o
	@-echo ">>> linking ..."
	$(gpp) -o test_dbl4_tabs test_dbl4_tabs.o \
                  double_double_functions.o quad_double_functions.o \
                  dbl_test_utilities.o dbl_factorizations.o \
                  dbl4_test_utilities.o dbl4_tabs_testers.o \
                  dbl4_tabs_host.o dbl4_factorizations.o \
                  dbl4_tabs_kernels.o dbl_tabs_flopcounts.o \
                  dbl_data_files.o random_numbers.o random4_vectors.o \
                  random_series.o random_matrices.o random4_matrices.o \
               -lcuda -lcudart -L$(CUDALIB)

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

dbl8_tabs_kernels.o:
	@-echo ">>> compiling tabs kernels for octo doubles ..."
	nvcc -ccbin=$(gpp) -arch=$(smflag) -I$(MPD) -O3 \
             --define-macro gpufun=1 \
             -c dbl8_tabs_kernels.cu

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

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

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

test_dbl8_tabs: test_dbl8_tabs.o dbl8_tabs_testers.o \
                double_double_functions.o quad_double_functions.o \
                octo_double_functions.o dbl_tabs_flopcounts.o \
                dbl_factorizations.o dbl_test_utilities.o dbl_data_files.o \
                dbl8_tabs_testers.o dbl8_factorizations.o \
                dbl8_tabs_host.o dbl8_tabs_kernels.o \
                test_dbl8_tabs.o dbl8_test_utilities.o \
                random_numbers.o random8_vectors.o \
                random_series.o random_matrices.o random8_matrices.o
	@-echo ">>> linking ..."
	$(gpp) -o test_dbl8_tabs test_dbl8_tabs.o \
                  dbl_factorizations.o dbl_test_utilities.o \
                  double_double_functions.o quad_double_functions.o \
                  octo_double_functions.o dbl8_factorizations.o \
                  dbl8_tabs_testers.o dbl8_test_utilities.o dbl_data_files.o \
                  dbl8_tabs_host.o dbl8_tabs_kernels.o dbl_tabs_flopcounts.o \
                  random_numbers.o random8_vectors.o \
                  random_series.o random_matrices.o random8_matrices.o \
               -lcuda -lcudart -L$(CUDALIB)

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

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

make_data_files: dbl_data_files.o make_data_files.o \
                 dbl_test_utilities.o dbl_factorizations.o \
                 random_numbers.o random_series.o random_matrices.o
	@-echo ">>> linking ..."
	$(gpp) -o make_data_files make_data_files.o dbl_data_files.o \
                  dbl_factorizations.o dbl_test_utilities.o \
                  random_numbers.o random_series.o random_matrices.o

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

dbl_baqr_kernels.o:
	@-echo ">>> compiling baqr kernels for doubles ..."
	nvcc -ccbin=$(gpp) -arch=$(smflag) -O3 \
             -c dbl_baqr_kernels.cu

dbl_baqr_flopcounts.o:
	@-echo ">>> compling dbl_baqr_flopcounts ..."
	$(gpp) -O3 -c dbl_baqr_flopcounts.cpp

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

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

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

test_dbl_baqr: test_dbl_baqr.o prompt_baqr_setup.o dbl_baqr_testers.o \
               dbl_factorizations.o dbl_factors_testers.o \
               dbl_baqr_host.o dbl_baqr_kernels.o dbl_baqr_flopcounts.o \
               random_numbers.o random_series.o random_matrices.o
	@-echo ">>> linking ..."
	$(gpp) -o test_dbl_baqr prompt_baqr_setup.o test_dbl_baqr.o \
                  dbl_baqr_testers.o dbl_factorizations.o \
                  dbl_factors_testers.o dbl_baqr_host.o dbl_baqr_kernels.o \
                  dbl_baqr_flopcounts.o \
                  random_numbers.o random_series.o random_matrices.o \
               -lcuda -lcudart -L$(CUDALIB)

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

dbl2_baqr_kernels.o:
	@-echo ">>> compiling baqr kernels for double doubles ..."
	nvcc -ccbin=$(gpp) -arch=$(smflag) -I$(MPD) -O3 \
             --define-macro gpufun=1 \
             -c dbl2_baqr_kernels.cu

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

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

test_dbl2_baqr: test_dbl2_baqr.o prompt_baqr_setup.o dbl2_baqr_testers.o \
                double_double_functions.o dbl2_factorizations.o \
                dbl2_factors_testers.o dbl2_baqr_host.o \
                dbl2_baqr_kernels.o dbl_baqr_flopcounts.o \
                random_numbers.o random2_vectors.o random2_matrices.o
	@-echo ">>> linking ..."
	$(gpp) -o test_dbl2_baqr test_dbl2_baqr.o prompt_baqr_setup.o \
                  dbl2_baqr_testers.o dbl_baqr_flopcounts.o \
                  double_double_functions.o dbl2_factorizations.o \
                  dbl2_factors_testers.o dbl2_baqr_host.o dbl2_baqr_kernels.o \
                  random_numbers.o random2_vectors.o random2_matrices.o \
               -lcuda -lcudart -L$(CUDALIB)

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

dbl4_baqr_kernels.o:
	@-echo ">>> compiling baqr kernels for quad doubles ..."
	nvcc -ccbin=$(gpp) -arch=$(smflag) -I$(MPD) -O3 \
             --define-macro gpufun=1 \
             -c dbl4_baqr_kernels.cu

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

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

test_dbl4_baqr: test_dbl4_baqr.o prompt_baqr_setup.o dbl4_baqr_testers.o \
                double_double_functions.o quad_double_functions.o \
                dbl4_factorizations.o dbl4_factors_testers.o \
                dbl4_baqr_host.o dbl4_baqr_kernels.o dbl_baqr_flopcounts.o \
                random_numbers.o random4_vectors.o random4_matrices.o
	@-echo ">>> linking ..."
	$(gpp) -o test_dbl4_baqr test_dbl4_baqr.o prompt_baqr_setup.o \
                  double_double_functions.o quad_double_functions.o \
                  dbl4_factorizations.o dbl4_factors_testers.o \
                  dbl4_baqr_host.o dbl4_baqr_testers.o \
                  dbl4_baqr_kernels.o dbl_baqr_flopcounts.o \
                  random_numbers.o random4_vectors.o random4_matrices.o \
               -lcuda -lcudart -L$(CUDALIB)

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

dbl8_baqr_kernels.o:
	@-echo ">>> compiling baqr kernels for octo doubles ..."
	nvcc -ccbin=$(gpp) -arch=$(smflag) -I$(MPD) -O3 \
             --define-macro gpufun=1 \
             -c dbl8_baqr_kernels.cu

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

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

test_dbl8_baqr: test_dbl8_baqr.o prompt_baqr_setup.o dbl8_baqr_testers.o \
                double_double_functions.o quad_double_functions.o \
                octo_double_functions.o \
                dbl8_factorizations.o dbl8_factors_testers.o \
                dbl8_baqr_host.o dbl8_baqr_kernels.o dbl_baqr_flopcounts.o \
                random_numbers.o random8_vectors.o random8_matrices.o
	@-echo ">>> linking ..."
	$(gpp) -o test_dbl8_baqr test_dbl8_baqr.o prompt_baqr_setup.o \
                  double_double_functions.o quad_double_functions.o \
                  octo_double_functions.o \
                  dbl8_factorizations.o dbl8_factors_testers.o \
                  dbl8_baqr_host.o dbl8_baqr_testers.o \
                  dbl_baqr_flopcounts.o dbl8_baqr_kernels.o \
                  random_numbers.o random8_vectors.o random8_matrices.o \
               -lcuda -lcudart -L$(CUDALIB)

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

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

test_dbl_qrbs: test_dbl_qrbs.o prompt_baqr_setup.o dbl_qrbs_testers.o \
               dbl_factorizations.o dbl_factors_testers.o \
               dbl_baqr_host.o dbl_baqr_kernels.o dbl_baqr_flopcounts.o \
               dbl_tabs_host.o dbl_tabs_kernels.o dbl_test_utilities.o \
               dbl_tabs_flopcounts.o \
               random_numbers.o random_series.o random_matrices.o
	@-echo ">>> linking ..."
	$(gpp) -o test_dbl_qrbs prompt_baqr_setup.o test_dbl_qrbs.o \
                  dbl_qrbs_testers.o dbl_factorizations.o \
                  dbl_factors_testers.o dbl_baqr_host.o dbl_baqr_kernels.o \
                  dbl_tabs_host.o dbl_tabs_kernels.o dbl_test_utilities.o \
                  dbl_baqr_flopcounts.o dbl_tabs_flopcounts.o \
                  random_numbers.o random_series.o random_matrices.o \
               -lcuda -lcudart -L$(CUDALIB)

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

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

test_dbl2_qrbs: test_dbl2_qrbs.o prompt_baqr_setup.o dbl2_qrbs_testers.o \
                double_double_functions.o dbl2_factorizations.o \
                dbl2_factors_testers.o dbl2_baqr_host.o dbl2_baqr_kernels.o \
                dbl_baqr_flopcounts.o dbl2_tabs_host.o dbl2_tabs_kernels.o \
                dbl_tabs_flopcounts.o dbl2_test_utilities.o \
                random_numbers.o random2_vectors.o random2_matrices.o
	@-echo ">>> linking ..."
	$(gpp) -o test_dbl2_qrbs prompt_baqr_setup.o test_dbl2_qrbs.o \
                  double_double_functions.o dbl2_qrbs_testers.o \
                  dbl2_factorizations.o dbl2_factors_testers.o \
                  dbl2_baqr_host.o dbl2_baqr_kernels.o dbl_baqr_flopcounts.o \
                  dbl2_tabs_host.o dbl2_tabs_kernels.o dbl_tabs_flopcounts.o \
                  dbl2_test_utilities.o \
                  random_numbers.o random2_vectors.o random2_matrices.o \
               -lcuda -lcudart -L$(CUDALIB)

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

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

test_dbl4_qrbs: test_dbl4_qrbs.o prompt_baqr_setup.o dbl4_qrbs_testers.o \
                double_double_functions.o quad_double_functions.o \
                dbl4_factorizations.o dbl4_factors_testers.o \
                dbl4_baqr_host.o dbl4_baqr_kernels.o \
                dbl_baqr_flopcounts.o dbl4_tabs_host.o dbl4_tabs_kernels.o \
                dbl_tabs_flopcounts.o dbl4_test_utilities.o \
                random_numbers.o random4_vectors.o random4_matrices.o
	@-echo ">>> linking ..."
	$(gpp) -o test_dbl4_qrbs prompt_baqr_setup.o test_dbl4_qrbs.o \
                  dbl4_qrbs_testers.o dbl4_test_utilities.o \
                  double_double_functions.o quad_double_functions.o \
                  dbl4_factorizations.o dbl4_factors_testers.o \
                  dbl4_baqr_host.o dbl4_baqr_kernels.o dbl_baqr_flopcounts.o \
                  dbl4_tabs_host.o dbl4_tabs_kernels.o dbl_tabs_flopcounts.o \
                  random_numbers.o random4_vectors.o random4_matrices.o \
               -lcuda -lcudart -L$(CUDALIB)

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

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

test_dbl8_qrbs: test_dbl8_qrbs.o prompt_baqr_setup.o dbl8_qrbs_testers.o \
                double_double_functions.o quad_double_functions.o \
                octo_double_functions.o \
                dbl8_factorizations.o dbl8_factors_testers.o \
                dbl8_baqr_host.o dbl8_baqr_kernels.o \
                dbl_baqr_flopcounts.o dbl8_tabs_host.o dbl8_tabs_kernels.o \
                dbl_tabs_flopcounts.o dbl8_test_utilities.o \
                random_numbers.o random8_vectors.o random8_matrices.o
	@-echo ">>> linking ..."
	$(gpp) -o test_dbl8_qrbs prompt_baqr_setup.o test_dbl8_qrbs.o \
                  dbl8_qrbs_testers.o dbl8_test_utilities.o \
                  double_double_functions.o quad_double_functions.o \
                  octo_double_functions.o \
                  dbl8_factorizations.o dbl8_factors_testers.o \
                  dbl8_baqr_host.o dbl8_baqr_kernels.o dbl_baqr_flopcounts.o \
                  dbl8_tabs_host.o dbl8_tabs_kernels.o dbl_tabs_flopcounts.o \
                  random_numbers.o random8_vectors.o random8_matrices.o \
               -lcuda -lcudart -L$(CUDALIB)

clean:
	/bin/rm -f -r random_matrices.o
	/bin/rm -f -r dbl_matrices_host.o dbl_matrices_kernels.o
	/bin/rm -f -r dbl_matrices_testers.o dbl_vectors_testers.o
	/bin/rm -f -r test_dbl_vectors.o test_dbl_vectors
	/bin/rm -f -r test_dbl_matrices.o test_dbl_matrices
	/bin/rm -f -r test_upper_jobs.o test_upper_jobs
	/bin/rm -f -r dbl_linearization.o
	/bin/rm -f -r test_dbl_linearization.o test_dbl_linearization
	/bin/rm -f -r dbl_factorizations.o dbl_factors_testers.o
	/bin/rm -f -r test_dbl_factors.o test_dbl_factors
	/bin/rm -f -r double_double_functions.o
	/bin/rm -f -r dbl2_factorizations.o dbl2_factors_testers.o
	/bin/rm -f -r test_dbl2_factors.o test_dbl2_factors
	/bin/rm -f -r quad_double_functions.o
	/bin/rm -f -r dbl4_factorizations.o dbl4_factors_testers.o
	/bin/rm -f -r test_dbl4_factors.o test_dbl4_factors
	/bin/rm -f -r octo_double_functions.o
	/bin/rm -f -r dbl8_factorizations.o dbl8_factors_testers.o
	/bin/rm -f -r test_dbl8_factors.o test_dbl8_factors
	/bin/rm -f -r dbl_tabs_host.o dbl_tabs_kernels.o
	/bin/rm -f -r dbl_test_utilities.o dbl_tabs_testers.o
	/bin/rm -f -r dbl_tabs_flopcounts.o
	/bin/rm -f -r test_dbl_tabs.o test_dbl_tabs prompt_baqr_setup.o
	/bin/rm -f -r random2_vectors.o random2_matrices.o
	/bin/rm -f -r random4_vectors.o random4_matrices.o
	/bin/rm -f -r random8_vectors.o random8_matrices.o
	/bin/rm -f -r dbl2_tabs_host.o dbl2_tabs_kernels.o
	/bin/rm -f -r dbl2_test_utilities.o dbl2_tabs_testers.o
	/bin/rm -f -r test_dbl2_tabs.o test_dbl2_tabs
	/bin/rm -f -r dbl4_tabs_host.o dbl4_tabs_kernels.o
	/bin/rm -f -r dbl4_test_utilities.o dbl4_tabs_testers.o
	/bin/rm -f -r test_dbl4_tabs.o test_dbl4_tabs
	/bin/rm -f -r dbl8_tabs_host.o dbl8_tabs_kernels.o
	/bin/rm -f -r dbl8_test_utilities.o dbl8_tabs_testers.o
	/bin/rm -f -r test_dbl8_tabs.o test_dbl8_tabs
	/bin/rm -f -r dbl_data_files.o make_data_files.o make_data_files
	/bin/rm -f -r dbl_baqr_host.o dbl_baqr_kernels.o
	/bin/rm -f -r dbl_baqr_testers.o dbl_baqr_flopcounts.o
	/bin/rm -f -r test_dbl_baqr.o test_dbl_baqr
	/bin/rm -f -r test_dbl2_baqr.o test_dbl2_baqr
	/bin/rm -f -r test_dbl4_baqr.o test_dbl4_baqr
	/bin/rm -f -r test_dbl8_baqr.o test_dbl8_baqr
	/bin/rm -f -r dbl2_baqr_host.o dbl2_baqr_kernels.o
	/bin/rm -f -r dbl2_baqr_testers.o dbl4_baqr_testers.o
	/bin/rm -f -r dbl8_baqr_testers.o
	/bin/rm -f -r dbl4_baqr_host.o dbl4_baqr_kernels.o
	/bin/rm -f -r dbl8_baqr_host.o dbl8_baqr_kernels.o
	/bin/rm -f -r test_dbl_qrbs.o test_dbl_qrbs
	/bin/rm -f -r dbl_qrbs_testers.o
	/bin/rm -f -r test_dbl2_qrbs.o test_dbl2_qrbs
	/bin/rm -f -r dbl2_qrbs_testers.o
	/bin/rm -f -r test_dbl4_qrbs.o test_dbl4_qrbs
	/bin/rm -f -r dbl4_qrbs_testers.o
	/bin/rm -f -r test_dbl8_qrbs.o test_dbl8_qrbs
	/bin/rm -f -r dbl8_qrbs_testers.o

cleanall: clean
	/bin/rm -f -r random_numbers.o random_series.o
	/bin/rm -f -r dbl_convolutions_host.o
