Message ID | 20230107094839.26387-1-alex.kiernan@gmail.com |
---|---|
State | Accepted, archived |
Commit | 550c273f38d8e6d2d431908023e213c6b018d7ed |
Headers | show |
Series | [v2] rust: Merge all rustc-source patches into rust-source.inc | expand |
Hello Alex, This patch fixed the https://bugzilla.yoctoproject.org/show_bug.cgi?id=14975 ( 'bitbake core-image-full-cmdline' built without any issues.) But, I tried a ' hello world ' program in booted image (bitbake core-image-minimal by adding ' cargo ' to IMAGE_INSTALL:append) and getting below error. root@qemux86-64:~/# cargo new hello root@qemux86-64:~/# cd hello root@qemux86-64:~/hello# cargo run Compiling hello v0.1.0 (/home/root/hello) error: linker `x86_64-poky-linux-gcc` not found | = note: No such file or directory (os error 2) error: could not compile `hello` due to previous error
I guess we need to add a target RDEPENDS on gcc as its using that as the linker (possibly interesting upstream commentary https://github.com/rust-lang/rust/issues/71515). I'm just wondering what happens if you have TOOLCHAIN = "clang"? On Mon, Jan 16, 2023 at 7:00 AM Kokkonda, Sundeep <sundeep.kokkonda@windriver.com> wrote: > > Hello Alex, > > This patch fixed the https://bugzilla.yoctoproject.org/show_bug.cgi?id=14975 ('bitbake core-image-full-cmdline' built without any issues.) > > But, I tried a 'hello world' program in booted image (bitbake core-image-minimal by adding 'cargo' to IMAGE_INSTALL:append) and getting below error. > > root@qemux86-64:~/# cargo new hello > root@qemux86-64:~/# cd hello > root@qemux86-64:~/hello# cargo run > Compiling hello v0.1.0 (/home/root/hello) > error: linker `x86_64-poky-linux-gcc` not found > | > = note: No such file or directory (os error 2) > > error: could not compile `hello` due to previous error > > -=-=-=-=-=-=-=-=-=-=-=- > Links: You receive all messages sent to this group. > View/Reply Online (#175960): https://lists.openembedded.org/g/openembedded-core/message/175960 > Mute This Topic: https://lists.openembedded.org/mt/96110740/3618097 > Group Owner: openembedded-core+owner@lists.openembedded.org > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [alex.kiernan@gmail.com] > -=-=-=-=-=-=-=-=-=-=-=- >
Adding 'IMAGE_INSTALL:append = " packagegroup-core-buildessential" ' fixed this linker issue.
On 2023-01-16 07:17, Kokkonda, Sundeep via lists.openembedded.org wrote: > Adding 'IMAGE_INSTALL:append = " packagegroup-core-buildessential" ' Please make the target build of rust (cargo?) depend on just the parts need packagegroup-core-buildessential, i.e. you don't need autoconf, make, pkgconfig and likely more from the packagegroup shown below. I'd assume that it's rust that need the linker rather than cargo, right? ../Randy cat `fd packagegroup-core-buildessential` # # Copyright (C) 2007 OpenedHand Ltd. # Copyright (C) 2012 Red Hat, Inc. # SUMMARY = "Essential build dependencies" # libstdc++ gets debian renamed PACKAGE_ARCH = "${TUNE_PKGARCH}" inherit packagegroup RDEPENDS:packagegroup-core-buildessential = "\ autoconf \ automake \ binutils \ binutils-symlinks \ cpp \ cpp-symlinks \ gcc \ gcc-symlinks \ g++ \ g++-symlinks \ gettext \ make \ libstdc++ \ libstdc++-dev \ libtool \ pkgconfig \ " > fixed this linker issue. > > > -=-=-=-=-=-=-=-=-=-=-=- > Links: You receive all messages sent to this group. > View/Reply Online (#175980): https://lists.openembedded.org/g/openembedded-core/message/175980 > Mute This Topic: https://lists.openembedded.org/mt/96110740/3616765 > Group Owner: openembedded-core+owner@lists.openembedded.org > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [randy.macleod@windriver.com] > -=-=-=-=-=-=-=-=-=-=-=- >
Yes, linker is needed by 'rust' and we checked that linker issue is solved by adding minimal required pkgs 'gcc g++ & binutils' instead of complete pkgs provided by ' packagegroup-core-buildessential'.
On Wed, Jan 18, 2023 at 11:43 AM Kokkonda, Sundeep <sundeep.kokkonda@windriver.com> wrote: > > Yes, linker is needed by 'rust' and we checked that linker issue is solved by adding minimal required pkgs 'gcc g++ & binutils' instead of complete pkgs provided by 'packagegroup-core-buildessential'. Does it really need g++? If it does, it does, it just seems surprising to me. > -=-=-=-=-=-=-=-=-=-=-=- > Links: You receive all messages sent to this group. > View/Reply Online (#176087): https://lists.openembedded.org/g/openembedded-core/message/176087 > Mute This Topic: https://lists.openembedded.org/mt/96110740/3618097 > Group Owner: openembedded-core+owner@lists.openembedded.org > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [alex.kiernan@gmail.com] > -=-=-=-=-=-=-=-=-=-=-=- >
Removed not required pkgs autoconf, make, pkgconfig... etc and not removed 'g++'. Have to check specifically for this package. Let me check for it and i'll update here.
On Wed, Jan 18, 2023 at 12:09 PM Kokkonda, Sundeep <sundeep.kokkonda@windriver.com> wrote: > > Removed not required pkgs autoconf, make, pkgconfig... etc and not removed 'g++'. Have to check specifically for this package. Let me check for it and i'll update here. Thanks! I'd probably start from the other end - my guess would be you only need gcc (and whatever transitive dependencies it brings).
Without 'binutils' the required linker 'x86_64-poky-linux-ld' will not be added to the image (getting error - cannot find 'ld'). And, 'g++' also a required package along with 'gcc'. When removed 'g++' some required libs are missing. See below error. root@qemux86-64:~/hello# cargo run Compiling hello v0.1.0 (/home/root/hello) error: linking with `x86_64-poky-linux-gcc` failed: exit status: 1 | = note: "x86_64-poky-linux-gcc" "/tmp/rustcZTUudY/symbols.o" "/home/root/hello/target/debug/deps/hello-366ba9a14b055dd9.1rbu6cyq0fbr2z03.rcgu.o" "/home/root/hello/target/debug/deps/hello-366ba9a1" = note: /usr/lib/gcc/x86_64-poky-linux/12.2.0/../../../../x86_64-poky-linux/bin/ld: cannot find Scrt1.o: No such file or directory /usr/lib/gcc/x86_64-poky-linux/12.2.0/../../../../x86_64-poky-linux/bin/ld: cannot find crti.o: No such file or directory /usr/lib/gcc/x86_64-poky-linux/12.2.0/../../../../x86_64-poky-linux/bin/ld: cannot find crtbeginS.o: No such file or directory /usr/lib/gcc/x86_64-poky-linux/12.2.0/../../../../x86_64-poky-linux/bin/ld: cannot find -lgcc_s: No such file or directory /usr/lib/gcc/x86_64-poky-linux/12.2.0/../../../../x86_64-poky-linux/bin/ld: cannot find -lutil: No such file or directory /usr/lib/gcc/x86_64-poky-linux/12.2.0/../../../../x86_64-poky-linux/bin/ld: cannot find -lrt: No such file or directory /usr/lib/gcc/x86_64-poky-linux/12.2.0/../../../../x86_64-poky-linux/bin/ld: cannot find -lpthread: No such file or directory /usr/lib/gcc/x86_64-poky-linux/12.2.0/../../../../x86_64-poky-linux/bin/ld: cannot find -lm: No such file or directory /usr/lib/gcc/x86_64-poky-linux/12.2.0/../../../../x86_64-poky-linux/bin/ld: cannot find -ldl: No such file or directory /usr/lib/gcc/x86_64-poky-linux/12.2.0/../../../../x86_64-poky-linux/bin/ld: cannot find -lc: No such file or directory /usr/lib/gcc/x86_64-poky-linux/12.2.0/../../../../x86_64-poky-linux/bin/ld: cannot find crtendS.o: No such file or directory /usr/lib/gcc/x86_64-poky-linux/12.2.0/../../../../x86_64-poky-linux/bin/ld: cannot find crtn.o: No such file or directory collect2: error: ld returned 1 exit status error: could not compile `hello` due to previous error
On Wed, Jan 18, 2023 at 5:05 PM Kokkonda, Sundeep <sundeep.kokkonda@windriver.com> wrote: > > Without 'binutils' the required linker 'x86_64-poky-linux-ld' will not be added to the image (getting error - cannot find 'ld'). > And, 'g++' also a required package along with 'gcc'. When removed 'g++' some required libs are missing. See below error. > > root@qemux86-64:~/hello# cargo run > Compiling hello v0.1.0 (/home/root/hello) > error: linking with `x86_64-poky-linux-gcc` failed: exit status: 1 > | > = note: "x86_64-poky-linux-gcc" "/tmp/rustcZTUudY/symbols.o" "/home/root/hello/target/debug/deps/hello-366ba9a14b055dd9.1rbu6cyq0fbr2z03.rcgu.o" "/home/root/hello/target/debug/deps/hello-366ba9a1" > = note: /usr/lib/gcc/x86_64-poky-linux/12.2.0/../../../../x86_64-poky-linux/bin/ld: cannot find Scrt1.o: No such file or directory > /usr/lib/gcc/x86_64-poky-linux/12.2.0/../../../../x86_64-poky-linux/bin/ld: cannot find crti.o: No such file or directory > /usr/lib/gcc/x86_64-poky-linux/12.2.0/../../../../x86_64-poky-linux/bin/ld: cannot find crtbeginS.o: No such file or directory > /usr/lib/gcc/x86_64-poky-linux/12.2.0/../../../../x86_64-poky-linux/bin/ld: cannot find -lgcc_s: No such file or directory > /usr/lib/gcc/x86_64-poky-linux/12.2.0/../../../../x86_64-poky-linux/bin/ld: cannot find -lutil: No such file or directory > /usr/lib/gcc/x86_64-poky-linux/12.2.0/../../../../x86_64-poky-linux/bin/ld: cannot find -lrt: No such file or directory > /usr/lib/gcc/x86_64-poky-linux/12.2.0/../../../../x86_64-poky-linux/bin/ld: cannot find -lpthread: No such file or directory > /usr/lib/gcc/x86_64-poky-linux/12.2.0/../../../../x86_64-poky-linux/bin/ld: cannot find -lm: No such file or directory > /usr/lib/gcc/x86_64-poky-linux/12.2.0/../../../../x86_64-poky-linux/bin/ld: cannot find -ldl: No such file or directory > /usr/lib/gcc/x86_64-poky-linux/12.2.0/../../../../x86_64-poky-linux/bin/ld: cannot find -lc: No such file or directory > /usr/lib/gcc/x86_64-poky-linux/12.2.0/../../../../x86_64-poky-linux/bin/ld: cannot find crtendS.o: No such file or directory > /usr/lib/gcc/x86_64-poky-linux/12.2.0/../../../../x86_64-poky-linux/bin/ld: cannot find crtn.o: No such file or directory > collect2: error: ld returned 1 exit status > Those look like glibc-dev to me - something like add a dependency on ${LIBC_DEPENDENCIES}?
diff --git a/meta/recipes-devtools/rust/cargo_1.66.0.bb b/meta/recipes-devtools/rust/cargo_1.66.0.bb index f45f8f1e12d7..2b2394e898b5 100644 --- a/meta/recipes-devtools/rust/cargo_1.66.0.bb +++ b/meta/recipes-devtools/rust/cargo_1.66.0.bb @@ -14,14 +14,6 @@ LIC_FILES_CHKSUM = " \ require rust-source.inc require rust-snapshot.inc -SRC_URI:append:class-target = "\ - file://crossbeam_atomic.patch;patchdir=${RUSTSRC} \ - file://getrandom-open64.patch;patchdir=${RUSTSRC} \ -" - -# Used by crossbeam_atomic.patch -export TARGET_VENDOR - S = "${RUSTSRC}/src/tools/cargo" CARGO_VENDORING_DIRECTORY = "${RUSTSRC}/vendor" diff --git a/meta/recipes-devtools/rust/rust/hardcodepaths.patch b/meta/recipes-devtools/rust/files/hardcodepaths.patch similarity index 100% rename from meta/recipes-devtools/rust/rust/hardcodepaths.patch rename to meta/recipes-devtools/rust/files/hardcodepaths.patch diff --git a/meta/recipes-devtools/rust/rust/zlib-off64_t.patch b/meta/recipes-devtools/rust/files/zlib-off64_t.patch similarity index 100% rename from meta/recipes-devtools/rust/rust/zlib-off64_t.patch rename to meta/recipes-devtools/rust/files/zlib-off64_t.patch diff --git a/meta/recipes-devtools/rust/rust-source.inc b/meta/recipes-devtools/rust/rust-source.inc index bfb625fb363d..6f1df4561b29 100644 --- a/meta/recipes-devtools/rust/rust-source.inc +++ b/meta/recipes-devtools/rust/rust-source.inc @@ -1,21 +1,19 @@ RUST_VERSION ?= "${@d.getVar('PV').split('-')[0]}" -SRC_URI += "https://static.rust-lang.org/dist/rustc-${RUST_VERSION}-src.tar.xz;name=rust" -SRC_URI[rust.sha256sum] = "0dc176e34fae9871f855a6ba4cb30fa19d69c5b4428d29281a07419c4950715c" -SRC_URI:append:class-target:pn-libstd-rs = "\ - file://0001-Do-not-use-LFS64-on-linux-with-musl.patch;patchdir=../.. \ +SRC_URI += "https://static.rust-lang.org/dist/rustc-${RUST_VERSION}-src.tar.xz;name=rust \ + file://crossbeam_atomic.patch;patchdir=${RUSTSRC} \ + file://hardcodepaths.patch;patchdir=${RUSTSRC} \ + file://getrandom-open64.patch;patchdir=${RUSTSRC} \ + file://0001-Do-not-use-LFS64-on-linux-with-musl.patch;patchdir=${RUSTSRC} \ + file://zlib-off64_t.patch;patchdir=${RUSTSRC} \ " - -SRC_URI:append:class-target:pn-rust = " \ - file://getrandom-open64.patch \ - file://0001-Do-not-use-LFS64-on-linux-with-musl.patch \ - file://zlib-off64_t.patch \ - file://hardcodepaths.patch \ - file://crossbeam_atomic.patch" -SRC_URI:append:class-nativesdk:pn-nativesdk-rust = " file://hardcodepaths.patch" +SRC_URI[rust.sha256sum] = "0dc176e34fae9871f855a6ba4cb30fa19d69c5b4428d29281a07419c4950715c" RUSTSRC = "${WORKDIR}/rustc-${RUST_VERSION}-src" +# Used by crossbeam_atomic.patch +export TARGET_VENDOR + UPSTREAM_CHECK_URI = "https://forge.rust-lang.org/infra/other-installation-methods.html" UPSTREAM_CHECK_REGEX = "rustc-(?P<pver>\d+(\.\d+)+)-src" diff --git a/meta/recipes-devtools/rust/rust_1.66.0.bb b/meta/recipes-devtools/rust/rust_1.66.0.bb index f1ec769aef48..eba933ddeda4 100644 --- a/meta/recipes-devtools/rust/rust_1.66.0.bb +++ b/meta/recipes-devtools/rust/rust_1.66.0.bb @@ -218,9 +218,6 @@ FILES:${PN} += "${libdir}/rustlib" FILES:${PN} += "${libdir}/*.so" FILES:${PN}-dev = "" -# Used by crossbeam_atomic.patch -export TARGET_VENDOR - do_compile () { rust_runx build --stage 2 }
With the dim-sum approach to patching we had the same patch applied in many places, but not all, so that there were no guarantees that we were actually building agaginst the same thing in all recipes. Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com> --- I've no actual evidence, but I wonder if this might help with https://bugzilla.yoctoproject.org/show_bug.cgi?id=14975 as I tripped over this whilst doing these changes. Changes in v2: - Rebased meta/recipes-devtools/rust/cargo_1.66.0.bb | 8 ------- .../rust/{rust => files}/hardcodepaths.patch | 0 .../rust/{rust => files}/zlib-off64_t.patch | 0 meta/recipes-devtools/rust/rust-source.inc | 22 +++++++++---------- meta/recipes-devtools/rust/rust_1.66.0.bb | 3 --- 5 files changed, 10 insertions(+), 23 deletions(-) rename meta/recipes-devtools/rust/{rust => files}/hardcodepaths.patch (100%) rename meta/recipes-devtools/rust/{rust => files}/zlib-off64_t.patch (100%)