diff options
Diffstat (limited to 'extra/rust')
-rwxr-xr-x | extra/rust/build | 56 | ||||
-rw-r--r-- | extra/rust/checksums | 5 | ||||
-rw-r--r-- | extra/rust/depends | 7 | ||||
-rw-r--r-- | extra/rust/patches/musl-libressl.patch | 128 | ||||
-rw-r--r-- | extra/rust/sources | 5 | ||||
-rw-r--r-- | extra/rust/version | 1 |
6 files changed, 202 insertions, 0 deletions
diff --git a/extra/rust/build b/extra/rust/build new file mode 100755 index 00000000..f02d3b3e --- /dev/null +++ b/extra/rust/build @@ -0,0 +1,56 @@ +#!/bin/sh -e + +# This package mimics the download process of rust's 'x.py' +# bootstrap library to allow for the removal of the internet +# connection requirement per build further enabling checksums +# and signature verification by KISS. +{ + cache_dir=build/cache/2019-09-26 + mkdir -p "$cache_dir" + + for tarball in *.tar.gz\?no-extract; do + mv -f "$tarball" "$cache_dir/${tarball%%\?no-extract}" + done +} + +patch -p1 < musl-libressl.patch + +# 'rust' checksums files in 'vendor/', but we patch a few files. +for vendor in libc openssl-sys; do + sed -i 's/\("files":{\)[^}]*/\1/' "vendor/$vendor/.cargo-checksum.json" +done + +cat > config.toml <<EOF +[llvm] +link-shared = true + +[build] +build = "x86_64-unknown-linux-musl" +host = [ "x86_64-unknown-linux-musl" ] +target = [ "x86_64-unknown-linux-musl" ] +docs = false +extended = true +submodules = false +python = "python3" +locked-deps = true +vendor = true + +[install] +prefix = "/usr" + +[rust] +channel = "stable" +rpath = false +codegen-units = 1 +debuginfo-level = 0 +backtrace = false +jemalloc = false +codegen-tests = false + +[target.x86_64-unknown-linux-musl] +llvm-config = "/usr/bin/llvm-config" +crt-static = false +EOF + +python3 ./x.py build -j "$(nproc)" +DESTDIR="$1" python3 ./x.py install diff --git a/extra/rust/checksums b/extra/rust/checksums new file mode 100644 index 00000000..6570ccd3 --- /dev/null +++ b/extra/rust/checksums @@ -0,0 +1,5 @@ +b4a1f6b6a93931f270691aba4fc85eee032fecda973e6b9c774cd06857609357 rustc-1.39.0-src.tar.gz +56b87fdca1f41b634285593cae42fdbd5fe9632ef502336679362b283ed53c22 rust-std-1.38.0-x86_64-unknown-linux-musl.tar.gz?no-extract +bb0166cbb1d31bcb09d79224e7ac43a80d9448b7199b5392a3852b3ec71840aa rustc-1.38.0-x86_64-unknown-linux-musl.tar.gz?no-extract +bbf58bf638c5c4cf86caaa1bfe2835b3856d4ef46447c9942d5e59cc7654c5e4 cargo-0.39.0-x86_64-unknown-linux-musl.tar.gz?no-extract +122b5d9b83778882bdd64d40fea98982f7d1db510e09fc64a4ece5add4fd99a2 musl-libressl.patch diff --git a/extra/rust/depends b/extra/rust/depends new file mode 100644 index 00000000..058f23c8 --- /dev/null +++ b/extra/rust/depends @@ -0,0 +1,7 @@ +cmake make +curl make +libressl +llvm +python make +xz +zlib diff --git a/extra/rust/patches/musl-libressl.patch b/extra/rust/patches/musl-libressl.patch new file mode 100644 index 00000000..ed1f2404 --- /dev/null +++ b/extra/rust/patches/musl-libressl.patch @@ -0,0 +1,128 @@ +diff --git a/src/bootstrap/compile.rs b/src/bootstrap/compile.rs +index 6ea32edfb..9d6d10f7f 100644 +--- a/src/bootstrap/compile.rs ++++ b/src/bootstrap/compile.rs +@@ -122,7 +122,7 @@ fn copy_third_party_objects(builder: &Builder<'_>, compiler: &Compiler, target: + // with a glibc-targeting toolchain, given we have the appropriate startup + // files. As those shipped with glibc won't work, copy the ones provided by + // musl so we have them on linux-gnu hosts. +- if target.contains("musl") { ++ if target.contains("noop") { + for &obj in &["crt1.o", "crti.o", "crtn.o"] { + builder.copy( + &builder.musl_root(target).unwrap().join("lib").join(obj), +diff --git a/src/bootstrap/sanity.rs b/src/bootstrap/sanity.rs +index bffe748f3..40f9f597f 100644 +--- a/src/bootstrap/sanity.rs ++++ b/src/bootstrap/sanity.rs +@@ -188,7 +188,7 @@ pub fn check(build: &mut Build) { + } + + // Make sure musl-root is valid +- if target.contains("musl") { ++ if target.contains("noop") { + // If this is a native target (host is also musl) and no musl-root is given, + // fall back to the system toolchain in /usr before giving up + if build.musl_root(*target).is_none() && build.config.build == *target { +diff --git a/src/librustc_target/spec/linux_musl_base.rs b/src/librustc_target/spec/linux_musl_base.rs +index e294e6398..17fecb3b2 100644 +--- a/src/librustc_target/spec/linux_musl_base.rs ++++ b/src/librustc_target/spec/linux_musl_base.rs +@@ -26,7 +26,7 @@ pub fn opts() -> TargetOptions { + base.post_link_objects_crt.push("crtn.o".to_string()); + + // These targets statically link libc by default +- base.crt_static_default = true; ++ base.crt_static_default = false; + // These targets allow the user to choose between static and dynamic linking. + base.crt_static_respected = true; + +diff --git a/src/libunwind/build.rs b/src/libunwind/build.rs +index f24d957d6..4632212fd 100644 +--- a/src/libunwind/build.rs ++++ b/src/libunwind/build.rs +@@ -10,7 +10,7 @@ fn main() { + // Build the unwinding from libunwind C/C++ source code. + llvm_libunwind::compile(); + } else if target.contains("linux") { +- if target.contains("musl") { ++ if target.contains("noop") { + // linking for musl is handled in lib.rs + llvm_libunwind::compile(); + } else if !target.contains("android") { +diff --git a/src/libunwind/lib.rs b/src/libunwind/lib.rs +index 8d9164471..3adaaf43d 100644 +--- a/src/libunwind/lib.rs ++++ b/src/libunwind/lib.rs +@@ -20,7 +20,7 @@ cfg_if::cfg_if! { + } + } + +-#[cfg(target_env = "musl")] ++#[cfg(target_env = "noop")] + #[link(name = "unwind", kind = "static", cfg(target_feature = "crt-static"))] + #[link(name = "gcc_s", cfg(not(target_feature = "crt-static")))] + extern {} +diff --git a/vendor/libc/src/unix/mod.rs b/vendor/libc/src/unix/mod.rs +index 721d24116..26bf271cd 100644 +--- a/vendor/libc/src/unix/mod.rs ++++ b/vendor/libc/src/unix/mod.rs +@@ -296,7 +296,7 @@ cfg_if! { + } else if #[cfg(feature = "std")] { + // cargo build, don't pull in anything extra as the libstd dep + // already pulls in all libs. +- } else if #[cfg(target_env = "musl")] { ++ } else if #[cfg(target_env = "noop")] { + #[cfg_attr(feature = "rustc-dep-of-std", + link(name = "c", kind = "static", + cfg(target_feature = "crt-static")))] +diff --git a/vendor/openssl-sys/build/main.rs b/vendor/openssl-sys/build/main.rs +index 02b93b90a..27deca5fe 100644 +--- a/vendor/openssl-sys/build/main.rs ++++ b/vendor/openssl-sys/build/main.rs +@@ -183,27 +183,30 @@ See rust-openssl README for more information: + if let Some(libressl_version) = libressl_version { + println!("cargo:libressl_version_number={:x}", libressl_version); + ++ let major = (libressl_version >> 28) as u8; + let minor = (libressl_version >> 20) as u8; + let fix = (libressl_version >> 12) as u8; +- let (minor, fix) = match (minor, fix) { +- (5, 0) => ('5', '0'), +- (5, 1) => ('5', '1'), +- (5, 2) => ('5', '2'), +- (5, _) => ('5', 'x'), +- (6, 0) => ('6', '0'), +- (6, 1) => ('6', '1'), +- (6, 2) => ('6', '2'), +- (6, _) => ('6', 'x'), +- (7, _) => ('7', 'x'), +- (8, 0) => ('8', '0'), +- (8, 1) => ('8', '1'), +- (8, _) => ('8', 'x'), +- (9, 0) => ('9', '0'), ++ let (major, minor, fix) = match (major, minor, fix) { ++ (2, 5, 0) => ('2', '5', '0'), ++ (2, 5, 1) => ('2', '5', '1'), ++ (2, 5, 2) => ('2', '5', '2'), ++ (2, 5, _) => ('2', '5', 'x'), ++ (2, 6, 0) => ('2', '6', '0'), ++ (2, 6, 1) => ('2', '6', '1'), ++ (2, 6, 2) => ('2', '6', '2'), ++ (2, 6, _) => ('2', '6', 'x'), ++ (2, 7, _) => ('2', '7', 'x'), ++ (2, 8, 0) => ('2', '8', '0'), ++ (2, 8, 1) => ('2', '8', '1'), ++ (3, 0, _) => ('3', '0', 'x'), ++ (2, 9, 0) => ('2', '9', '0'), ++ (2, 9, _) => ('2', '9', 'x'), ++ (3, 0, 0) => ('3', '0', '0'), + _ => version_error(), + }; + + println!("cargo:libressl=true"); +- println!("cargo:libressl_version=2{}{}", minor, fix); ++ println!("cargo:libressl_version={}{}{}", major, minor, fix); + println!("cargo:version=101"); + Version::Libressl + } else { diff --git a/extra/rust/sources b/extra/rust/sources new file mode 100644 index 00000000..a1e63232 --- /dev/null +++ b/extra/rust/sources @@ -0,0 +1,5 @@ +https://static.rust-lang.org/dist/rustc-1.39.0-src.tar.gz +https://static.rust-lang.org/dist/2019-09-26/rust-std-1.38.0-x86_64-unknown-linux-musl.tar.gz?no-extract +https://static.rust-lang.org/dist/2019-09-26/rustc-1.38.0-x86_64-unknown-linux-musl.tar.gz?no-extract +https://static.rust-lang.org/dist/2019-09-26/cargo-0.39.0-x86_64-unknown-linux-musl.tar.gz?no-extract +patches/musl-libressl.patch diff --git a/extra/rust/version b/extra/rust/version new file mode 100644 index 00000000..07fabd51 --- /dev/null +++ b/extra/rust/version @@ -0,0 +1 @@ +1.39.0 1 |