scripts/ext-toolchain: implement external GCC version detection
authorChristian Marangi <ansuelsmth@gmail.com>
Thu, 19 Oct 2023 12:19:09 +0000 (14:19 +0200)
committerChristian Marangi <ansuelsmth@gmail.com>
Fri, 20 Oct 2023 14:13:31 +0000 (16:13 +0200)
Some package may needs to enable compatibility option based on the GCC
version.

Currently the GCC version is set based on the default value and doesn't
actually reflect the real value provided by the external toolchain if
used.

Fix this by correctly detecting the GCC version in the external
toolchain and set the correct value in CONFIG_GCC_VERSION.

A new option is added in menuconfig to manually set the GCC version if
needed.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
scripts/ext-toolchain.sh
toolchain/Config.in
toolchain/gcc/Config.version

index fe1024c18ec800a903a32aa64471065385032768..1fa2e952bb792eea53082f1b457b5bfc62f4948b 100755 (executable)
@@ -27,6 +27,7 @@ CFLAGS=""
 TOOLCHAIN="."
 
 LIBC_TYPE=""
+GCC_VERSION=""
 
 
 # Library specs
@@ -199,6 +200,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"
@@ -383,6 +397,13 @@ print_config() {
                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
                local file
@@ -564,6 +585,7 @@ while [ -n "$1" ]; do
                --config)
                        if probe_cc; then
                                probe_libc
+                               find_gcc_version
                                print_config "$1"
                                exit $?
                        fi
index b0273acafdd7dcfb4862d43da00d45601ed5f8e4..24caecccb3ee7337090e98a7480e0af0cea58289 100644 (file)
@@ -150,6 +150,14 @@ menuconfig EXTERNAL_TOOLCHAIN
 
        endchoice
 
+       config EXTERNAL_GCC_VERSION
+               string
+               prompt "External Toolchain GCC Version" if DEVEL
+               depends on EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN
+               help
+                 Manually specify the GCC version used by the selected
+                 external toolchain.
+
        config TOOLCHAIN_LIBC
                string
                depends on EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN
index a7e55eb5caf1e730cb2507a6916a7f20c4f22f11..a00685ffa3f295fb14003771c92c6da7d1ed6aa2 100644 (file)
@@ -8,6 +8,7 @@ config GCC_VERSION_13
 
 config GCC_VERSION
        string
+       default EXTERNAL_GCC_VERSION    if EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN
        default "11.3.0"        if GCC_VERSION_11
        default "13.2.0"        if GCC_VERSION_13
        default "12.3.0"