From ce4c19c717f6ea3a021746e3b934ae30022a3ab3 Mon Sep 17 00:00:00 2001
From: mark <mark@opencfd>
Date: Tue, 4 Apr 2017 18:23:31 +0200
Subject: [PATCH] COMP: adjust to use non-gcc compilers for scotch and ptscotch

---
 Allwmake                                      | 21 ++++++------
 etc/tools/ThirdPartyFunctions                 | 25 ++++++++++++++
 ...Makefile.inc.i686_pc_linux2.shlib-OpenFOAM | 33 ++++++++++++-------
 3 files changed, 57 insertions(+), 22 deletions(-)

diff --git a/Allwmake b/Allwmake
index 8ca2948..06fc4ff 100755
--- a/Allwmake
+++ b/Allwmake
@@ -38,7 +38,7 @@ cd ${0%/*} && wmakeCheckPwd "$WM_THIRD_PARTY_DIR" 2>/dev/null || {
     exit 1
 }
 [ -n "$FOAM_EXT_LIBBIN" ] || {
-    echo "Error (${0##*/}) : \$FOAM_EXT_LIBBIN not set"
+    echo "Error (${0##*/}) : \$FOAM_EXT_LIBBIN not set for ThirdParty"
     echo "    Check your OpenFOAM environment and installation"
     exit 1
 }
@@ -51,6 +51,7 @@ cd ${0%/*} && wmakeCheckPwd "$WM_THIRD_PARTY_DIR" 2>/dev/null || {
 [ -n "$WM_CXXFLAGS" ]   &&  export CXXFLAGS="$WM_CXXFLAGS"
 [ -n "$WM_LDFLAGS" ]    &&  export LDFLAGS="$WM_LDFLAGS"
 
+useGccFlag $@           # Scan arguments for a '-gcc' option
 
 warnBuildIssues()
 {
@@ -131,9 +132,6 @@ then
     mkdir -p $incDIR    2>/dev/null
     mkdir -p $libDIR    2>/dev/null
 
-    # 'CC' already set (eg, from WM_CC) - set scotch-specific 'CCS' too
-    [ -n "$CC" ] && export CCS="$CC"
-
     if [ -f $scotchMakefile ]
     then
         rm -f Makefile.inc
@@ -144,8 +142,10 @@ then
         exit 1
     }
 
-    make realclean 2>/dev/null                  # Extra safety
+    export CCS="${CC:-$WM_CC}"  # CCS (serial compiler)   default=$(CC)
+    export CCP=$(whichMpicc)    # CCP (parallel compiler) default=mpicc
 
+    make realclean 2>/dev/null  # Extra safety
     make -j $WM_NCOMPPROCS scotch \
      && make \
         prefix=$prefixDIR \
@@ -153,7 +153,7 @@ then
         libdir=$libDIR \
         install
 
-    make realclean 2>/dev/null || true          # Failed cleanup is uncritical
+    make realclean 2>/dev/null || true      # Failed cleanup is uncritical
 ) || warnBuildIssues SCOTCH
 else
     warnNotFound SCOTCH
@@ -196,9 +196,6 @@ then
         mkdir -p $incDIR    2>/dev/null
         mkdir -p $libDIR    2>/dev/null
 
-        # 'CC' already set (eg, from WM_CC) - set scotch-specific 'CCS' too
-        [ -n "$CC" ] && export CCS="$CC"
-
         if [ -f $scotchMakefile ]
         then
             rm -f Makefile.inc
@@ -209,8 +206,10 @@ then
             exit 1
         }
 
-        make realclean 2>/dev/null              # Extra safety
+        export CCS="${CC:-$WM_CC}"  # CCS (serial compiler)   default=$(CC)
+        export CCP=$(whichMpicc)    # CCP (parallel compiler) default=mpicc
 
+        make realclean 2>/dev/null  # Extra safety
         make -j $WM_NCOMPPROCS ptscotch \
          && make \
             prefix=$prefixDIR \
@@ -218,7 +217,7 @@ then
             libdir=$libDIR \
             install
 
-        make realclean 2>/dev/null || true      # Failed cleanup is uncritical
+        make realclean 2>/dev/null || true  # Failed cleanup is uncritical
     ) || warnBuildIssues PTSCOTCH
     fi
 
diff --git a/etc/tools/ThirdPartyFunctions b/etc/tools/ThirdPartyFunctions
index 5c1258c..6c5c6a7 100644
--- a/etc/tools/ThirdPartyFunctions
+++ b/etc/tools/ThirdPartyFunctions
@@ -45,6 +45,31 @@ useGcc()
     export CXX=g++
 }
 
+# Scan arguments for a '-gcc' option, forcing gcc/g++ when found
+useGccFlag()
+{
+    for i
+    do
+        if [ "$i" = "-gcc" ]
+        then
+            useGcc
+            break
+        fi
+    done
+}
+
+# Return mpiicc (for INTELMPI) or mpicc etc.
+whichMpicc()
+{
+    local mpicc
+    case "$WM_MPLIB" in
+    (INTELMPI)
+        mpicc=$(command -v mpiicc)      # Try using intel 'mpiicc'
+        ;;
+    esac
+    echo "${mpicc:-mpicc}"              # mpiicc | mpicc
+}
+
 #------------------------------------------------------------------------------
 # Some functions as per OpenFOAM etc/config.sh/functions
 
diff --git a/etc/wmakeFiles/scotch/Makefile.inc.i686_pc_linux2.shlib-OpenFOAM b/etc/wmakeFiles/scotch/Makefile.inc.i686_pc_linux2.shlib-OpenFOAM
index 8c83e09..c6f1bce 100644
--- a/etc/wmakeFiles/scotch/Makefile.inc.i686_pc_linux2.shlib-OpenFOAM
+++ b/etc/wmakeFiles/scotch/Makefile.inc.i686_pc_linux2.shlib-OpenFOAM
@@ -1,21 +1,27 @@
-# openfoam notes:
+#-------------------------------*- makefile -*---------------------------------
+# OpenFOAM notes:
+#
 # WM_CFLAGS, WM_LDFLAGS contain "-m32 -fPIC" etc
 # WM_LABEL_SIZE == 64 for 'long' instead of 'int' for OpenFOAM labels
-
-# compiled without pthread
+#
+# - compiled without pthread
+#
+# Normally set CCS, CCP by caller
 
 EXE         =
 LIB         = .so
 OBJ         = .o
 
-MAKE        = make
-AR          = gcc
+AR          = $(CC)
 ARFLAGS     = $(WM_CFLAGS) -shared -o
-CAT         = cat
-CCS         = gcc
-CCP         = mpicc
-CCD         = mpicc
-CFLAGS      = $(WM_CFLAGS) -O3 -DCOMMON_FILE_COMPRESS_GZ -DCOMMON_RANDOM_FIXED_SEED -DSCOTCH_RENAME -Drestrict=__restrict
+CCS        ?= $(CC)
+CCP        ?= mpicc
+CCD         = $(CCP)
+CFLAGS      = $(WM_CFLAGS) -O3 \
+    -DCOMMON_FILE_COMPRESS_GZ \
+    -DCOMMON_RANDOM_FIXED_SEED \
+    -DSCOTCH_RENAME \
+    -Drestrict=__restrict
 
 # 32-bit vs. 64-bit labels
 ifeq ($(WM_LABEL_SIZE),64)
@@ -24,10 +30,15 @@ endif
 
 CLIBFLAGS   = -shared
 LDFLAGS     = -Xlinker --no-as-needed $(WM_LDFLAGS) -lz -lm -lrt
+
+MAKE        = make
 CP          = cp
-LEX         = flex -Pscotchyy -olex.yy.c
+CAT         = cat
 LN          = ln
 MKDIR       = mkdir
 MV          = mv
 RANLIB      = echo
+LEX         = flex -Pscotchyy -olex.yy.c
 YACC        = bison -pscotchyy -y -b y
+
+#------------------------------------------------------------------------------
-- 
GitLab