| Summary: | environment-setup script in multilib eSDK doesn't work for multilib variant | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Product: | [Build System, Metadata & Runtime] OE-Core | Reporter: | Pascal Bach <pascal.bach> | ||||||
| Component: | core | Assignee: | Unassigned <unassigned> | ||||||
| Status: | IN PROGRESS IMPLEMENTATION --- | QA Contact: | |||||||
| Severity: | major | ||||||||
| Priority: | Medium+ | CC: | jpuhlman, kai.kang, liezhi.yang, mark.hatle, meta.mr.watcher, meta.watcher, randy.macleod, sundeep.kokkonda, SunilKumar.Dora, tgamblin, workjagadeesh | ||||||
| Version: | 3.1.3 | ||||||||
| Target Milestone: | 6.2 M1 | ||||||||
| Hardware: | x86 | ||||||||
| OS: | Multiple | ||||||||
| Whiteboard: | |||||||||
| OS type for building Yocto: | --- | Type of Regression: | --- | ||||||
| Verified: | Documentation change: | Don't know | |||||||
| Attachments: |
|
||||||||
|
Description
Pascal Bach
2020-08-23 15:21:14 UTC
Robert, This seems like something that we should fix. Can you work on it/ Check that this is not a compiler bug. Look at the path the compiler is using to try to get to the files that are listed as missing. In the past, I saw a similar bug (specific to C++ libraries) and it turns out that multilib settings within the compiler itself was breaking the path structure for C++. Once the multilib "hack" was put into place, it resolved the problem. The hack is located here: https://git.openembedded.org/openembedded-core/tree/meta/recipes-devtools/gcc/gcc/0004-64-bit-multilib-hack.patch Note, that it only covers the four main architectures. If you are building something else -- or somehow this file wasn't included you will get C++ (and possibly other) failures. Mark, I actually don't think that is likely the case here. Building the standard sdk works fine for multilib with the same image(I included something to drag in 32bit libstdc++), but fails with the same image target with extensible sdk.
[jp@localhost mulitlib-sdk]$ rm -rf foo; ./tmp/deploy/sdk/poky-glibc-x86_64-core-image-minimal-core2-64-qemux86-64-toolchain-3.1+snapshot.sh -d `pwd`/foo -y
Poky (Yocto Project Reference Distro) SDK installer version 3.1+snapshot
========================================================================
You are about to install the SDK to "/home/jp/master/mulitlib-sdk/foo". Proceed [Y/n]? Y
Extracting SDK...........................................................done
Setting it up...done
SDK has been successfully set up and is ready to be used.
Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
$ . /home/jp/master/mulitlib-sdk/foo/environment-setup-core2-64-poky-linux
$ . /home/jp/master/mulitlib-sdk/foo/environment-setup-x86-pokymllib32-linux
[jp@localhost mulitlib-sdk]$ bash
[jp@localhost mulitlib-sdk]$ source /home/jp/master/mulitlib-sdk/foo/environment-setup-x86-pokymllib32-linux
[jp@localhost mulitlib-sdk]$ $CXX foo.cpp -O2
[jp@localhost mulitlib-sdk]$
[jp@localhost mulitlib-sdk]$ rm -rf foo; ./tmp/deploy/sdk/poky-glibc-x86_64-core-image-minimal-core2-64-qemux86-64-toolchain-ext-3.1+snapshot.sh -d `pwd`/foo -y
Poky (Yocto Project Reference Distro) Extensible SDK installer version 3.1+snapshot
===================================================================================
You are about to install the SDK to "/home/jp/master/mulitlib-sdk/foo". Proceed [Y/n]? Y
Extracting SDK..............................................................................................done
Setting it up...
Extracting buildtools...
Preparing build system...
Loading cache: 100% | | ETA: --:--:--
Parsing recipes: 100% |###################################################################################################################| Time: 0:00:29
Initialising tasks: 100% |################################################################################################################| Time: 0:00:03
Checking sstate mirror object availability: 100% |########################################################################################| Time: 0:00:00
Loading cache: 100% |#####################################################################################################################| Time: 0:00:00
Initialising tasks: 100% |################################################################################################################| Time: 0:00:00
done
SDK has been successfully set up and is ready to be used.
Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
$ . /home/jp/master/mulitlib-sdk/foo/environment-setup-core2-64-poky-linux
$ . /home/jp/master/mulitlib-sdk/foo/environment-setup-x86-pokymllib32-linux
[jp@localhost mulitlib-sdk]$ bash
[jp@localhost mulitlib-sdk]$ source /home/jp/master/mulitlib-sdk/foo/environment-setup-x86-pokymllib32-linux
[jp@localhost mulitlib-sdk]$ $CXX foo.cpp -O2
In file included from foo.cpp:1:
/home/jp/master/mulitlib-sdk/foo/tmp/sysroots/qemux86-64/usr/include/c++/10.2.0/iostream:38:10: fatal error: bits/c++config.h: No such file or directory
38 | #include <bits/c++config.h>
| ^~~~~~~~~~~~~~~~~~
compilation terminated.
No difference in the image itself.
Maybe it is because oe-core missed the following patch, I had sent it oe-core years ago, but didn't get merged: git://git.openembedded.org/openembedded-core-contrib rbt/multilib_esdk http://cgit.openembedded.org/openembedded-core-contrib/log/?h=rbt/multilib_esdk Robert Yang (1): populate_sdk_ext.bbclass: fix for multilib I will resend it, but it would be great if Pascal Bach and Jeremy A. Puhlman can help verify it. I tried to verify the patch proposed by Robert Yang. And it doesn't solve the issue. When I try to compile there are still some files missing. Namely: - libgcc_s.so - libgcc.a - crti.o From what I can tell these files are provided by the following packages: - lib32-gcc-runtime - lib32-glibc - lib32-libgcc I tried adding them to SDK_DEPENDS_append = " lib32-gcc-runtime lib32-glibc lib32-libgcc" But it doesn't seem to have any effect. I currently suspect that the issue is with the "build-sysroots" recipe as it does not seem to be including any of the lib32 packages. Manually hacking "x86" in https://github.com/openembedded/openembedded-core/blob/master/meta/classes/staging.bbclass#L194 seems to make it include the lib32 packages in tmp/sysroots/qemux86-64. But the resulting eSDK can't be installed as it throws some hash miss match errors. So I think there are still some parts in that area that don't handle multilib properly. Bulk move of 64 bugs to 4.3 M3 after a quick review. If a bug is actually fixed, please add a commit link and resolve it. -- Randy for YP bug team. Moved to M4. Bulk move to 5.0 M1. -- Randy Bulk move of 52 5.0-M1 bugs to M2. Bulk move of bugs owned by "unassigned" from 5.0-M2 to 5.0-M3. Bulk move of bugs from 5.0-M3 to 5.99. The bugs in this list are all unassigned and are ones that I consider to be nice to do some time but not essential track from milestone to milestone in 5.0 or 5.1. We agreed on this bug handling approach in the YP bug review on Feb 22, 2024. If you disagree, please move back to a 5.[012...]-M* milestone. Doing old bug triage so just skimming. Sundeep, Please have someone take a look at this bug report in the coming month. Is it still a problem? Pascal, Any news on this issue ? Created attachment 5247 [details]
dunfell: search and populate files in multilib manifest file
Created attachment 5248 [details]
master: search and populate files in multilib manifest file
The missing header file (bits/c++config.h) is given by gcc-runtime recipe. During the installing of eSDK, this file is populated into the <eSDK_install_directory>/tmp/sysroots by the staging_populate_sysroot_dir function by parsing SSTATE_MANFILEPREFIX file (i.e <esdk_installed_directory>/tmp/sstate-control/manifest-<pkgarch>-[lib32-]gcc-runtime.populate_sysroot ) under the directories listed by <pkgarch>. But the multilib-DEFAULTTUNE (i.e 'x86' in case of qemux86-64) is not part of <pkgarch> of staging_populate_sysroot_dir function, hence the <esdk_installed_directory>/tmp/sstate-control/manifest-x86-lib32-gcc-runtime.populate_sysroot file is not parsed and the files of lib32-gcc-runtime which are supposed to be populated under <eSDK_install_directory>/tmp/sysroots directory are absent. Adding multilib-DEFAULTTUNE (i.e 'x86' in case of qemux86-64) as part of <pkgarch> in staging_populate_sysroot_dir function solves the issue for dunfell. On master branch, the eSDK does not install the multilib BASEDEPENDS i.e virtual/lib32-cross-cc, virtual/lib32-compilerlibs, and virtual/lib32-libc even though the multilib configuration is enabled in the conf/local.conf. Due to this we cannot compile source for multilib using the eSDK. This patch adds dependency on multilib BASEDEPENDS in meta-extsdk-toolchain recipe if multilib configuration is enabled in the conf/local.conf. The patches attachment 5247 [details] and attachment 5248 [details] are tested on dunfell and master. Below are the logs. With Dunfell: matti@cfarm422:~/work_jagadeesh/new_project/poky/build$ sh tmp/deploy/sdk/poky-glibc-x86_64-core-image-minimal-core2-64-qemux86-64-toolchain-ext-3.1.33.sh -d $PWD/sdk -y Poky (Yocto Project Reference Distro) Extensible SDK installer version 3.1.33 ============================================================================= You are about to install the SDK to "/home/matti/work_jagadeesh/new_project/poky/build/sdk". Proceed [Y/n]? Y Extracting SDK.................................................................................done Setting it up... Extracting buildtools... Preparing build system... WARNING: Host distribution "debian-12" has not been validated with this version of the build system; you may possibly experience unexpected failures. It is recommended that you use a tested distribution. Parsing recipes: 100% |########################################################| Time: 0:00:04 Initialising tasks: 100% |#####################################################| Time: 0:01:22 Checking sstate mirror object availability: 100% |#############################| Time: 0:00:16 WARNING: Host distribution "debian-12" has not been validated with this version of the build system; you may possibly experience unexpected failures. It is recommended that you use a tested distribution. Loading cache: 100% |##########################################################| Time: 0:00:38 Initialising tasks: 100% |#####################################################| Time: 0:00:00 done SDK has been successfully set up and is ready to be used. Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g. $ . /home/matti/work_jagadeesh/new_project/poky/build/sdk/environment-setup-core2-64-poky-linux $ . /home/matti/work_jagadeesh/new_project/poky/build/sdk/environment-setup-x86-pokymllib32-linux matti@cfarm422:~/work_jagadeesh/new_project/poky/build$ . /home/matti/work_jagadeesh/new_project/poky/build/sdk/environment-setup-x86-pokymllib32-linux matti@cfarm422:~/work_jagadeesh/new_project/poky/build$ cat foo.cpp #include <iostream> int main() { std::cout << "Hello, World!" << std::endl; return 0; } matti@cfarm422:~/work_jagadeesh/new_project/poky/build$ echo $CXX i686-pokymllib32-linux-g++ -m32 -fstack-protector-strong -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=/home/matti/work_jagadeesh/new_project/poky/build/sdk/tmp/sysroots/qemux86-64 matti@cfarm422:~/work_jagadeesh/new_project/poky/build$ $CXX foo.cpp -O2 -o foo_32 matti@cfarm422:~/work_jagadeesh/new_project/poky/build$ file foo_32 foo_32: ELF 32-bit LSB pie executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, BuildID[sha1]=9f06fc5d0b2abf2d954336f884e4888a20174b71, for GNU/Linux 3.2.0, with debug_info, not stripped matti@cfarm422:~/work_jagadeesh/new_project/poky/build$ matti@cfarm422:~/work_jagadeesh/new_project/poky/build$ . /home/matti/work_jagadeesh/new_project/poky/build/sdk/environment-setup-core2-64-poky-linux SDK environment now set up; additionally you may now run devtool to perform development tasks. Run devtool --help for further details. matti@cfarm422:~/work_jagadeesh/new_project/poky/build$ echo $CXX x86_64-poky-linux-g++ -m64 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -fstack-protector-strong -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=/home/matti/work_jagadeesh/new_project/poky/build/sdk/tmp/sysroots/qemux86-64 matti@cfarm422:~/work_jagadeesh/new_project/poky/build$ $CXX foo.cpp -O2 -o foo_64 matti@cfarm422:~/work_jagadeesh/new_project/poky/build$ file foo_64 foo_64: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=3eede75c97eafd7f7bba6540f41dab71a27bb9d9, for GNU/Linux 3.2.0, with debug_info, not stripped matti@cfarm422:~/work_jagadeesh/new_project/poky/build$ ------------------------------------------------------------------ With master: matti@cfarm422:~/work_jagadeesh/bitbake-builds/layers/openembedded-core/build$ sh tmp/deploy/sdk/oecore-core-image-minimal-x86_64-x86-64-v3-qemux86-64-toolchain-ext-nodistro.0.sh -d $PWD/SDK -y OpenEmbedded Extensible SDK installer version nodistro.0 ======================================================== You are about to install the SDK to "/home/matti/work_jagadeesh/bitbake-builds/layers/openembedded-core/build/SDK". Proceed [Y/n]? Y Extracting SDK..................................................................................................................................................................................done Setting it up... Extracting buildtools... Preparing build system... Loading cache: 100% |##########################################################| Time: 0:00:00 Parsing recipes: 100% |########################################################| Time: 0:00:21 Initialising tasks: 100% |#####################################################| Time: 0:00:11 NOTE: Reconnecting to bitbake server... NOTE: Retrying server connection (#1)... (17:26:31.173136) Loading cache: 100% |##########################################################| Time: 0:00:00 Parsing recipes: 100% |########################################################| Time: 0:00:22 Initialising tasks: 100% |#####################################################| Time: 0:00:00 NOTE: Reconnecting to bitbake server... NOTE: Retrying server connection (#1)... (17:27:01.199103) Loading cache: 100% |##########################################################| Time: 0:00:02 Initialising tasks: 100% |#####################################################| Time: 0:00:00 done SDK has been successfully set up and is ready to be used. Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g. $ . /home/matti/work_jagadeesh/bitbake-builds/layers/openembedded-core/build/SDK/environment-setup-x86-64-v3-oe-linux $ . /home/matti/work_jagadeesh/bitbake-builds/layers/openembedded-core/build/SDK/environment-setup-x86-oemllib32-linux matti@cfarm422:~/work_jagadeesh/bitbake-builds/layers/openembedded-core/build$ . /home/matti/work_jagadeesh/bitbake-builds/layers/openembedded-core/build/SDK/environment-setup-x86-oemllib32-linux matti@cfarm422:~/work_jagadeesh/bitbake-builds/layers/openembedded-core/build$ cat foo.cpp #include <iostream> int main() { std::cout << "Hello, World!" << std::endl; return 0; } matti@cfarm422:~/work_jagadeesh/bitbake-builds/layers/openembedded-core/build$ echo $CXX i686-oemllib32-linux-g++ -m32 -D_TIME_BITS=64 -D_FILE_OFFSET_BITS=64 -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=/home/matti/work_jagadeesh/bitbake-builds/layers/openembedded-core/build/SDK/tmp/sysroots/qemux86-64 matti@cfarm422:~/work_jagadeesh/bitbake-builds/layers/openembedded-core/build$ $CXX foo.cpp -O2 -o foo_32 matti@cfarm422:~/work_jagadeesh/bitbake-builds/layers/openembedded-core/build$ file foo_32 foo_32: ELF 32-bit LSB pie executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /usr/lib/ld-linux.so.2, BuildID[sha1]=fdb221cf159085ac73f362090076aeb4a89e22b6, for GNU/Linux 5.15.0, with debug_info, not stripped matti@cfarm422:~/work_jagadeesh/bitbake-builds/layers/openembedded-core/build$ . /home/matti/work_jagadeesh/bitbake-builds/layers/openembedded-core/build/SDK/environment-setup-x86-64-v3-oe-linux SDK environment now set up; additionally you may now run devtool to perform development tasks. Run devtool --help for further details. matti@cfarm422:~/work_jagadeesh/bitbake-builds/layers/openembedded-core/build$ echo $CXX x86_64-oe-linux-g++ -m64 -march=x86-64-v3 -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=/home/matti/work_jagadeesh/bitbake-builds/layers/openembedded-core/build/SDK/tmp/sysroots/qemux86-64 matti@cfarm422:~/work_jagadeesh/bitbake-builds/layers/openembedded-core/build$ $CXX foo.cpp -O2 -o foo_64 matti@cfarm422:~/work_jagadeesh/bitbake-builds/layers/openembedded-core/build$ file foo_64 foo_64: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /usr/lib64/ld-linux-x86-64.so.2, BuildID[sha1]=6441d615e59f58032a6cf5c0bdc00339150efeb5, for GNU/Linux 5.15.0, with debug_info, not stripped matti@cfarm422:~/work_jagadeesh/bitbake-builds/layers/openembedded-core/build$ --- Regards, Jagadeesh Any suggestions/feedbacks on the patches? Can I submit the patches for review and merge? Thanks, Jagadeesh Jagadeesh, I moved to the milestone 6.2-M1 since we would want a change like this to soak in the dev tree before possibly being backported. Please do post to the list since that's where code review takes place. This will also result in your patch being run in the YP AB which frequently helps to identify deficiencies. ../Randy (In reply to Randy MacLeod from comment #18) > Jagadeesh, > I moved to the milestone 6.2-M1 since we would want a change like this to > soak in the dev tree before possibly being backported. > > Please do post to the list since that's where code review takes place. > This will also result in your patch being run in the YP AB which > frequently helps to identify deficiencies. > > ../Randy I have submitted the patches for review in the mailing list at https://lists.openembedded.org/g/openembedded-core/topic/121532867 https://lists.openembedded.org/g/openembedded-core/topic/121532869 https://lists.openembedded.org/g/openembedded-core/topic/121532871 Thanks, Jagadeesh |