From 5afc0cc471eef5c18bbce9bc54aed6110e7c55eb Mon Sep 17 00:00:00 2001 From: Doug Goldstein Date: Wed, 23 Nov 2016 14:03:58 -0600 Subject: [PATCH] cargo.bbclass: ensure extra RUSTFLAGS are properly passed The RUSTFLAGS env var overrides the rustflags specified in the cargo config so we need to take anything passed in the environment variable and put it in the config. --- classes/cargo.bbclass | 23 +++++++++++++++-------- recipes-devtools/cargo/cargo.inc | 4 ++++ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/classes/cargo.bbclass b/classes/cargo.bbclass index a3d0343..2ddf3c3 100644 --- a/classes/cargo.bbclass +++ b/classes/cargo.bbclass @@ -49,14 +49,20 @@ replace-with = "local" registry = "https://github.com/rust-lang/crates.io-index" EOF - # We need to use the real Yocto linker and get the linker - # flags to it. Yocto has the concept of BUILD and TARGET - # and uses HOST to be the currently selected one. However - # LDFLAGS and TOOLCHAIN_OPTIONS are not prefixed with HOST - echo "[build]" >> ${CARGO_HOME}/config - echo "rustflags = ['-C', 'link-args=${LDFLAGS}${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}']" >> ${CARGO_HOME}/config - echo "[target.${RUST_HOST_SYS}]" >> ${CARGO_HOME}/config - echo "linker = '${HOST_PREFIX}gcc'" >> ${CARGO_HOME}/config + # We need to use the real Yocto linker and get the linker + # flags to it. Yocto has the concept of BUILD and TARGET + # and uses HOST to be the currently selected one. However + # LDFLAGS and TOOLCHAIN_OPTIONS are not prefixed with HOST + echo "[build]" >> ${CARGO_HOME}/config + echo "rustflags = [" >> ${CARGO_HOME}/config + echo "'-C'," >> ${CARGO_HOME}/config + echo "'link-args=${LDFLAGS}${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}'," >> ${CARGO_HOME}/config + for p in ${RUSTFLAGS}; do + printf "'%s'\n" "$p" + done | sed -e 's/$/,/' >> ${CARGO_HOME}/config + echo "]" >> ${CARGO_HOME}/config + echo "[target.${RUST_HOST_SYS}]" >> ${CARGO_HOME}/config + echo "linker = '${HOST_PREFIX}gcc'" >> ${CARGO_HOME}/config } # All the rust & cargo ecosystem assume that CC, LD, etc are a path to a single @@ -75,6 +81,7 @@ CARGO_BUILD_FLAGS = "-v --target ${HOST_SYS} --release" # change if CARGO_BUILD_FLAGS changes. CARGO_TARGET_SUBDIR="${HOST_SYS}/release" oe_cargo_build () { + unset RUSTFLAGS bbnote "cargo = $(which cargo)" bbnote "rustc = $(which rustc)" bbnote "${CARGO} build ${CARGO_BUILD_FLAGS} $@" diff --git a/recipes-devtools/cargo/cargo.inc b/recipes-devtools/cargo/cargo.inc index 0d4edd1..efa0988 100644 --- a/recipes-devtools/cargo/cargo.inc +++ b/recipes-devtools/cargo/cargo.inc @@ -67,6 +67,10 @@ SRC_URI = "\ B = "${S}" +# Can't use the default from rust-vars as it cause a compiler crash +# the crate_hash option will cause the compiler to crash +RUSTFLAGS = "-C rpath ${RUSTLIB}" + PACKAGECONFIG ??= "" # Note: this does not appear to work very well due to our use of bitbake triples