diff options
Diffstat (limited to 'meta/recipes-devtools/cargo')
9 files changed, 286 insertions, 0 deletions
diff --git a/meta/recipes-devtools/cargo/cargo-1.51.0/0001-Disable-http2.patch b/meta/recipes-devtools/cargo/cargo-1.51.0/0001-Disable-http2.patch new file mode 100644 index 0000000000..9d47c9beb5 --- /dev/null +++ b/meta/recipes-devtools/cargo/cargo-1.51.0/0001-Disable-http2.patch @@ -0,0 +1,28 @@ +From 9844e63845da6cdafa485ad1ad3c99eaaa80312d Mon Sep 17 00:00:00 2001 +From: Johan Anderholm <johan.anderholm@gmail.com> +Date: Sun, 27 Jan 2019 10:19:00 +0100 +Subject: [PATCH] Disable http2 + +http2 requires that curl is build with nghttp2 which in turn depends on +many dependencies and ultimately a dependency loop in the case of +curl-native. As long as multiplexing is disabled in cargo this should +be fine. + +Upstream-Status: Inappropriate +--- + Cargo.toml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Cargo.toml b/Cargo.toml +index 8a144a4..c4f856e 100644 +--- a/Cargo.toml ++++ b/Cargo.toml +@@ -25,7 +25,7 @@ cargo-platform = { path = "crates/cargo-platform", version = "0.1.1" } + crates-io = { path = "crates/crates-io", version = "0.33.0" } + crossbeam-utils = "0.8" + crypto-hash = "0.3.1" +-curl = { version = "0.4.23", features = ["http2"] } ++curl = { version = "0.4.23" } + curl-sys = "0.4.22" + env_logger = "0.8.1" + pretty_env_logger = { version = "0.4", optional = true } diff --git a/meta/recipes-devtools/cargo/cargo-1.51.0/riscv-march.patch b/meta/recipes-devtools/cargo/cargo-1.51.0/riscv-march.patch new file mode 100644 index 0000000000..a10b3a4d93 --- /dev/null +++ b/meta/recipes-devtools/cargo/cargo-1.51.0/riscv-march.patch @@ -0,0 +1,73 @@ +Add suppor for riscv64 and riscv32 musl targets + +Upstream-Status: Pending +Signed-off-by: Khem Raj <raj.khem@gmail.com> + +--- a/vendor/cc/src/lib.rs ++++ b/vendor/cc/src/lib.rs +@@ -2361,6 +2361,7 @@ impl Build { + "riscv-none-embed", + ]), + "riscv64gc-unknown-linux-gnu" => Some("riscv64-linux-gnu"), ++ "riscv64gc-unknown-linux-musl" => Some("riscv64-linux-musl"), + "s390x-unknown-linux-gnu" => Some("s390x-linux-gnu"), + "sparc-unknown-linux-gnu" => Some("sparc-linux-gnu"), + "sparc64-unknown-linux-gnu" => Some("sparc64-linux-gnu"), +--- a/compiler/rustc_target/src/spec/mod.rs ++++ b/compiler/rustc_target/src/spec/mod.rs +@@ -641,9 +641,11 @@ supported_targets! { + ("riscv32imc-unknown-none-elf", riscv32imc_unknown_none_elf), + ("riscv32imac-unknown-none-elf", riscv32imac_unknown_none_elf), + ("riscv32gc-unknown-linux-gnu", riscv32gc_unknown_linux_gnu), ++ ("riscv32gc-unknown-linux-musl", riscv32gc_unknown_linux_musl), + ("riscv64imac-unknown-none-elf", riscv64imac_unknown_none_elf), + ("riscv64gc-unknown-none-elf", riscv64gc_unknown_none_elf), + ("riscv64gc-unknown-linux-gnu", riscv64gc_unknown_linux_gnu), ++ ("riscv64gc-unknown-linux-musl", riscv64gc_unknown_linux_musl), + + ("aarch64-unknown-none", aarch64_unknown_none), + ("aarch64-unknown-none-softfloat", aarch64_unknown_none_softfloat), +--- /dev/null ++++ b/compiler/rustc_target/src/spec/riscv32gc_unknown_linux_musl.rs +@@ -0,0 +1,19 @@ ++use crate::spec::{CodeModel, Target, TargetOptions}; ++ ++pub fn target() -> Target { ++ Target { ++ llvm_target: "riscv32-unknown-linux-musl".to_string(), ++ pointer_width: 32, ++ data_layout: "e-m:e-p:32:32-i64:64-n32-S128".to_string(), ++ arch: "riscv32".to_string(), ++ options: TargetOptions { ++ unsupported_abis: super::riscv_base::unsupported_abis(), ++ code_model: Some(CodeModel::Medium), ++ cpu: "generic-rv32".to_string(), ++ features: "+m,+a,+f,+d,+c".to_string(), ++ llvm_abiname: "ilp32d".to_string(), ++ max_atomic_width: Some(32), ++ ..super::linux_musl_base::opts() ++ }, ++ } ++} +--- /dev/null ++++ b/compiler/rustc_target/src/spec/riscv64gc_unknown_linux_musl.rs +@@ -0,0 +1,19 @@ ++use crate::spec::{CodeModel, Target, TargetOptions}; ++ ++pub fn target() -> Target { ++ Target { ++ llvm_target: "riscv64-unknown-linux-musl".to_string(), ++ pointer_width: 64, ++ data_layout: "e-m:e-p:64:64-i64:64-i128:128-n64-S128".to_string(), ++ arch: "riscv64".to_string(), ++ options: TargetOptions { ++ unsupported_abis: super::riscv_base::unsupported_abis(), ++ code_model: Some(CodeModel::Medium), ++ cpu: "generic-rv64".to_string(), ++ features: "+m,+a,+f,+d,+c".to_string(), ++ llvm_abiname: "lp64d".to_string(), ++ max_atomic_width: Some(64), ++ ..super::linux_musl_base::opts() ++ }, ++ } ++} diff --git a/meta/recipes-devtools/cargo/cargo-1.51.0/rv64gc.patch b/meta/recipes-devtools/cargo/cargo-1.51.0/rv64gc.patch new file mode 100644 index 0000000000..aab1e18453 --- /dev/null +++ b/meta/recipes-devtools/cargo/cargo-1.51.0/rv64gc.patch @@ -0,0 +1,37 @@ +--- a/vendor/cc-1.0.60/.cargo-checksum.json ++++ b/vendor/cc-1.0.60/.cargo-checksum.json +@@ -1 +1 @@ +-{"files":{"Cargo.lock":"30b9e23f97015aea3eed3e17c6d76d565c2924efec8bdae64c899080847afe89","Cargo.toml":"f6f22b69df3df57c58373cdee72b22218ffa030bc375b36632660037dd72c866","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397","README.md":"51405d284d2e0620db62c655c652fc0ec84f20c1cb30529227355c9575a9e6dd","src/bin/gcc-shim.rs":"b77907875029494b6288841c3aed2e4939ed40708c7f597fca5c9e2570490ca6","src/com.rs":"bcdaf1c28b71e6ef889c6b08d1ce9d7c0761344a677f523bc4c3cd297957f804","src/lib.rs":"903c5f2f5dd0cc7d04f99f605a95e6abde8b38156fd4e73eefc58493f55a4e5a","src/registry.rs":"3cc1b5a50879fa751572878ae1d0afbfc960c11665258492754b2c8bccb0ff5d","src/setup_config.rs":"7014103587d3382eac599cb76f016e2609b8140970861b2237982d1db24af265","src/winapi.rs":"ea8b7edbb9ff87957254f465c2334e714c5d6b3b19a8d757c48ea7ca0881c50c","src/windows_registry.rs":"52afe8554f577c87841c48ddee3ba7ffe70a00129e1d6eeb2ec0efb3d2b9aa11","tests/cc_env.rs":"e02b3b0824ad039b47e4462c5ef6dbe6c824c28e7953af94a0f28f7b5158042e","tests/cflags.rs":"57f06eb5ce1557e5b4a032d0c4673e18fbe6f8d26c1deb153126e368b96b41b3","tests/cxxflags.rs":"c2c6c6d8a0d7146616fa1caed26876ee7bc9fcfffd525eb4743593cade5f3371","tests/support/mod.rs":"16274867f23871e9b07614eda4c7344da13d1751fed63d4f633857e40be86394","tests/test.rs":"65c073e0e2cf4aa0433066102788e9f57442719e6f32f5ad5248aa7132bb4597"},"package":"ef611cc68ff783f18535d77ddd080185275713d852c4f5cbb6122c462a7a825c"} +\ No newline at end of file ++{"files":{"Cargo.lock":"30b9e23f97015aea3eed3e17c6d76d565c2924efec8bdae64c899080847afe89","Cargo.toml":"f6f22b69df3df57c58373cdee72b22218ffa030bc375b36632660037dd72c866","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397","README.md":"51405d284d2e0620db62c655c652fc0ec84f20c1cb30529227355c9575a9e6dd","src/bin/gcc-shim.rs":"b77907875029494b6288841c3aed2e4939ed40708c7f597fca5c9e2570490ca6","src/com.rs":"bcdaf1c28b71e6ef889c6b08d1ce9d7c0761344a677f523bc4c3cd297957f804","src/lib.rs":"2788af2bdf425f267b33bc524f3e627851b52422e38f480a7e39eb834264fd73","src/registry.rs":"3cc1b5a50879fa751572878ae1d0afbfc960c11665258492754b2c8bccb0ff5d","src/setup_config.rs":"7014103587d3382eac599cb76f016e2609b8140970861b2237982d1db24af265","src/winapi.rs":"ea8b7edbb9ff87957254f465c2334e714c5d6b3b19a8d757c48ea7ca0881c50c","src/windows_registry.rs":"52afe8554f577c87841c48ddee3ba7ffe70a00129e1d6eeb2ec0efb3d2b9aa11","tests/cc_env.rs":"e02b3b0824ad039b47e4462c5ef6dbe6c824c28e7953af94a0f28f7b5158042e","tests/cflags.rs":"57f06eb5ce1557e5b4a032d0c4673e18fbe6f8d26c1deb153126e368b96b41b3","tests/cxxflags.rs":"c2c6c6d8a0d7146616fa1caed26876ee7bc9fcfffd525eb4743593cade5f3371","tests/support/mod.rs":"16274867f23871e9b07614eda4c7344da13d1751fed63d4f633857e40be86394","tests/test.rs":"65c073e0e2cf4aa0433066102788e9f57442719e6f32f5ad5248aa7132bb4597"},"package":"ef611cc68ff783f18535d77ddd080185275713d852c4f5cbb6122c462a7a825c"} +--- a/vendor/cc-1.0.60/src/lib.rs ++++ b/vendor/cc-1.0.60/src/lib.rs +@@ -1639,14 +1639,17 @@ impl Build { + let mut parts = target.split('-'); + if let Some(arch) = parts.next() { + let arch = &arch[5..]; +- cmd.args.push(("-march=rv".to_owned() + arch).into()); + if target.contains("linux") && arch.starts_with("64") { ++ cmd.args.push(("-march=rv64gc").into()); + cmd.args.push("-mabi=lp64d".into()); + } else if target.contains("linux") && arch.starts_with("32") { ++ cmd.args.push(("-march=rv32gc").into()); + cmd.args.push("-mabi=ilp32d".into()); + } else if arch.starts_with("64") { ++ cmd.args.push(("-march=rv".to_owned() + arch).into()); + cmd.args.push("-mabi=lp64".into()); + } else { ++ cmd.args.push(("-march=rv".to_owned() + arch).into()); + cmd.args.push("-mabi=ilp32".into()); + } + cmd.args.push("-mcmodel=medany".into()); +@@ -2332,6 +2335,9 @@ impl Build { + "riscv-none-embed", + ]), + "riscv64gc-unknown-linux-gnu" => Some("riscv64-linux-gnu"), ++ "riscv32gc-unknown-linux-gnu" => Some("riscv32-linux-gnu"), ++ "riscv64gc-unknown-linux-musl" => Some("riscv64-linux-musl"), ++ "riscv32gc-unknown-linux-musl" => Some("riscv32-linux-musl"), + "s390x-unknown-linux-gnu" => Some("s390x-linux-gnu"), + "sparc-unknown-linux-gnu" => Some("sparc-linux-gnu"), + "sparc64-unknown-linux-gnu" => Some("sparc64-linux-gnu"), diff --git a/meta/recipes-devtools/cargo/cargo-cross-canadian.inc b/meta/recipes-devtools/cargo/cargo-cross-canadian.inc new file mode 100644 index 0000000000..840793c50b --- /dev/null +++ b/meta/recipes-devtools/cargo/cargo-cross-canadian.inc @@ -0,0 +1,74 @@ +SUMMARY = "Cargo, a package manager for Rust cross canadian flavor." + +RUST_ALTERNATE_EXE_PATH = "${STAGING_LIBDIR_NATIVE}/llvm-rust/bin/llvm-config" + +HOST_SYS = "${HOST_ARCH}-unknown-linux-gnu" +CARGO_RUST_TARGET_CCLD = "${RUST_BUILD_CCLD}" + +require recipes-devtools/rust/rust-common.inc +require cargo.inc + +CARGO = "${WORKDIR}/${CARGO_SNAPSHOT}/bin/cargo" +BASEDEPENDS:remove = "cargo-native" + +export RUST_TARGET_PATH="${WORKDIR}/targets/" + +RUSTLIB = " \ + -L ${STAGING_DIR_NATIVE}/${SDKPATHNATIVE}/usr/lib/${TARGET_SYS}/rustlib/${HOST_SYS}/lib \ +" + +DEPENDS += "rust-native \ + rust-cross-canadian-${TRANSLATED_TARGET_ARCH} \ + virtual/nativesdk-${HOST_PREFIX}compilerlibs \ + nativesdk-openssl nativesdk-zlib \ + virtual/nativesdk-libc \ +" + +inherit cross-canadian + +PN = "cargo-cross-canadian-${TRANSLATED_TARGET_ARCH}" + +LLVM_TARGET[x86_64] = "${RUST_HOST_SYS}" + +python do_rust_gen_targets () { + wd = d.getVar('WORKDIR') + '/targets/' + + rust_gen_target(d, 'BUILD', wd, "", "generic", d.getVar('BUILD_ARCH')) + rust_gen_target(d, 'HOST', wd, "", "generic", d.getVar('HOST_ARCH')) +} + +do_compile:prepend () { + PKG_CONFIG_PATH="${RECIPE_SYSROOT_NATIVE}/usr/lib/pkgconfig:${PKG_CONFIG_PATH}" +} + +do_install () { + SYS_BINDIR=$(dirname ${D}${bindir}) + install -d "${SYS_BINDIR}" + install -m 755 "${B}/target/${CARGO_TARGET_SUBDIR}/cargo" "${SYS_BINDIR}" + for i in ${SYS_BINDIR}/*; do + chrpath -r "\$ORIGIN/../lib" ${i} + done + + ENV_SETUP_DIR=${D}${base_prefix}/environment-setup.d + mkdir "${ENV_SETUP_DIR}" + ENV_SETUP_SH="${ENV_SETUP_DIR}/cargo.sh" + cat <<- EOF > "${ENV_SETUP_SH}" + export CARGO_HOME="\$OECORE_TARGET_SYSROOT/home/cargo" + mkdir -p "\$CARGO_HOME" + # Init the default target once, it might be otherwise user modified. + if [ ! -f "\$CARGO_HOME/config" ]; then + touch "\$CARGO_HOME/config" + echo "[build]" >> "\$CARGO_HOME/config" + echo 'target = "'${TARGET_SYS}'"' >> "\$CARGO_HOME/config" + fi + + # Keep the below off as long as HTTP/2 is disabled. + export CARGO_HTTP_MULTIPLEXING=false + + export CARGO_HTTP_CAINFO="\$OECORE_NATIVE_SYSROOT/etc/ssl/certs/ca-certificates.crt" + EOF +} + +PKG_SYS_BINDIR = "${SDKPATHNATIVE}/usr/bin" +FILES:${PN} += "${base_prefix}/environment-setup.d ${PKG_SYS_BINDIR}" + diff --git a/meta/recipes-devtools/cargo/cargo-cross-canadian_1.51.0.bb b/meta/recipes-devtools/cargo/cargo-cross-canadian_1.51.0.bb new file mode 100644 index 0000000000..dba400bcfb --- /dev/null +++ b/meta/recipes-devtools/cargo/cargo-cross-canadian_1.51.0.bb @@ -0,0 +1,6 @@ +require recipes-devtools/rust/rust-source-${PV}.inc +require recipes-devtools/rust/rust-snapshot-${PV}.inc + +FILESEXTRAPATHS:prepend := "${THISDIR}/cargo-${PV}:" + +require cargo-cross-canadian.inc diff --git a/meta/recipes-devtools/cargo/cargo-cross-canadian_1.54.0.bb b/meta/recipes-devtools/cargo/cargo-cross-canadian_1.54.0.bb new file mode 100644 index 0000000000..dba400bcfb --- /dev/null +++ b/meta/recipes-devtools/cargo/cargo-cross-canadian_1.54.0.bb @@ -0,0 +1,6 @@ +require recipes-devtools/rust/rust-source-${PV}.inc +require recipes-devtools/rust/rust-snapshot-${PV}.inc + +FILESEXTRAPATHS:prepend := "${THISDIR}/cargo-${PV}:" + +require cargo-cross-canadian.inc diff --git a/meta/recipes-devtools/cargo/cargo.inc b/meta/recipes-devtools/cargo/cargo.inc new file mode 100644 index 0000000000..32ccf0b7ae --- /dev/null +++ b/meta/recipes-devtools/cargo/cargo.inc @@ -0,0 +1,50 @@ +SUMMARY ?= "Cargo, a package manager for Rust." +HOMEPAGE = "https://crates.io" +LICENSE = "MIT | Apache-2.0" +SECTION = "devel" + +DEPENDS = "openssl zlib curl ca-certificates libssh2" + +LIC_FILES_CHKSUM = " \ + file://LICENSE-MIT;md5=b377b220f43d747efdec40d69fcaa69d \ + file://LICENSE-APACHE;md5=71b224ca933f0676e26d5c2e2271331c \ + file://LICENSE-THIRD-PARTY;md5=f257ad009884cb88a3a87d6920e7180a \ +" + + +S = "${RUSTSRC}/src/tools/cargo" +CARGO_VENDORING_DIRECTORY = "${RUSTSRC}/vendor" + +inherit cargo + +do_cargo_setup_snapshot () { + ${WORKDIR}/rust-snapshot-components/${CARGO_SNAPSHOT}/install.sh --prefix="${WORKDIR}/${CARGO_SNAPSHOT}" --disable-ldconfig +} + +addtask cargo_setup_snapshot after do_unpack before do_configure +do_cargo_setup_snapshot[dirs] += "${WORKDIR}/${CARGO_SNAPSHOT}" + +do_compile:prepend () { + export RUSTC_BOOTSTRAP="1" +} + +do_install () { + install -d "${D}${bindir}" + install -m 755 "${B}/target/${CARGO_TARGET_SUBDIR}/cargo" "${D}${bindir}" +} + +# Disabled due to incompatibility with libgit2 0.28.x (https://github.com/rust-lang/git2-rs/issues/458, https://bugs.gentoo.org/707746#c1) +# as shipped by Yocto Dunfell. +# According to https://github.com/rust-lang/git2-rs/issues/458#issuecomment-522567539, there are no compatibility guarantees between +# libgit2-sys and arbitrary system libgit2 versions, so better keep this turned off. +#export LIBGIT2_SYS_USE_PKG_CONFIG = "1" + +# Needed for pkg-config to be used +export LIBSSH2_SYS_USE_PKG_CONFIG = "1" + +BBCLASSEXTEND = "native nativesdk" + +# When building cargo-native we don't have cargo-native to use and depend on, +# so we must use the locally set up snapshot to bootstrap the build. +BASEDEPENDS:remove:class-native = "cargo-native" +CARGO:class-native = "${WORKDIR}/${CARGO_SNAPSHOT}/bin/cargo" diff --git a/meta/recipes-devtools/cargo/cargo_1.51.0.bb b/meta/recipes-devtools/cargo/cargo_1.51.0.bb new file mode 100644 index 0000000000..335b491cc9 --- /dev/null +++ b/meta/recipes-devtools/cargo/cargo_1.51.0.bb @@ -0,0 +1,8 @@ +require recipes-devtools/rust/rust-source-${PV}.inc +require recipes-devtools/rust/rust-snapshot-${PV}.inc +require cargo.inc + +SRC_URI += "file://0001-Disable-http2.patch \ + file://riscv-march.patch;patchdir=../../.. \ + file://rv64gc.patch;patchdir=../../.. \ + " diff --git a/meta/recipes-devtools/cargo/cargo_1.54.0.bb b/meta/recipes-devtools/cargo/cargo_1.54.0.bb new file mode 100644 index 0000000000..1f69615640 --- /dev/null +++ b/meta/recipes-devtools/cargo/cargo_1.54.0.bb @@ -0,0 +1,4 @@ +require recipes-devtools/rust/rust-source-${PV}.inc +require recipes-devtools/rust/rust-snapshot-${PV}.inc +require cargo.inc + |