summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/rust/rust-common.inc
Commit message (Collapse)AuthorAgeFilesLines
* rust-target-config: Create new class to contain target json config generationRichard Purdie2022-07-281-369/+0
| | | | | | | | | | | | | Currently most of the rust recipes use this code but it is all piecemeal. Turn the code into a class where things can start to be rationalised. Ultimately some of the data and python code should be moved to a python library but one step at a time. No functionality changes. (From OE-Core rev: 3795285cbf362e13b8151bfdbe1bce999ac28641) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
* rust-common/rust-cross: Clean up target json generation codeRichard Purdie2022-07-281-17/+16
| | | | | | | | | | | | | Some of the subtleties in the different codepaths for target rust json generation were not easy to spot. Start to simplfy the code to make this clearer. This patch should not have any functionality change although ABIEXTENSION has to be excluded from the function signature, the triplet would normally cover anything set there. (From OE-Core rev: 0f83d959465e0d99f98ade6803281585931d1b02) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
* rust-cross: Simplfy the rust_gen_target callsRichard Purdie2022-07-281-6/+6
| | | | | | | | | Match the code in rust-cross-canadian so that further simplifications can be considered in future. (From OE-Core rev: 5cb62d0a33777cb9afb1eea5f736a2580ce50dc7) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
* rust-cross/rust-common: Merge arm target handling code to fix cross-canadianRichard Purdie2022-07-281-0/+6
| | | | | | | | | | | | | rust-cross had special handling for armv7 targets but we also need this for cross-canadian. Merge the code into the main function so everything is consistent. Also then fix the arm definition to be arm-eabi since ABI is correctly being looked up. (From OE-Core rev: ff3c3dbbd2bf1bb7bb70b55cca203e9eedcf14a8) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
* rust-common: Set llvm-target correctly for cross SDK targetsRichard Purdie2022-07-281-1/+5
| | | | | | | | | | | | | | | | | | When a 'BUILD' target is requested we shouldn't be looking at TARGET_SYS but at BUILD_SYS. Due to the way rust mangles triplets, we need the HOST_SYS triplet to work with existing code - fixing that issue is a separate patch. Also drop the arch_abi argument, it doens't make any sense to a getVar() call and was a copy and paste error. Based on a patch from Otavio Salvador <otavio@ossystems.com.br> but separated out and tweaked. Fixes: bd36593ba3 ("rust-common: Drop LLVM_TARGET and simplify") (From OE-Core rev: d554161a045d12411f288394e253c54aa4c1257c) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
* rust: fix issue building cross-canadian tools for aarch64 on x86_64Peter Bergin2022-06-291-4/+1
| | | | | | | | | | | | | | Commit bd36593ba3db758b3eacc974e48468a665967961 did introduce a regression when building package rust-cross-canadian-aarch64 on a x86_64 host. This commit will fix that configuration. Suggested-by: Richard Purdie <richard.purdie@linuxfoundation.org> (From OE-Core rev: ef566af964e9f9d2c440a3b5771ed801216f30f9) Signed-off-by: Peter Bergin <peter@berginkonsult.se> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
* rust-common: Fix native signature dependency issuesRichard Purdie2022-05-211-0/+3
| | | | | | | | | | | The previous changes cause sstatetests.SStateTests.test_sstate_32_64_same_hash to fail since RUST_XXX_SYS changes depending on the native architecture. This is correct but these are accounted for in the layout of paths in TMPDIR so they should be excluded from the task signatures for the correct behaviour. (From OE-Core rev: 2b9bb4c07d0ab53f58cbdd8a96896780a90be9a8) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
* rust-common: Drop LLVM_TARGET and simplifyRichard Purdie2022-05-211-18/+5
| | | | | | | | | | This all seems over complicated for something which is basically always one of two values. This might even help cross-canadian work on something which isn't x86-64. (From OE-Core rev: bd36593ba3db758b3eacc974e48468a665967961) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
* rust-common: Fix for target definitions returning 'NoneType' for armSundeep KOKKONDA2022-05-211-7/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | [YOCTO #14742] The build shows below error while building for arm machines. Exception: TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType' Detailed error info : Steps to reproduce: 1. Set MACHINE ?= "qemuarm" in local.conf & add 'TOOLCHAIN_HOST_TASK:append = " packagegroup-rust-cross-canadian-${MACHINE}"' 2. bitbake core-image-minimal -cpopulate_sdk Complete Error: ERROR: rust-cross-canadian-arm-1.59.0-r0 do_rust_gen_targets: Error executing a python function in exec_func_python() autogenerated: The stack trace of python calls that resulted in this exception/failure was: File: 'exec_func_python() autogenerated', lineno: 2, function: <module> 0001: *** 0002:do_rust_gen_targets(d) 0003: File: '/ala-lpggp31/skokkonda/yocto/poky/meta/recipes-devtools/rust/rust-cross-canadian-common.inc', lineno: 31, function: do_rust_gen_targets 0027: 0028:LLVM_TARGET[x86_64] = "${RUST_HOST_SYS}" 0029:python do_rust_gen_targets () { 0030: wd = d.getVar('WORKDIR') + '/targets/' *** 0031: rust_gen_target(d, 'TARGET', wd, d.getVar('TARGET_LLVM_FEATURES') or "", d.getVar('TARGET_LLVM_CPU'), d.getVar('TARGET_ARCH')) 0032: rust_gen_target(d, 'HOST', wd, "", "generic", d.getVar('HOST_ARCH')) 0033: rust_gen_target(d, 'BUILD', wd, "", "generic", d.getVar('BUILD_ARCH')) 0034:} 0035: File: '/ala-lpggp31/skokkonda/yocto/poky/meta/recipes-devtools/rust/rust-common.inc', lineno: 330, function: rust_gen_target 0326: # build tspec 0327: tspec = {} 0328: tspec['llvm-target'] = d.getVarFlag('LLVM_TARGET', arch_abi) 0329: tspec['data-layout'] = d.getVarFlag('DATA_LAYOUT', arch_abi) *** 0330: tspec['max-atomic-width'] = int(d.getVarFlag('MAX_ATOMIC_WIDTH', arch_abi)) 0331: tspec['target-pointer-width'] = d.getVarFlag('TARGET_POINTER_WIDTH', arch_abi) 0332: tspec['target-c-int-width'] = d.getVarFlag('TARGET_C_INT_WIDTH', arch_abi) 0333: tspec['target-endian'] = d.getVarFlag('TARGET_ENDIAN', arch_abi) 0334: tspec['arch'] = arch_to_rust_target_arch(rust_arch) Exception: TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType' Below are the local variables from rust_gen_target function for arm and aarch64 targets. Refer below, the tspec varibles for 'arm' generated with NoneType. (a) Locals at rust_gen_target for arm:: tspec['data-layout'] = None, Type of tspec['data-layout'] = <class 'NoneType'> tspec['data-layout'] = None, Type of tspec['data-layout'] = <class 'NoneType'> DEBUG: Python function do_rust_gen_targets finished (b) Locals at rust_gen_target for aarch64:: tspec['data-layout'] = aarch64-unknown-linux-gnu, Type of tspec['data-layout'] = <class 'str'> tspec['max-atomic-width'] = 128, Type of tspec['max-atomic-width'] = <class 'int'> Reason for changing arm-eabi to arm: The earlier changes introduced this bug, so reverting the change 'arm-eabi' to 'arm' fixed the issue. (From OE-Core rev: 8ed000debb026477abd86ea3bf72adaf21d69f39) Signed-off-by: Sundeep KOKKONDA <sundeep.kokkonda@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
* rust-common: Ensure sstate signatures have correct dependencues for ↵Sundeep KOKKONDA2022-05-211-0/+2
| | | | | | | | | | | | | do_rust_gen_targets The do_rust_gen_targets task was not rerunning when the configuration variables it uses were changed. Add the missing variable dependencies to fix this. [RP: Split to separate patch and add commit message] (From OE-Core rev: 65ce2d129154d4540cb8ec960971bcf6aa5a9480) Signed-off-by: Sundeep KOKKONDA <sundeep.kokkonda@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
* Revert "meta: rust: Bug fix for target definitions returning 'NoneType'"Richard Purdie2022-04-051-14/+14
| | | | | | | | | This reverts commit ef49f89c89889466ee3696ab680f8e10c961a677. This appears to cause build failures which didn't originally show up in testing, reverting for now. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
* meta: rust: Bug fix for target definitions returning 'NoneType'Sundeep KOKKONDA2022-04-051-14/+14
| | | | | | | | | | | | | | | The build shows below error while building for arm machines. Exception: TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType' Detailed error info : https://lists.openembedded.org/g/openembedded-core/message/164004 All the target definitions within tspec dictionary are generted as NoneType. The changes will fix this issue. (From OE-Core rev: ef49f89c89889466ee3696ab680f8e10c961a677) Signed-off-by: Sundeep KOKKONDA <sundeep.kokkonda@gmail.com> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
* rust: Introduce arch_to_rust_arch()Andrew Jeffery2022-03-021-3/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | On modern Power systems `uname -m` yields 'ppc64le' while the toolchain knows the architecture as 'powerpc64le'. Provide a mapping from one to the other to integrate with the existing architecture configuration flags. arch_to_rust_arch() only exists to map the OE *_ARCH variables before any further processing, unlike arch_to_rust_target_arch() which is specific to the internal triple handling of rust. On Linux ppc64le systems the changes give the following config: ``` $ cat ./tmp/work/ppc64le-linux/rust-native/1.58.0-r0/targets/ppc64le-linux.json { "llvm-target": "powerpc64le-unknown-linux-gnu", "data-layout": "e-m:e-i64:64-n32:64-v256:256:256-v512:512:512", "max-atomic-width": 64, "target-pointer-width": "64", "target-c-int-width": "64", "target-endian": "little", "arch": "powerpc64", "os": "linux", "env": "gnu", "vendor": "unknown", "target-family": "unix", "linker": "gcc", "cpu": "generic", "dynamic-linking": true, "executables": true, "linker-is-gnu": true, "linker-flavor": "gcc", "has-rpath": true, "has-elf-tls": true, "position-independent-executables": true, "panic-strategy": "unwind" } ``` Change-Id: Ief0c01189185d7d4da31d307270bec4e1de674ca (From OE-Core rev: 9ab61e3cfef0157393cb870d606c2f362e190889) Signed-off-by: Andrew Jeffery <andrew@aj.id.au> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
* rust: add support for big endian 64-bit PowerPCDavid Joyner2021-10-271-0/+8
| | | | | | | | (From OE-Core rev: 91cc84afbfa6aad154f9a6402b538ea1b7c0ecd4) Signed-off-by: David Joyner <dbjoyner@amazon.com> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
* rust: generate target definitions from (arch, abi), not just archAlexander Kanavin2021-10-141-22/+35
| | | | | | | | | | This allows to add the missing x32 definition and others in the future. (From OE-Core rev: 79bd6389585327820dfc1a1d29f60779ef08b2e0) Signed-off-by: Alexander Kanavin <alex@linutronix.de> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
* rust: do not write ar into target json definitionsAlexander Kanavin2021-10-141-1/+0
| | | | | | | | | | | latest rust does not use it and prints a ton of warnings because of it. (From OE-Core rev: 320f2c5aa535237fab4f4a1e6f75358f53221459) Signed-off-by: Alexander Kanavin <alex@linutronix.de> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
* 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 <Randy.MacLeod@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
* rust-common.inc: Fix build failure with qemuppc64.Vinay Kumar2021-08-261-0/+2
| | | | | | | | | | | | | The glibc build of "rust-hello-world" throws error in libstd-rs package. error: unrecognized arch "powerpc64le" in target specification The same got fixed by changing the arch to "powerpc64". (From OE-Core rev: 1a28dd447c248f6b7f0efd121160ac798e2abf0c) Signed-off-by: Vinay Kumar <vinay.m.engg@gmail.com> Signed-off-by: Randy MacLeod <Randy.MacLeod@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
* rust: initial merge of most of meta-rustRandy MacLeod2021-08-261-0/+346
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/crate.py ../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/packagegroup-rust-cross-canadian.bb ../oe-core/meta/recipes-core/packagegroups (From OE-Core rev: 3ed57578cca93ff1ba4e0bf3f25566e10659a2f9) Signed-off-by: Randy MacLeod <Randy.MacLeod@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>