[prev in list] [next in list] [prev in thread] [next in thread]
List: openembedded-core
Subject: [OE-core] [PATCH v2 1/3] rust: Introduce arch_to_rust_arch()
From: "Andrew Jeffery" <andrew () aj ! id ! au>
Date: 2022-02-28 14:51:46
Message-ID: 20220228143948.50809-2-andrew () aj ! id ! au
[Download RAW message or body]
Content-Transfer-Encoding: 8bit
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
Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
---
meta/classes/base.bbclass | 2 +-
meta/classes/rust-common.bbclass | 2 +-
meta/lib/oe/rust.py | 5 +++++
meta/recipes-devtools/rust/rust-common.inc | 8 +++++---
4 files changed, 12 insertions(+), 5 deletions(-)
create mode 100644 meta/lib/oe/rust.py
diff --git a/meta/classes/base.bbclass b/meta/classes/base.bbclass
index 55f654d37d0c..27c1d6168d45 100644
--- a/meta/classes/base.bbclass
+++ b/meta/classes/base.bbclass
@@ -12,7 +12,7 @@ inherit logging
OE_EXTRA_IMPORTS ?= ""
-OE_IMPORTS += "os sys time oe.path oe.utils oe.types oe.package oe.packagegroup \
oe.sstatesig oe.lsb oe.cachedpath oe.license oe.qa oe.reproducible \
${OE_EXTRA_IMPORTS}" +OE_IMPORTS += "os sys time oe.path oe.utils oe.types oe.package \
oe.packagegroup oe.sstatesig oe.lsb oe.cachedpath oe.license oe.qa oe.reproducible \
oe.rust ${OE_EXTRA_IMPORTS}" OE_IMPORTS[type] = "list"
PACKAGECONFIG_CONFARGS ??= ""
diff --git a/meta/classes/rust-common.bbclass b/meta/classes/rust-common.bbclass
index 98d65970e8c0..8cfe864ca3fd 100644
--- a/meta/classes/rust-common.bbclass
+++ b/meta/classes/rust-common.bbclass
@@ -65,7 +65,7 @@ def rust_base_triple(d, thing):
if thing == "TARGET" and target_is_armv7(d):
arch = "armv7"
else:
- arch = d.getVar('{}_ARCH'.format(thing))
+ arch = oe.rust.arch_to_rust_arch(d.getVar('{}_ARCH'.format(thing)))
# All the Yocto targets are Linux and are 'unknown'
vendor = "-unknown"
diff --git a/meta/lib/oe/rust.py b/meta/lib/oe/rust.py
new file mode 100644
index 000000000000..ec70b348054d
--- /dev/null
+++ b/meta/lib/oe/rust.py
@@ -0,0 +1,5 @@
+# Handle mismatches between `uname -m`-style output and Rust's arch names
+def arch_to_rust_arch(arch):
+ if arch == "ppc64le":
+ return "powerpc64le"
+ return arch
diff --git a/meta/recipes-devtools/rust/rust-common.inc \
b/meta/recipes-devtools/rust/rust-common.inc index ceeee9786376..310aecef226e 100644
--- a/meta/recipes-devtools/rust/rust-common.inc
+++ b/meta/recipes-devtools/rust/rust-common.inc
@@ -313,10 +313,12 @@ def rust_gen_target(d, thing, wd, features, cpu, arch, abi=""):
sys = sys_for(d, thing)
prefix = prefix_for(d, thing)
+ rust_arch = oe.rust.arch_to_rust_arch(arch)
+
if abi:
- arch_abi = "{}-{}".format(arch, abi)
+ arch_abi = "{}-{}".format(rust_arch, abi)
else:
- arch_abi = arch
+ arch_abi = rust_arch
features = features or d.getVarFlag('FEATURES', arch_abi) or ""
features = features.strip()
@@ -329,7 +331,7 @@ def rust_gen_target(d, thing, wd, features, cpu, arch, abi=""):
tspec['target-pointer-width'] = d.getVarFlag('TARGET_POINTER_WIDTH', arch_abi)
tspec['target-c-int-width'] = d.getVarFlag('TARGET_C_INT_WIDTH', arch_abi)
tspec['target-endian'] = d.getVarFlag('TARGET_ENDIAN', arch_abi)
- tspec['arch'] = arch_to_rust_target_arch(arch)
+ tspec['arch'] = arch_to_rust_target_arch(rust_arch)
tspec['os'] = "linux"
if "musl" in tspec['llvm-target']:
tspec['env'] = "musl"
--
2.32.0
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#162502): https://lists.openembedded.org/g/openembedded-core/message/162502
Mute This Topic: https://lists.openembedded.org/mt/89451431/4454766
Group Owner: openembedded-core+owner@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [openembedded-core@marc.info]
-=-=-=-=-=-=-=-=-=-=-=-
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic