Skip to contentSkip to conversation

toolchain-shar-extract: compare SDK and host gcc versions

PATCH In review Ed Bartosh 3 participants 3 messages Jan 25, 2017 – Oct 7, 2017

lore
Share & tools
lore

Ed Bartosh

author
#0 lore raw

PATCH 1/1 toolchain-shar-extract: compare SDK and host gcc versions

If ext sdk is built by gcc version higher than host gcc version and host gcc version is 4.8 or 4.9 the installation is known to fail due to the way uninative sstate package is built.

It's a known issue and we don't have a way to fix it for above mentioned combinations of build and host gcc versions.

Detected non-installable combinations of gcc versions and print an installation error.

[YOCTO #10881]

---
 meta/classes/populate_sdk_base.bbclass | 1 +
 meta/files/toolchain-shar-extract.sh   | 8 ++++++++
 2 files changed, 9 insertions(+)
meta/classes/populate_sdk_base.bbclass +1 -0
index 5ad08c6..588a3cb 100644
@@ -226,6 +226,7 @@ EOF
 		-e 's#@SDK_VERSION@#${SDK_VERSION}#g' \
 		-e '/@SDK_PRE_INSTALL_COMMAND@/d' \
 		-e '/@SDK_POST_INSTALL_COMMAND@/d' \
+		-e 's#@SDK_GCC_VER@#${@oe.utils.host_gcc_version(d)}#g' \
 		${SDKDEPLOYDIR}/${TOOLCHAIN_OUTPUTNAME}.sh
 
 	# add execution permission
meta/files/toolchain-shar-extract.sh +8 -0
index 9295ddc..3f54c96 100644
@@ -11,6 +11,9 @@ export PATH=`echo "$PATH" | sed -e 's/:\.//' -e 's/::/:/'`
 INST_ARCH=$(uname -m | sed -e "s/i[3-6]86/ix86/" -e "s/x86[-_]64/x86_64/")
 SDK_ARCH=$(echo @SDK_ARCH@ | sed -e "s/i[3-6]86/ix86/" -e "s/x86[-_]64/x86_64/")
 
+INST_GCC_VER=$(gcc --version | sed -ne 's/.* \([0-9]\+\.[0-9]\+\)\.[0-9]\+.*/\1/p')
+SDK_GCC_VER='@SDK_GCC_VER@'
+
 verlte () {
 	[  "$1" = "`printf "$1\n$2" | sort -V | head -n1`" ]
 }
@@ -112,6 +115,11 @@ fi
 # SDK_EXTENSIBLE is exposed from the SDK_PRE_INSTALL_COMMAND above
 if [ "$SDK_EXTENSIBLE" = "1" ]; then
 	DEFAULT_INSTALL_DIR="@SDKEXTPATH@"
+	if [ "$INST_GCC_VER" = '4.8' -a "$SDK_GCC_VER" = '4.9' ] || [ "$INST_GCC_VER" = '4.8' -a "$SDK_GCC_VER" = '' ] || \
+		[ "$INST_GCC_VER" = '4.9' -a "$SDK_GCC_VER" = '' ]; then
+		echo "Error: Incompatible SDK installer! Your host gcc version is $INST_GCC_VER and this SDK was built by gcc higher version."
+		exit 1
+	fi
 fi
 
 if [ "$target_sdk_dir" = "" ]; then
Signature · 1 line
2.1.4
#1 lore raw

I realize this reply is months after the original email. But I think I found a bug with the implementation. See below inline.

Quoted 23 lines · Ed Bartosh

If ext sdk is built by gcc version higher than host gcc version and host gcc version is 4.8 or 4.9 the installation is known to fail due to the way uninative sstate package is built.

It's a known issue and we don't have a way to fix it for above mentioned combinations of build and host gcc versions.

Detected non-installable combinations of gcc versions and print an installation error.

[YOCTO #10881]

---
 meta/classes/populate_sdk_base.bbclass | 1 +
 meta/files/toolchain-shar-extract.sh   | 8 ++++++++
 2 files changed, 9 insertions(+)
meta/classes/populate_sdk_base.bbclass +0 -0
index 5ad08c6..588a3cb 100644

meta/classes/populate_sdk_base.bbclass EOF · line 229

Quoted 4 lines
meta/classes/populate_sdk_base.bbclass +1 -0
@@ -226,6 +226,7 @@ EOF
 		-e 's#@SDK_VERSION@#${SDK_VERSION}#g' \
 		-e '/@SDK_PRE_INSTALL_COMMAND@/d' \
 		-e '/@SDK_POST_INSTALL_COMMAND@/d' \
+		-e 's#@SDK_GCC_VER@#${@oe.utils.host_gcc_version(d)}#g' \

The return value from "oe.utils.host_gcc_version(d)" includes a leading '-'...

meta/files/toolchain-shar-extract.sh export PATH=`echo "$PATH" | sed -e 's/:\.//' -e 's/::/:/'` · line 14

Quoted 12 lines
meta/classes/populate_sdk_base.bbclass +0 -0
 		${SDKDEPLOYDIR}/${TOOLCHAIN_OUTPUTNAME}.sh
 
 	# add execution permission
meta/files/toolchain-shar-extract.sh +1 -0
index 9295ddc..3f54c96 100644
@@ -11,6 +11,9 @@ export PATH=`echo "$PATH" | sed -e 's/:\.//' -e 's/::/:/'`
 INST_ARCH=$(uname -m | sed -e "s/i[3-6]86/ix86/" -e "s/x86[-_]64/x86_64/")
 SDK_ARCH=$(echo @SDK_ARCH@ | sed -e "s/i[3-6]86/ix86/" -e "s/x86[-_]64/x86_64/")
 
+INST_GCC_VER=$(gcc --version | sed -ne 's/.* \([0-9]\+\.[0-9]\+\)\.[0-9]\+.*/\1/p')

The item above fails with the message:

line 28: gcc: command not found

If the host does not have gcc on it. (I realize this is incredibly rare situation, but is valid in some cases.) It might be a good idea to catch this and put up a warning or otherwise clean up the error situation.

meta/files/toolchain-shar-extract.sh export PATH=`echo "$PATH" | sed -e 's/:\.//' -e 's/::/:/'` · line 16

Quoted 2 lines
meta/files/toolchain-shar-extract.sh +2 -0
+SDK_GCC_VER='@SDK_GCC_VER@'
+

So based on the above you will end up with:

INST_GCC_VER="4.8"
SDK_GCC_VER="-4.9"

meta/files/toolchain-shar-extract.sh fi · line 119

Quoted 9 lines
meta/files/toolchain-shar-extract.sh +2 -0
 verlte () {
 	[  "$1" = "`printf "$1\n$2" | sort -V | head -n1`" ]
 }
@@ -112,6 +115,11 @@ fi
 # SDK_EXTENSIBLE is exposed from the SDK_PRE_INSTALL_COMMAND above
 if [ "$SDK_EXTENSIBLE" = "1" ]; then
 	DEFAULT_INSTALL_DIR="@SDKEXTPATH@"
+	if [ "$INST_GCC_VER" = '4.8' -a "$SDK_GCC_VER" = '4.9' ] || [ "$INST_GCC_VER" = '4.8' -a "$SDK_GCC_VER" = '' ] || \
+		[ "$INST_GCC_VER" = '4.9' -a "$SDK_GCC_VER" = '' ]; then

The comparisons above do not include the leading '-', so it would appear to me that the checked would never end up being true -- and thus the error below would never happen.

Am I seeing what is happening right? If so, we'll need to get this fixed...

--Mark

Quoted 7 lines
meta/files/toolchain-shar-extract.sh +3 -0
+		echo "Error: Incompatible SDK installer! Your host gcc version is $INST_GCC_VER and this SDK was built by gcc higher version."
+		exit 1
+	fi
 fi
 
 if [ "$target_sdk_dir" = "" ]; then
#2 lore raw
Quoted 49 lines · Mark Hatle

I realize this reply is months after the original email. But I think I found a bug with the implementation. See below inline.

Quoted 23 lines · Ed Bartosh

If ext sdk is built by gcc version higher than host gcc version and host gcc version is 4.8 or 4.9 the installation is known to fail due to the way uninative sstate package is built.

It's a known issue and we don't have a way to fix it for above mentioned combinations of build and host gcc versions.

Detected non-installable combinations of gcc versions and print an installation error.

[YOCTO #10881]

---
 meta/classes/populate_sdk_base.bbclass | 1 +
 meta/files/toolchain-shar-extract.sh   | 8 ++++++++
 2 files changed, 9 insertions(+)
meta/classes/populate_sdk_base.bbclass +0 -0
index 5ad08c6..588a3cb 100644

meta/classes/populate_sdk_base.bbclass EOF · line 229

Quoted 4 lines
meta/classes/populate_sdk_base.bbclass +1 -0
@@ -226,6 +226,7 @@ EOF
              -e 's#@SDK_VERSION@#${SDK_VERSION}#g' \
              -e '/@SDK_PRE_INSTALL_COMMAND@/d' \
              -e '/@SDK_POST_INSTALL_COMMAND@/d' \
+             -e 's#@SDK_GCC_VER@#${@oe.utils.host_gcc_version(d)}#g' \

The return value from "oe.utils.host_gcc_version(d)" includes a leading '-'...

meta/files/toolchain-shar-extract.sh export PATH=`echo "$PATH" | sed -e 's/:\.//' -e 's/::/:/'` · line 14

Quoted 12 lines
meta/classes/populate_sdk_base.bbclass +0 -0
              ${SDKDEPLOYDIR}/${TOOLCHAIN_OUTPUTNAME}.sh
 
      # add execution permission
meta/files/toolchain-shar-extract.sh +1 -0
index 9295ddc..3f54c96 100644
@@ -11,6 +11,9 @@ export PATH=`echo "$PATH" | sed -e 's/:\.//' -e 's/::/:/'`
 INST_ARCH=$(uname -m | sed -e "s/i[3-6]86/ix86/" -e "s/x86[-_]64/x86_64/")
 SDK_ARCH=$(echo @SDK_ARCH@ | sed -e "s/i[3-6]86/ix86/" -e "s/x86[-_]64/x86_64/")
 
+INST_GCC_VER=$(gcc --version | sed -ne 's/.* \([0-9]\+\.[0-9]\+\)\.[0-9]\+.*/\1/p')

The item above fails with the message:

Quoted 6 lines

line 28: gcc: command not found

If the host does not have gcc on it. (I realize this is incredibly rare situation, but is valid in some cases.) It might be a good idea to catch this and put up a warning or otherwise clean up the error situation.

I think if we need gcc then we should sanitize the installer to check-before-use so end user gets a good error message.

Quoted 40 lines

meta/files/toolchain-shar-extract.sh export PATH=`echo "$PATH" | sed -e 's/:\.//' -e 's/::/:/'` · line 16

Quoted 2 lines
meta/files/toolchain-shar-extract.sh +2 -0
+SDK_GCC_VER='@SDK_GCC_VER@'
+

So based on the above you will end up with:

INST_GCC_VER="4.8"
SDK_GCC_VER="-4.9"

meta/files/toolchain-shar-extract.sh fi · line 119

Quoted 9 lines
meta/files/toolchain-shar-extract.sh +2 -0
 verlte () {
      [  "$1" = "`printf "$1\n$2" | sort -V | head -n1`" ]
 }
@@ -112,6 +115,11 @@ fi
 # SDK_EXTENSIBLE is exposed from the SDK_PRE_INSTALL_COMMAND above
 if [ "$SDK_EXTENSIBLE" = "1" ]; then
      DEFAULT_INSTALL_DIR="@SDKEXTPATH@"
+     if [ "$INST_GCC_VER" = '4.8' -a "$SDK_GCC_VER" = '4.9' ] || [ "$INST_GCC_VER" = '4.8' -a "$SDK_GCC_VER" = '' ] || \
+             [ "$INST_GCC_VER" = '4.9' -a "$SDK_GCC_VER" = '' ]; then

The comparisons above do not include the leading '-', so it would appear to me that the checked would never end up being true -- and thus the error below would never happen.

Am I seeing what is happening right? If so, we'll need to get this fixed...

--Mark

meta/files/toolchain-shar-extract.sh fi · line 125

Quoted 7 lines
meta/files/toolchain-shar-extract.sh +3 -0
+             echo "Error: Incompatible SDK installer! Your host gcc version is $INST_GCC_VER and this SDK was built by gcc higher version."
+             exit 1
+     fi
 fi
 
 if [ "$target_sdk_dir" = "" ]; then

--
_______________________________________________
Openembedded-core mailing list
[email protected]
http://lists.openembedded.org/mailman/listinfo/openembedded-core