From 982f98fdf8e39852f58c81d923c787eb5ceedb24 Mon Sep 17 00:00:00 2001
From: Claus-Justus Heine <Claus-Justus.Heine@IANS.Uni-Stuttgart.DE>
Date: Thu, 22 May 2008 01:37:48 +0000
Subject: [PATCH] Optionally build also profiling enabled libraries.

---
 Makefile.am.template              |  9 +++--
 configure.ac                      | 55 ++++++++++++++++++++++++++++---
 generate-alberta-automakefiles.sh | 42 +++++++++++++++++++----
 m4/alberta-check.m4               | 16 +++++++--
 m4/alberta-dims.m4                |  3 +-
 m4/grapeiface.m4                  | 43 ++++++++++++++++++++++++
 6 files changed, 151 insertions(+), 17 deletions(-)

diff --git a/Makefile.am.template b/Makefile.am.template
index d77a9eb..743f040 100644
--- a/Makefile.am.template
+++ b/Makefile.am.template
@@ -20,11 +20,14 @@ noinst_LTLIBRARIES += $(assemble%LIBCODE%_libs)
 
 AM_CFLAGS   = $(ALBERTA_%EFLAGS%_CFLAGS)
 AM_CXXFLAGS = $(ALBERTA_%EFLAGS%_CXXFLAGS)
+AM_LDFLAGS  = ${AM_CFLAGS} 
 
 nodist_libalberta%LIBCODE%_la_SOURCES = $(sources)
 libalberta%LIBCODE%_la_LIBADD = $(assemble%LIBCODE%_libs)
 libalberta%LIBCODE%_la_CPPFLAGS = \
- $(CPPFLAGS) -DDIM_OF_WORLD=%DIM_OF_WORLD% -DALBERTA_DEBUG=%ALBERTA_DEBUG%
+ $(CPPFLAGS) -DDIM_OF_WORLD=%DIM_OF_WORLD% \
+ -DALBERTA_DEBUG=%ALBERTA_DEBUG% \
+ -DALBERTA_PROFILE=%ALBERTA_PROFILE%
 libalberta%LIBCODE%_la_LDFLAGS = -version-info 4:0:0
 
 # Various flavours of block-matrix assembly
@@ -76,7 +79,9 @@ lib_LTLIBRARIES += libalberta_gfx%LIBCODE%.la
 
 nodist_libalberta_gfx%LIBCODE%_la_SOURCES = $(gfxsources)
 libalberta_gfx%LIBCODE%_la_CPPFLAGS = \
- $(CPPFLAGS) -DDIM_OF_WORLD=%DIM_OF_WORLD% -DALBERTA_DEBUG=%ALBERTA_DEBUG%
+ $(CPPFLAGS) -DDIM_OF_WORLD=%DIM_OF_WORLD% \
+ -DALBERTA_DEBUG=%ALBERTA_DEBUG% \
+ -DALBERTA_PROFILE=%ALBERTA_PROFILE%
 #libalberta_gfx%LIBCODE%_la_LIBADD = @GLTOOLS_ALL_LIBS@ @OPENDX_ALL_LIBS@ @OPENGL_ALL_LIBS@
 libalberta_gfx%LIBCODE%_la_LDFLAGS = -version-info 4:0:0
 
diff --git a/configure.ac b/configure.ac
index 1099603..c359127 100644
--- a/configure.ac
+++ b/configure.ac
@@ -55,7 +55,8 @@ AC_CONFIG_FILES([Makefile gnu-compat/Makefile
 		 alberta/src/Common/Makefile
 		 alberta/src/Common/Makefile.alberta
 		 alberta/src/alberta_Nd/Makefile
-		 alberta/src/alberta_Nd_debug/Makefile])
+		 alberta/src/alberta_Nd_debug/Makefile
+		 alberta/src/alberta_Nd_profile/Makefile])
 
 AC_CONFIG_COMMANDS([demo],
 [if ! test "$srcdir" = \. ; then
@@ -247,13 +248,22 @@ AC_SUBST([DRANDN_F77_FUNC])
 #
 ALBERTA_ENABLE_FLAG([debug],
   [disable building of ALBERTA libraries with debugging information.],
-  1,
+  [enabled],
   BUILD_DEBUG_LIBS)
 
+#
+# Profiling. Should come first because if not set we can forget about
+# ALBERTA_PROFILE_CFLAGS
+#
+ALBERTA_ENABLE_FLAG([profiling],
+  [disable building of ALBERTA libraries with profiling information.],
+  [disabled],
+  BUILD_PROFILE_LIBS)
+
 ################################################################################
 #
-# Set useful default flags for debugging and optimization, but allow
-# for user override.
+# Set useful default flags for debugging, profiling and optimization,
+# but allow for user override.
 #
 
 if test "${BUILD_DEBUG_LIBS}" = "1"; then
@@ -350,6 +360,43 @@ if ! test "${ALBERTA_FFLAGS+set}" = set; then
 fi
 AC_ARG_VAR([ALBERTA_FFLAGS], [Fortran compiler-flags])
 
+if test "${BUILD_PROFILE_LIBS}" = "1"; then
+#
+# ****************************************************************************
+#
+# set default profiling flags, but allow for user-override
+#
+    if ! test "${ALBERTA_PROFILE_CFLAGS+set}" = set; then
+	if test "${alberta_save_CFLAGS+set}" = set; then
+	    ALBERTA_PROFILE_CFLAGS="${alberta_save_CFLAGS}"
+	else
+	    if test "$GCC" = yes; then
+		ALBERTA_PROFILE_CFLAGS="-Wall -pedantic -std=c99 -O3 -pg"
+	    else # use autoconf default
+		ALBERTA_PROFILE_CFLAGS="${CFLAGS}"
+	    fi
+	fi
+    fi
+    
+    AC_ARG_VAR([ALBERTA_PROFILE_CFLAGS],
+	[C compiler-flags used to create the profiling libraries])
+    ALBERTA_ISO_C99_CHECK([${ALBERTA_PROFILE_CFLAGS}])
+    
+    if ! test "${ALBERTA_PROFILE_CXXFLAGS+set}" = set; then
+	if test "${alberta_save_CXXFLAGS+set}" = set; then
+	    ALBERTA_PROFILE_CXXFLAGS="${alberta_save_CXXFLAGS}"
+	else
+	    if test "$GCC" = yes; then
+		ALBERTA_PROFILE_CXXFLAGS="-Wall -fno-rtti -fno-exceptions -O3 -pg"
+	    else # use autoconf defaults
+		ALBERTA_PROFILE_CXXFLAGS="${CXXFLAGS}"
+	    fi
+	fi
+    fi
+    AC_ARG_VAR([ALBERTA_PROFILE_CXXFLAGS],
+	[C++ compiler-flags used to create the profiling libraries])
+fi
+
 #
 # Now set the XXFLAGS to the set of flags we will likely use for the
 # actual build. Later we will zap them.
diff --git a/generate-alberta-automakefiles.sh b/generate-alberta-automakefiles.sh
index 8eb71c0..18a3d56 100755
--- a/generate-alberta-automakefiles.sh
+++ b/generate-alberta-automakefiles.sh
@@ -5,14 +5,25 @@
 # same.
 #
 
-for ALBERTA_DEBUG in 0 1; do
+for debug in 0 1 2; do
     for DIM_OF_WORLD in 1 2 3; do
-	if test $ALBERTA_DEBUG -eq 0; then
+	if test $debug -eq 0; then
 	    LIBCODE=_${DIM_OF_WORLD}d
 	    EFLAGS=OPTIMIZE 
-	else
+	    ALBERTA_DEBUG=0
+	    ALBERTA_PROFILE=0
+	elif test $debug -eq 1; then
 	    LIBCODE=_${DIM_OF_WORLD}d_debug
 	    EFLAGS=DEBUG 
+	    ALBERTA_DEBUG=1
+	    ALBERTA_PROFILE=0
+	elif test $debug -eq 2; then
+	    LIBCODE=_${DIM_OF_WORLD}d_profile
+	    EFLAGS=PROFILE
+	    ALBERTA_DEBUG=0
+	    ALBERTA_PROFILE=1
+	else
+	    exit 1
 	fi
 	DIRECTORY="alberta/src/alberta${LIBCODE}"
         mkdir -p ${DIRECTORY}
@@ -20,30 +31,47 @@ for ALBERTA_DEBUG in 0 1; do
 	    -e "s/%DIM_OF_WORLD%/$DIM_OF_WORLD/g" \
 	    -e "s/%DEBUG%/$DEBUG/g" \
 	    -e "s/%ALBERTA_DEBUG%/$ALBERTA_DEBUG/g" \
+	    -e "s/%ALBERTA_PROFILE%/$ALBERTA_PROFILE/g" \
 	    -e "s/%LIBCODE%/$LIBCODE/g" \
 	    -e "s/%EFLAGS%/$EFLAGS/g" \
 	    -e "s/%NO_MULTI_DIM%//g" \
 	    -e "s/%MULTI_DIM%/#/g" \
 	    Makefile.am.template > ${DIRECTORY}/Makefile.am
     done
-    if test $ALBERTA_DEBUG -eq 0; then
+    if test $debug -eq 0; then
 	DIRECTORY="alberta/src/alberta_Nd"
-    else
+    elif test $debug -eq 1; then
 	DIRECTORY="alberta/src/alberta_Nd_debug"
+    elif test $debug -eq 2; then
+	DIRECTORY="alberta/src/alberta_Nd_profile"
+    else
+	exit 1
     fi
     mkdir -p ${DIRECTORY}
     for DIM_OF_WORLD in 4 5 6 7 8 9; do
-	if test $ALBERTA_DEBUG -eq 0; then
+	if test $debug -eq 0; then
 	    LIBCODE=_${DIM_OF_WORLD}d
 	    EFLAGS=OPTIMIZE 
-	else
+	    ALBERTA_DEBUG=0
+	    ALBERTA_PROFILE=0
+	elif test $debug -eq 1; then
 	    LIBCODE=_${DIM_OF_WORLD}d_debug
 	    EFLAGS=DEBUG 
+	    ALBERTA_DEBUG=1
+	    ALBERTA_PROFILE=0
+	elif test $debug -eq 2; then
+	    LIBCODE=_${DIM_OF_WORLD}d_profile
+	    EFLAGS=DEBUG 
+	    ALBERTA_DEBUG=0
+	    ALBERTA_PROFILE=1
+	else
+	    exit 1
 	fi
 	sed \
 	    -e "s/%DIM_OF_WORLD%/$DIM_OF_WORLD/g" \
 	    -e "s/%DEBUG%/$DEBUG/g" \
 	    -e "s/%ALBERTA_DEBUG%/$ALBERTA_DEBUG/g" \
+	    -e "s/%ALBERTA_PROFILE%/$ALBERTA_PROFILE/g" \
 	    -e "s/%LIBCODE%/$LIBCODE/g" \
 	    -e "s/%EFLAGS%/$EFLAGS/g" \
 	    -e "s/%NO_MULTI_DIM%/#/g" \
diff --git a/m4/alberta-check.m4 b/m4/alberta-check.m4
index 51877cd..183f91d 100644
--- a/m4/alberta-check.m4
+++ b/m4/alberta-check.m4
@@ -25,6 +25,9 @@ AC_DEFUN([ALBERTA_CHECK_NEWLIBS],
 if test "${ALBERTA_DEBUG}" = "1"; then
 	ALBERTA_LIB_$1=alberta_$1d_debug
 	ALBERTA_LIB_$1_C=ac_cv_lib_ALBERTA$1_DEBUG
+elif test "${ALBERTA_PROFILE}" = "1"; then
+	ALBERTA_LIB_$1=alberta_$1d_profile
+	ALBERTA_LIB_$1_C=ac_cv_lib_ALBERTA$1_PROFILE
 else
 	ALBERTA_LIB_$1=alberta_$1d
 	ALBERTA_LIB_$1_C=ac_cv_lib_ALBERTA$1
@@ -79,10 +82,17 @@ dnl
 AC_DEFUN([ALBERTA_OPTIONS],
 [
 AC_ARG_ENABLE(debug,
-[  --enable-debug          use debug-enabled ALBERTA libraries (default: off)],
-[ALBERTA_DEBUG=1],
-[ALBERTA_DEBUG=0])
+  AC_HELP_STRING([--enable-debug],
+    [Use debug-enabled ALBERTA libraries (default: off)]),
+  [ALBERTA_DEBUG=1],
+  [ALBERTA_DEBUG=0])
 AC_SUBST([ALBERTA_DEBUG])
+AC_ARG_ENABLE(profiling,
+  AC_HELP_STRING([--enable-profiling],
+    [Use profiling-enabled ALBERTA libraries (default: off)]),
+  [ALBERTA_PROFILE=1],
+  [ALBERTA_PROFILE=0])
+AC_SUBST([ALBERTA_PROFILE])
 ])
 
 dnl
diff --git a/m4/alberta-dims.m4 b/m4/alberta-dims.m4
index 00f5651..7ad273c 100644
--- a/m4/alberta-dims.m4
+++ b/m4/alberta-dims.m4
@@ -23,7 +23,8 @@ m4_if(DEFAULT,1,
 		0, BUILD_ALBERTA_$1)])
 m4_if(m4_eval(($1) < 4),1,
 	[AC_CONFIG_FILES([alberta/src/alberta_$1d/Makefile])
-	 AC_CONFIG_FILES([alberta/src/alberta_$1d_debug/Makefile])])
+	 AC_CONFIG_FILES([alberta/src/alberta_$1d_debug/Makefile])
+	 AC_CONFIG_FILES([alberta/src/alberta_$1d_profile/Makefile])])
 ])
 
 #
diff --git a/m4/grapeiface.m4 b/m4/grapeiface.m4
index ce3720b..dc5d94c 100644
--- a/m4/grapeiface.m4
+++ b/m4/grapeiface.m4
@@ -4,11 +4,16 @@ dnl Some defines to enable building of alberta_movi. This is more
 dnl complicated than necessary so that it is easier to build a
 dnl stand-alone version of albert_movi.
 dnl
+
 ALBERTA_CHECK_PACKAGE([grape],[gr],[grape],[],[${OPENGL_ALL_LIBS}],
                       [grape.h],[],[],[optional])
 ALBERTA_LIB_PATHS='$prefix/lib'
 ALBERTA_ALL_INCLUDES='-I$(top_srcdir)/alberta/src/Common/ -I$(top_srcdir)/alberta_util/src/ -I$(top_builddir)/alberta_util/src/'
 
+#
+# ordinary libraries
+#
+
 ALBERTA_LIBS_1='$(top_builddir)/alberta/src/alberta_1d/libalberta_1d.la $(top_builddir)/alberta_util/src/libalberta_util.la $(BLAS_ALL_LIBS)'
 
 ALBERTA_LIBS_2='$(top_builddir)/alberta/src/alberta_2d/libalberta_2d.la $(top_builddir)/alberta_util/src/libalberta_util.la $(BLAS_ALL_LIBS)'
@@ -16,22 +21,54 @@ ALBERTA_LIBS_2='$(top_builddir)/alberta/src/alberta_2d/libalberta_2d.la $(top_bu
 ALBERTA_LIBS_3='$(top_builddir)/alberta/src/alberta_3d/libalberta_3d.la $(top_builddir)/alberta_util/src/libalberta_util.la $(BLAS_ALL_LIBS)'
 ALBERTA_DEBUG=
 
+#
+# debug libraries
+#
+
 ALBERTA_DEBUG_LIBS_1='$(top_builddir)/alberta/src/alberta_1d_debug/libalberta_1d_debug.la $(top_builddir)/alberta_util/src/libalberta_util_debug.la $(BLAS_ALL_LIBS)'
 
 ALBERTA_DEBUG_LIBS_2='$(top_builddir)/alberta/src/alberta_2d_debug/libalberta_2d_debug.la $(top_builddir)/alberta_util/src/libalberta_util_debug.la $(BLAS_ALL_LIBS)'
 
 ALBERTA_DEBUG_LIBS_3='$(top_builddir)/alberta/src/alberta_3d_debug/libalberta_3d_debug.la $(top_builddir)/alberta_util/src/libalberta_util_debug.la $(BLAS_ALL_LIBS)'
 
+#
+# profiling libraries
+#
+
+ALBERTA_PROFILE_LIBS_1='$(top_builddir)/alberta/src/alberta_1d_profile/libalberta_1d_profile.la $(top_builddir)/alberta_util/src/libalberta_util_profile.la $(BLAS_ALL_LIBS)'
+
+ALBERTA_PROFILE_LIBS_2='$(top_builddir)/alberta/src/alberta_2d_profile/libalberta_2d_profile.la $(top_builddir)/alberta_util/src/libalberta_util_profile.la $(BLAS_ALL_LIBS)'
+
+ALBERTA_PROFILE_LIBS_3='$(top_builddir)/alberta/src/alberta_3d_profile/libalberta_3d_profile.la $(top_builddir)/alberta_util/src/libalberta_util_profile.la $(BLAS_ALL_LIBS)'
+
+#
+# ordinary gfx libraries
+#
+
 ALBERTA_GFX_LIBS_1='$(top_builddir)/alberta/src/alberta_1d/libalberta_gfx_1d.la'
 ALBERTA_GFX_LIBS_2='$(top_builddir)/alberta/src/alberta_2d/libalberta_gfx_2d.la'
 ALBERTA_GFX_LIBS_3='$(top_builddir)/alberta/src/alberta_3d/libalberta_gfx_3d.la'
 
+#
+# debug gfx libraries
+#
+
 ALBERTA_DEBUG_GFX_LIBS_1='$(top_builddir)/alberta/src/alberta_1d_debug/libalberta_gfx_1d_debug.la'
 ALBERTA_DEBUG_GFX_LIBS_2='$(top_builddir)/alberta/src/alberta_2d_debug/libalberta_gfx_2d_debug.la'
 ALBERTA_DEBUG_GFX_LIBS_3='$(top_builddir)/alberta/src/alberta_3d_debug/libalberta_gfx_3d_debug.la'
 
+#
+# profiling gfx libraries
+#
+
+ALBERTA_PROFILE_GFX_LIBS_1='$(top_builddir)/alberta/src/alberta_1d_debug/libalberta_gfx_1d_debug.la'
+ALBERTA_PROFILE_GFX_LIBS_2='$(top_builddir)/alberta/src/alberta_2d_debug/libalberta_gfx_2d_debug.la'
+ALBERTA_PROFILE_GFX_LIBS_3='$(top_builddir)/alberta/src/alberta_3d_debug/libalberta_gfx_3d_debug.la'
+
 ALBERTA_DEBUG=
 
+ALBERTA_PROFILE=
+
 AC_SUBST(ALBERTA_DEBUG)
 AC_SUBST(ALBERTA_LIB_PATHS)
 AC_SUBST(ALBERTA_ALL_INCLUDES)
@@ -41,6 +78,9 @@ AC_SUBST(ALBERTA_LIBS_3)
 AC_SUBST(ALBERTA_DEBUG_LIBS_1)
 AC_SUBST(ALBERTA_DEBUG_LIBS_2)
 AC_SUBST(ALBERTA_DEBUG_LIBS_3)
+AC_SUBST(ALBERTA_PROFILE_LIBS_1)
+AC_SUBST(ALBERTA_PROFILE_LIBS_2)
+AC_SUBST(ALBERTA_PROFILE_LIBS_3)
 
 AC_SUBST(ALBERTA_GFX_LIBS_1)
 AC_SUBST(ALBERTA_GFX_LIBS_2)
@@ -48,6 +88,9 @@ AC_SUBST(ALBERTA_GFX_LIBS_3)
 AC_SUBST(ALBERTA_DEBUG_GFX_LIBS_1)
 AC_SUBST(ALBERTA_DEBUG_GFX_LIBS_2)
 AC_SUBST(ALBERTA_DEBUG_GFX_LIBS_3)
+AC_SUBST(ALBERTA_PROFILE_GFX_LIBS_1)
+AC_SUBST(ALBERTA_PROFILE_GFX_LIBS_2)
+AC_SUBST(ALBERTA_PROFILE_GFX_LIBS_3)
 
 dnl
 dnl end of ALBERTA_GRAPE_STUFF
-- 
GitLab