From 37cb60e6969e1f29514c49ee503b05303e8e90d4 Mon Sep 17 00:00:00 2001 From: Dim0N22 Date: Thu, 25 Mar 2021 08:35:10 +0000 Subject: [PATCH 1/2] Refactored Dockerfile to use multistage builds --- docker/android-arm.Dockerfile | 161 ++++++++++++++++++----------- docker/scripts/build-golang.sh | 16 +-- docker/scripts/build-libtorrent.sh | 1 + docker/scripts/build-openssl.sh | 2 +- docker/scripts/build-swig.sh | 2 +- 5 files changed, 113 insertions(+), 69 deletions(-) diff --git a/docker/android-arm.Dockerfile b/docker/android-arm.Dockerfile index c03742e..5a5fd2b 100644 --- a/docker/android-arm.Dockerfile +++ b/docker/android-arm.Dockerfile @@ -1,59 +1,102 @@ -FROM cross-compiler:android-arm - -RUN mkdir -p /build -WORKDIR /build - -ARG BOOST_VERSION -ARG BOOST_VERSION_FILE -ARG BOOST_SHA256 -ARG OPENSSL_VERSION -ARG OPENSSL_SHA256 -ARG SWIG_VERSION -ARG SWIG_SHA256 -ARG GOLANG_VERSION -ARG GOLANG_SRC_URL -ARG GOLANG_SRC_SHA256 -ARG GOLANG_BOOTSTRAP_VERSION -ARG GOLANG_BOOTSTRAP_URL -ARG GOLANG_BOOTSTRAP_SHA256 -ARG LIBTORRENT_VERSION - -COPY scripts/common.sh /build/ - -# Install Boost.System -COPY scripts/build-boost.sh /build/ -ENV BOOST_CC clang -ENV BOOST_CXX clang++ -ENV BOOST_OS android -ENV BOOST_TARGET_OS linux -ENV BOOST_OPTS cxxflags=-fPIC cflags=-fPIC -RUN ./build-boost.sh - -# Install OpenSSL -COPY scripts/build-openssl.sh /build/ -ENV OPENSSL_OPTS linux-armv4 -RUN ./build-openssl.sh - -# Install SWIG -COPY scripts/build-swig.sh /build/ -RUN ./build-swig.sh - -# Install Golang -COPY scripts/build-golang.sh /build/ -ENV GOROOT_BOOTSTRAP /usr/go -ENV GOLANG_CC ${CROSS_TRIPLE}-clang -ENV GOLANG_CXX ${CROSS_TRIPLE}-clang++ -ENV GOLANG_OS android -ENV GOLANG_ARCH arm -ENV GOLANG_ARM 7 -RUN ./build-golang.sh -ENV PATH ${PATH}:/usr/local/go/bin - -# Install libtorrent -COPY scripts/build-libtorrent.sh /build/ -ENV LT_CC ${CROSS_TRIPLE}-clang -ENV LT_CXX ${CROSS_TRIPLE}-clang++ -ENV LT_PTHREADS TRUE -ENV LT_FLAGS -fPIC -DINT64_MAX=0x7fffffffffffffffLL -DINT16_MAX=32767 -DINT16_MIN=-32768 -DTORRENT_PRODUCTION_ASSERTS -ENV LT_CXXFLAGS -Wno-macro-redefined -Wno-c++11-extensions -RUN ./build-libtorrent.sh +FROM elementumorg/cross-compiler:android-arm as golang + WORKDIR /golang + + ARG GOLANG_VERSION + ARG GOLANG_SRC_URL + ARG GOLANG_SRC_SHA256 + ARG GOLANG_BOOTSTRAP_VERSION + ARG GOLANG_BOOTSTRAP_URL + ARG GOLANG_BOOTSTRAP_SHA256 + + # Install Golang + COPY scripts/common.sh . + COPY scripts/build-golang.sh . + ENV GOROOT_BOOTSTRAP /usr/go + ENV GOLANG_CC ${CROSS_TRIPLE}-clang + ENV GOLANG_CXX ${CROSS_TRIPLE}-clang++ + ENV GOLANG_OS android + ENV GOLANG_ARCH arm + ENV GOLANG_ARM 7 + RUN ./build-golang.sh + +FROM elementumorg/cross-compiler:android-arm as swig + WORKDIR /libs/swig + + ARG SWIG_VERSION + ARG SWIG_SHA256 + + # Install SWIG + COPY scripts/common.sh . + COPY scripts/build-swig.sh . + RUN ./build-swig.sh + +FROM elementumorg/cross-compiler:android-arm as boost + WORKDIR /libs/boost + + ARG BOOST_VERSION + ARG BOOST_VERSION_FILE + ARG BOOST_SHA256 + + # Install Boost.System + COPY scripts/common.sh . + COPY scripts/build-boost.sh . + ENV BOOST_CC clang + ENV BOOST_CXX clang++ + ENV BOOST_OS android + ENV BOOST_TARGET_OS linux + ENV BOOST_OPTS cxxflags=-fPIC cflags=-fPIC + RUN ./build-boost.sh + +FROM elementumorg/cross-compiler:android-arm as openssl + WORKDIR /libs/openssl + + ARG OPENSSL_VERSION + ARG OPENSSL_SHA256 + + # Install OpenSSL + COPY scripts/common.sh . + COPY scripts/build-openssl.sh . + ENV OPENSSL_OPTS linux-armv4 + RUN ./build-openssl.sh + +FROM elementumorg/cross-compiler:android-arm as libtorrent + WORKDIR /libs/libtorrent + + COPY --from=boost ${CROSS_ROOT}/include/boost ${CROSS_ROOT}/include/boost + COPY --from=boost ${CROSS_ROOT}/lib/libboost*.a ${CROSS_ROOT}/lib/ + COPY --from=openssl /libs/openssl/installed ${CROSS_ROOT} + + ARG LIBTORRENT_VERSION + + # Install libtorrent + COPY scripts/common.sh . + COPY scripts/build-libtorrent.sh . + ENV LT_CC ${CROSS_TRIPLE}-clang + ENV LT_CXX ${CROSS_TRIPLE}-clang++ + ENV LT_PTHREADS TRUE + ENV LT_FLAGS -fPIC -DINT64_MAX=0x7fffffffffffffffLL -DINT16_MAX=32767 -DINT16_MIN=-32768 -DTORRENT_PRODUCTION_ASSERTS + ENV LT_CXXFLAGS -Wno-macro-redefined -Wno-c++11-extensions + RUN ./build-libtorrent.sh + + +FROM elementumorg/cross-compiler:android-arm + # Install Golang + COPY --from=golang /golang/go /usr/local/go + ENV PATH ${PATH}:/usr/local/go/bin + + # Install Boost.System + COPY --from=boost ${CROSS_ROOT}/include/boost ${CROSS_ROOT}/include/boost + COPY --from=boost ${CROSS_ROOT}/lib/libboost*.a ${CROSS_ROOT}/lib/ + + # Install OpenSSL + COPY --from=openssl /libs/openssl/installed ${CROSS_ROOT} + + # Install SWIG + COPY --from=swig /libs/swig/installed /libs/swig/installed + ENV PATH ${PATH}:/libs/swig/installed/bin + + # Install libtorrent + COPY --from=libtorrent ${CROSS_ROOT}/include/libtorrent ${CROSS_ROOT}/include/libtorrent + COPY --from=libtorrent ${CROSS_ROOT}/lib/libtorrent*.a ${CROSS_ROOT}/lib/ + COPY --from=libtorrent ${CROSS_ROOT}/lib/pkgconfig/libtorrent*.pc ${CROSS_ROOT}/lib/pkgconfig/ + \ No newline at end of file diff --git a/docker/scripts/build-golang.sh b/docker/scripts/build-golang.sh index bb4df94..054bfa7 100755 --- a/docker/scripts/build-golang.sh +++ b/docker/scripts/build-golang.sh @@ -4,25 +4,25 @@ set -ex scripts_path=$(dirname "$(readlink -f "$0")") source "${scripts_path}/common.sh" -mkdir -p ${CROSS_ROOT}/bootstrap +mkdir -p /golang/bootstrap if [ ! -f "golang-bootstrap.tar.gz" ]; then wget -q "https://dl.google.com/go/go${GOLANG_BOOTSTRAP_VERSION}.tar.gz" -O golang-bootstrap.tar.gz fi echo "$GOLANG_BOOTSTRAP_SHA256 golang-bootstrap.tar.gz" | sha256sum -c - -tar -C ${CROSS_ROOT}/bootstrap -xzf golang-bootstrap.tar.gz +tar -C /golang/bootstrap -xzf golang-bootstrap.tar.gz rm golang-bootstrap.tar.gz -cd ${CROSS_ROOT}/bootstrap/go/src +cd /golang/bootstrap/go/src run ./make.bash -export GOROOT_BOOTSTRAP=${CROSS_ROOT}/bootstrap/go +export GOROOT_BOOTSTRAP=/golang/bootstrap/go -cd /build +cd /golang if [ ! -f "golang.tar.gz" ]; then wget -q "https://golang.org/dl/go${GOLANG_VERSION}.src.tar.gz" -O golang.tar.gz fi echo "$GOLANG_SRC_SHA256 golang.tar.gz" | sha256sum -c - -tar -C ${CROSS_ROOT} -xzf golang.tar.gz +tar -C /golang -xzf golang.tar.gz rm golang.tar.gz -cd ${CROSS_ROOT}/go/src +cd /golang/go/src run ./make.bash CC_FOR_TARGET=${GOLANG_CC} \ @@ -32,4 +32,4 @@ CC_FOR_TARGET=${GOLANG_CC} \ GOARM=${GOLANG_ARM} \ CGO_ENABLED=1 \ ./make.bash --no-clean -rm -rf ${CROSS_ROOT}/bootstrap ${CROSS_ROOT}/go/pkg/bootstrap +rm -rf /golang/bootstrap /golang/go/pkg/bootstrap diff --git a/docker/scripts/build-libtorrent.sh b/docker/scripts/build-libtorrent.sh index ca378b0..74c73ca 100755 --- a/docker/scripts/build-libtorrent.sh +++ b/docker/scripts/build-libtorrent.sh @@ -28,6 +28,7 @@ run ./configure \ --disable-deprecated-functions \ --host=${CROSS_TRIPLE} \ --prefix=${CROSS_ROOT} \ + --with-openssl=${CROSS_ROOT} \ --with-boost=${CROSS_ROOT} --with-boost-libdir=${CROSS_ROOT}/lib ${LT_OPTS} run make -j $(cat /proc/cpuinfo | grep processor | wc -l) && make install rm -rf `pwd` diff --git a/docker/scripts/build-openssl.sh b/docker/scripts/build-openssl.sh index bb50bb8..36e762a 100755 --- a/docker/scripts/build-openssl.sh +++ b/docker/scripts/build-openssl.sh @@ -11,7 +11,7 @@ echo "$OPENSSL_SHA256 openssl-${OPENSSL_VERSION}.tar.gz" | sha256sum -c - tar -xzf openssl-${OPENSSL_VERSION}.tar.gz rm openssl-${OPENSSL_VERSION}.tar.gz cd openssl-${OPENSSL_VERSION}/ -CROSS_COMPILE=${CROSS_TRIPLE}- run ./Configure threads no-shared ${OPENSSL_OPTS} --prefix=${CROSS_ROOT} +CROSS_COMPILE=${CROSS_TRIPLE}- run ./Configure threads no-shared ${OPENSSL_OPTS} --prefix=/libs/openssl/installed run make -j $(cat /proc/cpuinfo | grep processor | wc -l) run make install rm -rf `pwd` diff --git a/docker/scripts/build-swig.sh b/docker/scripts/build-swig.sh index 1203a67..e064e0f 100755 --- a/docker/scripts/build-swig.sh +++ b/docker/scripts/build-swig.sh @@ -11,7 +11,7 @@ tar -xzf swig-${SWIG_VERSION}.tar.gz rm swig-${SWIG_VERSION}.tar.gz cd swig-${SWIG_VERSION}/ run ./autogen.sh -run ./configure +run ./configure --prefix=/libs/swig/installed run make -j $(cat /proc/cpuinfo | grep processor | wc -l) run make install rm -rf `pwd` From 073d2d9dd5bfcb015c2c83554275a02a8b5eb725 Mon Sep 17 00:00:00 2001 From: Dim0N22 Date: Sun, 28 Mar 2021 02:38:20 +0000 Subject: [PATCH 2/2] Change docker image tag --- Dockerfile | 13 ------------- Makefile | 2 +- 2 files changed, 1 insertion(+), 14 deletions(-) delete mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 5eb62e8..0000000 --- a/Dockerfile +++ /dev/null @@ -1,13 +0,0 @@ -FROM debian:stretch - -RUN apt-get update && apt-get -y install \ - bash \ - curl wget \ - pkg-config build-essential make automake autogen libtool \ - libpcre3-dev bison yodl \ - tar xz-utils bzip2 gzip unzip \ - file \ - rsync \ - sed \ - upx \ - golang diff --git a/Makefile b/Makefile index c2f6e6a..a780314 100644 --- a/Makefile +++ b/Makefile @@ -189,7 +189,7 @@ env: --build-arg GOLANG_BOOTSTRAP_VERSION=$(GOLANG_BOOTSTRAP_VERSION) \ --build-arg GOLANG_BOOTSTRAP_SHA256=$(GOLANG_BOOTSTRAP_SHA256) \ --build-arg LIBTORRENT_VERSION=$(LIBTORRENT_VERSION) \ - -t $(DOCKER_IMAGE):$(PLATFORM) \ + -t $(PROJECT)/$(DOCKER_IMAGE):$(PLATFORM) \ -f docker/$(PLATFORM).Dockerfile docker envs: