Hi Khem Raj, Once the patches get approved will work on adding in meta-rust.
Regards, Vinay On Tue, May 18, 2021 at 3:48 AM Khem Raj <[email protected]> wrote: > > > > On 5/17/21 3:35 AM, Vinay Kumar wrote: > > Below list of functions are part of rust-testsuite.inc > > 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. > > do_check(): To execute testing by copying remote-test-server to qmutarget > > image. > > > > > some part of these series should go to meta-rust > > > Signed-off-by: Vinay Kumar <[email protected]> > > --- > > meta/recipes-devtools/rust/rust-testsuite.inc | 166 ++++++++++++++++++ > > 1 file changed, 166 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..d1c5496da4 > > --- /dev/null > > +++ b/meta/recipes-devtools/rust/rust-testsuite.inc > > @@ -0,0 +1,166 @@ > > +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" > > +EXCLUDE_FROM_WORLD = "1" > > + > > +# 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 > > +} > > + > > +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 > > +} > > +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}" > > +} > > + > > +do_check[dirs] += "${B}" > > +do_check[nostamp] = "1" > > +do_check () { > > + scp -P 2222 -o StrictHostKeyChecking=no > > build/${SNAPSHOT_BUILD_SYS}/stage2-tools-bin/remote-test-server > > [email protected]:~/ > > + ssh -p 2222 -o StrictHostKeyChecking=no -f [email protected] > > "~/remote-test-server -v remote" > > + > > + export TEST_DEVICE_ADDR="127.0.0.1:12345" > > + rust_runx test --no-fail-fast --bless --target "${TARGET_SYS}" > > > summary.txt 2> /dev/null > > +} > > +addtask do_check after do_compile > > > > > > > > > >
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#152064): https://lists.openembedded.org/g/openembedded-core/message/152064 Mute This Topic: https://lists.openembedded.org/mt/82883375/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
