make/toolchain.sh

Thu, 12 Oct 2023 00:00:35 +0200

author
Mike Becker <universe@uap-core.de>
date
Thu, 12 Oct 2023 00:00:35 +0200
changeset 753
24dc84788dee
child 815
b0c4750cecd8
permissions
-rw-r--r--

replace most of the build system with uwproj

     1 #!/bin/sh
     2 #
     3 # toolchain detection
     4 #
     6 C_COMPILERS="gcc clang suncc cc"
     7 CPP_COMPILERS="g++ clang++ sunCC CC"
     8 unset TOOLCHAIN_NAME
     9 unset TOOLCHAIN_CC
    10 unset TOOLCHAIN_CXX
    12 check_c_compiler()
    13 {
    14 	cat > "$TEMP_DIR/test.c" << __EOF__
    15 /* test file */
    16 #include <stdio.h>
    17 int main(int argc, char **argv) {
    18 #if defined(__clang__)
    19 	printf("clang\n");
    20 #elif defined(__GNUC__)
    21 	printf("gcc\n");
    22 #elif defined(__sun)
    23 	printf("suncc\n");
    24 #else
    25 	printf("unknown\n");
    26 #endif
    27 	return 0;
    28 }
    29 __EOF__
    30 	rm -f "$TEMP_DIR/checkcc"
    31 	$1 -o "$TEMP_DIR/checkcc" $CFLAGS $LDFLAGS "$TEMP_DIR/test.c" 2> /dev/null
    32 }
    34 check_cpp_compiler()
    35 {
    36 	cat > "$TEMP_DIR/test.cpp" << __EOF__
    37 /* test file */
    38 #include <iostream>
    39 int main(int argc, char **argv) {
    40 #if defined(__clang__)
    41 	std::cout << "clang" << std::endl;
    42 #elif defined(__GNUC__)
    43 	std::cout << "gcc" << std::endl;
    44 #elif defined(__sun)
    45 	std::cout << "suncc" << std::endl;
    46 #else
    47 	std::cout << "cc" << std::endl;
    48 #endif
    49 	return 0;
    50 }
    51 __EOF__
    52 	rm -f "$TEMP_DIR/checkcc"
    53 	$1 -o "$TEMP_DIR/checkcc" $CXXFLAGS $LDFLAGS "$TEMP_DIR/test.cpp" 2> /dev/null
    54 }
    56 create_libtest_source()
    57 {
    58   # $1: filename
    59   # $2: optional include
    60 	cat > "$TEMP_DIR/$1" << __EOF__
    61 /* libtest file */
    62 int main(int argc, char **argv) {
    63 	return 0;
    64 }
    65 __EOF__
    66   if [ -n "$2" ]; then
    67     echo "#include <$2>" >> "$TEMP_DIR/$1"
    68   fi
    69 }
    71 check_c_lib()
    72 {
    73   # $1: libname
    74   # $2: optional include
    75   if [ -z "$TOOLCHAIN_CC" ]; then
    76     return 1
    77   fi
    78   create_libtest_source "test.c" "$2"
    79   rm -f "$TEMP_DIR/checklib"
    80 	$TOOLCHAIN_CC -o "$TEMP_DIR/checklib" $CFLAGS $LDFLAGS "-l$1" "$TEMP_DIR/test.c" 2> /dev/null
    81 }
    83 check_cpp_lib()
    84 {
    85   # $1: libname
    86   # $2: optional include
    87   if [ -z "$TOOLCHAIN_CXX" ]; then
    88     return 1
    89   fi
    90 	create_libtest_source "test.cpp" "$2"
    91   rm -f "$TEMP_DIR/checklib"
    92 	$TOOLCHAIN_CXX -o "$TEMP_DIR/checklib" $CXXFLAGS $LDFLAGS "-l$1" "$TEMP_DIR/test.cpp" 2> /dev/null
    93 }
    95 check_lib()
    96 {
    97   # $1: libname
    98   # $2: optional include
    99 	if [ -n "$TOOLCHAIN_CC" ]; then
   100 		check_c_lib "$1" "$2"
   101 	elif  [ -n "$TOOLCHAIN_CXX" ]; then
   102 	  check_cpp_lib "$1" "$2"
   103 	fi
   104 }
   106 detect_c_compiler()
   107 {
   108   if [ -n "$TOOLCHAIN_CC" ]; then
   109     return 0
   110   fi
   111   printf "detect C compiler... "
   112   if [ -n "$CC" ]; then
   113     if check_c_compiler "$CC"; then
   114       TOOLCHAIN_CC=$CC
   115       TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"`
   116       echo "$CC"
   117       return 0
   118     else
   119       echo "$CC is not a working C compiler"
   120       return 1
   121     fi
   122   else
   123     for COMP in $C_COMPILERS
   124     do
   125       if check_c_compiler "$COMP"; then
   126         TOOLCHAIN_CC=$COMP
   127         TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"`
   128         echo "$COMP"
   129         return 0
   130       fi
   131     done
   132     echo "not found"
   133     return 1
   134   fi
   135 }
   137 detect_cpp_compiler()
   138 {
   139   if [ -n "$TOOLCHAIN_CXX" ]; then
   140     return 0
   141   fi
   142   printf "detect C++ compiler... "
   144   if [ -n "$CXX" ]; then
   145     if check_cpp_compiler "$CXX"; then
   146       TOOLCHAIN_CXX=$CXX
   147       TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"`
   148       echo "$CXX"
   149       return 0
   150     else
   151       echo "$CXX is not a working C++ compiler"
   152       return 1
   153     fi
   154   else
   155     for COMP in $CPP_COMPILERS
   156     do
   157       if check_cpp_compiler "$COMP"; then
   158         TOOLCHAIN_CXX=$COMP
   159         TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"`
   160         echo "$COMP"
   161         return 0
   162       fi
   163     done
   164     echo "${TOOLCHAIN_CXX:-"not found"}"
   165     return 1
   166   fi
   167 }
   169 write_toolchain_defaults()
   170 {
   171   echo "# toolchain" >> "$1"
   172   if [ -n "$TOOLCHAIN_CC" ]; then
   173     echo "CC = ${TOOLCHAIN_CC}" >> "$1"
   174   fi
   175   if [ -n "$TOOLCHAIN_CXX" ]; then
   176     echo "CXX = ${TOOLCHAIN_CXX}" >> "$1"
   177   fi
   178   echo >> "$1"
   179   if [ -f "make/${TOOLCHAIN_NAME}.mk" ]; then
   180     cat "make/${TOOLCHAIN_NAME}.mk" >> "$1"
   181   elif [ -f "make/cc.mk" ]; then
   182     cat "make/cc.mk" >> "$1"
   183   else
   184     echo "!!! WARNING !!! Default toolchain flags not found. Configuration might be incomplete."
   185   fi
   186 }

mercurial