--- 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