From 4b2a3155103ffe8050b8b0fddbc7c52e91d978f8 Mon Sep 17 00:00:00 2001 From: zonyitoo Date: Fri, 13 Dec 2019 00:47:14 +0800 Subject: [PATCH] Making Build docker actually works for mingw64 and musl target --- build/Dockerfile.x86_64-pc-windows-gnu | 32 +++++++++--------- build/Dockerfile.x86_64-unknown-linux-musl | 26 +++++++-------- build/build-release | 38 +++++++++++++++------- 3 files changed, 54 insertions(+), 42 deletions(-) diff --git a/build/Dockerfile.x86_64-pc-windows-gnu b/build/Dockerfile.x86_64-pc-windows-gnu index a54f6e35..01cc6588 100644 --- a/build/Dockerfile.x86_64-pc-windows-gnu +++ b/build/Dockerfile.x86_64-pc-windows-gnu @@ -4,34 +4,34 @@ ARG HTTPS_PROXY FROM rustembedded/cross:x86_64-pc-windows-gnu ARG SODIUM_VERS="1.0.18" -ARG OPENSSL_VERS="1.0.2t" +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 + apt-get install --no-install-recommends -y libclang-dev curl libcurl4-openssl-dev ca-certificates m4 make perl llvm libnghttp2-dev libidn2-dev librtmp-dev libpsl-dev libgssapi-krb5-2 libkrb5-dev libk5crypto3 libldap2-dev # 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 && \ + ./Configure --prefix=/usr/x86_64-w64-mingw32 -Wa,-mbig-obj --cross-compile-prefix=x86_64-w64-mingw32- mingw64 no-shared no-dso no-ssl3 no-unit-test no-comp no-zlib no-zlib-dynamic && \ + make -j${nprocs} depend && make -j${nprocs} build_libs && make install_dev && \ 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. +# https://github.com/jedisct1/libsodium/blob/master/dist-build/msys2-win64.sh 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 && \ + AR="x86_64-w64-mingw32-ar" CC="x86_64-w64-mingw32-gcc" CFLAGS="-Ofast -fomit-frame-pointer -m64 -mtune=westmere" ./configure --prefix=/usr/x86_64-w64-mingw32 --enable-shared=no --host=x86_64-w64-mingw32 && \ 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 \ +ENV OPENSSL_DIR=/usr/x86_64-w64-mingw32 \ + OPENSSL_INCLUDE_DIR=/usr/x86_64-w64-mingw32/include \ + OPENSSL_LIB_DIR=/usr/x86_64-w64-mingw32/lib \ + OPENSSL_STATIC=1 \ + OPENSSL_LIBS=ssl:crypto \ + SODIUM_BUILD_INCLUDE_DIR=/usr/x86_64-w64-mingw32/include \ + SODIUM_STATIC=1 \ + PKG_CONFIG_ALLOW_CROSS=true \ PKG_CONFIG_ALL_STATIC=true \ - PKG_CONFIG_PATH=/usr/local/musl/lib/pkgconfig + PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/lib/pkgconfig \ + RUSTFLAGS="-Ctarget-feature=+aes,+ssse3" \ No newline at end of file diff --git a/build/Dockerfile.x86_64-unknown-linux-musl b/build/Dockerfile.x86_64-unknown-linux-musl index 8610c9e0..bb0a019b 100644 --- a/build/Dockerfile.x86_64-unknown-linux-musl +++ b/build/Dockerfile.x86_64-unknown-linux-musl @@ -7,21 +7,15 @@ 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 + apt-get install --no-install-recommends -y libclang-dev curl libcurl4-openssl-dev ca-certificates m4 make perl llvm libnghttp2-dev libidn2-dev librtmp-dev libpsl-dev libgssapi-krb5-2 libkrb5-dev libk5crypto3 libldap2-dev # 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 && \ + ./Configure --prefix=/usr/local/musl linux-x86_64 -DOPENSSL_NO_SECURE_MEMORY --cross-compile-prefix=x86_64-linux-musl- no-shared no-dso no-ssl3 no-unit-test no-comp no-zlib no-zlib-dynamic && \ + make -j${nprocs} depend && make -j${nprocs} build_libs && make install_dev && \ 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 && \ @@ -29,9 +23,13 @@ RUN curl -LO https://download.libsodium.org/libsodium/releases/libsodium-$SODIUM 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 \ +ENV OPENSSL_DIR=/usr/local/musl \ + OPENSSL_INCLUDE_DIR=/usr/local/musl/include \ + OPENSSL_LIB_DIR=/usr/local/musl/lib \ + OPENSSL_STATIC=1 \ + SODIUM_BUILD_INCLUDE_DIR=/usr/local/x86_64-linux-musl/include \ + SODIUM_STATIC=1 \ + PKG_CONFIG_ALLOW_CROSS=true \ PKG_CONFIG_ALL_STATIC=true \ - PKG_CONFIG_PATH=/usr/local/musl/lib/pkgconfig + PKG_CONFIG_PATH=/usr/local/musl/lib/pkgconfig \ + RUSTFLAGS="-Ctarget-feature=+aes,+ssse3" \ No newline at end of file diff --git a/build/build-release b/build/build-release index f5210bea..2a3da6fc 100755 --- a/build/build-release +++ b/build/build-release @@ -3,12 +3,12 @@ CUR_DIR=$( cd $( dirname $0 ) && pwd ) VERSION=$(grep -E '^version' ${CUR_DIR}/../Cargo.toml | awk '{print $3}' | sed 's/"//g') -cd "$CUR_DIR/.." - ## Disable OS X ACL file export COPYFILE_DISABLE=1 function build() { + cd "$CUR_DIR/.." + TARGET=$1 echo "* Building ${TARGET} package ${VERSION} ..." @@ -24,20 +24,34 @@ function build() { exit $? fi - echo "* Packaging XZ in ${PKG_PATH} ..." - cd ${RELEASE_DIR} - tar -cJf ${PKG_PATH} \ - "sslocal" \ - "ssserver" \ - "ssurl" \ - "sstunnel" + if [[ "$TARGET" == *"-linux-"* ]]; then + echo "* Packaging XZ in ${PKG_PATH} ..." + cd ${RELEASE_DIR} + tar -cJf ${PKG_PATH} \ + "sslocal" \ + "ssserver" \ + "ssurl" \ + "sstunnel" - if [[ $? != "0" ]]; then - exit $? + if [[ $? != "0" ]]; then + exit $? + fi + elif [[ "$TARGET" == *"-windows-"* ]]; then + echo "* Packaging ZIP in ${PKG_PATH} ..." + cd ${RELEASE_DIR} + zip ${PKG_PATH} \ + "sslocal.exe" \ + "ssserver.exe" \ + "ssurl.exe" \ + "sstunnel.exe" + + if [[ $? != "0" ]]; then + exit $? + fi fi echo "* Done build package ${PKG_NAME}" } build "x86_64-unknown-linux-musl" -#build "x86_64-pc-windows-gnu" \ No newline at end of file +build "x86_64-pc-windows-gnu" \ No newline at end of file