path: root/meta/classes/rust-common.bbclass
Commit message (Collapse)AuthorAgeFilesLines
* rust-common.bbclass: rewrite toolchain wrappers in (native) pythonAlexander Kanavin2021-10-141-7/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | librsvg on centos 7 and friends exhibits the same libtinfo leakage problem, this time coming from the compiler and not the linker. Simply covering the compiler by the existing C wrapper-of-wrapper does not work, as rust-native builds put Important Stuff into LD_LIBRARY_PATH and unsetting it breaks things badly. Rather than try to figure out which combination of wrappers and LD_LIBRARY_PATH settings works for which situation, or provide some kind of sh-native, let's simply use python3-native for the wrappers, which should insulate builds from the the host shell. rust-native already depends on python3-native, so this does not lengthen the builds. This also reverts: rust-common: Hack around LD_LIBRARY_PATH issues on centos7 (commit 63b1fd2226b5f146d6c853cc57417704df378438). I'd also like to say boo to Red Hat (or GNU?) for breaking ABI compatibility for stat() in glibc 2.33, we ended up sorting this mess because of it. (From OE-Core rev: 997d54363a3cb3a0e949b3626855f2fa41afeb2b) Signed-off-by: Alexander Kanavin <> Signed-off-by: Alexandre Belloni <> Signed-off-by: Richard Purdie <>
* rust-common.bbclass: make sure ccache existKai Kang2021-09-191-1/+1
| | | | | | | | | | | | | | | | | It fails to run task rust_create_wrappers of recipe which inherit rust-common.bbclass such as rust-hello-world if no host ccache exists: | DEBUG: Executing shell function do_rust_create_wrappers | /path/to/project/tmp-glibc/work/core2-64-wrs-linux/rust-hello-world/git-r0/temp/run.do_rust_create_wrappers.3422: line 179: ccache: command not found Run task rust_create_wrappers before do_prepare_recipe_sysroot to make sure required tools such as ccache exist. (From OE-Core rev: 46575e0d5b9e722558b64e22ed928e6d7b2c654a) Signed-off-by: Kai Kang <> Signed-off-by: Richard Purdie <>
* rust-common: Hack around LD_LIBRARY_PATH issues on centos7Richard Purdie2021-09-021-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When building cargo-native on centos7 with buildtools tarball installed, we see failures: /bin/sh: /lib64/ version `GLIBC_2.33' not found (required by /home/pokybuild/yocto-worker/reproducible-centos/build/build-st/tmp/work/x86_64-linux/cargo-native/1.54.0-r0/recipe-sysroot-native/usr/lib/ We also see this for libstd-rs once cargo-native is fixed. The reason for this is that the wrapper script cargo-native/1.54.0-r0/wrapper/target-rust-ccld has /bin/sh as it's interpreter and cargo calls this with LD_LIBRARY_PATH set to include the recipe-sysroot-native. The host /bin/sh links to libtinfo from the host but it finds the version in the sysroot which needs a newer libc. This results in the above error since the loader is an older libc and the two are incompatible. Our ccld wrapper calls gcc/ld which don't need the LD_LIBRARY_PATH variable set. We can't patch this out the source since we're using a prebuilt binary to generate a new cargo binary so this is impossible to bootstrap. Instead, put a binary wrapper into place which removes LD_LIBRARY_PATH from the environment before calling the original wrapper (left in shell as it is simpler to maintain). (From OE-Core rev: 8feeeb7f76c6725e5226458c8f22999b67c52694) Signed-off-by: Richard Purdie <>
* rust-common.bbclass: export RUST_TARGET_PATHTim Orling2021-09-011-1/+1
| | | | | | | | | | | Running 'rustc --print <foo>' in -c devshell environment the target specifications are not known, unless the RUST_TARGET_PATH (absolute path to rustlib/) is defined. (From OE-Core rev: 6d0603ffe18c1a5999db854abb668b05aff47f67) Signed-off-by: Tim Orling <> Signed-off-by: Richard Purdie <>
* rust-common: Add LDFLAGS to cc wrapperRichard Purdie2021-08-261-1/+1
| | | | | | | | | | | | | The -cc wrapper can be used for linking and can fail if key flags are missing: | error: linking with `[path]/tmp/work/x86_64-linux/rust-native/1.54.0-r0/wrapper/target-rust-cc` Add the flags to fix builds even if that is counter-intuitive (cc would normally be used for compiling and ccld for linking). (From OE-Core rev: 62242e83c49b81a9ea65c9a1f5957a7c309d910a) Signed-off-by: Richard Purdie <>
* rust-cross*: Fix OVERRRIDE references in task signature computationRichard Purdie2021-08-261-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The oeqa selftest test: sstatetests.SStateTests.test_sstate_sametune_samesigs which checks if the sstate checksums of two identical machines (using the same tune) are the same, apart from changes within the machine specific stamps directory, fails on the assertion: self.assertCountEqual(files1, files2) due to the signature of various 32 bit package builds such as: x86_64-linux/lib32-rust-cross-i686 x86_64-linux/rust-cross-i686 x86-pokymllib32-linux/lib32-libstd-rs x86-pokymllib32-linux/lib32-rust differing. Jumping down the rabbit hole past all the bitbake-diffsig outputs that differ due to dependent hashes, you come to a diff of: -Variable MACHINEOVERRIDES value is ${@bb.utils.contains('TUNE_FEATURES', 'mx32', 'x86-x32:', '', d)}${@bb.utils.contains('TUNE_FEATURES', 'm32', 'x86:', '', d)}qemuall:${MACHINE} +Variable MACHINEOVERRIDES value is ${@bb.utils.contains('TUNE_FEATURES', 'mx32', 'x86-x32:', '', d)}${@bb.utils.contains('TUNE_FEATURES', 'm32', 'x86:', '', d)}qemuall:${MACHINE}:qemux86 in stamps/x86_64-linux/rust-cross-i686/1.54.0-r0.do_rust_gen_target.<sig> This is because there are two rust functions referencing OVERRIDES related variables (target_is_armv7 and llvm_features_from_tune). These indirectly influnce the build and should be excluded from the signatures directly as is done in other toolchain recipes, e.g.: 39bfa0dd32 recipes/*-cross recipes: ignore TARGET_ARCH sstate hash (From OE-Core rev: 72d67410e92207a98a801ddf0cb9f1297a752975) Signed-off-by: Randy MacLeod <> Signed-off-by: Richard Purdie <>
* rust: initial merge of most of meta-rustRandy MacLeod2021-08-261-0/+174
In the meta-rust repo at commit: 448047c Upgrade to 1.54.0 (#359) Make the required directories: mkdir ../oe-core/meta/recipes-devtools/rust mkdir ../oe-core/meta/recipes-devtools/cargo mkdir ../oe-core/meta/recipes-example and then: cp recipes-devtools/rust/* ../oe-core/meta/recipes-devtools/rust cp recipes-devtools/cargo/* ../oe-core/meta/recipes-devtools/cargo cp lib/ ../oe-core/meta/lib cp recipes-example/* ../oe-core/meta/recipes-example cp conf/distro/include/rust_* ../oe-core/meta/conf/distro/include/ cp classes/* ../oe-core/meta/classes/ cp recipes-core/packagegroups/ ../oe-core/meta/recipes-core/packagegroups (From OE-Core rev: 3ed57578cca93ff1ba4e0bf3f25566e10659a2f9) Signed-off-by: Randy MacLeod <> Signed-off-by: Richard Purdie <>