From da12a4c56ef0aa0dceabbe33eb59a06ee570d95e Mon Sep 17 00:00:00 2001 From: zonyitoo Date: Sun, 8 Dec 2019 10:59:36 +0800 Subject: [PATCH] Build with cross instead --- Cargo.lock | 64 ++++---- Cross.toml | 15 ++ build/Dockerfile | 15 -- build/Dockerfile.x86_64-pc-windows-gnu | 37 +++++ build/Dockerfile.x86_64-unknown-linux-musl | 37 +++++ build/README.md | 32 ++-- build/build-release | 169 ++++----------------- 7 files changed, 166 insertions(+), 203 deletions(-) create mode 100644 Cross.toml delete mode 100644 build/Dockerfile create mode 100644 build/Dockerfile.x86_64-pc-windows-gnu create mode 100644 build/Dockerfile.x86_64-unknown-linux-musl diff --git a/Cargo.lock b/Cargo.lock index 8acdad6f..57da388e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -80,7 +80,7 @@ name = "backtrace-sys" version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -191,7 +191,7 @@ name = "bzip2-sys" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -205,7 +205,7 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.47" +version = "1.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -256,7 +256,7 @@ dependencies = [ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -315,12 +315,12 @@ name = "curl-sys" version = "0.4.24" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", "libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", "openssl-sys 0.9.53 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", - "vcpkg 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -571,7 +571,7 @@ dependencies = [ "indexmap 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-util 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -725,13 +725,13 @@ name = "libloading" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libsodium-ffi" -version = "0.2.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bindgen 0.52.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -740,7 +740,7 @@ dependencies = [ "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", "tar 0.4.26 (registry+https://github.com/rust-lang/crates.io-index)", "unwrap 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "vcpkg 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "zip 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -749,10 +749,10 @@ name = "libz-sys" version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", - "vcpkg 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -970,10 +970,10 @@ version = "0.9.53" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", - "vcpkg 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1176,7 +1176,7 @@ name = "ring" version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", "spin 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1284,7 +1284,7 @@ dependencies = [ "hmac 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "json5 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "libsodium-ffi 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libsodium-ffi 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "lru_time_cache 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "md-5 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1297,7 +1297,7 @@ dependencies = [ "serde_urlencoded 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", "sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "trust-dns-resolver 0.18.0-alpha.2 (registry+https://github.com/rust-lang/crates.io-index)", "typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)", "url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1416,7 +1416,7 @@ name = "textwrap" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1439,7 +1439,7 @@ dependencies = [ [[package]] name = "tokio" -version = "0.2.2" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bytes 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1476,7 +1476,7 @@ dependencies = [ "bytes 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "futures-core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "rustls 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "webpki 0.21.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1490,7 +1490,7 @@ dependencies = [ "futures-sink 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "pin-project-lite 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1506,7 +1506,7 @@ dependencies = [ "http 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "rustls 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-rustls 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "trust-dns-proto 0.18.0-alpha.2 (registry+https://github.com/rust-lang/crates.io-index)", "trust-dns-rustls 0.18.0-alpha.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1530,7 +1530,7 @@ dependencies = [ "rand 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "socket2 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1549,7 +1549,7 @@ dependencies = [ "resolv-conf 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", "rustls 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "trust-dns-https 0.18.0-alpha.2 (registry+https://github.com/rust-lang/crates.io-index)", "trust-dns-proto 0.18.0-alpha.2 (registry+https://github.com/rust-lang/crates.io-index)", "trust-dns-rustls 0.18.0-alpha.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1564,7 +1564,7 @@ dependencies = [ "futures 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "rustls 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-rustls 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "trust-dns-proto 0.18.0-alpha.2 (registry+https://github.com/rust-lang/crates.io-index)", "webpki 0.21.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1615,7 +1615,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "unicode-width" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1645,7 +1645,7 @@ dependencies = [ [[package]] name = "vcpkg" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1900,7 +1900,7 @@ dependencies = [ "checksum bzip2 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "42b7c3cbf0fa9c1b82308d57191728ca0256cb821220f4e2fd410a72ade26e3b" "checksum bzip2-sys 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "6584aa36f5ad4c9247f5323b0a42f37802b37a836f0ad87084d7a33961abe25f" "checksum c2-chacha 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "214238caa1bf3a496ec3392968969cab8549f96ff30652c9e56885329315f6bb" -"checksum cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)" = "aa87058dce70a3ff5621797f1506cb837edd02ac4c0ae642b4542dce802908b8" +"checksum cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)" = "f52a465a666ca3d838ebbf08b241383421412fe7ebb463527bba275526d89f76" "checksum cexpr 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "fce5b5fb86b0c57c20c834c1b412fd09c77c8a59b9473f86272709e78874cd1d" "checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" "checksum checked_int_cast 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "17cc5e6b5ab06331c33589842070416baa137e8b0eb912b008cfd4a78ada7919" @@ -1961,7 +1961,7 @@ dependencies = [ "checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f" "checksum libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)" = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558" "checksum libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753" -"checksum libsodium-ffi 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "afcda749bf3b53c0e7cfa728fb87508cdc9cb3e86598f16aa87f8434d506f504" +"checksum libsodium-ffi 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "53549257b095ee7cf702e14c280e26fbc0271926070c46153a2a826faf7f95f3" "checksum libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "2eb5e43362e38e2bca2fd5f5134c4d4564a23a5c28e9b95411652021a8675ebe" "checksum linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ae91b68aebc4ddb91978b11a1b02ddd8602a05ec19002801c5666000e05e0f83" "checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" @@ -2042,7 +2042,7 @@ dependencies = [ "checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" "checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" "checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" -"checksum tokio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2e765bf9f550bd9b8a970633ca3b56b8120c4b6c5dcbe26a93744cb02fee4b17" +"checksum tokio 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "bcced6bb623d4bff3739c176c415f13c418f426395c169c9c3cd9a492c715b16" "checksum tokio-macros 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d5795a71419535c6dcecc9b6ca95bdd3c2d6142f7e8343d7beb9923f129aa87e" "checksum tokio-rustls 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "420448fb2a5fb489169ee30d1667d7182d7edc516a66a09f04cd2a6abf62134a" "checksum tokio-util 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "571da51182ec208780505a32528fc5512a8fe1443ab960b3f2f3ef093cd16930" @@ -2056,12 +2056,12 @@ dependencies = [ "checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" "checksum unicode-normalization 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "b561e267b2326bb4cebfc0ef9e68355c7abe6c6f522aeac2f5bf95d56c59bdcf" "checksum unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0" -"checksum unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7007dbd421b92cc6e28410fe7362e2e0a2503394908f417b68ec8d1c364c4e20" +"checksum unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479" "checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" "checksum untrusted 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "60369ef7a31de49bcb3f6ca728d4ba7300d9a1658f94c727d4cab8c8d9f4aece" "checksum unwrap 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e33648dd74328e622c7be51f3b40a303c63f93e6fa5f08778b6203a4c25c20f" "checksum url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "75b414f6c464c879d7f9babf951f23bc3743fb7313c081b2e6ca719067ea9d61" -"checksum vcpkg 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "33dd455d0f96e90a75803cfeb7f948768c08d70a6de9a8d2362461935698bf95" +"checksum vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3fc439f2794e98976c88a2a2dafce96b930fe8010b0a256b3c2199a773933168" "checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" "checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" "checksum wasi 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b89c3ce4ce14bdc6fb6beaf9ec7928ca331de5df7e5ea278375642a2f478570d" diff --git a/Cross.toml b/Cross.toml new file mode 100644 index 00000000..16d2b7a4 --- /dev/null +++ b/Cross.toml @@ -0,0 +1,15 @@ +[build.env] +passthrough = [ + "SODIUM_BUILD_STATIC", + "HTTP_PROXY", + "HTTPS_PROXY", +] + +[target.x86_64-unknown-linux-musl] +image = "shadowsocks-rust:x86_64-unknown-linux-musl" + +[target.x86_64-unknown-linux-gnu] +image = "shadowsocks-rust:x86_64-unknown-linux-gnu" + +[target.x86_64-pc-windows-gnu] +image = "shadowsocks-rust:x86_64-pc-windows-gnu" \ No newline at end of file diff --git a/build/Dockerfile b/build/Dockerfile deleted file mode 100644 index 87937339..00000000 --- a/build/Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -ARG TOOLCHAIN=stable -FROM ekidd/rust-musl-builder:$TOOLCHAIN - -ENV SODIUM_VERS="1.0.18" - -# Build a static copy of libsodium. -RUN cd /home/rust/libs && \ - curl -LO https://download.libsodium.org/libsodium/releases/libsodium-$SODIUM_VERS.tar.gz && \ - tar xzf libsodium-$SODIUM_VERS.tar.gz && cd libsodium-$SODIUM_VERS && \ - CC=musl-gcc ./configure --prefix=/usr/local/musl --enable-shared=no --host=x86_64-unknown-linux-musl && \ - V=1 make && sudo make install && \ - cd .. && rm -rf libsodium-$SODIUM_VERS.tar.gz libsodium-$SODIUM_VERS - -#ENV SODIUM_STATIC=yes -ENV SODIUM_LIB_DIR=/usr/local/musl/lib diff --git a/build/Dockerfile.x86_64-pc-windows-gnu b/build/Dockerfile.x86_64-pc-windows-gnu new file mode 100644 index 00000000..a54f6e35 --- /dev/null +++ b/build/Dockerfile.x86_64-pc-windows-gnu @@ -0,0 +1,37 @@ +ARG HTTP_PROXY +ARG HTTPS_PROXY + +FROM rustembedded/cross:x86_64-pc-windows-gnu + +ARG SODIUM_VERS="1.0.18" +ARG OPENSSL_VERS="1.0.2t" + +RUN apt-get update && \ + apt-get install --no-install-recommends -y libclang-dev curl ca-certificates m4 make perl llvm + +# Build a static copy of openssl +RUN curl -LO https://www.openssl.org/source/openssl-${OPENSSL_VERS}.tar.gz && \ + tar xzf openssl-${OPENSSL_VERS}.tar.gz && cd openssl-${OPENSSL_VERS} && \ + AR=x86_64-w64-mingw32-ar CC=x86_64-w64-mingw32-gcc ./Configure --prefix=/usr/local/musl mingw64 -fPIC no-shared && \ + make -j${nprocs} && make install && \ + cd .. && rm -rf openssl-${OPENSSL_VERS}.tar.gz openssl-${OPENSSL_VERS} + +ENV OPENSSL_DIR=/usr/local/musl \ + OPENSSL_INCLUDE_DIR=/usr/local/musl/include \ + OPENSSL_LIB_DIR=/usr/local/musl/lib \ + OPENSSL_STATIC=1 \ + TARGET=musl + +# Build a static copy of libsodium. +RUN curl -LO https://download.libsodium.org/libsodium/releases/libsodium-$SODIUM_VERS.tar.gz && \ + tar xzf libsodium-$SODIUM_VERS.tar.gz && cd libsodium-$SODIUM_VERS && \ + AR=x86_64-w64-mingw32-ar CC=x86_64-w64-mingw32-gcc ./configure --prefix=/usr/local/musl --enable-shared=no --host=x86_64-pc-windows-gnu && \ + V=1 make -j${nprocs} && make install && \ + cd .. && rm -rf libsodium-$SODIUM_VERS.tar.gz libsodium-$SODIUM_VERS + +ENV SODIUM_BUILD_INCLUDE_DIR=/usr/local/x86_64-w64-mingw32/include \ + SODIUM_STATIC=1 + +ENV PKG_CONFIG_ALLOW_CROSS=true \ + PKG_CONFIG_ALL_STATIC=true \ + PKG_CONFIG_PATH=/usr/local/musl/lib/pkgconfig diff --git a/build/Dockerfile.x86_64-unknown-linux-musl b/build/Dockerfile.x86_64-unknown-linux-musl new file mode 100644 index 00000000..8610c9e0 --- /dev/null +++ b/build/Dockerfile.x86_64-unknown-linux-musl @@ -0,0 +1,37 @@ +ARG HTTP_PROXY +ARG HTTPS_PROXY + +FROM rustembedded/cross:x86_64-unknown-linux-musl + +ARG SODIUM_VERS="1.0.18" +ARG OPENSSL_VERS="1.1.1d" + +RUN apt-get update && \ + apt-get install --no-install-recommends -y libclang-dev curl ca-certificates m4 make perl llvm + +# Build a static copy of openssl +RUN curl -LO https://www.openssl.org/source/openssl-${OPENSSL_VERS}.tar.gz && \ + tar xzf openssl-${OPENSSL_VERS}.tar.gz && cd openssl-${OPENSSL_VERS} && \ + AR=x86_64-linux-musl-ar CC=x86_64-linux-musl-gcc ./Configure --prefix=/usr/local/musl linux-x86_64 -fPIC no-shared && \ + make -j${nprocs} && make install && \ + cd .. && rm -rf openssl-${OPENSSL_VERS}.tar.gz openssl-${OPENSSL_VERS} + +ENV OPENSSL_DIR=/usr/local/musl \ + OPENSSL_INCLUDE_DIR=/usr/local/musl/include \ + OPENSSL_LIB_DIR=/usr/local/musl/lib \ + OPENSSL_STATIC=1 \ + TARGET=musl + +# Build a static copy of libsodium. +RUN curl -LO https://download.libsodium.org/libsodium/releases/libsodium-$SODIUM_VERS.tar.gz && \ + tar xzf libsodium-$SODIUM_VERS.tar.gz && cd libsodium-$SODIUM_VERS && \ + AR=x86_64-linux-musl-ar CC=x86_64-linux-musl-gcc ./configure --prefix=/usr/local/musl --enable-shared=no --host=x86_64-unknown-linux-musl && \ + V=1 make -j${nprocs} && make install && \ + cd .. && rm -rf libsodium-$SODIUM_VERS.tar.gz libsodium-$SODIUM_VERS + +ENV SODIUM_BUILD_INCLUDE_DIR=/usr/local/x86_64-linux-musl/include \ + SODIUM_STATIC=1 + +ENV PKG_CONFIG_ALLOW_CROSS=true \ + PKG_CONFIG_ALL_STATIC=true \ + PKG_CONFIG_PATH=/usr/local/musl/lib/pkgconfig diff --git a/build/README.md b/build/README.md index 77b10794..38a5f0db 100644 --- a/build/README.md +++ b/build/README.md @@ -1,19 +1,21 @@ -Compile static-linked binaries with [`rust-musl-builder`](https://github.com/emk/rust-musl-builder): +## Build Standalone Binaries -```sh -# build image use Dockerfile in build dir. -docker build -t shadowsocks-rust:latest . -# run command in project root. -alias rust-musl-builder='docker run --rm -it -v "$(pwd)":/home/rust/src shadowsocks-rust:latest' -rust-musl-builder cargo build --release -``` - -At the moment, it doesn't attempt to cache libraries between builds, so this is best reserved for making final release builds. - -## Helpful Scripts - -* `build-release` on *nix environment +### Build Docker Image ```bash -./build-release +docker build -t shadowsocks-rust:x86_64-unknown-linux-musl -f Dockerfile.x86_64-unknown-linux-musl . ``` + +### Build Binaries + +- Install [`cross`](https://github.com/rust-embedded/cross) + +```bash +cargo install cross +``` + +- Build with cross + +```bash +cross build --target x86_64-unknown-linux-musl +``` \ No newline at end of file diff --git a/build/build-release b/build/build-release index a7dd582d..f5210bea 100755 --- a/build/build-release +++ b/build/build-release @@ -2,155 +2,42 @@ CUR_DIR=$( cd $( dirname $0 ) && pwd ) VERSION=$(grep -E '^version' ${CUR_DIR}/../Cargo.toml | awk '{print $3}' | sed 's/"//g') -ENABLE_GZ=false -BUILD_DOCKER_IMG=false -BUILD_NIGHTLY=false -while getopts "v:ghbn" opt; do - case $opt in - v) - VERSION=$OPTARG - ;; - g) - ENABLE_GZ=true - ;; - b) - BUILD_DOCKER_IMG=true - ;; - n) - BUILD_NIGHTLY=true - ;; - h|\?) - echo "$0 [-v VERSION] [-g] [-h] [-b] [-n]" - echo " -v VERSION Specify VERSION in output package name" - echo " -g Enable GZip" - echo " -b Re-build docker image" - echo " -n Build with nightly rust" - echo " -h Show this image" - exit 0 - ;; - esac -done - -if $BUILD_NIGHTLY; then - RELEASE_NAME="nightly"; -else - RELEASE_NAME="stable"; -fi - -echo "* Building ${RELEASE_NAME} package ${VERSION} ..." - -if $BUILD_NIGHTLY; then - IMAGE='shadowsocks-rust:nightly' -else - IMAGE='shadowsocks-rust:stable' -fi - -if [[ "$http_proxy" != "" ]]; then - ENV_HTTP_PROXY=$http_proxy -elif [[ "$HTTP_PROXY" != "" ]]; then - ENV_HTTP_PROXY=$HTTP_PROXY -fi - -if [[ "$https_proxy" != "" ]]; then - ENV_HTTPS_PROXY=$https_proxy -elif [[ "$HTTPS_PROXY" != "" ]]; then - ENV_HTTPS_PROXY=$HTTPS_PROXY -fi - -if $BUILD_DOCKER_IMG; then - echo "* Rebuild docker image ${IMAGE} ..."; - if $BUILD_NIGHTLY; then - docker build \ - -t "${IMAGE}" \ - "$CUR_DIR" \ - --build-arg TOOLCHAIN=nightly \ - --build-arg HTTP_PROXY="$ENV_HTTP_PROXY" \ - --build-arg HTTPS_PROXY="$ENV_HTTPS_PROXY"; - else - docker build \ - -t "${IMAGE}" \ - "$CUR_DIR" \ - --build-arg TOOLCHAIN=stable \ - --build-arg HTTP_PROXY="$ENV_HTTP_PROXY" \ - --build-arg HTTPS_PROXY="$ENV_HTTPS_PROXY"; - fi -fi - -SRC_PATH="/home/rust/src" -CARGO_TARGET_DIR="${SRC_PATH}/build/target" -CARGO_INSTALL_ROOT="${SRC_PATH}/build/install" -LOCAL_USER=$( id -u "$USER" ):$( id -g "$USER" ) -RUSTFLAGS="-Ctarget-feature=+aes,+ssse3" - -TARGET_NAME="x86_64-unknown-linux-musl" - -if $BUILD_NIGHTLY; then - ## -- BUILD nightly version - docker run \ - -e CARGO_TARGET_DIR="${CARGO_TARGET_DIR}" \ - -e CARGO_INSTALL_ROOT="${CARGO_INSTALL_ROOT}" \ - -e RUSTFLAGS="$RUSTFLAGS" \ - -e HTTP_PROXY="$ENV_HTTP_PROXY" \ - -e HTTPS_PROXY="$ENV_HTTPS_PROXY" \ - -v "${CUR_DIR}"/..:"$SRC_PATH" \ - -v "${CUR_DIR}/target/musl-builder/cargo-cache":/home/rust/.cargo/registry \ - "${IMAGE}" \ - /bin/bash -c \ - "sudo mkdir -p $CARGO_TARGET_DIR \ - && sudo rm -rf $CARGO_INSTALL_ROOT \ - && cargo install -f --features miscreant --path . \ - && sudo chown -R $LOCAL_USER $CARGO_INSTALL_ROOT"; -else - docker run \ - -e CARGO_TARGET_DIR="${CARGO_TARGET_DIR}" \ - -e CARGO_INSTALL_ROOT="${CARGO_INSTALL_ROOT}" \ - -e RUSTFLAGS="$RUSTFLAGS" \ - -e HTTP_PROXY="$ENV_HTTP_PROXY" \ - -e HTTPS_PROXY="$ENV_HTTPS_PROXY" \ - -v "${CUR_DIR}"/..:"$SRC_PATH" \ - -v "${CUR_DIR}/target/musl-builder/cargo-cache":/home/rust/.cargo/registry \ - "${IMAGE}" \ - /bin/bash -c \ - "sudo mkdir -p $CARGO_TARGET_DIR \ - && sudo rm -rf $CARGO_INSTALL_ROOT \ - && cargo install -f --features miscreant --path . \ - && sudo chown -R $LOCAL_USER $CARGO_INSTALL_ROOT"; -fi - -if [[ $? -ne "0" ]]; then - exit 1; -fi - -TARGET_DIR="$CUR_DIR/install/bin" -cd "$TARGET_DIR" - -echo "* Finished building, target in ${TARGET_DIR}" +cd "$CUR_DIR/.." ## Disable OS X ACL file export COPYFILE_DISABLE=1 -if $ENABLE_GZ; then - PKG_NAME="shadowsocks-v${VERSION}-${RELEASE_NAME}.${TARGET_NAME}.tar.gz" - PKG_PATH="${CUR_DIR}/${PKG_NAME}" - echo "* Packaging GZip in ${PKG_PATH} ..." +function build() { + TARGET=$1 + echo "* Building ${TARGET} package ${VERSION} ..." - tar -czf ${PKG_PATH} \ + RELEASE_DIR="target/${TARGET}/release" + PKG_NAME="shadowsocks-v${VERSION}-stable.${TARGET}.tar.xz" + PKG_PATH="${CUR_DIR}/${PKG_NAME}" + + cross build --target "${TARGET}" \ + --features "miscreant" \ + --release + + if [[ $? != "0" ]]; then + exit $? + fi + + echo "* Packaging XZ in ${PKG_PATH} ..." + cd ${RELEASE_DIR} + tar -cJf ${PKG_PATH} \ "sslocal" \ "ssserver" \ - "ssurl"; + "ssurl" \ + "sstunnel" + + if [[ $? != "0" ]]; then + exit $? + fi echo "* Done build package ${PKG_NAME}" -fi +} -PKG_NAME="shadowsocks-v${VERSION}-${RELEASE_NAME}.${TARGET_NAME}.tar.xz" -PKG_PATH="${CUR_DIR}/${PKG_NAME}" -echo "* Packaging XZ in ${PKG_PATH} ..." - -tar -cJf ${PKG_PATH} \ - "sslocal" \ - "ssserver" \ - "ssurl" \ - "ssdns" - -echo "* Done build package ${PKG_NAME}" +build "x86_64-unknown-linux-musl" +#build "x86_64-pc-windows-gnu" \ No newline at end of file