diff --git a/classes/cargo.bbclass b/classes/cargo.bbclass index 61f1324..9bbc49d 100644 --- a/classes/cargo.bbclass +++ b/classes/cargo.bbclass @@ -1,13 +1,13 @@ -# add crate fetch support -inherit crate-fetch -inherit rust-common +## +## Purpose: +## This class is used by any recipes that are built using +## Cargo. + +inherit cargo_common # the binary we will use CARGO = "cargo" -# Where we download our registry and dependencies to -export CARGO_HOME = "${WORKDIR}/cargo_home" - # We need cargo to compile for the target BASEDEPENDS_append = " cargo-native" @@ -22,66 +22,22 @@ B = "${S}" # 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" - -cargo_do_configure () { - mkdir -p ${CARGO_HOME} - echo "paths = [" > ${CARGO_HOME}/config - - for p in ${EXTRA_OECARGO_PATHS}; do - printf "\"%s\"\n" "$p" - done | sed -e 's/$/,/' >> ${CARGO_HOME}/config - echo "]" >> ${CARGO_HOME}/config - - # Point cargo at our local mirror of the registry - cat <<- EOF >> ${CARGO_HOME}/config - [source.bitbake] - directory = "${CARGO_HOME}/bitbake" - - [source.crates-io] - replace-with = "bitbake" - local-registry = "/nonexistant" - EOF - - echo "[target.${HOST_SYS}]" >> ${CARGO_HOME}/config - echo "linker = '${RUST_TARGET_CCLD}'" >> ${CARGO_HOME}/config - if [ "${HOST_SYS}" != "${BUILD_SYS}" ]; then - echo "[target.${BUILD_SYS}]" >> ${CARGO_HOME}/config - echo "linker = '${RUST_BUILD_CCLD}'" >> ${CARGO_HOME}/config - fi -} - RUSTFLAGS ??= "" CARGO_BUILD_FLAGS = "-v --target ${HOST_SYS} --release" +RUST_TARGET_PATH = "${STAGING_LIBDIR_NATIVE}/rustlib" # This is based on the content of CARGO_BUILD_FLAGS and generally will need to # change if CARGO_BUILD_FLAGS changes. CARGO_TARGET_SUBDIR="${HOST_SYS}/release" oe_cargo_build () { export RUSTFLAGS="${RUSTFLAGS}" - bbnote "cargo = $(which cargo)" - bbnote "rustc = $(which rustc)" + export RUST_TARGET_PATH="${RUST_TARGET_PATH}" + bbnote "cargo = $(which ${CARGO})" + bbnote "rustc = $(which ${RUSTC})" bbnote "${CARGO} build ${CARGO_BUILD_FLAGS} $@" "${CARGO}" build ${CARGO_BUILD_FLAGS} "$@" } -oe_cargo_fix_env () { - export CC="${RUST_TARGET_CC}" - export CFLAGS="${CFLAGS}" - export AR="${AR}" - export TARGET_CC="${RUST_TARGET_CC}" - export TARGET_CFLAGS="${CFLAGS}" - export TARGET_AR="${AR}" - export HOST_CC="${RUST_BUILD_CC}" - export HOST_CFLAGS="${BUILD_CFLAGS}" - export HOST_AR="${BUILD_AR}" -} - -EXTRA_OECARGO_PATHS ??= "" - cargo_do_compile () { oe_cargo_fix_env oe_cargo_build @@ -105,4 +61,4 @@ cargo_do_install () { fi } -EXPORT_FUNCTIONS do_configure do_compile do_install +EXPORT_FUNCTIONS do_compile do_install diff --git a/classes/cargo_common.bbclass b/classes/cargo_common.bbclass new file mode 100644 index 0000000..9958265 --- /dev/null +++ b/classes/cargo_common.bbclass @@ -0,0 +1,70 @@ +## +## Purpose: +## This class is to support building with cargo. It +## must be different than cargo.bbclass because Rust +## now builds with Cargo but cannot use cargo.bbclass +## due to dependencies and assumptions in cargo.bbclass +## that Rust & Cargo are already installed. So this +## is used by cargo.bbclass and Rust +## + +# add crate fetch support +inherit crate-fetch +inherit rust-common + +# Where we download our registry and dependencies to +export CARGO_HOME = "${WORKDIR}/cargo_home" + +# 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" + +cargo_common_do_configure () { + mkdir -p ${CARGO_HOME} + echo "paths = [" > ${CARGO_HOME}/config + + for p in ${EXTRA_OECARGO_PATHS}; do + printf "\"%s\"\n" "$p" + done | sed -e 's/$/,/' >> ${CARGO_HOME}/config + echo "]" >> ${CARGO_HOME}/config + + # Point cargo at our local mirror of the registry + cat <<- EOF >> ${CARGO_HOME}/config + [source.bitbake] + directory = "${CARGO_HOME}/bitbake" + + [source.crates-io] + replace-with = "bitbake" + local-registry = "/nonexistant" + EOF + + echo "[target.${HOST_SYS}]" >> ${CARGO_HOME}/config + echo "linker = '${RUST_TARGET_CCLD}'" >> ${CARGO_HOME}/config + if [ "${HOST_SYS}" != "${BUILD_SYS}" ]; then + echo "[target.${BUILD_SYS}]" >> ${CARGO_HOME}/config + echo "linker = '${RUST_BUILD_CCLD}'" >> ${CARGO_HOME}/config + fi +} + +oe_cargo_fix_env () { + export CC="${RUST_TARGET_CC}" + export CXX="${RUST_TARGET_CXX}" + export CFLAGS="${CFLAGS}" + export CXXFLAGS="${CXXFLAGS}" + export AR="${AR}" + export TARGET_CC="${RUST_TARGET_CC}" + export TARGET_CXX="${RUST_TARGET_CXX}" + export TARGET_CFLAGS="${CFLAGS}" + export TARGET_CFLAGS="${CXXFLAGS}" + export TARGET_AR="${AR}" + export HOST_CC="${RUST_BUILD_CC}" + export HOST_CXX="${RUST_BUILD_CXX}" + export HOST_CFLAGS="${BUILD_CFLAGS}" + export HOST_CXXFLAGS="${BUILD_CXXFLAGS}" + export HOST_AR="${BUILD_AR}" +} + +EXTRA_OECARGO_PATHS ??= "" + +EXPORT_FUNCTIONS do_configure diff --git a/classes/rust-common.bbclass b/classes/rust-common.bbclass index f79c52e..b76e2d9 100644 --- a/classes/rust-common.bbclass +++ b/classes/rust-common.bbclass @@ -5,7 +5,7 @@ FILES_${PN}-dev += "${rustlibdir}/*.rlib" FILES_${PN}-dbg += "${rustlibdir}/.debug" RUSTLIB = "-L ${STAGING_LIBDIR}/rust" -RUSTFLAGS += "-C rpath ${RUSTLIB}" +RUSTFLAGS += "${RUSTLIB}" RUSTLIB_DEP ?= "libstd-rs" # Responsible for taking Yocto triples and converting it to Rust triples @@ -74,9 +74,11 @@ RUST_TARGET_SYS = "${@rust_base_triple(d, 'TARGET')}" # use those commands based on the prefix. WRAPPER_DIR = "${WORKDIR}/wrapper" RUST_BUILD_CC = "${WRAPPER_DIR}/build-rust-cc" +RUST_BUILD_CXX = "${WRAPPER_DIR}/build-rust-cxx" RUST_BUILD_CCLD = "${WRAPPER_DIR}/build-rust-ccld" RUST_BUILD_AR = "${WRAPPER_DIR}/build-rust-ar" RUST_TARGET_CC = "${WRAPPER_DIR}/target-rust-cc" +RUST_TARGET_CXX = "${WRAPPER_DIR}/target-rust-cxx" RUST_TARGET_CCLD = "${WRAPPER_DIR}/target-rust-ccld" RUST_TARGET_AR = "${WRAPPER_DIR}/target-rust-ar" @@ -97,15 +99,19 @@ create_wrapper () { do_rust_create_wrappers () { mkdir -p "${WRAPPER_DIR}" - # Yocto Build / Rust Host compiler + # Yocto Build / Rust Host C compiler create_wrapper "${RUST_BUILD_CC}" "${BUILD_CC}" + # Yocto Build / Rust Host C++ compiler + create_wrapper "${RUST_BUILD_CXX}" "${BUILD_CXX}" # Yocto Build / Rust Host linker create_wrapper "${RUST_BUILD_CCLD}" "${BUILD_CCLD}" "${BUILD_LDFLAGS}" # Yocto Build / Rust Host archiver create_wrapper "${RUST_BUILD_AR}" "${BUILD_AR}" - # Yocto Target / Rust Target compiler + # Yocto Target / Rust Target C compiler create_wrapper "${RUST_TARGET_CC}" "${CC}" + # Yocto Target / Rust Target C++ compiler + create_wrapper "${RUST_TARGET_CXX}" "${CXX}" # Yocto Target / Rust Target linker create_wrapper "${RUST_TARGET_CCLD}" "${CCLD}" "${LDFLAGS}" # Yocto Target / Rust Target archiver diff --git a/recipes-devtools/cargo/cargo-0.16.0.inc b/recipes-devtools/cargo/cargo-0.16.0.inc new file mode 100644 index 0000000..04d1723 --- /dev/null +++ b/recipes-devtools/cargo/cargo-0.16.0.inc @@ -0,0 +1,11 @@ +CARGO_SNAPSHOT = "2016-09-01/cargo-nightly-x86_64-unknown-linux-gnu.tar.gz;downloadfilename=cargo-nightly-x86_64-unknown-linux-gnu-2016-09-01.tar.gz" +SRC_URI[cargo-snapshot.md5sum] = "d41ebf79290a7c9c9e5df87cb27e5091" +SRC_URI[cargo-snapshot.sha256sum] = "365e5cad79512d244b8ced32f8e5b86a710fc6c17f0d0f5f744b8058ef6dc756" + +SRC_URI += "\ + https://static.rust-lang.org/cargo-dist/${CARGO_SNAPSHOT};name=cargo-snapshot \ +" + +# When building cargo-native we don't have a built cargo to use so we must use +# the snapshot to bootstrap the build of cargo +CARGO_class-native = "${WORKDIR}/cargo-nightly-${RUST_BUILD_SYS}/cargo/bin/cargo" diff --git a/recipes-devtools/cargo/cargo-0.21.0.inc b/recipes-devtools/cargo/cargo-0.21.0.inc new file mode 100644 index 0000000..367ad21 --- /dev/null +++ b/recipes-devtools/cargo/cargo-0.21.0.inc @@ -0,0 +1,11 @@ +CARGO_SNAPSHOT = "cargo-0.20.0-${RUST_BUILD_SYS}" +SRC_URI[cargo-snapshot.md5sum] = "63aa861b029eec9f559f4fb5a10c287d" +SRC_URI[cargo-snapshot.sha256sum] = "a677d13b01d00ad13edf75c7d1b484421c7fc09338bf9ed6d456b4685bb42ed1" + +SRC_URI += "\ + https://static.rust-lang.org/dist/${CARGO_SNAPSHOT}.tar.gz;name=cargo-snapshot \ +" + +# When building cargo-native we don't have a built cargo to use so we must use +# the snapshot to bootstrap the build of cargo +CARGO_class-native = "${WORKDIR}/${CARGO_SNAPSHOT}/cargo/bin/cargo" diff --git a/recipes-devtools/cargo/cargo-snapshot.inc b/recipes-devtools/cargo/cargo-snapshot.inc deleted file mode 100644 index 8f3c28a..0000000 --- a/recipes-devtools/cargo/cargo-snapshot.inc +++ /dev/null @@ -1,4 +0,0 @@ - -CARGO_SNAPSHOT = "2016-09-01/cargo-nightly-x86_64-unknown-linux-gnu.tar.gz;downloadfilename=cargo-nightly-x86_64-unknown-linux-gnu-2016-09-01.tar.gz" -SRC_URI[md5sum] = "d41ebf79290a7c9c9e5df87cb27e5091" -SRC_URI[sha256sum] = "365e5cad79512d244b8ced32f8e5b86a710fc6c17f0d0f5f744b8058ef6dc756" diff --git a/recipes-devtools/cargo/cargo.inc b/recipes-devtools/cargo/cargo.inc index bccb751..2cccef2 100644 --- a/recipes-devtools/cargo/cargo.inc +++ b/recipes-devtools/cargo/cargo.inc @@ -1,56 +1,12 @@ -inherit cargo -inherit patch - -SUMMARY = "Cargo downloads your Rust project's dependencies and builds your project" -HOMEPAGE = "http://crates.io" SECTION = "devel" -LICENSE = "MIT | Apache-2.0" DEPENDS = "openssl zlib libgit2 curl ca-certificates libssh2" -SRC_URI = "\ - http://static-rust-lang-org.s3.amazonaws.com/cargo-dist/${CARGO_SNAPSHOT} \ +LIC_FILES_CHKSUM += " \ +file://LICENSE-THIRD-PARTY;md5=892ea68b169e69cfe75097fc38a15b56 \ " -B = "${S}" - # Used in libgit2-sys's build.rs, needed for pkg-config to be used export LIBGIT2_SYS_USE_PKG_CONFIG = "1" -# cargo's configure doesn't recognize --disable-static, so remove it. -DISABLE_STATIC = "" - -do_configure () { - "${S}/configure" \ - "--prefix=${prefix}" \ - "--build=${BUILD_SYS}" \ - "--host=${HOST_SYS}" \ - "--target=${TARGET_SYS}" \ - "--localstatedir=${localstatedir}" \ - "--sysconfdir=${sysconfdir}" \ - "--datadir=${datadir}" \ - "--infodir=${infodir}" \ - "--mandir=${mandir}" \ - "--libdir=${libdir}" \ - "--disable-verify-install" \ - ${EXTRA_OECONF} \ - || die "Could not configure cargo" - - cargo_do_configure -} - -do_compile () { - oe_cargo_fix_env - - rm -rf target/snapshot - mkdir -p target - cp -R ${WORKDIR}/cargo-nightly-x86_64-unknown-linux-gnu/cargo target/snapshot - - oe_runmake VERBOSE=1 -} - -do_install () { - oe_runmake prepare-image-${TARGET_SYS} IMGDIR_${TARGET_SYS}="${D}${prefix}" -} - BBCLASSEXTEND = "native" diff --git a/recipes-devtools/cargo/cargo_0.16.0.bb b/recipes-devtools/cargo/cargo_0.16.0.bb index 47d447d..8845982 100644 --- a/recipes-devtools/cargo/cargo_0.16.0.bb +++ b/recipes-devtools/cargo/cargo_0.16.0.bb @@ -1,85 +1,103 @@ -require cargo-snapshot.inc -require cargo.inc +# Auto-Generated by cargo-bitbake 0.3.8 +# +inherit cargo -EXTRA_OECONF += "--cargo=${WORKDIR}/cargo-nightly-x86_64-unknown-linux-gnu/cargo/bin/cargo" +# If this is git based prefer versioned ones if they exist +# DEFAULT_PREFERENCE = "-1" +# how to get cargo could be as easy as but default to a git checkout: +# SRC_URI += "crate://crates.io/cargo/0.16.0" +SRC_URI += "git://git@github.com/rust-lang/cargo.git;protocol=https;branch=rust-1.15.1" +SRCREV = "6e0c18cccc8b0c06fba8a8d76486f81a792fb420" +S = "${WORKDIR}/git" +CARGO_SRC_DIR="" + + +# please note if you have entries that do not begin with crate:// +# you must change them to how that package can be fetched SRC_URI += " \ - git://github.com/rust-lang/cargo.git;protocol=https;name=cargo;branch=rust-1.15.1 \ - crate://crates.io/advapi32-sys/0.2.0 \ - crate://crates.io/aho-corasick/0.5.3 \ - crate://crates.io/bitflags/0.7.0 \ - crate://crates.io/bufstream/0.1.2 \ - crate://crates.io/cfg-if/0.1.0 \ - crate://crates.io/cmake/0.1.19 \ - crate://crates.io/crossbeam/0.2.10 \ - crate://crates.io/curl-sys/0.3.6 \ - crate://crates.io/curl/0.4.1 \ - crate://crates.io/docopt/0.6.86 \ - crate://crates.io/env_logger/0.3.5 \ - crate://crates.io/filetime/0.1.10 \ - crate://crates.io/flate2/0.2.14 \ - crate://crates.io/fs2/0.3.0 \ - crate://crates.io/gcc/0.3.39 \ - crate://crates.io/gdi32-sys/0.2.0 \ - crate://crates.io/git2-curl/0.7.0 \ - crate://crates.io/git2/0.6.3 \ - crate://crates.io/glob/0.2.11 \ - crate://crates.io/hamcrest/0.1.1 \ - crate://crates.io/idna/0.1.0 \ - crate://crates.io/kernel32-sys/0.2.2 \ - crate://crates.io/lazy_static/0.2.2 \ - crate://crates.io/libc/0.2.18 \ - crate://crates.io/libgit2-sys/0.6.5 \ - crate://crates.io/libssh2-sys/0.2.4 \ - crate://crates.io/libz-sys/1.0.10 \ - crate://crates.io/log/0.3.6 \ - crate://crates.io/matches/0.1.4 \ - crate://crates.io/memchr/0.1.11 \ - crate://crates.io/miniz-sys/0.1.7 \ - crate://crates.io/miow/0.1.3 \ - crate://crates.io/net2/0.2.26 \ - crate://crates.io/num-bigint/0.1.35 \ - crate://crates.io/num-complex/0.1.35 \ - crate://crates.io/num-integer/0.1.32 \ - crate://crates.io/num-iter/0.1.32 \ - crate://crates.io/num-rational/0.1.35 \ - crate://crates.io/num-traits/0.1.36 \ - crate://crates.io/num/0.1.36 \ - crate://crates.io/num_cpus/1.1.0 \ - crate://crates.io/openssl-probe/0.1.0 \ - crate://crates.io/openssl-sys/0.9.1 \ - crate://crates.io/openssl/0.9.1 \ - crate://crates.io/pkg-config/0.3.8 \ - crate://crates.io/psapi-sys/0.1.0 \ - crate://crates.io/rand/0.3.14 \ - crate://crates.io/regex-syntax/0.3.9 \ - crate://crates.io/regex/0.1.80 \ - crate://crates.io/rustc-serialize/0.3.21 \ - crate://crates.io/semver-parser/0.6.1 \ - crate://crates.io/semver/0.5.1 \ - crate://crates.io/strsim/0.5.1 \ - crate://crates.io/tar/0.4.9 \ - crate://crates.io/tempdir/0.3.5 \ - crate://crates.io/term/0.4.4 \ - crate://crates.io/thread-id/2.0.0 \ - crate://crates.io/thread_local/0.2.7 \ - crate://crates.io/toml/0.2.1 \ - crate://crates.io/unicode-bidi/0.2.3 \ - crate://crates.io/unicode-normalization/0.1.2 \ - crate://crates.io/url/1.2.3 \ - crate://crates.io/user32-sys/0.2.0 \ - crate://crates.io/utf8-ranges/0.1.3 \ - crate://crates.io/winapi-build/0.1.1 \ - crate://crates.io/winapi/0.2.8 \ - crate://crates.io/ws2_32-sys/0.2.1 \ +crate://crates.io/advapi32-sys/0.2.0 \ +crate://crates.io/aho-corasick/0.5.3 \ +crate://crates.io/bitflags/0.7.0 \ +crate://crates.io/bufstream/0.1.2 \ +crate://crates.io/cfg-if/0.1.0 \ +crate://crates.io/cmake/0.1.19 \ +crate://crates.io/crossbeam/0.2.10 \ +crate://crates.io/curl-sys/0.3.6 \ +crate://crates.io/curl/0.4.1 \ +crate://crates.io/docopt/0.6.86 \ +crate://crates.io/env_logger/0.3.5 \ +crate://crates.io/filetime/0.1.10 \ +crate://crates.io/flate2/0.2.14 \ +crate://crates.io/fs2/0.3.0 \ +crate://crates.io/gcc/0.3.39 \ +crate://crates.io/gdi32-sys/0.2.0 \ +crate://crates.io/git2-curl/0.7.0 \ +crate://crates.io/git2/0.6.3 \ +crate://crates.io/glob/0.2.11 \ +crate://crates.io/hamcrest/0.1.1 \ +crate://crates.io/idna/0.1.0 \ +crate://crates.io/kernel32-sys/0.2.2 \ +crate://crates.io/lazy_static/0.2.2 \ +crate://crates.io/libc/0.2.18 \ +crate://crates.io/libgit2-sys/0.6.5 \ +crate://crates.io/libssh2-sys/0.2.4 \ +crate://crates.io/libz-sys/1.0.10 \ +crate://crates.io/log/0.3.6 \ +crate://crates.io/matches/0.1.4 \ +crate://crates.io/memchr/0.1.11 \ +crate://crates.io/miniz-sys/0.1.7 \ +crate://crates.io/miow/0.1.3 \ +crate://crates.io/net2/0.2.26 \ +crate://crates.io/num-bigint/0.1.35 \ +crate://crates.io/num-complex/0.1.35 \ +crate://crates.io/num-integer/0.1.32 \ +crate://crates.io/num-iter/0.1.32 \ +crate://crates.io/num-rational/0.1.35 \ +crate://crates.io/num-traits/0.1.36 \ +crate://crates.io/num/0.1.36 \ +crate://crates.io/num_cpus/1.1.0 \ +crate://crates.io/openssl-probe/0.1.0 \ +crate://crates.io/openssl-sys/0.9.1 \ +crate://crates.io/openssl/0.9.1 \ +crate://crates.io/pkg-config/0.3.8 \ +crate://crates.io/psapi-sys/0.1.0 \ +crate://crates.io/rand/0.3.14 \ +crate://crates.io/regex-syntax/0.3.9 \ +crate://crates.io/regex/0.1.80 \ +crate://crates.io/rustc-serialize/0.3.21 \ +crate://crates.io/semver-parser/0.6.1 \ +crate://crates.io/semver/0.5.1 \ +crate://crates.io/strsim/0.5.1 \ +crate://crates.io/tar/0.4.9 \ +crate://crates.io/tempdir/0.3.5 \ +crate://crates.io/term/0.4.4 \ +crate://crates.io/thread-id/2.0.0 \ +crate://crates.io/thread_local/0.2.7 \ +crate://crates.io/toml/0.2.1 \ +crate://crates.io/unicode-bidi/0.2.3 \ +crate://crates.io/unicode-normalization/0.1.2 \ +crate://crates.io/url/1.2.3 \ +crate://crates.io/user32-sys/0.2.0 \ +crate://crates.io/utf8-ranges/0.1.3 \ +crate://crates.io/winapi-build/0.1.1 \ +crate://crates.io/winapi/0.2.8 \ +crate://crates.io/ws2_32-sys/0.2.1 \ " -SRCREV_cargo = "6e0c18cccc8b0c06fba8a8d76486f81a792fb420" -S = "${WORKDIR}/git" LIC_FILES_CHKSUM=" \ - file://LICENSE-MIT;md5=362255802eb5aa87810d12ddf3cfedb4 \ - file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \ - file://LICENSE-THIRD-PARTY;md5=892ea68b169e69cfe75097fc38a15b56 \ +file://LICENSE-MIT;md5=362255802eb5aa87810d12ddf3cfedb4 \ +file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \ " + +SUMMARY = "Cargo, a package manager for Rust." +HOMEPAGE = "https://crates.io" +LICENSE = "MIT | Apache-2.0" + +# includes this file if it exists but does not fail +# this is useful for anything you may want to override from +# what cargo-bitbake generates. +include cargo-${PV}.inc +include cargo.inc diff --git a/recipes-devtools/cargo/cargo_0.21.0.bb b/recipes-devtools/cargo/cargo_0.21.0.bb new file mode 100644 index 0000000..9f6bc7c --- /dev/null +++ b/recipes-devtools/cargo/cargo_0.21.0.bb @@ -0,0 +1,136 @@ +# Auto-Generated by cargo-bitbake 0.3.8 +# +inherit cargo + +# If this is git based prefer versioned ones if they exist +# DEFAULT_PREFERENCE = "-1" + +# how to get cargo could be as easy as but default to a git checkout: +# SRC_URI += "crate://crates.io/cargo/0.21.0" +SRC_URI += "git://git@github.com/rust-lang/cargo.git;protocol=ssh;branch=rust-1.20.0" +SRCREV = "5b4b8b2ae3f6a884099544ce66dbb41626110ece" +S = "${WORKDIR}/git" +CARGO_SRC_DIR="" + + +# please note if you have entries that do not begin with crate:// +# you must change them to how that package can be fetched +SRC_URI += " \ +crate://crates.io/advapi32-sys/0.2.0 \ +crate://crates.io/aho-corasick/0.5.3 \ +crate://crates.io/aho-corasick/0.6.3 \ +crate://crates.io/atty/0.2.2 \ +crate://crates.io/backtrace-sys/0.1.11 \ +crate://crates.io/backtrace/0.3.2 \ +crate://crates.io/bitflags/0.9.1 \ +crate://crates.io/bufstream/0.1.3 \ +crate://crates.io/cfg-if/0.1.2 \ +crate://crates.io/cmake/0.1.24 \ +crate://crates.io/crossbeam/0.2.10 \ +crate://crates.io/curl-sys/0.3.14 \ +crate://crates.io/curl/0.4.7 \ +crate://crates.io/dbghelp-sys/0.2.0 \ +crate://crates.io/docopt/0.8.1 \ +crate://crates.io/dtoa/0.4.1 \ +crate://crates.io/env_logger/0.4.3 \ +crate://crates.io/error-chain/0.11.0-rc.2 \ +crate://crates.io/filetime/0.1.10 \ +crate://crates.io/flate2/0.2.19 \ +crate://crates.io/foreign-types/0.2.0 \ +crate://crates.io/fs2/0.4.2 \ +crate://crates.io/gcc/0.3.51 \ +crate://crates.io/git2-curl/0.7.0 \ +crate://crates.io/git2/0.6.6 \ +crate://crates.io/glob/0.2.11 \ +crate://crates.io/hamcrest/0.1.1 \ +crate://crates.io/hex/0.2.0 \ +crate://crates.io/idna/0.1.2 \ +crate://crates.io/itoa/0.3.1 \ +crate://crates.io/jobserver/0.1.6 \ +crate://crates.io/kernel32-sys/0.2.2 \ +crate://crates.io/lazy_static/0.2.8 \ +crate://crates.io/libc/0.2.25 \ +crate://crates.io/libgit2-sys/0.6.12 \ +crate://crates.io/libssh2-sys/0.2.6 \ +crate://crates.io/libz-sys/1.0.16 \ +crate://crates.io/log/0.3.8 \ +crate://crates.io/matches/0.1.6 \ +crate://crates.io/memchr/0.1.11 \ +crate://crates.io/memchr/1.0.1 \ +crate://crates.io/miniz-sys/0.1.9 \ +crate://crates.io/miow/0.2.1 \ +crate://crates.io/net2/0.2.29 \ +crate://crates.io/num-bigint/0.1.39 \ +crate://crates.io/num-complex/0.1.38 \ +crate://crates.io/num-integer/0.1.34 \ +crate://crates.io/num-iter/0.1.33 \ +crate://crates.io/num-rational/0.1.38 \ +crate://crates.io/num-traits/0.1.39 \ +crate://crates.io/num/0.1.39 \ +crate://crates.io/num_cpus/1.6.2 \ +crate://crates.io/openssl-probe/0.1.1 \ +crate://crates.io/openssl-sys/0.9.14 \ +crate://crates.io/openssl/0.9.14 \ +crate://crates.io/percent-encoding/1.0.0 \ +crate://crates.io/pkg-config/0.3.9 \ +crate://crates.io/psapi-sys/0.1.0 \ +crate://crates.io/quote/0.3.15 \ +crate://crates.io/rand/0.3.15 \ +crate://crates.io/regex-syntax/0.3.9 \ +crate://crates.io/regex-syntax/0.4.1 \ +crate://crates.io/regex/0.1.80 \ +crate://crates.io/regex/0.2.2 \ +crate://crates.io/rustc-demangle/0.1.4 \ +crate://crates.io/rustc-serialize/0.3.24 \ +crate://crates.io/scoped-tls/0.1.0 \ +crate://crates.io/semver-parser/0.7.0 \ +crate://crates.io/semver/0.7.0 \ +crate://crates.io/serde/1.0.9 \ +crate://crates.io/serde_derive/1.0.9 \ +crate://crates.io/serde_derive_internals/0.15.1 \ +crate://crates.io/serde_ignored/0.0.3 \ +crate://crates.io/serde_json/1.0.2 \ +crate://crates.io/shell-escape/0.1.3 \ +crate://crates.io/socket2/0.2.1 \ +crate://crates.io/strsim/0.6.0 \ +crate://crates.io/syn/0.11.11 \ +crate://crates.io/synom/0.11.3 \ +crate://crates.io/tar/0.4.13 \ +crate://crates.io/tempdir/0.3.5 \ +crate://crates.io/termcolor/0.3.2 \ +crate://crates.io/thread-id/2.0.0 \ +crate://crates.io/thread_local/0.2.7 \ +crate://crates.io/thread_local/0.3.4 \ +crate://crates.io/toml/0.4.2 \ +crate://crates.io/unicode-bidi/0.3.4 \ +crate://crates.io/unicode-normalization/0.1.5 \ +crate://crates.io/unicode-xid/0.0.4 \ +crate://crates.io/unreachable/1.0.0 \ +crate://crates.io/url/1.5.1 \ +crate://crates.io/utf8-ranges/0.1.3 \ +crate://crates.io/utf8-ranges/1.0.0 \ +crate://crates.io/vcpkg/0.2.2 \ +crate://crates.io/void/1.0.2 \ +crate://crates.io/winapi-build/0.1.1 \ +crate://crates.io/winapi/0.2.8 \ +crate://crates.io/wincolor/0.1.4 \ +crate://crates.io/ws2_32-sys/0.2.1 \ +" + + + +# FIXME: update generateme with the real MD5 of the license file +LIC_FILES_CHKSUM=" \ +file://LICENSE-MIT;md5=362255802eb5aa87810d12ddf3cfedb4 \ +file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \ +" + +SUMMARY = "Cargo, a package manager for Rust." +HOMEPAGE = "https://crates.io" +LICENSE = "MIT | Apache-2.0" + +# includes this file if it exists but does not fail +# this is useful for anything you may want to override from +# what cargo-bitbake generates. +include cargo-${PV}.inc +include cargo.inc diff --git a/recipes-devtools/rust/files/rust-1.15.1/0001-Target-add-default-target.json-path-libdir-rust-targ.patch b/recipes-devtools/rust/files/rust-1.15.1/0001-Target-add-default-target.json-path-libdir-rust-targ.patch deleted file mode 100644 index c0798d6..0000000 --- a/recipes-devtools/rust/files/rust-1.15.1/0001-Target-add-default-target.json-path-libdir-rust-targ.patch +++ /dev/null @@ -1,106 +0,0 @@ -From e9c6cf5d1a9bb7f50c5e98a660217062b510928b Mon Sep 17 00:00:00 2001 -From: Cody P Schafer -Date: Tue, 18 Nov 2014 01:40:21 -0500 -Subject: [PATCH 1/3] Target: add default target.json path: - $libdir/rust/targets - ---- - src/librustc/session/config.rs | 6 +++--- - src/librustc/session/mod.rs | 8 ++++++-- - src/librustc_back/target/mod.rs | 12 ++++++++++-- - 3 files changed, 19 insertions(+), 7 deletions(-) - -diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs -index 5e3c8bc..15fd763 100644 ---- a/src/librustc/session/config.rs -+++ b/src/librustc/session/config.rs -@@ -42,7 +42,7 @@ use std::hash::Hasher; - use std::collections::hash_map::DefaultHasher; - use std::collections::HashSet; - use std::iter::FromIterator; --use std::path::PathBuf; -+use std::path::{Path, PathBuf}; - - pub struct Config { - pub target: Target, -@@ -1001,8 +1001,8 @@ pub fn build_configuration(sess: &Session, - user_cfg - } - --pub fn build_target_config(opts: &Options, sp: &Handler) -> Config { -- let target = match Target::search(&opts.target_triple) { -+pub fn build_target_config(sysroot: &Path, opts: &Options, sp: &Handler) -> Config { -+ let target = match Target::search(sysroot, &opts.target_triple[..]) { - Ok(t) => t, - Err(e) => { - sp.struct_fatal(&format!("Error loading target specification: {}", e)) -diff --git a/src/librustc/session/mod.rs b/src/librustc/session/mod.rs -index 91765e6..29e5e5d 100644 ---- a/src/librustc/session/mod.rs -+++ b/src/librustc/session/mod.rs -@@ -575,13 +575,17 @@ pub fn build_session_(sopts: config::Options, - codemap: Rc, - cstore: Rc CrateStore<'a>>) - -> Session { -- let host = match Target::search(config::host_triple()) { -+ let sysroot = match sopts.maybe_sysroot { -+ Some(ref x) => PathBuf::from(x), -+ None => filesearch::get_or_default_sysroot() -+ }; -+ let host = match Target::search(&sysroot, config::host_triple()) { - Ok(t) => t, - Err(e) => { - panic!(span_diagnostic.fatal(&format!("Error loading host specification: {}", e))); - } - }; -- let target_cfg = config::build_target_config(&sopts, &span_diagnostic); -+ let target_cfg = config::build_target_config(&sysroot, &sopts, &span_diagnostic); - let p_s = parse::ParseSess::with_span_handler(span_diagnostic, codemap); - let default_sysroot = match sopts.maybe_sysroot { - Some(_) => None, -diff --git a/src/librustc_back/target/mod.rs b/src/librustc_back/target/mod.rs -index 351d469..3282dbd 100644 ---- a/src/librustc_back/target/mod.rs -+++ b/src/librustc_back/target/mod.rs -@@ -51,6 +51,7 @@ use std::io::prelude::*; - use syntax::abi::{Abi, lookup as lookup_abi}; - - use PanicStrategy; -+use std::path::Path; - - mod android_base; - mod apple_base; -@@ -625,12 +626,13 @@ impl Target { - /// - /// The error string could come from any of the APIs called, including - /// filesystem access and JSON decoding. -- pub fn search(target: &str) -> Result { -+ pub fn search(sysroot: &Path, target: &str) -> Result { - use std::env; - use std::ffi::OsString; - use std::fs::File; - use std::path::{Path, PathBuf}; - use serialize::json; -+ use std::iter::IntoIterator; - - fn load_file(path: &Path) -> Result { - let mut f = File::open(path).map_err(|e| e.to_string())?; -@@ -661,8 +663,14 @@ impl Target { - .unwrap_or(OsString::new()); - - // FIXME 16351: add a sane default search path? -+ let mut default_path = sysroot.to_owned(); -+ default_path.push(env!("CFG_LIBDIR_RELATIVE")); -+ default_path.push("rustlib"); - -- for dir in env::split_paths(&target_path) { -+ let paths = env::split_paths(&target_path) -+ .chain(Some(default_path).into_iter()); -+ -+ for dir in paths { - let p = dir.join(&path); - if p.is_file() { - return load_file(&p); --- -2.10.1 (Apple Git-78) - diff --git a/recipes-devtools/rust/libstd-rs.inc b/recipes-devtools/rust/libstd-rs.inc index 5bcfb69..f5dce79 100644 --- a/recipes-devtools/rust/libstd-rs.inc +++ b/recipes-devtools/rust/libstd-rs.inc @@ -2,7 +2,6 @@ SUMMARY = "Rust standard libaries" HOMEPAGE = "http://www.rust-lang.org" SECTION = "devel" LICENSE = "MIT | Apache-2.0" -LIC_FILES_CHKSUM ="file://COPYRIGHT;md5=43e1f1fb9c0ee3af66693d8c4fecafa8" RUSTLIB_DEP = "" inherit cargo @@ -10,16 +9,16 @@ inherit cargo # Needed so cargo can find libbacktrace RUSTFLAGS += "-L ${STAGING_LIBDIR}" +S = "${RUSTSRC}/src/libstd" + do_compile_prepend () { - cd ${S}/src/rustc/std_shim export CARGO_TARGET_DIR="${B}" - # For Rust 1.12.1 and lower - export RUSTC_BOOTSTRAP_KEY="${RS_KEY}" # For Rust 1.13.0 and newer export RUSTC_BOOTSTRAP="1" } do_install () { mkdir -p ${D}${rustlibdir} + cp ${B}/${TARGET_SYS}/release/deps/* ${D}${rustlibdir} } diff --git a/recipes-devtools/rust/libstd-rs_1.15.1.bb b/recipes-devtools/rust/libstd-rs_1.15.1.bb index 944df6a..89f7da8 100644 --- a/recipes-devtools/rust/libstd-rs_1.15.1.bb +++ b/recipes-devtools/rust/libstd-rs_1.15.1.bb @@ -1,9 +1,11 @@ require rust-source-${PV}.inc require libstd-rs.inc -EXTRA_OECONF = "--disable-rustbuild" +LIC_FILES_CHKSUM = "file://../../COPYRIGHT;md5=43e1f1fb9c0ee3af66693d8c4fecafa8" -CARGO_BUILD_FLAGS += "--features 'jemalloc panic-unwind'" +# Don't use jemalloc as it doesn't work for many targets. +# https://github.com/rust-lang/rust/pull/37392 +CARGO_BUILD_FLAGS += "--features 'panic-unwind'" SRC_URI += "\ crate://crates.io/cmake/0.1.18 \ diff --git a/recipes-devtools/rust/libstd-rs_1.20.0.bb b/recipes-devtools/rust/libstd-rs_1.20.0.bb new file mode 100644 index 0000000..4e0166c --- /dev/null +++ b/recipes-devtools/rust/libstd-rs_1.20.0.bb @@ -0,0 +1,139 @@ +require rust-source-${PV}.inc +require libstd-rs.inc + +LIC_FILES_CHKSUM = "file://../../COPYRIGHT;md5=12922f5565a22267bd82aaeb6d3548e5" + +# Don't use jemalloc as it doesn't work for many targets. +# https://github.com/rust-lang/rust/pull/37392 +CARGO_BUILD_FLAGS += "--features 'panic-unwind'" + +# These are taken from src/libstd/Cargo.toml via cargo-bitbake +SRC_URI += " \ +crate://crates.io/advapi32-sys/0.2.0 \ +crate://crates.io/aho-corasick/0.5.3 \ +crate://crates.io/aho-corasick/0.6.3 \ +crate://crates.io/ansi_term/0.9.0 \ +crate://crates.io/atty/0.2.2 \ +crate://crates.io/backtrace-sys/0.1.11 \ +crate://crates.io/backtrace/0.3.2 \ +crate://crates.io/bitflags/0.8.2 \ +crate://crates.io/bitflags/0.9.1 \ +crate://crates.io/bufstream/0.1.3 \ +crate://crates.io/cfg-if/0.1.2 \ +crate://crates.io/clap/2.25.0 \ +crate://crates.io/cmake/0.1.24 \ +crate://crates.io/crossbeam/0.2.10 \ +crate://crates.io/curl-sys/0.3.14 \ +crate://crates.io/curl/0.4.7 \ +crate://crates.io/dbghelp-sys/0.2.0 \ +crate://crates.io/diff/0.1.10 \ +crate://crates.io/docopt/0.8.1 \ +crate://crates.io/dtoa/0.4.1 \ +crate://crates.io/env_logger/0.4.3 \ +crate://crates.io/error-chain/0.10.0 \ +crate://crates.io/error-chain/0.11.0-rc.2 \ +crate://crates.io/filetime/0.1.10 \ +crate://crates.io/flate2/0.2.19 \ +crate://crates.io/foreign-types/0.2.0 \ +crate://crates.io/fs2/0.4.2 \ +crate://crates.io/gcc/0.3.51 \ +crate://crates.io/getopts/0.2.14 \ +crate://crates.io/git2-curl/0.7.0 \ +crate://crates.io/git2/0.6.6 \ +crate://crates.io/glob/0.2.11 \ +crate://crates.io/hamcrest/0.1.1 \ +crate://crates.io/handlebars/0.26.2 \ +crate://crates.io/hex/0.2.0 \ +crate://crates.io/idna/0.1.2 \ +crate://crates.io/itoa/0.3.1 \ +crate://crates.io/jobserver/0.1.6 \ +crate://crates.io/kernel32-sys/0.2.2 \ +crate://crates.io/lazy_static/0.2.8 \ +crate://crates.io/libc/0.2.26 \ +crate://crates.io/libgit2-sys/0.6.12 \ +crate://crates.io/libssh2-sys/0.2.6 \ +crate://crates.io/libz-sys/1.0.16 \ +crate://crates.io/log/0.3.8 \ +crate://crates.io/lzma-sys/0.1.7 \ +crate://crates.io/matches/0.1.6 \ +crate://crates.io/mdbook/0.0.22 \ +crate://crates.io/memchr/0.1.11 \ +crate://crates.io/memchr/1.0.1 \ +crate://crates.io/miniz-sys/0.1.9 \ +crate://crates.io/miow/0.2.1 \ +crate://crates.io/net2/0.2.29 \ +crate://crates.io/num-bigint/0.1.39 \ +crate://crates.io/num-complex/0.1.38 \ +crate://crates.io/num-integer/0.1.34 \ +crate://crates.io/num-iter/0.1.33 \ +crate://crates.io/num-rational/0.1.38 \ +crate://crates.io/num-traits/0.1.39 \ +crate://crates.io/num/0.1.39 \ +crate://crates.io/num_cpus/1.6.2 \ +crate://crates.io/open/1.2.0 \ +crate://crates.io/openssl-probe/0.1.1 \ +crate://crates.io/openssl-sys/0.9.15 \ +crate://crates.io/openssl/0.9.15 \ +crate://crates.io/owning_ref/0.3.3 \ +crate://crates.io/percent-encoding/1.0.0 \ +crate://crates.io/pest/0.3.3 \ +crate://crates.io/pkg-config/0.3.9 \ +crate://crates.io/psapi-sys/0.1.0 \ +crate://crates.io/pulldown-cmark/0.0.14 \ +crate://crates.io/quick-error/1.2.0 \ +crate://crates.io/quote/0.3.15 \ +crate://crates.io/rand/0.3.15 \ +crate://crates.io/regex-syntax/0.3.9 \ +crate://crates.io/regex-syntax/0.4.1 \ +crate://crates.io/regex/0.1.80 \ +crate://crates.io/regex/0.2.2 \ +crate://crates.io/rls-data/0.7.0 \ +crate://crates.io/rls-span/0.4.0 \ +crate://crates.io/rustc-demangle/0.1.4 \ +crate://crates.io/rustc-serialize/0.3.24 \ +crate://crates.io/same-file/0.1.3 \ +crate://crates.io/scoped-tls/0.1.0 \ +crate://crates.io/semver-parser/0.7.0 \ +crate://crates.io/semver/0.7.0 \ +crate://crates.io/serde/1.0.10 \ +crate://crates.io/serde_derive/1.0.10 \ +crate://crates.io/serde_derive_internals/0.15.1 \ +crate://crates.io/serde_ignored/0.0.3 \ +crate://crates.io/serde_json/1.0.2 \ +crate://crates.io/shell-escape/0.1.3 \ +crate://crates.io/socket2/0.2.1 \ +crate://crates.io/stable_deref_trait/1.0.0 \ +crate://crates.io/strsim/0.6.0 \ +crate://crates.io/syn/0.11.11 \ +crate://crates.io/synom/0.11.3 \ +crate://crates.io/tar/0.4.13 \ +crate://crates.io/tempdir/0.3.5 \ +crate://crates.io/term_size/0.3.0 \ +crate://crates.io/termcolor/0.3.2 \ +crate://crates.io/textwrap/0.6.0 \ +crate://crates.io/thread-id/2.0.0 \ +crate://crates.io/thread_local/0.2.7 \ +crate://crates.io/thread_local/0.3.4 \ +crate://crates.io/toml/0.1.30 \ +crate://crates.io/toml/0.4.2 \ +crate://crates.io/unicode-bidi/0.3.4 \ +crate://crates.io/unicode-normalization/0.1.5 \ +crate://crates.io/unicode-segmentation/1.1.0 \ +crate://crates.io/unicode-width/0.1.4 \ +crate://crates.io/unicode-xid/0.0.4 \ +crate://crates.io/unreachable/1.0.0 \ +crate://crates.io/url/1.5.1 \ +crate://crates.io/utf8-ranges/0.1.3 \ +crate://crates.io/utf8-ranges/1.0.0 \ +crate://crates.io/vcpkg/0.2.2 \ +crate://crates.io/vec_map/0.8.0 \ +crate://crates.io/void/1.0.2 \ +crate://crates.io/walkdir/1.0.7 \ +crate://crates.io/winapi-build/0.1.1 \ +crate://crates.io/winapi/0.2.8 \ +crate://crates.io/wincolor/0.1.4 \ +crate://crates.io/ws2_32-sys/0.2.1 \ +crate://crates.io/xattr/0.1.11 \ +crate://crates.io/xz2/0.1.3 \ +crate://crates.io/yaml-rust/0.3.5 \ +" diff --git a/recipes-devtools/rust/rust-cross_1.15.1.bb b/recipes-devtools/rust/rust-cross_1.15.1.bb index ddc25d3..34d92de 100644 --- a/recipes-devtools/rust/rust-cross_1.15.1.bb +++ b/recipes-devtools/rust/rust-cross_1.15.1.bb @@ -1,2 +1,3 @@ require rust-cross.inc require rust-source-${PV}.inc +require rust-snapshot-${PV}.inc diff --git a/recipes-devtools/rust/rust-cross_1.20.0.bb b/recipes-devtools/rust/rust-cross_1.20.0.bb new file mode 100644 index 0000000..34d92de --- /dev/null +++ b/recipes-devtools/rust/rust-cross_1.20.0.bb @@ -0,0 +1,3 @@ +require rust-cross.inc +require rust-source-${PV}.inc +require rust-snapshot-${PV}.inc diff --git a/recipes-devtools/rust/rust-llvm_1.20.0.bb b/recipes-devtools/rust/rust-llvm_1.20.0.bb new file mode 100644 index 0000000..19305d2 --- /dev/null +++ b/recipes-devtools/rust/rust-llvm_1.20.0.bb @@ -0,0 +1,16 @@ +require rust-source-${PV}.inc +require rust-llvm.inc + +LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=e825e017edc35cfd58e26116e5251771" + +do_install_prepend () { + # the install does a sed on this without installing the file + # we don't need it for anything + mkdir -p "${D}/usr/share/llvm/cmake" + touch "${D}/usr/share/llvm/cmake/LLVMExports-noconfig.cmake" +} + +do_install_append () { + # we don't need any of this stuff to build Rust + rm -rf "${D}/usr/lib/cmake" +} diff --git a/recipes-devtools/rust/rust-snapshot-1.15.1.inc b/recipes-devtools/rust/rust-snapshot-1.15.1.inc new file mode 100644 index 0000000..85b4d4b --- /dev/null +++ b/recipes-devtools/rust/rust-snapshot-1.15.1.inc @@ -0,0 +1,30 @@ +# Specifics for Rust 1.15.1 + +## This is information on the rust-snapshot (binary) used to build our current release. +## snapshot info is taken from rust/src/stage0.txt +## TODO: find a way to add additional SRC_URIs based on the contents of an +## earlier SRC_URI. +RS_VERSION = "1.14.0" + +RUST_STD_SNAPSHOT = "rust-std-${RS_VERSION}-${RUST_BUILD_SYS}" +RUSTC_SNAPSHOT = "rustc-${RS_VERSION}-${RUST_BUILD_SYS}" +CARGO_REV = "fbeea902d2c9a5be6d99cc35681565d8f7832592" +CARGO_SNAPSHOT = "cargo-nightly-${RUST_BUILD_SYS}" + +SRC_URI += " \ + https://static.rust-lang.org/dist/${RUST_STD_SNAPSHOT}.tar.gz;name=rust-std-snapshot;subdir=rust-snapshot-components \ + https://static.rust-lang.org/dist/${RUSTC_SNAPSHOT}.tar.gz;name=rustc-snapshot;subdir=rust-snapshot-components \ +" + +# Downloaded cargo tarballs must be named differently to distinguish between versions. +SRC_URI += " \ + https://s3.amazonaws.com/rust-lang-ci/cargo-builds/${CARGO_REV}/${CARGO_SNAPSHOT}.tar.gz;name=cargo-snapshot;subdir=rust-snapshot-components;downloadfilename=${CARGO_SNAPSHOT}-${CARGO_REV}.tar.gz \ +" + +# These are x86_64-unknown-linux-gnu hashes, how can we add more? +SRC_URI[rustc-snapshot.md5sum] = "f178d9d6aad0f87c451f4b2f93170633" +SRC_URI[rustc-snapshot.sha256sum] = "0eeec4211aa872f24c220200a0c2b095bbfc9c0f737c1c5df2555967c8f36787" +SRC_URI[rust-std-snapshot.md5sum] = "518e492fc3d50d8c678056eb788bd0e7" +SRC_URI[rust-std-snapshot.sha256sum] = "3a609bfe9572c742d71199faad578ee76abe9067cd8df698bda6e3ef5caf6ec4" +SRC_URI[cargo-snapshot.md5sum] = "59bc24d15c393de364dadb3f4e3c9a5a" +SRC_URI[cargo-snapshot.sha256sum] = "0e052514ee88f236153a0d6c6f38f66d691eb4cf1ac09e6040d96e5101d57800" diff --git a/recipes-devtools/rust/rust-snapshot-1.20.0.inc b/recipes-devtools/rust/rust-snapshot-1.20.0.inc new file mode 100644 index 0000000..6e2af7d --- /dev/null +++ b/recipes-devtools/rust/rust-snapshot-1.20.0.inc @@ -0,0 +1,26 @@ +# Specifics for Rust 1.20.0 + +## This is information on the rust-snapshot (binary) used to build our current release. +## snapshot info is taken from rust/src/stage0.txt +## TODO: find a way to add additional SRC_URIs based on the contents of an +## earlier SRC_URI. +RS_VERSION = "1.19.0" + +RUST_STD_SNAPSHOT = "rust-std-${RS_VERSION}-${RUST_BUILD_SYS}" +RUSTC_SNAPSHOT = "rustc-${RS_VERSION}-${RUST_BUILD_SYS}" +CARGO_VERSION = "0.20.0" +CARGO_SNAPSHOT = "cargo-${CARGO_VERSION}-${RUST_BUILD_SYS}" + +SRC_URI += " \ + https://static.rust-lang.org/dist/${RUST_STD_SNAPSHOT}.tar.gz;name=rust-std-snapshot;subdir=rust-snapshot-components \ + https://static.rust-lang.org/dist/${RUSTC_SNAPSHOT}.tar.gz;name=rustc-snapshot;subdir=rust-snapshot-components \ + https://static.rust-lang.org/dist/${CARGO_SNAPSHOT}.tar.gz;name=cargo-snapshot;subdir=rust-snapshot-components \ + " + +# These are x86_64-unknown-linux-gnu hashes, how can we add more? +SRC_URI[rustc-snapshot.md5sum] = "e5077b80cc953a1fb9c767aa039d5984" +SRC_URI[rustc-snapshot.sha256sum] = "4c8df3088d17c8e06bf58d453d39bd521487defcefc8193203b80f0fb797d6fe" +SRC_URI[rust-std-snapshot.md5sum] = "2bff47764df01c99f349908601c10478" +SRC_URI[rust-std-snapshot.sha256sum] = "5905803e8a127f656bf253978692f0d6cf6c9206c527e4d6d7e981980618d1b6" +SRC_URI[cargo-snapshot.md5sum] = "63aa861b029eec9f559f4fb5a10c287d" +SRC_URI[cargo-snapshot.sha256sum] = "a677d13b01d00ad13edf75c7d1b484421c7fc09338bf9ed6d456b4685bb42ed1" diff --git a/recipes-devtools/rust/rust-source-1.15.1.inc b/recipes-devtools/rust/rust-source-1.15.1.inc index dc3bdfb..deae018 100644 --- a/recipes-devtools/rust/rust-source-1.15.1.inc +++ b/recipes-devtools/rust/rust-source-1.15.1.inc @@ -1,17 +1,5 @@ # Specifics for Rust 1.15.1 -## This is information on the rust-snapshot (binary) used to build our current release. -## snapshot info is taken from rust/src/stage0.txt -## TODO: find a way to add additional SRC_URIs based on the contents of an -## earlier SRC_URI. -RS_VERSION = "1.14.0" - -RUST_SNAPSHOT = "rustc-${RS_VERSION}-${RUST_BUILD_SYS}" - -# These are x86_64-unknown-linux-gnu hashes, how can we add more? -SRC_URI[rust-snapshot.md5sum] = "f178d9d6aad0f87c451f4b2f93170633" -SRC_URI[rust-snapshot.sha256sum] = "0eeec4211aa872f24c220200a0c2b095bbfc9c0f737c1c5df2555967c8f36787" - SRC_URI += "\ https://static.rust-lang.org/dist/rustc-${PV}-src.tar.gz;name=rust \ " @@ -22,3 +10,5 @@ SRC_URI[rust.sha256sum] = "2e7daad418a830b45b977cd7ecf181b65f30f73df63ff36e124ea RUSTSRC = "${WORKDIR}/rustc-${PV}-src" # set this as our default S = "${RUSTSRC}" + +LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=43e1f1fb9c0ee3af66693d8c4fecafa8" diff --git a/recipes-devtools/rust/rust-source-1.20.0.inc b/recipes-devtools/rust/rust-source-1.20.0.inc new file mode 100644 index 0000000..28256b6 --- /dev/null +++ b/recipes-devtools/rust/rust-source-1.20.0.inc @@ -0,0 +1,14 @@ +# Specifics for Rust 1.20.0 + +SRC_URI += "\ + https://static.rust-lang.org/dist/rustc-${PV}-src.tar.gz;name=rust \ + " +SRC_URI[rust.md5sum] = "1d3c5d25d8e6215e7d0b6d4d4c9835b9" +SRC_URI[rust.sha256sum] = "2aa4875ff4472c6e35262bbb9052cb2623da3dae6084a858cc59d36f33f18214" + +# later versions of rust change the directory that they unextract to +RUSTSRC = "${WORKDIR}/rustc-${PV}-src" +# set this as our default +S = "${RUSTSRC}" + +LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=12922f5565a22267bd82aaeb6d3548e5" diff --git a/recipes-devtools/rust/rust.inc b/recipes-devtools/rust/rust.inc index 03abae0..53251d6 100644 --- a/recipes-devtools/rust/rust.inc +++ b/recipes-devtools/rust/rust.inc @@ -2,21 +2,28 @@ SUMMARY = "Rust compiler and runtime libaries" HOMEPAGE = "http://www.rust-lang.org" SECTION = "devel" LICENSE = "MIT | Apache-2.0" -LIC_FILES_CHKSUM ="file://COPYRIGHT;md5=43e1f1fb9c0ee3af66693d8c4fecafa8" inherit rust +inherit cargo_common -SRC_URI = "\ - https://static.rust-lang.org/dist/${RUST_SNAPSHOT}.tar.gz;name=rust-snapshot \ - " - -DEPENDS += "file-native" +DEPENDS += "file-native python-native" # We generate local targets, and need to be able to locate them export RUST_TARGET_PATH="${WORKDIR}/targets/" export FORCE_CRATE_HASH="${BB_TASKHASH}" +setup_cargo_environment () { + # The first step is to build bootstrap and some early stage tools, + # these are build for the same target as the snapshot, e.g. + # x86_64-unknown-linux-gnu. + # Later stages are build for the native target (i.e. target.x86_64-linux) + cargo_common_do_configure + + echo "[target.${RUST_BUILD_SYS}]" >> ${CARGO_HOME}/config + echo "linker = '${RUST_TARGET_CCLD}'" >> ${CARGO_HOME}/config +} + # Right now this is focused on arm-specific tune features. # We get away with this for now as one can only use x86-64 as the build host # (not arm). @@ -115,6 +122,7 @@ DATA_LAYOUT[arm] = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64" LLVM_TARGET[arm] = "${RUST_TARGET_SYS}" TARGET_ENDIAN[arm] = "little" TARGET_POINTER_WIDTH[arm] = "32" +MAX_ATOMIC_WIDTH[arm] = "64" FEATURES[arm] = "+v6,+vfp2" ## aarch64-unknown-linux-gnu @@ -122,24 +130,28 @@ DATA_LAYOUT[aarch64] = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128" LLVM_TARGET[aarch64] = "aarch64-unknown-linux-gnu" TARGET_ENDIAN[aarch64] = "little" TARGET_POINTER_WIDTH[aarch64] = "64" +MAX_ATOMIC_WIDTH[aarch64] = "128" ## x86_64-unknown-linux-gnu DATA_LAYOUT[x86_64] = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" LLVM_TARGET[x86_64] = "x86_64-unknown-linux-gnu" TARGET_ENDIAN[x86_64] = "little" TARGET_POINTER_WIDTH[x86_64] = "64" +MAX_ATOMIC_WIDTH[x86_64] = "64" ## i686-unknown-linux-gnu DATA_LAYOUT[i686] = "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128" LLVM_TARGET[i686] = "i686-unknown-linux-gnu" TARGET_ENDIAN[i686] = "little" TARGET_POINTER_WIDTH[i686] = "32" +MAX_ATOMIC_WIDTH[i686] = "64" ## XXX: a bit of a hack so qemux86 builds, clone of i686-unknown-linux-gnu above DATA_LAYOUT[i586] = "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128" LLVM_TARGET[i586] = "i586-unknown-linux-gnu" TARGET_ENDIAN[i586] = "little" TARGET_POINTER_WIDTH[i586] = "32" +MAX_ATOMIC_WIDTH[i586] = "64" def arch_for(d, thing): return d.getVar('{}_ARCH'.format(thing)) @@ -150,21 +162,6 @@ def sys_for(d, thing): def prefix_for(d, thing): return d.getVar('{}_PREFIX'.format(thing)) -## Note: TOOLCHAIN_OPTIONS is set to "" by native.bbclass and cross.bbclass, -## which prevents us from grabbing them when building a cross compiler (native doesn't matter). -## We workaround this in internal-rust-cross.bbclass. -def cflags_for(d, thing): - cc_arch = d.getVar('{}_CC_ARCH'.format(thing)) or "" - flags = d.getVar('{}_CFLAGS'.format(thing)) or "" - tc = d.getVar('TOOLCHAIN_OPTIONS') or "" - return ' '.join([cc_arch, flags, tc]) - -def cxxflags_for(d, thing): - cc_arch = d.getVar('{}_CC_ARCH'.format(thing)) or "" - flags = d.getVar('{}_CXXFLAGS'.format(thing)) or "" - tc = d.getVar('TOOLCHAIN_OPTIONS') or "" - return ' '.join([cc_arch, flags, tc]) - # Convert a normal arch (HOST_ARCH, TARGET_ARCH, BUILD_ARCH, etc) to something # rust's internals won't choke on. def arch_to_rust_target_arch(arch): @@ -199,6 +196,7 @@ TARGET_LLVM_FEATURES_class-native = "${@llvm_features_from_cc_arch(d)}" def rust_gen_target(d, thing, wd): import json + from distutils.version import LooseVersion arch = arch_for(d, thing) sys = sys_for(d, thing) prefix = prefix_for(d, thing) @@ -215,29 +213,37 @@ def rust_gen_target(d, thing, wd): tspec = {} tspec['llvm-target'] = d.getVarFlag('LLVM_TARGET', arch) tspec['data-layout'] = d.getVarFlag('DATA_LAYOUT', arch) + tspec['max-atomic-width'] = d.getVarFlag('MAX_ATOMIC_WIDTH', arch) tspec['target-pointer-width'] = d.getVarFlag('TARGET_POINTER_WIDTH', arch) - tspec['target-word-size'] = tspec['target-pointer-width'] tspec['target-endian'] = d.getVarFlag('TARGET_ENDIAN', arch) tspec['arch'] = arch_to_rust_target_arch(arch) tspec['os'] = "linux" tspec['env'] = "gnu" + tspec['vendor'] = "unknown" + tspec['target-family'] = "unix" tspec['linker'] = "{}{}gcc".format(d.getVar('CCACHE'), prefix) - tspec['objcopy'] = "{}objcopy".format(prefix) tspec['ar'] = "{}ar".format(prefix) tspec['cpu'] = cpu if features is not "": tspec['features'] = features tspec['dynamic-linking'] = True tspec['executables'] = True - tspec['morestack'] = True tspec['linker-is-gnu'] = True + tspec['linker-flavor'] = "gcc" tspec['has-rpath'] = True tspec['has-elf-tls'] = True tspec['position-independent-executables'] = True + # Don't use jemalloc as it doesn't work for many targets. + # https://github.com/rust-lang/rust/pull/37392 + # From 1.20.0 and forward, system allocator is the default. + if LooseVersion(d.getVar("PV")) < LooseVersion("1.20.0"): + tspec['exe-allocation-crate'] = "alloc_system" + tspec['lib-allocation-crate'] = "alloc_system" + # write out the target spec json file with open(wd + sys + '.json', 'w') as f: - json.dump(tspec, f) + json.dump(tspec, f, indent=4) python do_rust_gen_targets () { @@ -252,128 +258,86 @@ python do_rust_gen_targets () { addtask rust_gen_targets after do_patch before do_compile do_rust_gen_targets[dirs] += "${WORKDIR}/targets" -def rust_gen_mk_cfg(d, thing): - '''' - Rust's build system adds support for new archs via 2 things: - 1. a file in mk/cfg which defines how the runtime libraries are built - 2. and rustc arch definition either built into the compiler or supplied as a .json file - This generates a new #1 for the given 'thing' (one of HOST, TARGET, BUILD) - using a "similar" config that rust already supplies as a template. +do_rust_setup_snapshot () { + for installer in "${WORKDIR}/rust-snapshot-components/"*"/install.sh"; do + "${installer}" --prefix="${WORKDIR}/rust-snapshot" --disable-ldconfig + done - Note that the configure process also depends on the existence of #1, so we - have to run this before do_configure - ''' - import os - import subprocess - - rust_base_sys = rust_base_triple(d, thing) - arch = arch_for(d, thing) - sys = sys_for(d, thing) - prefix = prefix_for(d, thing) - llvm_target = d.getVarFlag('LLVM_TARGET', arch) - ldflags = d.getVar('LDFLAGS') + d.getVar('HOST_CC_ARCH') + d.getVar('TOOLCHAIN_OPTIONS') - - b = os.path.join(d.getVar('S'), 'mk', 'cfg') - o = open(os.path.join(b, sys_for(d, thing) + '.mk'), 'w') - i = open(os.path.join(b, rust_base_sys + '.mk'), 'r') - - r = subprocess.call(['sed', - # CFLAGS, LDFLAGS, CXXFLAGS, CPPFLAGS are used by rust's build for a - # wide range of targets (not just HOST). Yocto's settings for them will - # be inappropriate, avoid having random targets try to use them, we'll - # add as needed. - '-e', 's/$(CFLAGS)//', - '-e', 's/$(CXXFLAGS)//', - '-e', 's/$(CPPFLAGS)//', - '-e', 's/$(LDFLAGS)//', - - # update all triplets to the new one - '-e', 's/{}/{}/g'.format(rust_base_sys, sys), - - # Replace tools with our own (CROSS_PREFIX is appended to all tools - # by rust's build system). We delete and then insert this because not - # all targets define it. - '-e', 's/^CROSS_PREFIX_{}.*$//'.format(sys), - '-e', '2 a CROSS_PREFIX_{} := {}'.format(sys, prefix), - '-e', 's/^CFG_LLVM_TARGET_.*$//', - '-e', '2 a CFG_LLVM_TARGET_{} := {}'.format(sys, llvm_target), - '-e', 's/^CC_{}=.*$/CC_{} := gcc/'.format(sys, sys), - '-e', 's/^CXX_{}.*$/CXX_{} := g++/'.format(sys, sys), - '-e', 's/^CPP_{}.*$/CPP_{} := gcc -E/'.format(sys, sys), - '-e', 's/^AR_{}.*$/AR_{} := ar/'.format(sys, sys), - - # Some targets don't have LINK even though it is required to build. - '-e', 's/^LINK_{}.*$//'.format(sys), - '-e', '2 a LINK_{} := gcc'.format(sys), - - # Append our flags to the existing ones - '-e', '/^CFG_JEMALLOC_CFLAGS/ s;$; {};'.format(cflags_for(d, thing)), - '-e', '/^CFG_GCCISH_CFLAGS/ s;$; {};'.format(cflags_for(d, thing)), - '-e', '/^CFG_GCCISH_CXXFLAGS/ s;$; {};'.format(cxxflags_for(d, thing)), - '-e', '/^CFG_GCCISH_LINK_FLAGS/ s;$; {};'.format(ldflags), - - # May need to add: CFG_LLC_FLAGS_{} - ], stdout=o, stdin=i) - if r: - raise Exception - o.write("OBJCOPY_{} := {}objcopy\n".format(sys, prefix)) - # Note: this isn't how this variable is supposed to be used, but for - # non-msvc platforms nothing else touches it. - # These are the only extra flags passed to the rustllvm (c++ code) build. - # These are only used for host (even though we emit them for all targets) - # Without this, there are link failures due to GLIBC_CXX11_ABI issues in - # certain setups. - o.write("EXTRA_RUSTLLVM_CXXFLAGS_{} := {}\n".format(sys, cxxflags_for(d, thing))) - o.close() - i.close() - -python do_rust_arch_fixup () { - for thing in ['BUILD', 'HOST', 'TARGET']: - bb.debug(1, "rust_gen_mk_cfg for " + thing) - rust_gen_mk_cfg(d, thing) + # Some versions of rust (e.g. 1.18.0) tries to find cargo in stage0/bin/cargo + # and fail without it there. + mkdir -p ${RUSTSRC}/build/${BUILD_SYS} + ln -s ${WORKDIR}/rust-snapshot/ ${RUSTSRC}/build/${BUILD_SYS}/stage0 } -addtask rust_arch_fixup before do_configure after do_patch -do_rust_arch_fixup[dirs] += "${S}/mk/cfg" +addtask rust_setup_snapshot after do_unpack before do_configure +do_rust_setup_snapshot[dirs] += "${WORKDIR}/rust-snapshot" -# prevent the rust-installer scripts from calling ldconfig -export CFG_DISABLE_LDCONFIG="notempty" -# rust's configure doesn't recognize --disable-static, so remove it. -DISABLE_STATIC = "" +python do_configure() { + import json + try: + import configparser + except ImportError: + import ConfigParser as configparser -do_configure () { - # FIXME: target_prefix vs prefix, see cross.bbclass + # toml is rather similar to standard ini like format except it likes values + # that look more JSON like. So for our purposes simply escaping all values + # as JSON seem to work fine. - # - rpath is required otherwise rustc fails to resolve symbols - # - submodule management is done by bitbake's fetching - ${S}/configure \ - "--enable-rpath" \ - "--disable-docs" \ - "--disable-manage-submodules" \ - "--disable-debug" \ - "--enable-optimize" \ - "--enable-optimize-cxx" \ - "--disable-llvm-version-check" \ - "--llvm-root=${STAGING_DIR_NATIVE}/${prefix_native}" \ - "--enable-optimize-tests" \ - "--release-channel=stable" \ - "--prefix=${prefix}" \ - "--target=${TARGET_SYS}" \ - "--host=${HOST_SYS}" \ - "--build=${BUILD_SYS}" \ - "--localstatedir=${localstatedir}" \ - "--sysconfdir=${sysconfdir}" \ - "--datadir=${datadir}" \ - "--infodir=${infodir}" \ - "--mandir=${mandir}" \ - "--libdir=${libdir}" \ - "--enable-local-rust" \ - "--local-rust-root=${WORKDIR}/${RUST_SNAPSHOT}/rustc" \ - ${EXTRA_OECONF} + e = lambda s: json.dumps(s) + + config = configparser.RawConfigParser() + + # [target.ARCH-poky-linux] + target_section = "target.{}".format(d.getVar('TARGET_SYS', True)) + config.add_section(target_section) + + llvm_config = d.expand("${STAGING_DIR_NATIVE}${bindir_native}/llvm-config") + config.set(target_section, "llvm-config", e(llvm_config)) + + config.set(target_section, "cxx", e(d.expand("${RUST_TARGET_CXX}"))) + config.set(target_section, "cc", e(d.expand("${RUST_TARGET_CC}"))) + + # [rust] + config.add_section("rust") + config.set("rust", "rpath", e(True)) + config.set("rust", "channel", e("stable")) + + # Don't use jemalloc as it doesn't work for many targets. + # https://github.com/rust-lang/rust/pull/37392 + config.set("rust", "use-jemalloc", e(False)) + + # Whether or not to optimize the compiler and standard library + config.set("rust", "optimize", e(True)) + + # [build] + config.add_section("build") + config.set("build", "submodules", e(False)) + config.set("build", "docs", e(False)) + + rustc = d.expand("${WORKDIR}/rust-snapshot/bin/rustc") + config.set("build", "rustc", e(rustc)) + + cargo = d.expand("${WORKDIR}/rust-snapshot/bin/cargo") + config.set("build", "cargo", e(cargo)) + + targets = [d.getVar("TARGET_SYS", True)] + config.set("build", "target", e(targets)) + + hosts = [d.getVar("HOST_SYS", True)] + config.set("build", "host", e(targets)) + + config.set("build", "build", e(d.getVar("BUILD_SYS", True))) + + with open("config.toml", "w") as f: + config.write(f) + + # set up ${WORKDIR}/cargo_home + bb.build.exec_func("setup_cargo_environment", d) } -rust_runmake () { + +rust_runx () { echo "COMPILE ${PN}" "$@" # CFLAGS, LDFLAGS, CXXFLAGS, CPPFLAGS are used by rust's build for a @@ -384,15 +348,27 @@ rust_runmake () { unset CXXFLAGS unset CPPFLAGS - oe_runmake "VERBOSE=1" "$@" + oe_cargo_fix_env + + python src/bootstrap/bootstrap.py "$@" --verbose } + do_compile () { - rust_runmake + rust_runx build } -rust_do_install () { - rust_runmake DESTDIR="${D}" install + +rust_do_dist_install () { + rust_runx dist + + for installer in "build/tmp/dist/rustc"*"/install.sh"; do + "${installer}" --destdir="${D}" --prefix="${prefix}" --disable-ldconfig + done + + for installer in "build/tmp/dist/rust-std"*"/install.sh"; do + "${installer}" --destdir="${D}" --prefix="${prefix}" --disable-ldconfig + done # Install our custom target.json files local td="${D}${libdir}/rustlib/" @@ -401,10 +377,6 @@ rust_do_install () { install -m 0644 "$tgt" "$td" done - # Remove any files directly installed into libdir to avoid - # conflicts between cross and native - rm -f ${D}${libdir}/lib*.so - # cleanup after rust-installer since we don't need these bits rm ${D}/${libdir}/rustlib/install.log rm ${D}/${libdir}/rustlib/rust-installer-version @@ -412,7 +384,8 @@ rust_do_install () { rm ${D}/${libdir}/rustlib/components } + do_install () { - rust_do_install + rust_do_dist_install } # ex: sts=4 et sw=4 ts=8 diff --git a/recipes-devtools/rust/rust_1.15.1.bb b/recipes-devtools/rust/rust_1.15.1.bb index 208ef97..c0feb61 100644 --- a/recipes-devtools/rust/rust_1.15.1.bb +++ b/recipes-devtools/rust/rust_1.15.1.bb @@ -1,13 +1,25 @@ require rust.inc require rust-source-${PV}.inc - -EXTRA_OECONF = "--disable-rustbuild" +require rust-snapshot-${PV}.inc SRC_URI += " \ - file://rust-${PV}/0001-Target-add-default-target.json-path-libdir-rust-targ.patch \ file://rust-${PV}/0003-std-thread_local-workaround-for-NULL-__dso_handle.patch \ " +# These are extracted from rustc/src/bootstrap/Cargo.toml. +SRC_URI += " \ + crate://crates.io/cmake/0.1.18 \ + crate://crates.io/env_logger/0.3.5 \ + crate://crates.io/filetime/0.1.10 \ + crate://crates.io/gcc/0.3.40 \ + crate://crates.io/getopts/0.2.14 \ + crate://crates.io/libc/0.2.17 \ + crate://crates.io/log/0.3.6 \ + crate://crates.io/num_cpus/0.2.13 \ + crate://crates.io/rustc-serialize/0.3.19 \ + crate://crates.io/toml/0.1.30 \ +" + DEPENDS += "rust-llvm (=${PV})" # Otherwise we'll depend on what we provide diff --git a/recipes-devtools/rust/rust_1.20.0.bb b/recipes-devtools/rust/rust_1.20.0.bb new file mode 100644 index 0000000..443f13e --- /dev/null +++ b/recipes-devtools/rust/rust_1.20.0.bb @@ -0,0 +1,143 @@ +require rust.inc +require rust-source-${PV}.inc +require rust-snapshot-${PV}.inc + +# These are extracted from rustc/src/bootstrap/Cargo.toml via cargo-bitbake +SRC_URI += " \ +crate://crates.io/advapi32-sys/0.2.0 \ +crate://crates.io/aho-corasick/0.5.3 \ +crate://crates.io/aho-corasick/0.6.3 \ +crate://crates.io/ansi_term/0.9.0 \ +crate://crates.io/atty/0.2.2 \ +crate://crates.io/backtrace-sys/0.1.11 \ +crate://crates.io/backtrace/0.3.2 \ +crate://crates.io/bitflags/0.8.2 \ +crate://crates.io/bitflags/0.9.1 \ +crate://crates.io/bufstream/0.1.3 \ +crate://crates.io/cfg-if/0.1.2 \ +crate://crates.io/clap/2.25.0 \ +crate://crates.io/cmake/0.1.24 \ +crate://crates.io/crossbeam/0.2.10 \ +crate://crates.io/curl-sys/0.3.14 \ +crate://crates.io/curl/0.4.7 \ +crate://crates.io/dbghelp-sys/0.2.0 \ +crate://crates.io/diff/0.1.10 \ +crate://crates.io/docopt/0.8.1 \ +crate://crates.io/dtoa/0.4.1 \ +crate://crates.io/env_logger/0.4.3 \ +crate://crates.io/error-chain/0.10.0 \ +crate://crates.io/error-chain/0.11.0-rc.2 \ +crate://crates.io/filetime/0.1.10 \ +crate://crates.io/flate2/0.2.19 \ +crate://crates.io/foreign-types/0.2.0 \ +crate://crates.io/fs2/0.4.2 \ +crate://crates.io/gcc/0.3.51 \ +crate://crates.io/getopts/0.2.14 \ +crate://crates.io/git2-curl/0.7.0 \ +crate://crates.io/git2/0.6.6 \ +crate://crates.io/glob/0.2.11 \ +crate://crates.io/hamcrest/0.1.1 \ +crate://crates.io/handlebars/0.26.2 \ +crate://crates.io/hex/0.2.0 \ +crate://crates.io/idna/0.1.2 \ +crate://crates.io/itoa/0.3.1 \ +crate://crates.io/jobserver/0.1.6 \ +crate://crates.io/kernel32-sys/0.2.2 \ +crate://crates.io/lazy_static/0.2.8 \ +crate://crates.io/libc/0.2.26 \ +crate://crates.io/libgit2-sys/0.6.12 \ +crate://crates.io/libssh2-sys/0.2.6 \ +crate://crates.io/libz-sys/1.0.16 \ +crate://crates.io/log/0.3.8 \ +crate://crates.io/lzma-sys/0.1.7 \ +crate://crates.io/matches/0.1.6 \ +crate://crates.io/mdbook/0.0.22 \ +crate://crates.io/memchr/0.1.11 \ +crate://crates.io/memchr/1.0.1 \ +crate://crates.io/miniz-sys/0.1.9 \ +crate://crates.io/miow/0.2.1 \ +crate://crates.io/net2/0.2.29 \ +crate://crates.io/num-bigint/0.1.39 \ +crate://crates.io/num-complex/0.1.38 \ +crate://crates.io/num-integer/0.1.34 \ +crate://crates.io/num-iter/0.1.33 \ +crate://crates.io/num-rational/0.1.38 \ +crate://crates.io/num-traits/0.1.39 \ +crate://crates.io/num/0.1.39 \ +crate://crates.io/num_cpus/1.6.2 \ +crate://crates.io/open/1.2.0 \ +crate://crates.io/openssl-probe/0.1.1 \ +crate://crates.io/openssl-sys/0.9.15 \ +crate://crates.io/openssl/0.9.15 \ +crate://crates.io/owning_ref/0.3.3 \ +crate://crates.io/percent-encoding/1.0.0 \ +crate://crates.io/pest/0.3.3 \ +crate://crates.io/pkg-config/0.3.9 \ +crate://crates.io/psapi-sys/0.1.0 \ +crate://crates.io/pulldown-cmark/0.0.14 \ +crate://crates.io/quick-error/1.2.0 \ +crate://crates.io/quote/0.3.15 \ +crate://crates.io/rand/0.3.15 \ +crate://crates.io/regex-syntax/0.3.9 \ +crate://crates.io/regex-syntax/0.4.1 \ +crate://crates.io/regex/0.1.80 \ +crate://crates.io/regex/0.2.2 \ +crate://crates.io/rls-data/0.7.0 \ +crate://crates.io/rls-span/0.4.0 \ +crate://crates.io/rustc-demangle/0.1.4 \ +crate://crates.io/rustc-serialize/0.3.24 \ +crate://crates.io/same-file/0.1.3 \ +crate://crates.io/scoped-tls/0.1.0 \ +crate://crates.io/semver-parser/0.7.0 \ +crate://crates.io/semver/0.7.0 \ +crate://crates.io/serde/1.0.10 \ +crate://crates.io/serde_derive/1.0.10 \ +crate://crates.io/serde_derive_internals/0.15.1 \ +crate://crates.io/serde_ignored/0.0.3 \ +crate://crates.io/serde_json/1.0.2 \ +crate://crates.io/shell-escape/0.1.3 \ +crate://crates.io/socket2/0.2.1 \ +crate://crates.io/stable_deref_trait/1.0.0 \ +crate://crates.io/strsim/0.6.0 \ +crate://crates.io/syn/0.11.11 \ +crate://crates.io/synom/0.11.3 \ +crate://crates.io/tar/0.4.13 \ +crate://crates.io/tempdir/0.3.5 \ +crate://crates.io/term_size/0.3.0 \ +crate://crates.io/termcolor/0.3.2 \ +crate://crates.io/textwrap/0.6.0 \ +crate://crates.io/thread-id/2.0.0 \ +crate://crates.io/thread_local/0.2.7 \ +crate://crates.io/thread_local/0.3.4 \ +crate://crates.io/toml/0.1.30 \ +crate://crates.io/toml/0.4.2 \ +crate://crates.io/unicode-bidi/0.3.4 \ +crate://crates.io/unicode-normalization/0.1.5 \ +crate://crates.io/unicode-segmentation/1.1.0 \ +crate://crates.io/unicode-width/0.1.4 \ +crate://crates.io/unicode-xid/0.0.4 \ +crate://crates.io/unreachable/1.0.0 \ +crate://crates.io/url/1.5.1 \ +crate://crates.io/utf8-ranges/0.1.3 \ +crate://crates.io/utf8-ranges/1.0.0 \ +crate://crates.io/vcpkg/0.2.2 \ +crate://crates.io/vec_map/0.8.0 \ +crate://crates.io/void/1.0.2 \ +crate://crates.io/walkdir/1.0.7 \ +crate://crates.io/winapi-build/0.1.1 \ +crate://crates.io/winapi/0.2.8 \ +crate://crates.io/wincolor/0.1.4 \ +crate://crates.io/ws2_32-sys/0.2.1 \ +crate://crates.io/xattr/0.1.11 \ +crate://crates.io/xz2/0.1.3 \ +crate://crates.io/yaml-rust/0.3.5 \ +" + +DEPENDS += "rust-llvm (=${PV})" + +# Otherwise we'll depend on what we provide +INHIBIT_DEFAULT_RUST_DEPS_class-native = "1" +# We don't need to depend on gcc-native because yocto assumes it exists +PROVIDES_class-native = "virtual/${TARGET_PREFIX}rust" + +BBCLASSEXTEND = "native" diff --git a/recipes-example/rustfmt/rustfmt_0.4.0.bb b/recipes-example/rustfmt/rustfmt_0.4.0.bb deleted file mode 100644 index 17f2350..0000000 --- a/recipes-example/rustfmt/rustfmt_0.4.0.bb +++ /dev/null @@ -1,36 +0,0 @@ -inherit cargo - -SRC_URI = " \ - crate://crates.io/aho-corasick/0.5.1 \ - crate://crates.io/bitflags/0.5.0 \ - crate://crates.io/diff/0.1.9 \ - crate://crates.io/env_logger/0.3.2 \ - crate://crates.io/getopts/0.2.14 \ - crate://crates.io/kernel32-sys/0.2.1 \ - crate://crates.io/libc/0.2.8 \ - crate://crates.io/log/0.3.5 \ - crate://crates.io/memchr/0.1.10 \ - crate://crates.io/regex/0.1.58 \ - crate://crates.io/regex-syntax/0.3.0 \ - crate://crates.io/rustc-serialize/0.3.18 \ - crate://crates.io/strings/0.0.1 \ - crate://crates.io/syntex_syntax/0.30.0 \ - crate://crates.io/term/0.2.14 \ - crate://crates.io/toml/0.1.28 \ - crate://crates.io/unicode-segmentation/0.1.2 \ - crate://crates.io/unicode-xid/0.0.3 \ - crate://crates.io/utf8-ranges/0.1.3 \ - crate://crates.io/winapi/0.2.6 \ - crate://crates.io/winapi-build/0.1.1 \ - crate://crates.io/rustfmt/0.4.0 \ -" -# rustfmt 0.5.0 -#LIC_FILES_CHKSUM=" \ -# file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \ -# file://LICENSE-MIT;md5=0b29d505d9225d1f0815cbdcf602b901 \ -#" -LIC_FILES_CHKSUM="file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420" - -SUMMARY = "Format Rust Code" -HOMEPAGE = "https://github.com/rust-lang-nursery/rustfmt" -LICENSE = "MIT | Apache-2.0" diff --git a/recipes-example/rustfmt/rustfmt_0.8.0.bb b/recipes-example/rustfmt/rustfmt_0.8.0.bb new file mode 100644 index 0000000..0c94e38 --- /dev/null +++ b/recipes-example/rustfmt/rustfmt_0.8.0.bb @@ -0,0 +1,67 @@ +# Auto-Generated by cargo-bitbake 0.3.6 +# +inherit cargo + +# If this is git based prefer versioned ones if they exist +# DEFAULT_PREFERENCE = "-1" + +# how to get rustfmt could be as easy as but default to a git checkout: +# SRC_URI += "crate://crates.io/rustfmt/0.8.0" +SRC_URI += "git://github.com/rust-lang-nursery/rustfmt.git;protocol=https;branch=syntex" +SRCREV = "4ed5a3bac71ed104e27797ee63729b0333e39d39" +S = "${WORKDIR}/git" +CARGO_SRC_DIR="" + + +# please note if you have entries that do not begin with crate:// +# you must change them to how that package can be fetched +SRC_URI += " \ +crate://crates.io/aho-corasick/0.6.2 \ +crate://crates.io/bitflags/0.8.0 \ +crate://crates.io/diff/0.1.10 \ +crate://crates.io/either/1.0.3 \ +crate://crates.io/env_logger/0.4.1 \ +crate://crates.io/getopts/0.2.14 \ +crate://crates.io/itertools/0.5.9 \ +crate://crates.io/kernel32-sys/0.2.2 \ +crate://crates.io/libc/0.2.21 \ +crate://crates.io/log/0.3.6 \ +crate://crates.io/memchr/1.0.1 \ +crate://crates.io/multimap/0.3.0 \ +crate://crates.io/regex-syntax/0.4.0 \ +crate://crates.io/regex/0.2.1 \ +crate://crates.io/rustc-serialize/0.3.22 \ +crate://crates.io/same-file/0.1.3 \ +crate://crates.io/strings/0.0.1 \ +crate://crates.io/syntex_errors/0.58.1 \ +crate://crates.io/syntex_pos/0.58.1 \ +crate://crates.io/syntex_syntax/0.58.1 \ +crate://crates.io/term/0.4.5 \ +crate://crates.io/thread-id/3.0.0 \ +crate://crates.io/thread_local/0.3.3 \ +crate://crates.io/toml/0.2.1 \ +crate://crates.io/unicode-segmentation/1.1.0 \ +crate://crates.io/unicode-xid/0.0.4 \ +crate://crates.io/unreachable/0.1.1 \ +crate://crates.io/utf8-ranges/1.0.0 \ +crate://crates.io/void/1.0.2 \ +crate://crates.io/walkdir/1.0.7 \ +crate://crates.io/winapi-build/0.1.1 \ +crate://crates.io/winapi/0.2.8 \ +" + + + +LIC_FILES_CHKSUM=" \ +file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \ +file://LICENSE-MIT;md5=0b29d505d9225d1f0815cbdcf602b901 \ +" + +SUMMARY = "Tool to find and fix Rust formatting issues" +HOMEPAGE = "https://github.com/rust-lang-nursery/rustfmt" +LICENSE = "Apache-2.0 | MIT" + +# includes this file if it exists but does not fail +# this is useful for anything you may want to override from +# what cargo-bitbake generates. +include rustfmt.inc diff --git a/scripts/cleanup-env.sh b/scripts/cleanup-env.sh index 9e5ef8b..61c7573 100755 --- a/scripts/cleanup-env.sh +++ b/scripts/cleanup-env.sh @@ -1,4 +1,4 @@ -#!/bin/bash -e +#!/bin/bash -x # Only attempt to unmount if the directory is already mounted if mountpoint -q `pwd`/build; then diff --git a/scripts/containerize.sh b/scripts/containerize.sh index 499378b..9e28453 100755 --- a/scripts/containerize.sh +++ b/scripts/containerize.sh @@ -1,7 +1,7 @@ #!/bin/bash # what container are we using to build this -CONTAINER="starlabio/yocto:1.5" +CONTAINER="cardoe/yocto:pyro" einfo() { echo "$*" >&2