generic: platform/mikrotik: add NVMEM layout driver
[openwrt/staging/neocturne.git] / scripts / ext-toolchain.sh
index 1f8eca30769a81cf599c439c8466220752f44801..e49c011118b7ccb834cf87e2b9067ab2476433bb 100755 (executable)
@@ -27,6 +27,7 @@ CFLAGS=""
 TOOLCHAIN="."
 
 LIBC_TYPE=""
+GCC_VERSION=""
 
 
 # Library specs
@@ -40,6 +41,12 @@ LIB_SPECS="
        ssp:      libssp
        gfortran: libgfortran
        gomp:     libgomp
+       atomic:   libatomic
+       quadmath: libquadmath
+       asan:     libasan
+       tasan:    libtsan
+       lasan:    liblsan
+       ubasan:   libubsan
 "
 
 # Binary specs
@@ -199,6 +206,19 @@ find_bins() {
        return 1
 }
 
+find_gcc_version() {
+       if [ -f $TOOLCHAIN/info.mk ]; then
+               GCC_VERSION=$(grep GCC_VERSION $TOOLCHAIN/info.mk | sed 's/GCC_VERSION=//')
+               return 0
+       fi
+
+       echo "Warning! Can't find info.mk, trying to detect with alternative way."
+
+       # Very fragile detection
+       GCC_VERSION=$(find $TOOLCHAIN/bin | grep -oE "gcc-[0-9]+\.[0-9]+\.[0-9]+$" | \
+               head -1 | sed 's/gcc-//')
+}
+
 
 wrap_bin_cc() {
        local out="$1"
@@ -369,12 +389,29 @@ print_config() {
        echo "CONFIG_TOOLCHAIN_PREFIX=\"$prefix\"" >> "$config"
        echo "CONFIG_TARGET_NAME=\"$target\"" >> "$config"
 
-       if [ "$LIBC_TYPE" != glibc ]; then
-               echo "CONFIG_TOOLCHAIN_LIBC=\"$LIBC_TYPE\"" >> "$config"
+       if [ -f "$config" ]; then
+               sed -i '/CONFIG_EXTERNAL_TOOLCHAIN_LIBC_USE_MUSL/d' "$config"
+               sed -i '/CONFIG_EXTERNAL_TOOLCHAIN_LIBC_USE_GLIBC/d' "$config"
+       fi
+
+       if [ "$LIBC_TYPE" == glibc ]; then
+               echo "CONFIG_EXTERNAL_TOOLCHAIN_LIBC_USE_GLIBC=y" >> "$config"
+       elif [ "$LIBC_TYPE" == musl ]; then
+               echo "CONFIG_EXTERNAL_TOOLCHAIN_LIBC_USE_MUSL=y" >> "$config"
+       else
+               echo "Can't detect LIBC type. Aborting!" >&2
+               return 1
+       fi
+
+       if [ -n "$GCC_VERSION" ]; then
+               echo "CONFIG_EXTERNAL_GCC_VERSION=\"$GCC_VERSION\"" >> "$config"
+       else
+               echo "Can't detect GCC version. Aborting!" >&2
+               return 1
        fi
 
        local lib
-       for lib in C RT PTHREAD GCC STDCPP SSP GFORTRAN GOMP; do
+       for lib in C RT PTHREAD GCC STDCPP SSP GFORTRAN GOMP ATOMIC QUADMATH ASAN TSAN LSAN UBSAN; do
                local file
                local spec=""
                local llib="$(echo "$lib" | sed -e 's#.*#\L&#')"
@@ -554,6 +591,7 @@ while [ -n "$1" ]; do
                --config)
                        if probe_cc; then
                                probe_libc
+                               find_gcc_version
                                print_config "$1"
                                exit $?
                        fi