test/make/toolchain.sh

changeset 66
dc758dcd4645
parent 54
2b8f40c58944
child 69
96d8badffe58
--- a/test/make/toolchain.sh	Mon Sep 18 22:49:54 2023 +0200
+++ b/test/make/toolchain.sh	Mon Sep 18 23:20:29 2023 +0200
@@ -5,11 +5,9 @@
 
 C_COMPILERS="gcc clang suncc cc"
 CPP_COMPILERS="g++ clang++ sunCC CC"
-unset TOOLCHAIN_ERROR
 unset TOOLCHAIN_NAME
 unset TOOLCHAIN_CC
 unset TOOLCHAIN_CXX
-unset TOOLCHAIN_LD
 
 check_c_compiler()
 {
@@ -46,7 +44,7 @@
 #elif defined(__sun)
 	std::cout << "suncc" << std::endl;
 #else
-	std::cout << "unknown" << std::endl;
+	std::cout << "cc" << std::endl;
 #endif
 	return 0;
 }
@@ -55,96 +53,121 @@
 	$1 -o "$TEMP_DIR/checkcc" $CXXFLAGS $LDFLAGS "$TEMP_DIR/test.cpp" 2> /dev/null
 }
 
-check_lib()
+check_c_lib()
 {
-	if [ -z "$TOOLCHAIN_LD" ]; then
-		return 1
-	fi
+  if [ -z "$TOOLCHAIN_CC" ]; then
+    return 1
+  fi
 	cat > "$TEMP_DIR/test.c" << __EOF__
 /* libtest file */
 int main(int argc, char **argv) {
 	return 0;
 }
 __EOF__
-	rm -f "$TEMP_DIR/checklib"
-	$TOOLCHAIN_LD -o "$TEMP_DIR/checklib" $CFLAGS $LDFLAGS "-l$1" "$TEMP_DIR/test.c" 2> /dev/null
+  rm -f "$TEMP_DIR/checklib"
+	$TOOLCHAIN_CC -o "$TEMP_DIR/checklib" $CFLAGS $LDFLAGS "-l$1" "$TEMP_DIR/test.c" 2> /dev/null
+}
+
+check_cpp_lib()
+{
+  if [ -z "$TOOLCHAIN_CXX" ]; then
+    return 1
+  fi
+	cat > "$TEMP_DIR/test.cpp" << __EOF__
+/* libtest file */
+int main(int argc, char **argv) {
+	return 0;
+}
+__EOF__
+  rm -f "$TEMP_DIR/checklib"
+	$TOOLCHAIN_CXX -o "$TEMP_DIR/checklib" $CXXFLAGS $LDFLAGS "-l$1" "$TEMP_DIR/test.cpp" 2> /dev/null
+}
+
+check_lib()
+{
+	if [ -n "$TOOLCHAIN_CC" ]; then
+		check_c_lib "$1"
+	elif  [ -n "$TOOLCHAIN_CXX" ]; then
+	  check_cpp_lib "$1"
+	fi
 }
 
-printf "detect C compiler... "
-
-if [ -n "$CC" ]; then
-  if check_c_compiler "$CC"; then
-    TOOLCHAIN_CC=$CC
-    TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"`
-    echo $CC
-  else
-    echo "$CC is not a working C compiler"
-    TOOLCHAIN_ERROR="required C compiler not found"
+detect_c_compiler()
+{
+  if [ -n "$TOOLCHAIN_CC" ]; then
+    return 0
   fi
-else
-  for COMP in $C_COMPILERS
-  do
-    if check_c_compiler "$COMP"; then
-      TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"`
-      TOOLCHAIN_CC=$COMP
-      break
-    fi
-  done
-  echo ${TOOLCHAIN_CC:-"not found"}
-fi
-
-printf "detect C++ compiler... "
-
-if [ -n "$CXX" ]; then
-  if check_cpp_compiler "$CXX"; then
-    TOOLCHAIN_CXX=$CXX
-    TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"`
-    echo $CXX
-  else
-    echo "$CXX is not a working C++ compiler"
-    TOOLCHAIN_ERROR="required C++ compiler not found"
-  fi
-else
-  for COMP in $CPP_COMPILERS
-  do
-    if check_cpp_compiler "$COMP"; then
+  printf "detect C compiler... "
+  if [ -n "$CC" ]; then
+    if check_c_compiler "$CC"; then
+      TOOLCHAIN_CC=$CC
       TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"`
-      TOOLCHAIN_CXX=$COMP
-      break
+      echo "$CC"
+      return 0
+    else
+      echo "$CC is not a working C compiler"
+      return 1
     fi
-  done
-  echo ${TOOLCHAIN_CXX:-"not found"}
-fi
+  else
+    for COMP in $C_COMPILERS
+    do
+      if check_c_compiler "$COMP"; then
+        TOOLCHAIN_CC=$COMP
+        TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"`
+        echo "$COMP"
+        return 0
+      fi
+    done
+    echo "not found"
+    return 1
+  fi
+}
 
-printf "detect linker... "
-TOOLCHAIN_LD=$TOOLCHAIN_CC
-echo "$TOOLCHAIN_LD"
-
-if [ -z "$TOOLCHAIN_NAME" ]; then
-  TOOLCHAIN_ERROR="no build tools detected"
-else
-	cat >> "$TEMP_DIR/config.mk" << __EOF__
+detect_cpp_compiler()
+{
+  if [ -n "$TOOLCHAIN_CXX" ]; then
+    return 0
+  fi
+  printf "detect C++ compiler... "
 
-# toolchain
-__EOF__
-	echo "CC = ${TOOLCHAIN_CC}" >> "$TEMP_DIR/config.mk"
-	if [ -n "$TOOLCHAIN_CXX" ]; then
-		echo "CXX = ${TOOLCHAIN_CXX}" >> "$TEMP_DIR/config.mk"
-	fi
-	echo "LD = ${TOOLCHAIN_LD}" >> "$TEMP_DIR/config.mk"
-	echo >> "$TEMP_DIR/config.mk"
-	
-	if [ -f "make/${TOOLCHAIN_NAME}.mk" ]; then
-		cat "make/${TOOLCHAIN_NAME}.mk" >> "$TEMP_DIR/config.mk"
-	else
-		cat >> "$TEMP_DIR/config.mk" << __EOF__
-CFLAGS =
-DEBUG_FLAGS = -g
-RELEASE_FLAGS = -O3 -DNDEBUG
-LDFLAGS =
+  if [ -n "$CXX" ]; then
+    if check_cpp_compiler "$CXX"; then
+      TOOLCHAIN_CXX=$CXX
+      TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"`
+      echo "$CXX"
+      return 0
+    else
+      echo "$CXX is not a working C++ compiler"
+      return 1
+    fi
+  else
+    for COMP in $CPP_COMPILERS
+    do
+      if check_cpp_compiler "$COMP"; then
+        TOOLCHAIN_CXX=$COMP
+        TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"`
+        echo "$COMP"
+        return 0
+      fi
+    done
+    echo "${TOOLCHAIN_CXX:-"not found"}"
+    return 1
+  fi
+}
 
-SHLIB_CFLAGS = -fPIC
-SHLIB_LDFLAGS = -shared
-__EOF__
-	fi
-fi
+write_toolchain_defaults()
+{
+  echo "# toolchain" >> "$1"
+  if [ -n "$TOOLCHAIN_CC" ]; then
+    echo "CC = ${TOOLCHAIN_CC}" >> "$1"
+  fi
+  if [ -n "$TOOLCHAIN_CXX" ]; then
+    echo "CXX = ${TOOLCHAIN_CXX}" >> "$1"
+  fi
+  echo >> "$1"
+  if [ -f "make/${TOOLCHAIN_NAME}.mk" ]; then
+    cat "make/${TOOLCHAIN_NAME}.mk" >> "$1"
+  else
+    echo "!!! WARNING !!! Default toolchain flags not found. Configuration might be incomplete."
+  fi
+}

mercurial