Skip to content

Commit da12a4c

Browse files
committed
Build with cross instead
1 parent 206c8c7 commit da12a4c

File tree

7 files changed

+161
-198
lines changed

7 files changed

+161
-198
lines changed

Cargo.lock

Lines changed: 32 additions & 32 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cross.toml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
[build.env]
2+
passthrough = [
3+
"SODIUM_BUILD_STATIC",
4+
"HTTP_PROXY",
5+
"HTTPS_PROXY",
6+
]
7+
8+
[target.x86_64-unknown-linux-musl]
9+
image = "shadowsocks-rust:x86_64-unknown-linux-musl"
10+
11+
[target.x86_64-unknown-linux-gnu]
12+
image = "shadowsocks-rust:x86_64-unknown-linux-gnu"
13+
14+
[target.x86_64-pc-windows-gnu]
15+
image = "shadowsocks-rust:x86_64-pc-windows-gnu"

build/Dockerfile

Lines changed: 0 additions & 15 deletions
This file was deleted.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
ARG HTTP_PROXY
2+
ARG HTTPS_PROXY
3+
4+
FROM rustembedded/cross:x86_64-pc-windows-gnu
5+
6+
ARG SODIUM_VERS="1.0.18"
7+
ARG OPENSSL_VERS="1.0.2t"
8+
9+
RUN apt-get update && \
10+
apt-get install --no-install-recommends -y libclang-dev curl ca-certificates m4 make perl llvm
11+
12+
# Build a static copy of openssl
13+
RUN curl -LO https://www.openssl.org/source/openssl-${OPENSSL_VERS}.tar.gz && \
14+
tar xzf openssl-${OPENSSL_VERS}.tar.gz && cd openssl-${OPENSSL_VERS} && \
15+
AR=x86_64-w64-mingw32-ar CC=x86_64-w64-mingw32-gcc ./Configure --prefix=/usr/local/musl mingw64 -fPIC no-shared && \
16+
make -j${nprocs} && make install && \
17+
cd .. && rm -rf openssl-${OPENSSL_VERS}.tar.gz openssl-${OPENSSL_VERS}
18+
19+
ENV OPENSSL_DIR=/usr/local/musl \
20+
OPENSSL_INCLUDE_DIR=/usr/local/musl/include \
21+
OPENSSL_LIB_DIR=/usr/local/musl/lib \
22+
OPENSSL_STATIC=1 \
23+
TARGET=musl
24+
25+
# Build a static copy of libsodium.
26+
RUN curl -LO https://download.libsodium.org/libsodium/releases/libsodium-$SODIUM_VERS.tar.gz && \
27+
tar xzf libsodium-$SODIUM_VERS.tar.gz && cd libsodium-$SODIUM_VERS && \
28+
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 && \
29+
V=1 make -j${nprocs} && make install && \
30+
cd .. && rm -rf libsodium-$SODIUM_VERS.tar.gz libsodium-$SODIUM_VERS
31+
32+
ENV SODIUM_BUILD_INCLUDE_DIR=/usr/local/x86_64-w64-mingw32/include \
33+
SODIUM_STATIC=1
34+
35+
ENV PKG_CONFIG_ALLOW_CROSS=true \
36+
PKG_CONFIG_ALL_STATIC=true \
37+
PKG_CONFIG_PATH=/usr/local/musl/lib/pkgconfig
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
ARG HTTP_PROXY
2+
ARG HTTPS_PROXY
3+
4+
FROM rustembedded/cross:x86_64-unknown-linux-musl
5+
6+
ARG SODIUM_VERS="1.0.18"
7+
ARG OPENSSL_VERS="1.1.1d"
8+
9+
RUN apt-get update && \
10+
apt-get install --no-install-recommends -y libclang-dev curl ca-certificates m4 make perl llvm
11+
12+
# Build a static copy of openssl
13+
RUN curl -LO https://www.openssl.org/source/openssl-${OPENSSL_VERS}.tar.gz && \
14+
tar xzf openssl-${OPENSSL_VERS}.tar.gz && cd openssl-${OPENSSL_VERS} && \
15+
AR=x86_64-linux-musl-ar CC=x86_64-linux-musl-gcc ./Configure --prefix=/usr/local/musl linux-x86_64 -fPIC no-shared && \
16+
make -j${nprocs} && make install && \
17+
cd .. && rm -rf openssl-${OPENSSL_VERS}.tar.gz openssl-${OPENSSL_VERS}
18+
19+
ENV OPENSSL_DIR=/usr/local/musl \
20+
OPENSSL_INCLUDE_DIR=/usr/local/musl/include \
21+
OPENSSL_LIB_DIR=/usr/local/musl/lib \
22+
OPENSSL_STATIC=1 \
23+
TARGET=musl
24+
25+
# Build a static copy of libsodium.
26+
RUN curl -LO https://download.libsodium.org/libsodium/releases/libsodium-$SODIUM_VERS.tar.gz && \
27+
tar xzf libsodium-$SODIUM_VERS.tar.gz && cd libsodium-$SODIUM_VERS && \
28+
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 && \
29+
V=1 make -j${nprocs} && make install && \
30+
cd .. && rm -rf libsodium-$SODIUM_VERS.tar.gz libsodium-$SODIUM_VERS
31+
32+
ENV SODIUM_BUILD_INCLUDE_DIR=/usr/local/x86_64-linux-musl/include \
33+
SODIUM_STATIC=1
34+
35+
ENV PKG_CONFIG_ALLOW_CROSS=true \
36+
PKG_CONFIG_ALL_STATIC=true \
37+
PKG_CONFIG_PATH=/usr/local/musl/lib/pkgconfig

build/README.md

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
1-
Compile static-linked binaries with [`rust-musl-builder`](https://github.com/emk/rust-musl-builder):
1+
## Build Standalone Binaries
22

3-
```sh
4-
# build image use Dockerfile in build dir.
5-
docker build -t shadowsocks-rust:latest .
6-
# run command in project root.
7-
alias rust-musl-builder='docker run --rm -it -v "$(pwd)":/home/rust/src shadowsocks-rust:latest'
8-
rust-musl-builder cargo build --release
9-
```
3+
### Build Docker Image
104

11-
At the moment, it doesn't attempt to cache libraries between builds, so this is best reserved for making final release builds.
5+
```bash
6+
docker build -t shadowsocks-rust:x86_64-unknown-linux-musl -f Dockerfile.x86_64-unknown-linux-musl .
7+
```
128

13-
## Helpful Scripts
9+
### Build Binaries
1410

15-
* `build-release` on *nix environment
11+
- Install [`cross`](https://github.com/rust-embedded/cross)
1612

1713
```bash
18-
./build-release
14+
cargo install cross
1915
```
16+
17+
- Build with cross
18+
19+
```bash
20+
cross build --target x86_64-unknown-linux-musl
21+
```

build/build-release

Lines changed: 26 additions & 139 deletions
Original file line numberDiff line numberDiff line change
@@ -2,155 +2,42 @@
22

33
CUR_DIR=$( cd $( dirname $0 ) && pwd )
44
VERSION=$(grep -E '^version' ${CUR_DIR}/../Cargo.toml | awk '{print $3}' | sed 's/"//g')
5-
ENABLE_GZ=false
6-
BUILD_DOCKER_IMG=false
7-
BUILD_NIGHTLY=false
85

9-
while getopts "v:ghbn" opt; do
10-
case $opt in
11-
v)
12-
VERSION=$OPTARG
13-
;;
14-
g)
15-
ENABLE_GZ=true
16-
;;
17-
b)
18-
BUILD_DOCKER_IMG=true
19-
;;
20-
n)
21-
BUILD_NIGHTLY=true
22-
;;
23-
h|\?)
24-
echo "$0 [-v VERSION] [-g] [-h] [-b] [-n]"
25-
echo " -v VERSION Specify VERSION in output package name"
26-
echo " -g Enable GZip"
27-
echo " -b Re-build docker image"
28-
echo " -n Build with nightly rust"
29-
echo " -h Show this image"
30-
exit 0
31-
;;
32-
esac
33-
done
6+
cd "$CUR_DIR/.."
347

35-
if $BUILD_NIGHTLY; then
36-
RELEASE_NAME="nightly";
37-
else
38-
RELEASE_NAME="stable";
39-
fi
40-
41-
echo "* Building ${RELEASE_NAME} package ${VERSION} ..."
8+
## Disable OS X ACL file
9+
export COPYFILE_DISABLE=1
4210

43-
if $BUILD_NIGHTLY; then
44-
IMAGE='shadowsocks-rust:nightly'
45-
else
46-
IMAGE='shadowsocks-rust:stable'
47-
fi
11+
function build() {
12+
TARGET=$1
13+
echo "* Building ${TARGET} package ${VERSION} ..."
4814

49-
if [[ "$http_proxy" != "" ]]; then
50-
ENV_HTTP_PROXY=$http_proxy
51-
elif [[ "$HTTP_PROXY" != "" ]]; then
52-
ENV_HTTP_PROXY=$HTTP_PROXY
53-
fi
15+
RELEASE_DIR="target/${TARGET}/release"
16+
PKG_NAME="shadowsocks-v${VERSION}-stable.${TARGET}.tar.xz"
17+
PKG_PATH="${CUR_DIR}/${PKG_NAME}"
5418

55-
if [[ "$https_proxy" != "" ]]; then
56-
ENV_HTTPS_PROXY=$https_proxy
57-
elif [[ "$HTTPS_PROXY" != "" ]]; then
58-
ENV_HTTPS_PROXY=$HTTPS_PROXY
59-
fi
19+
cross build --target "${TARGET}" \
20+
--features "miscreant" \
21+
--release
6022

61-
if $BUILD_DOCKER_IMG; then
62-
echo "* Rebuild docker image ${IMAGE} ...";
63-
if $BUILD_NIGHTLY; then
64-
docker build \
65-
-t "${IMAGE}" \
66-
"$CUR_DIR" \
67-
--build-arg TOOLCHAIN=nightly \
68-
--build-arg HTTP_PROXY="$ENV_HTTP_PROXY" \
69-
--build-arg HTTPS_PROXY="$ENV_HTTPS_PROXY";
70-
else
71-
docker build \
72-
-t "${IMAGE}" \
73-
"$CUR_DIR" \
74-
--build-arg TOOLCHAIN=stable \
75-
--build-arg HTTP_PROXY="$ENV_HTTP_PROXY" \
76-
--build-arg HTTPS_PROXY="$ENV_HTTPS_PROXY";
23+
if [[ $? != "0" ]]; then
24+
exit $?
7725
fi
78-
fi
79-
80-
SRC_PATH="/home/rust/src"
81-
CARGO_TARGET_DIR="${SRC_PATH}/build/target"
82-
CARGO_INSTALL_ROOT="${SRC_PATH}/build/install"
83-
LOCAL_USER=$( id -u "$USER" ):$( id -g "$USER" )
84-
RUSTFLAGS="-Ctarget-feature=+aes,+ssse3"
85-
86-
TARGET_NAME="x86_64-unknown-linux-musl"
87-
88-
if $BUILD_NIGHTLY; then
89-
## -- BUILD nightly version
90-
docker run \
91-
-e CARGO_TARGET_DIR="${CARGO_TARGET_DIR}" \
92-
-e CARGO_INSTALL_ROOT="${CARGO_INSTALL_ROOT}" \
93-
-e RUSTFLAGS="$RUSTFLAGS" \
94-
-e HTTP_PROXY="$ENV_HTTP_PROXY" \
95-
-e HTTPS_PROXY="$ENV_HTTPS_PROXY" \
96-
-v "${CUR_DIR}"/..:"$SRC_PATH" \
97-
-v "${CUR_DIR}/target/musl-builder/cargo-cache":/home/rust/.cargo/registry \
98-
"${IMAGE}" \
99-
/bin/bash -c \
100-
"sudo mkdir -p $CARGO_TARGET_DIR \
101-
&& sudo rm -rf $CARGO_INSTALL_ROOT \
102-
&& cargo install -f --features miscreant --path . \
103-
&& sudo chown -R $LOCAL_USER $CARGO_INSTALL_ROOT";
104-
else
105-
docker run \
106-
-e CARGO_TARGET_DIR="${CARGO_TARGET_DIR}" \
107-
-e CARGO_INSTALL_ROOT="${CARGO_INSTALL_ROOT}" \
108-
-e RUSTFLAGS="$RUSTFLAGS" \
109-
-e HTTP_PROXY="$ENV_HTTP_PROXY" \
110-
-e HTTPS_PROXY="$ENV_HTTPS_PROXY" \
111-
-v "${CUR_DIR}"/..:"$SRC_PATH" \
112-
-v "${CUR_DIR}/target/musl-builder/cargo-cache":/home/rust/.cargo/registry \
113-
"${IMAGE}" \
114-
/bin/bash -c \
115-
"sudo mkdir -p $CARGO_TARGET_DIR \
116-
&& sudo rm -rf $CARGO_INSTALL_ROOT \
117-
&& cargo install -f --features miscreant --path . \
118-
&& sudo chown -R $LOCAL_USER $CARGO_INSTALL_ROOT";
119-
fi
120-
121-
if [[ $? -ne "0" ]]; then
122-
exit 1;
123-
fi
124-
125-
TARGET_DIR="$CUR_DIR/install/bin"
126-
cd "$TARGET_DIR"
127-
128-
echo "* Finished building, target in ${TARGET_DIR}"
12926

130-
## Disable OS X ACL file
131-
export COPYFILE_DISABLE=1
132-
133-
if $ENABLE_GZ; then
134-
PKG_NAME="shadowsocks-v${VERSION}-${RELEASE_NAME}.${TARGET_NAME}.tar.gz"
135-
PKG_PATH="${CUR_DIR}/${PKG_NAME}"
136-
echo "* Packaging GZip in ${PKG_PATH} ..."
137-
138-
tar -czf ${PKG_PATH} \
27+
echo "* Packaging XZ in ${PKG_PATH} ..."
28+
cd ${RELEASE_DIR}
29+
tar -cJf ${PKG_PATH} \
13930
"sslocal" \
14031
"ssserver" \
141-
"ssurl";
32+
"ssurl" \
33+
"sstunnel"
14234

143-
echo "* Done build package ${PKG_NAME}"
144-
fi
145-
146-
PKG_NAME="shadowsocks-v${VERSION}-${RELEASE_NAME}.${TARGET_NAME}.tar.xz"
147-
PKG_PATH="${CUR_DIR}/${PKG_NAME}"
148-
echo "* Packaging XZ in ${PKG_PATH} ..."
35+
if [[ $? != "0" ]]; then
36+
exit $?
37+
fi
14938

150-
tar -cJf ${PKG_PATH} \
151-
"sslocal" \
152-
"ssserver" \
153-
"ssurl" \
154-
"ssdns"
39+
echo "* Done build package ${PKG_NAME}"
40+
}
15541

156-
echo "* Done build package ${PKG_NAME}"
42+
build "x86_64-unknown-linux-musl"
43+
#build "x86_64-pc-windows-gnu"

0 commit comments

Comments
 (0)