diff --git a/classes/rust-common.bbclass b/classes/rust-common.bbclass index 45bb06a..b30ea5e 100644 --- a/classes/rust-common.bbclass +++ b/classes/rust-common.bbclass @@ -8,6 +8,10 @@ def rust_target(d, spec_type): arch = d.getVar('%s_ARCH' % spec_type, True) os = d.getVar('%s_OS' % spec_type, True) + # Make sure that tasks properly recalculate after ARCH or OS change + d.appendVarFlag("rust_target", "vardeps", " %s_ARCH" % spec_type) + d.appendVarFlag("rust_target", "vardeps", " %s_OS" % spec_type) + # Sometimes bitbake mixes the calling convention into the OS, sometimes it # doesn't... let's just take the first part os = os.split('-')[0] diff --git a/recipes-devtools/rust/cargo-bin-cross.inc b/recipes-devtools/rust/cargo-bin-cross.inc index 1b78f32..1f74d17 100644 --- a/recipes-devtools/rust/cargo-bin-cross.inc +++ b/recipes-devtools/rust/cargo-bin-cross.inc @@ -10,11 +10,13 @@ PN = "cargo-bin-cross-${TARGET_ARCH}" CARGO_HOST_TARGET = "${@rust_target(d, 'HOST')}" -SYSROOT_DIRS_NATIVE += "${prefix}" -SYSROOT_DIRS_BLACKLIST += "\ - ${prefix}/share \ - ${prefix}/etc \ -" +SYSROOT_PREPROCESS_FUNCS = "cargo_process_sysroot" +cargo_process_sysroot() { + sysroot_stage_dir ${D}${prefix}/bin ${SYSROOT_DESTDIR}${prefix}/bin + sysroot_stage_dir ${D}${prefix}/lib ${SYSROOT_DESTDIR}${prefix}/lib + rm -rf ${SYSROOT_DESTDIR}${prefix}/share + rm -rf ${SYSROOT_DESTDIR}${prefix}/etc +} # Stripping fails because of mixed arch types (host and target) INHIBIT_PACKAGE_STRIP = "1" @@ -36,6 +38,9 @@ python () { (cargo_url(target), cargo_md5(target), cargo_sha256(target), d.getVar("PN", True) + "-" + pv + "-" + target + ".tar.gz")) src_uri = d.getVar("SRC_URI", True).split() + cargo_extract_path = cargo_url(target).split('/')[-1].replace('.tar.gz', '') d.setVar("SRC_URI", ' '.join(src_uri + [cargo_uri])) - d.setVar("S", "{}/{}".format(d.getVar("WORKDIR", True), cargo_url(target).split('/')[-1].replace('.tar.gz', ''))) + d.setVar("S", "${{WORKDIR}}/{}".format(cargo_extract_path)) + d.appendVarFlag("S", "vardeps", " cargo_url") + d.appendVarFlag("S", "vardepsexclude", " WORKDIR") } diff --git a/recipes-devtools/rust/rust-bin-cross.inc b/recipes-devtools/rust/rust-bin-cross.inc index df606e0..f6b749b 100644 --- a/recipes-devtools/rust/rust-bin-cross.inc +++ b/recipes-devtools/rust/rust-bin-cross.inc @@ -22,11 +22,16 @@ RUST_ALL_TARGETS = "${RUST_BUILD_TARGET} ${RUST_TARGET_TARGET} ${EXTRA_RUST_TARG S = "${WORKDIR}/rustc-${PV}-${RUST_BUILD_TARGET}" -SYSROOT_DIRS_NATIVE += "${prefix}" -SYSROOT_DIRS_BLACKLIST += "\ - ${prefix}/share \ - ${prefix}/etc \ -" +# Relocating WORKDIR doesn't matter to installer +S[vardepsexclude] += "WORKDIR" + +SYSROOT_PREPROCESS_FUNCS = "rust_process_sysroot" +rust_process_sysroot() { + sysroot_stage_dir ${D}${prefix}/bin ${SYSROOT_DESTDIR}${prefix}/bin + sysroot_stage_dir ${D}${prefix}/lib ${SYSROOT_DESTDIR}${prefix}/lib + rm -rf ${SYSROOT_DESTDIR}${prefix}/share + rm -rf ${SYSROOT_DESTDIR}${prefix}/etc +} # Stripping fails because of mixed arch types (host and target) INHIBIT_PACKAGE_STRIP = "1"