From 967e76060da0fec6d93bee18fbc5b5b5b1fef375 Mon Sep 17 00:00:00 2001
From: "Kurt A. O'Hearn" <ohearnk@msu.edu>
Date: Tue, 22 May 2018 18:13:38 -0400
Subject: [PATCH] PG-PuReMD: fix CUDA compilation error. Revert library
 building via libtool due to issues with recognizing custom suffix rules for
 building CUDA source files and revisit at a later date.

---
 PG-PuReMD/Makefile.am  | 75 +++++++++++++++++-------------------------
 PG-PuReMD/aclocal.m4   | 65 ------------------------------------
 PG-PuReMD/configure.ac | 58 ++++++++++++++++----------------
 PG-PuReMD/src/puremd.c |  5 +--
 configure.ac           |  8 ++---
 5 files changed, 67 insertions(+), 144 deletions(-)

diff --git a/PG-PuReMD/Makefile.am b/PG-PuReMD/Makefile.am
index c5c84052..913614d2 100644
--- a/PG-PuReMD/Makefile.am
+++ b/PG-PuReMD/Makefile.am
@@ -16,15 +16,17 @@ NVCCFLAGS += --compiler-options "$(DEFS) $(NVCC_OPT_CODE_DEFS) -O3 -funroll-loop
 endif
 
 
-lib_LTLIBRARIES = lib/libpuremd.la
-lib_libpuremd_la_SOURCES = src/allocate.c src/basic_comm.c src/ffield.c src/grid.c src/list.c \
+bin_PROGRAMS = bin/pg-puremd
+
+bin_pg_puremd_SOURCES = src/allocate.c src/basic_comm.c src/ffield.c src/grid.c src/list.c \
 	src/lookup.c src/io_tools.c src/reset_tools.c src/restart.c src/random.c \
 	src/tool_box.c src/traj.c src/analyze.c src/box.c src/system_props.c \
 	src/control.c src/comm_tools.c src/geo_tools.c src/lin_alg.c src/neighbors.c \
 	src/charges.c src/bond_orders.c src/multi_body.c src/bonds.c src/valence_angles.c \
 	src/hydrogen_bonds.c src/torsion_angles.c src/nonbonded.c src/forces.c \
-	src/integrate.c src/init_md.c src/puremd.c
-lib_libpuremd_la_SOURCES += src/reax_types.h src/index_utils.h \
+	src/integrate.c src/init_md.c src/puremd.c \
+	src/driver.c \
+	src/reax_types.h src/index_utils.h \
         src/allocate.h src/basic_comm.h src/ffield.h src/grid.h src/list.h \
 	src/lookup.h src/io_tools.h src/reset_tools.h src/restart.h src/random.h src/vector.h \
 	src/tool_box.h src/traj.h src/analyze.h src/box.h src/system_props.h \
@@ -32,52 +34,37 @@ lib_libpuremd_la_SOURCES += src/reax_types.h src/index_utils.h \
 	src/charges.h src/bond_orders.h src/multi_body.h src/bonds.h src/valence_angles.h \
 	src/hydrogen_bonds.h src/torsion_angles.h src/nonbonded.h src/forces.h \
 	src/integrate.h src/init_md.h
-include_HEADERS = src/puremd.h
-
 if USE_CUDA
-lib_libpuremd_la_SOURCES += src/cuda/cuda_utils.cu src/cuda/cuda_allocate.cu src/cuda/cuda_environment.cu \
-      src/cuda/cuda_system_props.cu src/cuda/cuda_reduction.cu src/cuda/cuda_box.cu src/cuda/cuda_list.cu \
-      src/cuda/cuda_copy.cu src/cuda/cuda_reset_tools.cu src/cuda/cuda_random.cu \
-      src/cuda/cuda_neighbors.cu src/cuda/cuda_bond_orders.cu src/cuda/cuda_bonds.cu \
-      src/cuda/cuda_multi_body.cu src/cuda/cuda_valence_angles.cu \
-      src/cuda/cuda_torsion_angles.cu src/cuda/cuda_hydrogen_bonds.cu src/cuda/cuda_forces.cu \
-      src/cuda/cuda_charges.cu src/cuda/cuda_lin_alg.cu \
-      src/cuda/cuda_nonbonded.cu src/cuda/cuda_integrate.cu src/cuda/cuda_post_evolve.cu \
-      src/cuda/cuda_init_md.cu src/cuda/cuda_lookup.cu
-lib_libpuremd_la_SOURCES += src/cuda/cuda_helpers.h src/cuda/cuda_shuffle.h \
-      src/cuda/cuda_utils.h src/cuda/cuda_allocate.h src/cuda/cuda_environment.h \
-      src/cuda/cuda_system_props.h src/cuda/cuda_reduction.h src/cuda/cuda_box.h src/cuda/cuda_list.h \
-      src/cuda/cuda_copy.h src/cuda/cuda_reset_tools.h src/cuda/cuda_random.h src/cuda/cuda_vector.h \
-      src/cuda/cuda_neighbors.h src/cuda/cuda_bond_orders.h src/cuda/cuda_bonds.h \
-      src/cuda/cuda_multi_body.h src/cuda/cuda_valence_angles.h \
-      src/cuda/cuda_torsion_angles.h src/cuda/cuda_hydrogen_bonds.h src/cuda/cuda_forces.h \
-      src/cuda/cuda_charges.h src/cuda/cuda_lin_alg.h \
-      src/cuda/cuda_nonbonded.h src/cuda/cuda_integrate.h src/cuda/cuda_post_evolve.h \
-      src/cuda/cuda_init_md.h src/cuda/cuda_lookup.h
-
+bin_pg_puremd_SOURCES += src/cuda/cuda_utils.cu src/cuda/cuda_allocate.cu src/cuda/cuda_environment.cu \
+	src/cuda/cuda_system_props.cu src/cuda/cuda_reduction.cu src/cuda/cuda_box.cu src/cuda/cuda_list.cu \
+	src/cuda/cuda_copy.cu src/cuda/cuda_reset_tools.cu src/cuda/cuda_random.cu \
+	src/cuda/cuda_neighbors.cu src/cuda/cuda_bond_orders.cu src/cuda/cuda_bonds.cu \
+	src/cuda/cuda_multi_body.cu src/cuda/cuda_valence_angles.cu \
+	src/cuda/cuda_torsion_angles.cu src/cuda/cuda_hydrogen_bonds.cu src/cuda/cuda_forces.cu \
+	src/cuda/cuda_charges.cu src/cuda/cuda_lin_alg.cu \
+	src/cuda/cuda_nonbonded.cu src/cuda/cuda_integrate.cu src/cuda/cuda_post_evolve.cu \
+	src/cuda/cuda_init_md.cu src/cuda/cuda_lookup.cu \
+	src/cuda/cuda_helpers.h src/cuda/cuda_shuffle.h \
+	src/cuda/cuda_utils.h src/cuda/cuda_allocate.h src/cuda/cuda_environment.h \
+	src/cuda/cuda_system_props.h src/cuda/cuda_reduction.h src/cuda/cuda_box.h src/cuda/cuda_list.h \
+	src/cuda/cuda_copy.h src/cuda/cuda_reset_tools.h src/cuda/cuda_random.h src/cuda/cuda_vector.h \
+	src/cuda/cuda_neighbors.h src/cuda/cuda_bond_orders.h src/cuda/cuda_bonds.h \
+	src/cuda/cuda_multi_body.h src/cuda/cuda_valence_angles.h \
+	src/cuda/cuda_torsion_angles.h src/cuda/cuda_hydrogen_bonds.h src/cuda/cuda_forces.h \
+	src/cuda/cuda_charges.h src/cuda/cuda_lin_alg.h \
+	src/cuda/cuda_nonbonded.h src/cuda/cuda_integrate.h src/cuda/cuda_post_evolve.h \
+	src/cuda/cuda_init_md.h src/cuda/cuda_lookup.h
 if DEBUG
-lib_libpuremd_la_SOURCES += src/cuda/cuda_validation.cu
-lib_libpuremd_la_SOURCES += src/cuda/cuda_validation.h
+bin_pg_puremd_SOURCES += src/cuda/cuda_validation.cu \
+	src/cuda/cuda_validation.h
 endif
-
-# dummy source to cause C linking
-nodist_EXTRA_lib_libpuremd_la_SOURCES = src/dummy.c
+# dummy source to trigger C linking
+nodist_EXTRA_bin_pg_puremd_SOURCES = src/dummy.c
 endif
 
-lib_libpuremd_la_CFLAGS = $(AM_CFLAGS) $(MPI_CFLAGS) $(CFLAGS)
-lib_libpuremd_la_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS)
-lib_libpuremd_la_LIBADD = $(AM_LDADD) $(MPI_LIBS) $(LDADD) -lstdc++
-lib_libpuremd_la_LDFLAGS = -version-info 1:0:0
-if USE_CUDA
-lib_libpuremd_la_CFLAGS += $(CUDA_CFLAGS)
-lib_libpuremd_la_LIBADD += $(CUDA_LIBS)
-endif
-
-bin_PROGRAMS = bin/pg-puremd
-bin_pg_puremd_SOURCES = src/driver.c
 bin_pg_puremd_CFLAGS = $(AM_CFLAGS) $(MPI_CFLAGS) $(CFLAGS)
-bin_pg_puremd_CPPFLAGS = -I src $(AM_CPPFLAGS) $(CPPFLAGS)
-bin_pg_puremd_LDADD = lib/libpuremd.la $(AM_LDADD) $(MPI_LIBS) $(LDADD) -lstdc++
+bin_pg_puremd_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS)
+bin_pg_puremd_LDADD = $(AM_LDADD) $(MPI_LIBS) $(LDADD) -lstdc++
 if USE_CUDA
 bin_pg_puremd_CFLAGS += $(CUDA_CFLAGS)
 bin_pg_puremd_LDADD += $(CUDA_LIBS)
diff --git a/PG-PuReMD/aclocal.m4 b/PG-PuReMD/aclocal.m4
index 8206dbb6..e1a7aded 100644
--- a/PG-PuReMD/aclocal.m4
+++ b/PG-PuReMD/aclocal.m4
@@ -56,66 +56,6 @@ m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
 
-# Copyright (C) 2011-2017 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_AR([ACT-IF-FAIL])
-# -------------------------
-# Try to determine the archiver interface, and trigger the ar-lib wrapper
-# if it is needed.  If the detection of archiver interface fails, run
-# ACT-IF-FAIL (default is to abort configure with a proper error message).
-AC_DEFUN([AM_PROG_AR],
-[AC_BEFORE([$0], [LT_INIT])dnl
-AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl
-AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-AC_REQUIRE_AUX_FILE([ar-lib])dnl
-AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false])
-: ${AR=ar}
-
-AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface],
-  [AC_LANG_PUSH([C])
-   am_cv_ar_interface=ar
-   AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])],
-     [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD'
-      AC_TRY_EVAL([am_ar_try])
-      if test "$ac_status" -eq 0; then
-        am_cv_ar_interface=ar
-      else
-        am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD'
-        AC_TRY_EVAL([am_ar_try])
-        if test "$ac_status" -eq 0; then
-          am_cv_ar_interface=lib
-        else
-          am_cv_ar_interface=unknown
-        fi
-      fi
-      rm -f conftest.lib libconftest.a
-     ])
-   AC_LANG_POP([C])])
-
-case $am_cv_ar_interface in
-ar)
-  ;;
-lib)
-  # Microsoft lib, so override with the ar-lib wrapper script.
-  # FIXME: It is wrong to rewrite AR.
-  # But if we don't then we get into trouble of one sort or another.
-  # A longer-term fix would be to have automake use am__AR in this case,
-  # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something
-  # similar.
-  AR="$am_aux_dir/ar-lib $AR"
-  ;;
-unknown)
-  m4_default([$1],
-             [AC_MSG_ERROR([could not determine $AR interface])])
-  ;;
-esac
-AC_SUBST([AR])dnl
-])
-
 # AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
 
 # Copyright (C) 2001-2017 Free Software Foundation, Inc.
@@ -1213,8 +1153,3 @@ AC_SUBST([am__untar])
 m4_include([../m4/acx_mpi.m4])
 m4_include([../m4/ax_compiler_vendor.m4])
 m4_include([../m4/ax_cuda.m4])
-m4_include([../m4/libtool.m4])
-m4_include([../m4/ltoptions.m4])
-m4_include([../m4/ltsugar.m4])
-m4_include([../m4/ltversion.m4])
-m4_include([../m4/lt~obsolete.m4])
diff --git a/PG-PuReMD/configure.ac b/PG-PuReMD/configure.ac
index ff85bf94..650bd7c6 100644
--- a/PG-PuReMD/configure.ac
+++ b/PG-PuReMD/configure.ac
@@ -10,9 +10,9 @@ sav_CFLAGS="$CFLAGS"
 AM_INIT_AUTOMAKE([1.15 subdir-objects -Wall -Werror foreign])
 # Enable silent build rules by default.
 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])], [AC_SUBST([AM_DEFAULT_VERBOSITY],[1])])
-AM_PROG_AR
-LT_PREREQ([2.2])
-LT_INIT([dlopen])
+#AM_PROG_AR
+#LT_PREREQ([2.2])
+#LT_INIT([dlopen])
 
 AC_CONFIG_MACRO_DIR([../m4])
 
@@ -55,15 +55,15 @@ AC_CHECK_FUNCS([gettimeofday memset])
 
 # Check for compiler vendor
 AX_COMPILER_VENDOR
-if test "x$ax_cv_c_compiler_vendor" = "xgnu"; then
-	if test "x$BUILD_DEBUG" = "x"; then
-		CFLAGS="$CFLAGS -Wall -O3 -funroll-loops -fstrict-aliasing"
+if test "x${ax_cv_c_compiler_vendor}" = "xgnu"; then
+	if test "x${BUILD_DEBUG}" = "x"; then
+		CFLAGS="${CFLAGS} -Wall -O3 -funroll-loops -fstrict-aliasing"
 	else
-		CFLAGS="$CFLAGS -Wall -O0 -g"
+		CFLAGS="${CFLAGS} -Wall -O0 -g"
 	fi
 fi
-if test "x$ax_cv_c_compiler_vendor" = "xintel"; then
-	if test "x$BUILD_DEBUG" = "x"; then
+if test "x${ax_cv_c_compiler_vendor}" = "xintel"; then
+	if test "x${BUILD_DEBUG}" = "x"; then
 		CFLAGS="$CFLAGS -fast"
 	fi
 fi
@@ -75,10 +75,10 @@ AC_CHECK_PROG(MPIRUN, mpirun, mpirun)
 AC_SUBST(MPIRUN)
 
 # try to find if we are using OpenMPI / MPICH by looking inside mpi.h
-sav_CC="$CC"
-sav_CFLAGS="$CFLAGS"
-CC="$MPICC"
-CFLAGS="$CFLAGS"
+sav_CC="${CC}"
+sav_CFLAGS="${CFLAGS}"
+CC="${MPICC}"
+CFLAGS="${CFLAGS}"
 AC_CHECK_DECL([OPEN_MPI], [mpi_vendor="OpenMPI"],
 	     [], [#include "mpi.h"])
 # MPICH v2
@@ -87,45 +87,45 @@ AC_CHECK_DECL([MPICH2], [mpi_vendor="MPICH2"],
 # MPICH v3
 AC_CHECK_DECL([MPICH_VERSION], [mpi_vendor="MPICH3"],
 	     [], [#include "mpi.h"])
-CC="$sav_CC"
-CFLAGS="$sav_CFLAGS"
+CC="${sav_CC}"
+CFLAGS="${sav_CFLAGS}"
 
 # try to set MPI_CFLAGS and MPI_LIBS
 MPI_CFLAGS=
 MPI_LIBS=
-if test "$mpi_vendor" = "OpenMPI"
+if test "x${mpi_vendor}" = "xOpenMPI"
 then 
-	MPI_CFLAGS=`$MPICC --showme:compile`
-	MPI_LIBS=`$MPICC --showme:link`
+	MPI_CFLAGS=`${MPICC} --showme:compile`
+	MPI_LIBS=`${MPICC} --showme:link`
 	AC_MSG_NOTICE([OpenMPI found])
-	AC_MSG_NOTICE([MPI_CFLAGS=$MPI_CFLAGS])
-	AC_MSG_NOTICE([MPI_LIBS=$MPI_LIBS])
-elif test "$mpi_vendor" = "MPICH2" || test "$mpi_vendor" = "MPICH3"
+	AC_MSG_NOTICE([MPI_CFLAGS=${MPI_CFLAGS}])
+	AC_MSG_NOTICE([MPI_LIBS=${MPI_LIBS}])
+elif test "x${mpi_vendor}" = "xMPICH2" || test "x${mpi_vendor}" = "xMPICH3"
 then
 	# build MPI_CFLAGS
-	tmp=`$MPICC -compile-info | awk '{$1=""; print $0 }'`
+	tmp=`${MPICC} -compile-info | awk '{$1=""; print $0 }'`
 	MPI_CFLAGS=
 	for i in $tmp
 	do 
 		case $i in 
 			-[[DIUbi]]*)
-				MPI_CFLAGS="$MPI_CFLAGS $i"
+				MPI_CFLAGS="${MPI_CFLAGS} ${i}"
 				;;
 		esac
 	done
 	# build MPI_LIBS
-	tmp=`$MPICC -link-info | awk '{$1=""; print $0 }'`
+	tmp=`${MPICC} -link-info | awk '{$1=""; print $0 }'`
 	for i in $tmp
 	do 
 		case $i in 
 			[[\\/]]*.a | ?:[[\\/]]*.a | -[[lLRu]]* | -Wl* )
-				MPI_LIBS="$MPI_LIBS $i"
+				MPI_LIBS="${MPI_LIBS} ${i}"
 				;;
 		esac
 	done
 	AC_MSG_NOTICE([MPICH found])
-	AC_MSG_NOTICE([MPI_CFLAGS=$MPI_CFLAGS])
-	AC_MSG_NOTICE([MPI_LIBS=$MPI_LIBS])
+	AC_MSG_NOTICE([MPI_CFLAGS=${MPI_CFLAGS}])
+	AC_MSG_NOTICE([MPI_LIBS=${MPI_LIBS}])
 else
 	AC_MSG_WARN([Neither OpenMPI and MPICH have been recognized...])
 fi
@@ -141,12 +141,12 @@ AC_PROG_CXXCPP
 AX_COMPILER_VENDOR
 
 # Check for CUDA support.
-if test "x$BUILD_GPU" = "xyes"; then
+if test "x${BUILD_GPU}" = "xyes"; then
 	CONFIGURE_HEADLINE([ CUDA support ])
 	AX_CUDA
 
         NVCCFLAGS=
-	NVCCFLAGS+=" -ccbin=$CXX"
+	NVCCFLAGS+=" -ccbin=${CXX}"
 	if test "x${BUILD_DEBUG}" = "xtrue"
 	then
 		NVCCFLAGS+=" -g -G"
diff --git a/PG-PuReMD/src/puremd.c b/PG-PuReMD/src/puremd.c
index 9439ac96..029509af 100644
--- a/PG-PuReMD/src/puremd.c
+++ b/PG-PuReMD/src/puremd.c
@@ -216,14 +216,15 @@ void* setup( const char * const geo_file, const char * const ffield_file,
 
 #ifdef HAVE_CUDA
     /* setup the CUDA Device for this process */
-    Setup_Cuda_Environment( system->my_rank, control->nprocs, control->gpus_per_node );
+    Setup_Cuda_Environment( pmd_handle->system->my_rank,
+            pmd_handle->control->nprocs, pmd_handle->control->gpus_per_node );
 
 #if defined(DEBUG)
     print_device_mem_usage( );
 #endif
 
     /* init blocks sizes */
-    init_blocks( system );
+    init_blocks( pmd_handle->system );
 #endif
 
     return (void*) pmd_handle;
diff --git a/configure.ac b/configure.ac
index 3f792d1e..95a04436 100644
--- a/configure.ac
+++ b/configure.ac
@@ -30,7 +30,7 @@ AC_ARG_ENABLE([openmp],
 	      [pack_openmp_enabled=${enableval}], [pack_openmp_enabled=yes])
 AC_ARG_ENABLE([mpi-old],
 	      [AS_HELP_STRING([--enable-mpi-old],
-			      [enable MPI support @<:@default: no@:>@])],
+			      [enable MPI support (old) @<:@default: no@:>@])],
 	      [pack_mpi_old_enabled=${enableval}], [pack_mpi_old_enabled=no])
 AC_ARG_ENABLE([gpu],
 	      [AS_HELP_STRING([--enable-gpu],
@@ -38,7 +38,7 @@ AC_ARG_ENABLE([gpu],
 	      [pack_gpu_enabled=${enableval}], [pack_gpu_enabled=no])
 AC_ARG_ENABLE([mpi],
 	      [AS_HELP_STRING([--enable-mpi],
-			      [enable MPI but not CUDA support @<:@default: no@:>@])],
+			      [enable MPI support @<:@default: no@:>@])],
 	      [pack_mpi_enabled=${enableval}], [pack_mpi_enabled=no])
 AC_ARG_ENABLE([mpi-gpu],
 	      [AS_HELP_STRING([--enable-mpi-gpu],
@@ -80,7 +80,7 @@ AC_ARG_ENABLE([debug],
 			      [enable debug support @<:@default: no@:>@])],
 	      [DEBUG=${enableval}], [DEBUG=no]
 	      )
-if test "x$DEBUG" = "xyes"
+if test "x${DEBUG}" = "xyes"
 then
 #	#TODO: fix exporting to subdirs
 #	# See: http://stackoverflow.com/questions/34124337/changing-flags-in-configure-ac-vs-caching-with-subprojects
@@ -125,7 +125,7 @@ fi
 
 AC_ARG_WITH([superlu-mt],
 	    [AS_HELP_STRING([--with-superlu-mt],
-			    [enable usage of SuperLU MT for QEq preconditioner computation @<:@default: no@:>@])],
+			    [enable usage of SuperLU MT for preconditioning @<:@default: no@:>@])],
             [package_superlu_mt=${withval}], [package_superlu_mt=no])
 
 if test "x${package_superlu_mt}" != "xno"
-- 
GitLab