test/make/toolchain.sh

changeset 8
82cd9f1d94cb
parent 7
686991ae6e2f
child 9
ebdecbbb2f79
--- a/test/make/toolchain.sh	Sat Aug 03 13:46:43 2019 +0200
+++ b/test/make/toolchain.sh	Sat Aug 03 17:45:03 2019 +0200
@@ -3,12 +3,13 @@
 # toolchain detection
 #
 
-COMPILERS="cc gcc clang suncc"
+C_COMPILERS="cc gcc clang suncc"
+CPP_COMPILERS="CC g++ clang++ sunCC"
 unset CC_ARG_CHECKED
 unset TOOLCHAIN_DETECTION_ERROR
 unset TOOLCHAIN_NAME
 
-check_compiler()
+check_c_compiler()
 {
     cat > $TEMP_DIR/test.c << __EOF__
 /* test file */
@@ -27,7 +28,34 @@
 }
 __EOF__
     rm -f $TEMP_DIR/checkcc
-    $1 -o $TEMP_DIR/checkcc $CFLAGS $LDFLAGS $TEMP_DIR/test.c
+    $1 -o $TEMP_DIR/checkcc $CFLAGS $LDFLAGS $TEMP_DIR/test.c 2> /dev/null
+    
+    if [ $? -ne 0 ]; then
+        return 1
+    fi
+    return 0
+}
+
+check_cpp_compiler()
+{
+    cat > $TEMP_DIR/test.cpp << __EOF__
+/* test file */
+#include <iostream>
+int main(int argc, char **argv) {
+#if defined(__GNUC__)
+    std::cout << "gcc" << std::endl;
+#elif defined(__clang__)
+    std::cout << "clang" << std::endl;
+#elif defined(__sun)
+	std::cout << "suncc" << std::endl;
+#else
+    std::cout << "unknown" << std::endl;
+#endif
+    return 0;
+}
+__EOF__
+    rm -f $TEMP_DIR/checkcc
+    $1 -o $TEMP_DIR/checkcc $CXXFLAGS $LDFLAGS $TEMP_DIR/test.cpp 2> /dev/null
     
     if [ $? -ne 0 ]; then
         return 1
@@ -37,22 +65,90 @@
 
 printf "detect toolchain... "
 
-for COMP in $COMPILERS
+for COMP in $C_COMPILERS
 do
-    check_compiler $COMP
+    check_c_compiler $COMP
     if [ $? -ne 0 ]; then
-        if [ $COMP = $CC ]; then
-            echo "$CC is not a working C Compiler"
-            TOOLCHAIN_DETECTION_ERROR="error"
-            break
-        fi
+	    if [[ ! -z $CC ]]; then
+        	if [ $COMP = $CC ]; then
+            	echo "$CC is not a working C Compiler"
+            	TOOLCHAIN_DETECTION_ERROR="error"
+            	break
+        	fi
+		fi
     else
         TOOLCHAIN_NAME=`$TEMP_DIR/checkcc`
+		if [ $COMP = "cc" ]; then
+		   # we have found a working compiler, but in case
+		   # the compiler is gcc or clang, we try to use
+		   # these commands and not 'cc'
+		   TOOLCHAIN_NAME=`$TEMP_DIR/checkcc`
+		   if [ $TOOLCHAIN_NAME = "gcc" ]; then
+		       check_c_compiler "gcc"
+			   if [ $? -eq 0 ]; then
+			       COMP=gcc
+			   fi
+		   fi
+		   if [ $TOOLCHAIN_NAME = "clang" ]; then
+		       check_c_compiler "clang"
+			   if [ $? -eq 0 ]; then
+			       COMP=clang
+			   fi
+		   fi
+		fi
+		
+		TOOLCHAIN_NAME=`$TEMP_DIR/checkcc`
         TOOLCHAIN_CC=$COMP
-        echo $TOOLCHAIN_NAME
+        echo $TOOLCHAIN_NAME 
         break
     fi
 done
+if [ -z $TOOLCHAIN_CC ]; then
+    echo "not found"
+fi
+
+printf "detect C++ compiler... "
+
+for COMP in $CPP_COMPILERS
+do
+    check_cpp_compiler $COMP
+    if [ $? -ne 0 ]; then
+		if [[ ! -z $CXX ]]; then
+        	if [ $COMP = $CXX ]; then
+                echo "$CC is not a working C++ Compiler"
+                TOOLCHAIN_DETECTION_ERROR="error"
+                break
+            fi
+		fi
+    else
+        if [ $COMP = "CC" ]; then
+		   # we have found a working compiler, but in case
+		   # the compiler is gcc or clang, we try to use
+		   # these commands and not 'cc'
+		   TOOLCHAIN_NAME=`$TEMP_DIR/checkcc`
+		   if [ $TOOLCHAIN_NAME = "gcc" ]; then
+		       check_c_compiler "gcc"
+			   if [ $? -eq 0 ]; then
+			       COMP=gcc
+			   fi
+		   fi
+		   if [ $TOOLCHAIN_NAME = "clang" ]; then
+		       check_c_compiler "clang"
+			   if [ $? -eq 0 ]; then
+			       COMP=clang
+			   fi
+		   fi
+		fi
+		
+		TOOLCHAIN_NAME=`$TEMP_DIR/checkcc`
+        TOOLCHAIN_CXX=$COMP
+        echo $TOOLCHAIN_NAME 
+        break
+    fi
+done
+if [ -z $TOOLCHAIN_CXX ]; then
+    echo "not found"
+fi
 
 TOOLCHAIN_LD=$TOOLCHAIN_CC
 
@@ -63,9 +159,12 @@
 # toolchain
 __EOF__
 	echo "CC = ${TOOLCHAIN_CC}" >> $TEMP_DIR/config.mk
+	if [[ ! -z $TOOLCHAIN_CXX ]]; then
+		echo "CXX = ${TOOLCHAIN_CXX}" >> $TEMP_DIR/config.mk
+	fi
     echo "LD = ${TOOLCHAIN_LD}" >> $TEMP_DIR/config.mk
     
     if [ -e "make/${TOOLCHAIN_NAME}.mk" ]; then 
-        echo "include \$(BUILD_ROOT)make/${TOOLCHAIN_NAME}.mk" >> $TEMP_DIR/config.mk
+        echo "include \$(BUILD_ROOT)/make/${TOOLCHAIN_NAME}.mk" >> $TEMP_DIR/config.mk
     fi
 fi

mercurial