From: Alexandre Belloni <alexandre.belloni@bootlin.com>
To: Pgowda <pgowda.cve@gmail.com>
Cc: openembedded-core@lists.openembedded.org,
richard.purdie@linuxfoundation.org, rwmacleod@gmail.com,
alex.kanavin@gmail.com, umesh.kalappa0@gmail.com,
vinay.m.engg@gmail.com
Subject: Re: [OE-core] [PATCH v2 2/3] Rust cross testing file
Date: Thu, 30 Sep 2021 01:03:21 +0200 [thread overview]
Message-ID: <YVTwuSLx+HyyIDkV@piout.net> (raw)
In-Reply-To: <20210929080448.16224-2-pgowda.cve@gmail.com>
Hello,
On 29/09/2021 01:04:47-0700, Pgowda wrote:
> The file is main entry point for rust oe-selftest.
> It configures, compiles and runs the test suite framework.
>
> It implements the above using the following functions:
> setup_cargo_environment(): Build bootstrap and some early stage tools.
> do_rust_setup_snapshot(): Install the snapshot version of rust binaries.
> do_configure(): To generate config.toml
> do_compile(): To build "remote-test-server" for qemutarget image.
> ---
> meta/recipes-devtools/rust/rust-testsuite.inc | 167 ++++++++++++++++++
> 1 file changed, 167 insertions(+)
> create mode 100644 meta/recipes-devtools/rust/rust-testsuite.inc
>
> diff --git a/meta/recipes-devtools/rust/rust-testsuite.inc b/meta/recipes-devtools/rust/rust-testsuite.inc
> new file mode 100644
> index 0000000000..861c4ff504
> --- /dev/null
> +++ b/meta/recipes-devtools/rust/rust-testsuite.inc
> @@ -0,0 +1,167 @@
> +SUMMARY = "Rust testing"
> +HOMEPAGE = "https://rustc-dev-guide.rust-lang.org/tests/intro.html"
> +SECTION = "test"
> +LICENSE = "MIT | Apache-2.0"
> +
> +inherit rust
> +inherit cargo_common
> +
> +DEPENDS += "file-native python3-native"
I believe you are missing a dependency on ninja-native:
https://autobuilder.yoctoproject.org/typhoon/#/builders/73/builds/4058/steps/18/logs/stdio
| Couldn't find required command: ninja
| You should install ninja, or set `ninja=false` in config.toml in the `[llvm]` section.
> +EXCLUDE_FROM_WORLD = "1"
> +
> +S = "${RUSTSRC}"
> +
> +# Path of target specification file "target-poky-linux.json"
> +export RUST_TARGET_PATH="${STAGING_LIBDIR_NATIVE}/rustlib"
> +
> +export FORCE_CRATE_HASH="${BB_TASKHASH}"
> +
> +# We don't want to use bitbakes vendoring because the rust sources do their
> +# own vendoring.
> +CARGO_DISABLE_BITBAKE_VENDORING = "1"
> +
> +# We can't use RUST_BUILD_SYS here because that may be "musl" if
> +# TCLIBC="musl". Snapshots are always -unknown-linux-gnu
> +SNAPSHOT_BUILD_SYS = "${BUILD_ARCH}-unknown-linux-gnu"
> +setup_cargo_environment () {
> + # The first step is to build bootstrap and some early stage tools,
> + # these are build for the same target as the snapshot, e.g.
> + # x86_64-unknown-linux-gnu.
> + # Later stages are build for the native target (i.e. target.x86_64-linux)
> + cargo_common_do_configure
> +
> + printf '[target.%s]\n' "${SNAPSHOT_BUILD_SYS}" >> ${CARGO_HOME}/config
> + printf "linker = '%s'\n" "${RUST_BUILD_CCLD}" >> ${CARGO_HOME}/config
> +}
> +
> +include rust-common.inc
> +
> +do_rust_setup_snapshot () {
> + for installer in "${WORKDIR}/rust-snapshot-components/"*"/install.sh"; do
> + "${installer}" --prefix="${WORKDIR}/rust-snapshot" --disable-ldconfig
> + done
> +
> + # Some versions of rust (e.g. 1.18.0) tries to find cargo in stage0/bin/cargo
> + # and fail without it there.
> + mkdir -p ${RUSTSRC}/build/${BUILD_SYS}
> + ln -sf ${WORKDIR}/rust-snapshot/ ${RUSTSRC}/build/${BUILD_SYS}/stage0
> +
> + # Need to use uninative's loader if enabled/present since the library paths
> + # are used internally by rust and result in symbol mismatches if we don't
> + if [ ! -z "${UNINATIVE_LOADER}" -a -e "${UNINATIVE_LOADER}" ]; then
> + for bin in cargo rustc rustdoc; do
> + patchelf-uninative ${WORKDIR}/rust-snapshot/bin/$bin --set-interpreter ${UNINATIVE_LOADER}
> + done
> + fi
> +}
> +addtask rust_setup_snapshot after do_unpack before do_configure
> +do_rust_setup_snapshot[dirs] += "${WORKDIR}/rust-snapshot"
> +
> +python do_configure() {
> + import json
> + from distutils.version import LooseVersion
> + try:
> + import configparser
> + except ImportError:
> + import ConfigParser as configparser
> +
> + # toml is rather similar to standard ini like format except it likes values
> + # that look more JSON like. So for our purposes simply escaping all values
> + # as JSON seem to work fine.
> +
> + e = lambda s: json.dumps(s)
> +
> + config = configparser.RawConfigParser()
> +
> + # [target.ARCH-unknown-linux-gnu] in case of x86_64 [target.ARCH-poky-linux]
> + target_section = "target.{}".format(d.getVar('TARGET_SYS', True))
> + config.add_section(target_section)
> +
> + # Points to wrapper files which contain target specific compiler and linker commands.
> + config.set(target_section, "cxx", e(d.expand("${RUST_TARGET_CXX}")))
> + config.set(target_section, "cc", e(d.expand("${RUST_TARGET_CC}")))
> + config.set(target_section, "linker", e(d.expand("${RUST_TARGET_CCLD}")))
> +
> + # If we don't do this rust-native will compile it's own llvm for BUILD.
> + # [target.${BUILD_ARCH}-unknown-linux-gnu]
> + target_section = "target.{}".format(d.getVar('SNAPSHOT_BUILD_SYS', True))
> + config.add_section(target_section)
> +
> + # Wrapper scripts of build system.
> + config.set(target_section, "cxx", e(d.expand("${RUST_BUILD_CXX}")))
> + config.set(target_section, "cc", e(d.expand("${RUST_BUILD_CC}")))
> +
> + # [llvm]
> + config.add_section("llvm")
> + config.set("llvm", "targets", e("ARM;AArch64;Mips;PowerPC;RISCV;X86"))
> +
> + # [rust]
> + config.add_section("rust")
> + config.set("rust", "rpath", e(True))
> + config.set("rust", "channel", e("stable"))
> +
> + if LooseVersion(d.getVar("PV")) < LooseVersion("1.32.0"):
> + config.set("rust", "use-jemalloc", e(False))
> +
> + # Whether or not to optimize the compiler and standard library
> + config.set("rust", "optimize", e(True))
> +
> + # Emits extraneous output from tests to ensure that failures of the test
> + # harness are debuggable just from logfiles
> + config.set("rust", "verbose-tests", e(True))
> +
> + # Override default linker cc.
> + config.set("rust", "default-linker", e(d.expand("${RUST_BUILD_CCLD}")))
> +
> + # [build]
> + config.add_section("build")
> + config.set("build", "submodules", e(False))
> + config.set("build", "docs", e(False))
> +
> + rustc = d.expand("${WORKDIR}/rust-snapshot/bin/rustc")
> + config.set("build", "rustc", e(rustc))
> +
> + cargo = d.expand("${WORKDIR}/rust-snapshot/bin/cargo")
> + config.set("build", "cargo", e(cargo))
> +
> + config.set("build", "vendor", e(True))
> +
> + targets = [d.getVar("TARGET_SYS", True)]
> + config.set("build", "target", e(targets))
> +
> + hosts = [d.getVar("SNAPSHOT_BUILD_SYS", True)]
> + config.set("build", "host", e(hosts))
> +
> + # We can't use BUILD_SYS since that is something the rust snapshot knows
> + # nothing about when trying to build some stage0 tools (like fabricate)
> + config.set("build", "build", e(d.getVar("SNAPSHOT_BUILD_SYS", True)))
> +
> + with open("config.toml", "w") as f:
> + config.write(f)
> +
> + # set up ${WORKDIR}/cargo_home
> + bb.build.exec_func("setup_cargo_environment", d)
> +}
> +
> +
> +rust_runx () {
> + echo "COMPILE ${PN}" "$@"
> +
> + # CFLAGS, LDFLAGS, CXXFLAGS, CPPFLAGS are used by rust's build for a
> + # wide range of targets (not just TARGET). Yocto's settings for them will
> + # be inappropriate, avoid using.
> + unset CFLAGS
> + unset LDFLAGS
> + unset CXXFLAGS
> + unset CPPFLAGS
> +
> + oe_cargo_fix_env
> +
> + python3 src/bootstrap/bootstrap.py ${@oe.utils.parallel_make_argument(d, '-j %d')} "$@" --verbose
> +}
> +rust_runx[vardepsexclude] += "PARALLEL_MAKE"
> +
> +do_compile () {
> +
> + rust_runx build src/tools/remote-test-server --target "${TARGET_SYS}"
> +}
> --
> 2.31.1
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#156449): https://lists.openembedded.org/g/openembedded-core/message/156449
> Mute This Topic: https://lists.openembedded.org/mt/85943725/3617179
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [alexandre.belloni@bootlin.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
--
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
next prev parent reply other threads:[~2021-09-29 23:03 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-29 8:04 [PATCH v2 1/3] Rust oe-selftest script Pgowda
2021-09-29 8:04 ` [PATCH v2 2/3] Rust cross testing file Pgowda
2021-09-29 23:03 ` Alexandre Belloni [this message]
2021-09-30 7:27 ` [PATCH v3] Re: [OE-core] " Pgowda
[not found] ` <16A988E1BC842A91.3292@lists.openembedded.org>
2021-10-20 7:08 ` pgowda cve
2021-10-20 7:42 ` Alexandre Belloni
2021-11-02 5:12 ` pgowda cve
2021-11-26 18:34 ` Randy MacLeod
2021-09-29 8:04 ` [PATCH v2 3/3] Rust oe-selftest file Pgowda
2021-09-29 22:59 ` [OE-core] " Alexandre Belloni
2021-09-30 4:31 ` pgowda cve
2021-10-05 16:13 ` Randy MacLeod
2021-10-05 16:21 ` Alexandre Belloni
2021-10-05 18:19 ` [OE-core] [PATCH v2 1/3] Rust oe-selftest script Alexandre Belloni
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YVTwuSLx+HyyIDkV@piout.net \
--to=alexandre.belloni@bootlin.com \
--cc=alex.kanavin@gmail.com \
--cc=openembedded-core@lists.openembedded.org \
--cc=pgowda.cve@gmail.com \
--cc=richard.purdie@linuxfoundation.org \
--cc=rwmacleod@gmail.com \
--cc=umesh.kalappa0@gmail.com \
--cc=vinay.m.engg@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox