diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2022-08-05 13:15:31 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2022-08-08 15:44:20 +0100 |
commit | b1d8d2a3bfe40d83a651448bcd0eeb01434b7ad1 (patch) | |
tree | 8266c80e68acab46fed9e1831149100c31e50a84 /meta/classes | |
parent | 9a093d034889bff444a5801313e24c39a323d7ef (diff) | |
download | poky-b1d8d2a3bfe40d83a651448bcd0eeb01434b7ad1.tar.gz |
rust: Generate per recipe target configuration files
Instead of generating target configuration files centrally and often getting
it wrong, or having trouble finding the right set, generate them dynamically
from the bbclass into WORKDIR per recipe.
(From OE-Core rev: 9160e4a37561d8ac882057450a818621bec13bed)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes')
-rw-r--r-- | meta/classes/cargo.bbclass | 3 | ||||
-rw-r--r-- | meta/classes/rust-bin.bbclass | 1 | ||||
-rw-r--r-- | meta/classes/rust-common.bbclass | 2 | ||||
-rw-r--r-- | meta/classes/rust-target-config.bbclass | 18 |
4 files changed, 12 insertions, 12 deletions
diff --git a/meta/classes/cargo.bbclass b/meta/classes/cargo.bbclass index 539ff03ec7..2475d05b3d 100644 --- a/meta/classes/cargo.bbclass +++ b/meta/classes/cargo.bbclass | |||
@@ -4,6 +4,7 @@ | |||
4 | ## Cargo. | 4 | ## Cargo. |
5 | 5 | ||
6 | inherit cargo_common | 6 | inherit cargo_common |
7 | inherit rust-target-config | ||
7 | 8 | ||
8 | # the binary we will use | 9 | # the binary we will use |
9 | CARGO = "cargo" | 10 | CARGO = "cargo" |
@@ -40,7 +41,7 @@ BUILD_DIR = "${@['release', 'debug'][d.getVar('DEBUG_BUILD') == '1']}" | |||
40 | CARGO_TARGET_SUBDIR="${RUST_HOST_SYS}/${BUILD_DIR}" | 41 | CARGO_TARGET_SUBDIR="${RUST_HOST_SYS}/${BUILD_DIR}" |
41 | oe_cargo_build () { | 42 | oe_cargo_build () { |
42 | export RUSTFLAGS="${RUSTFLAGS}" | 43 | export RUSTFLAGS="${RUSTFLAGS}" |
43 | export RUST_TARGET_PATH="${RUST_TARGET_PATH}" | 44 | bbnote "Using rust targets from ${RUST_TARGET_PATH}" |
44 | bbnote "cargo = $(which ${CARGO})" | 45 | bbnote "cargo = $(which ${CARGO})" |
45 | bbnote "rustc = $(which ${RUSTC})" | 46 | bbnote "rustc = $(which ${RUSTC})" |
46 | bbnote "${CARGO} build ${CARGO_BUILD_FLAGS} $@" | 47 | bbnote "${CARGO} build ${CARGO_BUILD_FLAGS} $@" |
diff --git a/meta/classes/rust-bin.bbclass b/meta/classes/rust-bin.bbclass index c87343b3cf..7a70a7b6ba 100644 --- a/meta/classes/rust-bin.bbclass +++ b/meta/classes/rust-bin.bbclass | |||
@@ -93,7 +93,6 @@ do_configure () { | |||
93 | } | 93 | } |
94 | 94 | ||
95 | oe_runrustc () { | 95 | oe_runrustc () { |
96 | export RUST_TARGET_PATH="${RUST_TARGET_PATH}" | ||
97 | bbnote ${RUSTC} ${RUSTC_ARCHFLAGS} ${RUSTC_FLAGS} "$@" | 96 | bbnote ${RUSTC} ${RUSTC_ARCHFLAGS} ${RUSTC_FLAGS} "$@" |
98 | "${RUSTC}" ${RUSTC_ARCHFLAGS} ${RUSTC_FLAGS} "$@" | 97 | "${RUSTC}" ${RUSTC_ARCHFLAGS} ${RUSTC_FLAGS} "$@" |
99 | } | 98 | } |
diff --git a/meta/classes/rust-common.bbclass b/meta/classes/rust-common.bbclass index 1bce7761ab..adcf96f0cd 100644 --- a/meta/classes/rust-common.bbclass +++ b/meta/classes/rust-common.bbclass | |||
@@ -1,4 +1,5 @@ | |||
1 | inherit python3native | 1 | inherit python3native |
2 | inherit rust-target-config | ||
2 | 3 | ||
3 | # Common variables used by all Rust builds | 4 | # Common variables used by all Rust builds |
4 | export rustlibdir = "${libdir}/rust" | 5 | export rustlibdir = "${libdir}/rust" |
@@ -10,7 +11,6 @@ RUSTLIB = "-L ${STAGING_LIBDIR}/rust" | |||
10 | RUST_DEBUG_REMAP = "--remap-path-prefix=${WORKDIR}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}" | 11 | RUST_DEBUG_REMAP = "--remap-path-prefix=${WORKDIR}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}" |
11 | RUSTFLAGS += "${RUSTLIB} ${RUST_DEBUG_REMAP}" | 12 | RUSTFLAGS += "${RUSTLIB} ${RUST_DEBUG_REMAP}" |
12 | RUSTLIB_DEP ?= "libstd-rs" | 13 | RUSTLIB_DEP ?= "libstd-rs" |
13 | export RUST_TARGET_PATH = "${STAGING_LIBDIR_NATIVE}/rustlib" | ||
14 | RUST_PANIC_STRATEGY ?= "unwind" | 14 | RUST_PANIC_STRATEGY ?= "unwind" |
15 | 15 | ||
16 | # Native builds are not effected by TCLIBC. Without this, rust-native | 16 | # Native builds are not effected by TCLIBC. Without this, rust-native |
diff --git a/meta/classes/rust-target-config.bbclass b/meta/classes/rust-target-config.bbclass index ab177cf59f..bc6bd77abb 100644 --- a/meta/classes/rust-target-config.bbclass +++ b/meta/classes/rust-target-config.bbclass | |||
@@ -292,6 +292,7 @@ def rust_gen_target(d, thing, wd, arch): | |||
292 | import json | 292 | import json |
293 | sys = d.getVar('{}_SYS'.format(thing)) | 293 | sys = d.getVar('{}_SYS'.format(thing)) |
294 | prefix = d.getVar('{}_PREFIX'.format(thing)) | 294 | prefix = d.getVar('{}_PREFIX'.format(thing)) |
295 | rustsys = d.getVar('RUST_{}_SYS'.format(thing)) | ||
295 | 296 | ||
296 | abi = None | 297 | abi = None |
297 | cpu = "generic" | 298 | cpu = "generic" |
@@ -318,13 +319,9 @@ def rust_gen_target(d, thing, wd, arch): | |||
318 | features = features or d.getVarFlag('FEATURES', arch_abi) or "" | 319 | features = features or d.getVarFlag('FEATURES', arch_abi) or "" |
319 | features = features.strip() | 320 | features = features.strip() |
320 | 321 | ||
321 | llvm_target = d.getVar('RUST_TARGET_SYS') | ||
322 | if thing == "BUILD": | ||
323 | llvm_target = d.getVar('RUST_HOST_SYS') | ||
324 | |||
325 | # build tspec | 322 | # build tspec |
326 | tspec = {} | 323 | tspec = {} |
327 | tspec['llvm-target'] = llvm_target | 324 | tspec['llvm-target'] = rustsys |
328 | tspec['data-layout'] = d.getVarFlag('DATA_LAYOUT', arch_abi) | 325 | tspec['data-layout'] = d.getVarFlag('DATA_LAYOUT', arch_abi) |
329 | if tspec['data-layout'] is None: | 326 | if tspec['data-layout'] is None: |
330 | bb.fatal("No rust target defined for %s" % arch_abi) | 327 | bb.fatal("No rust target defined for %s" % arch_abi) |
@@ -358,7 +355,7 @@ def rust_gen_target(d, thing, wd, arch): | |||
358 | tspec['panic-strategy'] = d.getVar("RUST_PANIC_STRATEGY") | 355 | tspec['panic-strategy'] = d.getVar("RUST_PANIC_STRATEGY") |
359 | 356 | ||
360 | # write out the target spec json file | 357 | # write out the target spec json file |
361 | with open(wd + sys + '.json', 'w') as f: | 358 | with open(wd + rustsys + '.json', 'w') as f: |
362 | json.dump(tspec, f, indent=4) | 359 | json.dump(tspec, f, indent=4) |
363 | 360 | ||
364 | # These are accounted for in tmpdir path names so don't need to be in the task sig | 361 | # These are accounted for in tmpdir path names so don't need to be in the task sig |
@@ -366,10 +363,13 @@ rust_gen_target[vardepsexclude] += "ABIEXTENSION llvm_cpu" | |||
366 | 363 | ||
367 | do_rust_gen_targets[vardeps] += "DATA_LAYOUT TARGET_ENDIAN TARGET_POINTER_WIDTH TARGET_C_INT_WIDTH MAX_ATOMIC_WIDTH FEATURES" | 364 | do_rust_gen_targets[vardeps] += "DATA_LAYOUT TARGET_ENDIAN TARGET_POINTER_WIDTH TARGET_C_INT_WIDTH MAX_ATOMIC_WIDTH FEATURES" |
368 | 365 | ||
369 | RUST_TARGETGENS = "BUILD" | 366 | RUST_TARGETS_DIR = "${WORKDIR}/rust-targets/" |
367 | export RUST_TARGET_PATH = "${RUST_TARGETS_DIR}" | ||
368 | |||
369 | RUST_TARGETGENS = "BUILD HOST TARGET" | ||
370 | 370 | ||
371 | python do_rust_gen_targets () { | 371 | python do_rust_gen_targets () { |
372 | wd = d.getVar('WORKDIR') + '/targets/' | 372 | wd = d.getVar('RUST_TARGETS_DIR') |
373 | # Order of BUILD, HOST, TARGET is important in case the files overwrite, most specific last | 373 | # Order of BUILD, HOST, TARGET is important in case the files overwrite, most specific last |
374 | rust_gen_target(d, 'BUILD', wd, d.getVar('BUILD_ARCH')) | 374 | rust_gen_target(d, 'BUILD', wd, d.getVar('BUILD_ARCH')) |
375 | if "HOST" in d.getVar("RUST_TARGETGENS"): | 375 | if "HOST" in d.getVar("RUST_TARGETGENS"): |
@@ -379,5 +379,5 @@ python do_rust_gen_targets () { | |||
379 | } | 379 | } |
380 | 380 | ||
381 | addtask rust_gen_targets after do_patch before do_compile | 381 | addtask rust_gen_targets after do_patch before do_compile |
382 | do_rust_gen_targets[dirs] += "${WORKDIR}/targets" | 382 | do_rust_gen_targets[dirs] += "${RUST_TARGETS_DIR}" |
383 | 383 | ||