aboutsummaryrefslogtreecommitdiff
path: root/extra/rust
diff options
context:
space:
mode:
Diffstat (limited to 'extra/rust')
-rwxr-xr-xextra/rust/build56
-rw-r--r--extra/rust/checksums5
-rw-r--r--extra/rust/depends7
-rw-r--r--extra/rust/patches/musl-libressl.patch128
-rw-r--r--extra/rust/sources5
-rw-r--r--extra/rust/version1
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