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