Files
meta-rust/classes/cargo.bbclass
T
Derek Straka 961e5935bb Merge remote-tracking branch 'upstream/master' into merge-upstream
Conflicts:
	conf/distro/include/rust_security_flags.inc
	conf/layer.conf
	recipes-devtools/cargo/cargo_git.bb
	recipes-devtools/cargo/files/0001-update-Rust.patch
	recipes-devtools/cargo/files/0001-update-pkg-versions.patch
	recipes-devtools/cargo/files/curl-rust/0001-curl-sys-avoid-explicitly-linking-in-openssl.-If-it-.patch
	recipes-devtools/cargo/files/curl-rust/0002-remove-per-triple-deps-on-openssl-sys.patch
	recipes-devtools/cargo/files/git2-rs/0001-Add-generic-openssl-sys-dep.patch
	recipes-devtools/cargo/files/git2-rs/0002-libgit2-sys-avoid-the-build-script-it-is-a-disaster.patch
	recipes-devtools/cargo/files/git2-rs/0003-bump-libssh2-to-fix-build-with-nightly.patch
	recipes-devtools/cargo/files/ssh2-rs/0001-Unconditionally-depend-on-openssl-sys.patch
	recipes-devtools/rust/files/rust-1.3.0/0001-platform.mk-avoid-choking-on-i586.patch
	recipes-devtools/rust/files/rust-1.3.0/0002-Target-add-default-target.json-path-libdir-rust-targ.patch
	recipes-devtools/rust/files/rust-1.3.0/0003-mk-for-stage0-use-RUSTFLAGS-to-override-target-libs-.patch
	recipes-devtools/rust/files/rust-1.3.0/0004-mk-add-missing-CFG_LIBDIR_RELATIVE.patch
	recipes-devtools/rust/files/rust-1.3.0/0005-configure-support-bindir-and-extend-libdir-to-non-bl.patch
	recipes-devtools/rust/files/rust-1.3.0/0006-std-thread_local-workaround-for-NULL-__dso_handle.patch
	recipes-devtools/rust/files/rust-1.3.0/0007-mk-install-use-disable-rewrite-paths.patch
	recipes-devtools/rust/files/rust-1.3.0/0008-install-disable-ldconfig.patch
	recipes-devtools/rust/files/rust-1.3.0/0009-Remove-crate-metadata-from-symbol-hashing.patch
	recipes-devtools/rust/files/rust-1.3.0/0010-mk-tell-rustc-that-we-re-only-looking-for-native-lib.patch
	recipes-devtools/rust/files/rust-git/0001-platform.mk-avoid-choking-on-i586.patch
	recipes-devtools/rust/files/rust-git/0002-Target-add-default-target.json-path-libdir-rust-targ.patch
	recipes-devtools/rust/files/rust-git/0003-mk-for-stage0-use-RUSTFLAGS-to-override-target-libs-.patch
	recipes-devtools/rust/files/rust-git/0004-mk-add-missing-CFG_LIBDIR_RELATIVE.patch
	recipes-devtools/rust/files/rust-git/0005-configure-support-bindir-and-extend-libdir-to-non-bl.patch
	recipes-devtools/rust/files/rust-git/0006-std-thread_local-workaround-for-NULL-__dso_handle.patch
	recipes-devtools/rust/files/rust-git/0007-mk-install-use-disable-rewrite-paths.patch
	recipes-devtools/rust/files/rust-git/0008-install-disable-ldconfig.patch
	recipes-devtools/rust/files/rust/0001-platform.mk-avoid-choking-on-i586.patch
	recipes-devtools/rust/files/rust/0002-Target-add-default-target.json-path-libdir-rust-targ.patch
	recipes-devtools/rust/files/rust/0003-mk-for-stage0-use-RUSTFLAGS-to-override-target-libs-.patch
	recipes-devtools/rust/files/rust/0004-mk-add-missing-CFG_LIBDIR_RELATIVE.patch
	recipes-devtools/rust/files/rust/0005-configure-support-bindir-and-extend-libdir-to-non-bl.patch
	recipes-devtools/rust/files/rust/0006-std-thread_local-workaround-for-NULL-__dso_handle.patch
	recipes-devtools/rust/files/rust/0009-Remove-crate-metadata-from-symbol-hashing.patch
	recipes-devtools/rust/rust-1.3.0.inc
	recipes-devtools/rust/rust-git.inc
	recipes-devtools/rust/rust-llvm_1.3.0.bb
	recipes-devtools/rust/rust.inc
	recipes-devtools/rust/rust_1.3.0.bb
	recipes-devtools/rust/rust_git.bb
	recipes/rust/files/rust-1.3.0/0005-configure-support-bindir-and-extend-libdir-to-non-bl.patch
	recipes/rust/files/rust-1.3.0/0006-std-thread_local-workaround-for-NULL-__dso_handle.patch
	recipes/rust/files/rust-git/0001-platform.mk-avoid-choking-on-i586.patch
	recipes/rust/files/rust-git/0002-Target-add-default-target.json-path-libdir-rust-targ.patch
	recipes/rust/files/rust-git/0003-mk-for-stage0-use-RUSTFLAGS-to-override-target-libs-.patch
2016-02-22 13:18:47 -05:00

117 lines
3.3 KiB
Plaintext

inherit rust
CARGO ?= "cargo"
export CARGO_HOME = "${WORKDIR}/cargo_home"
def cargo_base_dep(d):
deps = ""
if not d.getVar('INHIBIT_DEFAULT_DEPS', True) and not d.getVar('INHIBIT_CARGO_DEP', True):
deps += " cargo-native"
return deps
BASEDEPENDS_append = " ${@cargo_base_dep(d)}"
# FIXME: this is a workaround for a misbehavior in cargo when used with quilt.
# See https://github.com/rust-lang/cargo/issues/978
PATCHTOOL = "patch"
# Cargo only supports in-tree builds at the moment
B = "${S}"
# In case something fails in the build process, give a bit more feedback on
# where the issue occured
export RUST_BACKTRACE = "1"
# The pkg-config-rs library used by cargo build scripts disables itself when
# cross compiling unless this is defined. We set up pkg-config appropriately
# for cross compilation, so tell it we know better than it.
export PKG_CONFIG_ALLOW_CROSS = "1"
EXTRA_OECARGO_PATHS ??= ""
cargo_do_configure () {
# FIXME: we currently make a mess in the directory above us
# (${WORKDIR}), which may not be ideal. Look into whether this is
# allowed
mkdir -p ../.cargo
# NOTE: we cannot pass more flags via this interface, the 'linker' is
# assumed to be a path to a binary. If flags are needed, a wrapper must
# be used.
echo "paths = [" >../.cargo/config
for p in ${EXTRA_OECARGO_PATHS}; do
printf "\"%s\"\n" "$p"
done | sed -e 's/$/,/' >>../.cargo/config
echo "]" >>../.cargo/config
}
rust_cargo_patch () {
# FIXME: if there is already an entry for this target, in an existing
# cargo/config, this won't work.
cd "${S}"
cat >>Cargo.toml <<EOF
[profile.dev]
rpath = true
[profile.release]
rpath = true
EOF
}
# All the rust & cargo ecosystem assume that CC, LD, etc are a path to a single
# command. Fixup the ones we give it so that is the case.
# XXX: this is hard coded based on meta/conf/bitbake.conf
# TODO: we do quite a bit very similar to this in rust.inc, see if it can be
# generalized.
export RUST_CC = "${CCACHE}${HOST_PREFIX}gcc"
export RUST_CFLAGS = "${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS} ${CFLAGS}"
export RUST_BUILD_CC = "${CCACHE}${BUILD_PREFIX}gcc"
export RUST_BUILD_CFLAGS = "${BUILD_CC_ARCH} ${BUILD_CFLAGS}"
export CARGO_BUILD_FLAGS = "-v --target ${HOST_SYS} --release"
# This is based on the content of CARGO_BUILD_FLAGS and generally will need to
# change if CARGO_BUILD_FLAGS changes.
export CARGO_TARGET_SUBDIR="${HOST_SYS}/release"
oe_cargo_build () {
echo "cargo: $(which cargo)"
echo "rustc: $(which rustc)"
bbnote ${CARGO} build ${CARGO_BUILD_FLAGS} "$@"
"${CARGO}" build ${CARGO_BUILD_FLAGS} "$@"
}
oe_cargo_fix_env () {
export CC="${RUST_CC}"
export CFLAGS="${RUST_CFLAGS}"
export AR="${AR}"
export TARGET_CC="${RUST_CC}"
export TARGET_CFLAGS="${RUST_CFLAGS}"
export TARGET_AR="${AR}"
export HOST_CC="${RUST_BUILD_CC}"
export HOST_CFLAGS="${RUST_BUILD_CFLAGS}"
export HOST_AR="${BUILD_AR}"
}
cargo_do_compile () {
cd "${B}"
oe_cargo_fix_env
oe_cargo_build
}
# All but the most simple projects will need to override this.
cargo_do_install () {
local have_installed=false
install -d "${D}${bindir}"
for tgt in "${B}/target/${CARGO_TARGET_SUBDIR}/"*; do
if [ -f "$tgt" ] && [ -x "$tgt" ]; then
install -m755 "$tgt" "${D}${bindir}"
have_installed=true
fi
done
if ! $have_installed; then
die "Did not find anything to install"
fi
}
EXPORT_FUNCTIONS do_compile do_install do_configure