build/charmc: -use-new-std now tests and enables any compiler support for c11 / cpp11
authorRamprasad Venkataraman <ramv@illinois.edu>
Wed, 27 Jun 2012 21:42:34 +0000 (16:42 -0500)
committerRamprasad Venkataraman <ramv@illinois.edu>
Thu, 28 Jun 2012 15:59:48 +0000 (10:59 -0500)
charmc has learnt a new flag: -use-new-std. This has to be passed on the build
command line where its picked up by configure. configure then tests for
compiler support for the appropriate flags.

This should allow building charm with c11/cpp11 support enabled. charmc from
such a build will also respect the same flag while building applications.

src/scripts/charmc
src/scripts/configure
src/scripts/configure.in
src/scripts/conv-autoconfig.h.in
src/scripts/conv-config.sh

index ebe9933a01f684908a177848d940ccff7be07a81..2a328bf1e38cb0b6c23958e6540b0ea1f529a72a 100755 (executable)
@@ -699,6 +699,14 @@ do
                 WERROR="0"
                 ;;
 
+       "-use-new-std")
+        USE_NEW_STD="1"
+               ;;
+
+       "-no-use-new-std")
+               USE_NEW_STD="0"
+               ;;
+
        -LANG*)
                Warning "passing unrecognized option $arg to all compilers and linkers"
                OPTS="$OPTS $arg"
@@ -840,6 +848,21 @@ then
     OPTS="$OPTS $CMK_WARNINGS_ARE_ERRORS"
 fi
 
+# If the user has asked for the latest language standards (C11 or CPP11)
+if [ "$USE_NEW_STD" = "1" ]
+then
+    # and if configure confirmed that the underlying compiler knows abt C11, enable it
+    if [ "$CMK_COMPILER_KNOWS_C11" = "1" ]
+    then
+        OPTS_CC="$OPTS $CMK_ENABLE_C11"
+    fi
+    # and if configure confirmed that the underlying compiler knows abt CPP11, enable it
+    if [ "$CMK_COMPILER_KNOWS_CPP11" = "1" ]
+    then
+        OPTS_CXX="$OPTS $CMK_ENABLE_CPP11"
+    fi
+fi
+
 # Look up and add the dependencies for module $1
 findModuleDep() {
        M=$1
index d44d968af0b9bd051aaa43156c52168de8ae74c8..b23fbc261587cfecaf59fc07be9bb8142644db39 100755 (executable)
@@ -2286,6 +2286,62 @@ then
   fi
 fi
 
+# Figure out if the user has asked to enable the latest language standards
+USER_ASKED_FOR_NEW_STD=`echo "$BUILDOPTS" | grep "-use-new-std" | wc -l`
+
+# If the user has asked for the newer standards, check if the compilers know about them
+if test $USER_ASKED_FOR_NEW_STD -ge 1
+then
+
+#### check if c compiler supports c11 compilation flags ####
+cat > $tc <<EOT
+#include <stdio.h>
+
+int foo()
+{
+  return 0;
+}
+EOT
+test_cc "whether c compiler knows of the c11 standard" "ok" "no" "$CMK_ENABLE_C11"
+
+cat >>confdefs.h <<_ACEOF
+#define CMK_COMPILER_KNOWS_C11 $pass
+_ACEOF
+
+if test $pass -eq 1
+then
+        # Record results for charmc's future use
+        add_flag 'CMK_COMPILER_KNOWS_C11="1"' "c11"
+        # For the rest of configure, append this to compilation flags
+        OPTS_CC="$CMK_ENABLE_C11 $OPTS"
+fi
+
+#### check if C++ compiler supports cpp11 compilation flags ####
+cat > $t <<EOT
+#include <iostream>
+
+int foo()
+{
+  return 0;
+}
+EOT
+test_cxx "whether c++ compiler knows of the cpp11 standard" "ok" "no" "$CMK_ENABLE_CPP11"
+
+cat >>confdefs.h <<_ACEOF
+#define CMK_COMPILER_KNOWS_CPP11 $pass
+_ACEOF
+
+if test $pass -eq 1
+then
+        # Record results for charmc's future use
+        add_flag 'CMK_COMPILER_KNOWS_CPP11="1"' "cpp11"
+        # For the rest of configure, append this to compilation flags
+        OPTS_CXX="$CMK_ENABLE_CPP11 $OPTS"
+fi
+
+fi # endif USER_ASKED_FOR_NEW_STD
+
+
 # Perform the tests
 
 
@@ -2692,6 +2748,9 @@ cat >>confdefs.h <<_ACEOF
 _ACEOF
 
 
+
+####### Check support for features added by the new C11 and CPP11 standards ########
+
 #### check if std::unordered_map is defined #####
 cat > $t <<EOT
 #include <unordered_map>
@@ -2704,7 +2763,7 @@ int foo()
   return myhashtbl[1234];
 }
 EOT
-test_cxx "whether std::unordered_map is defined" "ok" "no" "-std=c++0x"
+test_cxx "whether std::unordered_map is defined" "ok" "no" ""
 
 cat >>confdefs.h <<_ACEOF
 #define CMK_HAS_STD_UNORDERED_MAP $pass
index 24080f48cb169d488db566cba9ea671f26ab43d9..bdd7ae365302854c4ee407927fad4e8428bb9122 100644 (file)
@@ -484,6 +484,54 @@ then
   fi
 fi
 
+# Figure out if the user has asked to enable the latest language standards
+USER_ASKED_FOR_NEW_STD=`echo "$BUILDOPTS" | grep "-use-new-std" | wc -l`
+
+# If the user has asked for the newer standards, check if the compilers know about them
+if test $USER_ASKED_FOR_NEW_STD -ge 1
+then
+
+#### check if c compiler supports c11 compilation flags ####
+cat > $tc <<EOT
+#include <stdio.h>
+
+int foo()
+{
+  return 0;
+}
+EOT
+test_cc "whether c compiler knows of the c11 standard" "ok" "no" "$CMK_ENABLE_C11"
+AC_DEFINE_UNQUOTED(CMK_COMPILER_KNOWS_C11, $pass, [whether c compiler knows of the c11 standard] )
+if test $pass -eq 1
+then
+        # Record results for charmc's future use
+        add_flag 'CMK_COMPILER_KNOWS_C11="1"' "c11"
+        # For the rest of configure, append this to compilation flags
+        OPTS_CC="$CMK_ENABLE_C11 $OPTS"
+fi
+
+#### check if C++ compiler supports cpp11 compilation flags ####
+cat > $t <<EOT
+#include <iostream>
+
+int foo()
+{
+  return 0;
+}
+EOT
+test_cxx "whether c++ compiler knows of the cpp11 standard" "ok" "no" "$CMK_ENABLE_CPP11"
+AC_DEFINE_UNQUOTED(CMK_COMPILER_KNOWS_CPP11, $pass, [whether c++ compiler knows of the cpp11 standard] )
+if test $pass -eq 1
+then
+        # Record results for charmc's future use
+        add_flag 'CMK_COMPILER_KNOWS_CPP11="1"' "cpp11"
+        # For the rest of configure, append this to compilation flags
+        OPTS_CXX="$CMK_ENABLE_CPP11 $OPTS"
+fi
+
+fi # endif USER_ASKED_FOR_NEW_STD
+
+
 # Perform the tests
 
 AC_ARG_WITH([refnum-type],
@@ -778,6 +826,9 @@ EOT
 test_cxx "whether std::inserter is defined" "ok" "no" ""
 AC_DEFINE_UNQUOTED(CMK_HAS_STD_INSERTER, $pass, [whether std::inserter works])
 
+
+####### Check support for features added by the new C11 and CPP11 standards ########
+
 #### check if std::unordered_map is defined #####
 cat > $t <<EOT
 #include <unordered_map>
@@ -790,7 +841,7 @@ int foo()
   return myhashtbl[[1234]];
 }
 EOT
-test_cxx "whether std::unordered_map is defined" "ok" "no" "-std=c++0x"
+test_cxx "whether std::unordered_map is defined" "ok" "no" ""
 AC_DEFINE_UNQUOTED(CMK_HAS_STD_UNORDERED_MAP, $pass, [whether std::unordered_map works])
 
 
index 661abf95483353bed57fb0491577bdc8210925f0..565e4440e99f93371dd1d921d80751b83e4ee91b 100644 (file)
 /* whether std::inserter works */
 #undef CMK_HAS_STD_INSERTER
 
+/* whether c compiler knows of the c11 standard */
+#undef CMK_COMPILER_KNOWS_C11
+
+/* whether c++ compiler knows of the cpp11 standard */
+#undef CMK_COMPILER_KNOWS_CPP11
+
 /* whether std::unordered_map works */
 #undef CMK_HAS_STD_UNORDERED_MAP
 
index 346c629a8eff67d53f61a38c24326e7442a38b20..c6ea1ce143b14a5ade173641b48b7310a87dceee 100644 (file)
@@ -36,6 +36,9 @@ CMK_LD_SHARED="-shared"
 [ -z "$CMK_F90_OPTIMIZE" ] && CMK_F90_OPTIMIZE="-O"
 [ -z "$CMK_F90_DEBUG" ] && CMK_F90_DEBUG="-O"
 
+[ -z "$CMK_ENABLE_C11" ] && CMK_ENABLE_C11="-std=c1x"
+[ -z "$CMK_ENABLE_CPP11" ] && CMK_ENABLE_CPP11="-std=c++0x"
+
 [ -z "$CMK_CC" ] && CMK_CC='cc '
 [ -z "$CMK_CXX" ] && CMK_CXX='c++ '
 [ -z "$CMK_SUF" ] && CMK_SUF='o'