1# Dockerfile to build aria2 Windows binary using ubuntu mingw-w64 2# cross compiler chain. 3# 4# $ sudo docker build -t aria2-mingw - < Dockerfile.mingw 5# 6# After successful build, windows binary is located at 7# /aria2/src/aria2c.exe. You can copy the binary using following 8# commands: 9# 10# $ id=$(sudo docker create aria2-mingw) 11# $ sudo docker cp $id:/aria2/src/aria2c.exe <dest> 12# $ sudo docker rm -v $id 13 14FROM ubuntu:20.04 15 16MAINTAINER Tatsuhiro Tsujikawa 17 18# Change HOST to x86_64-w64-mingw32 to build 64-bit binary 19ENV HOST i686-w64-mingw32 20 21# It would be better to use nearest ubuntu archive mirror for faster 22# downloads. 23# RUN sed -ie 's/archive\.ubuntu/jp.archive.ubuntu/g' /etc/apt/sources.list 24 25RUN apt-get update && \ 26 DEBIAN_FRONTEND="noninteractive" \ 27 apt-get install -y --no-install-recommends \ 28 make binutils autoconf automake autotools-dev libtool \ 29 patch ca-certificates \ 30 pkg-config git curl dpkg-dev gcc-mingw-w64 g++-mingw-w64 \ 31 autopoint libcppunit-dev libxml2-dev libgcrypt20-dev lzip 32 33RUN curl -L -O https://gmplib.org/download/gmp/gmp-6.2.1.tar.lz && \ 34 curl -L -O https://github.com/libexpat/libexpat/releases/download/R_2_4_1/expat-2.4.1.tar.bz2 && \ 35 curl -L -O https://www.sqlite.org/2021/sqlite-autoconf-3360000.tar.gz && \ 36 curl -L -O http://zlib.net/zlib-1.2.11.tar.gz && \ 37 curl -L -O https://c-ares.haxx.se/download/c-ares-1.17.2.tar.gz && \ 38 curl -L -O https://www.libssh2.org/download/libssh2-1.9.0.tar.gz && \ 39 curl -L -O https://github.com/libssh2/libssh2/commit/ba149e804ef653cc05ed9803dfc94519ce9328f7.patch 40 41RUN tar xf gmp-6.2.1.tar.lz && \ 42 cd gmp-6.2.1 && \ 43 ./configure \ 44 --disable-shared \ 45 --enable-static \ 46 --prefix=/usr/local/$HOST \ 47 --host=$HOST \ 48 --disable-cxx \ 49 --enable-fat \ 50 CFLAGS="-mtune=generic -O2 -g0" && \ 51 make install 52 53RUN tar xf expat-2.4.1.tar.bz2 && \ 54 cd expat-2.4.1 && \ 55 ./configure \ 56 --disable-shared \ 57 --enable-static \ 58 --prefix=/usr/local/$HOST \ 59 --host=$HOST \ 60 --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` && \ 61 make install 62 63RUN tar xf sqlite-autoconf-3360000.tar.gz && \ 64 cd sqlite-autoconf-3360000 && \ 65 ./configure \ 66 --disable-shared \ 67 --enable-static \ 68 --prefix=/usr/local/$HOST \ 69 --host=$HOST \ 70 --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` && \ 71 make install 72 73RUN tar xf zlib-1.2.11.tar.gz && \ 74 cd zlib-1.2.11 && \ 75 CC=$HOST-gcc \ 76 AR=$HOST-ar \ 77 LD=$HOST-ld \ 78 RANLIB=$HOST-ranlib \ 79 STRIP=$HOST-strip \ 80 ./configure \ 81 --prefix=/usr/local/$HOST \ 82 --libdir=/usr/local/$HOST/lib \ 83 --includedir=/usr/local/$HOST/include \ 84 --static && \ 85 make install 86 87RUN tar xf c-ares-1.17.2.tar.gz && \ 88 cd c-ares-1.17.2 && \ 89 ./configure \ 90 --disable-shared \ 91 --enable-static \ 92 --without-random \ 93 --prefix=/usr/local/$HOST \ 94 --host=$HOST \ 95 --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \ 96 LIBS="-lws2_32" && \ 97 make install 98 99RUN tar xf libssh2-1.9.0.tar.gz && \ 100 cd libssh2-1.9.0 && \ 101 patch -p1 < ../ba149e804ef653cc05ed9803dfc94519ce9328f7.patch && \ 102 ./configure \ 103 --disable-shared \ 104 --enable-static \ 105 --prefix=/usr/local/$HOST \ 106 --host=$HOST \ 107 --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \ 108 --without-openssl \ 109 --with-wincng \ 110 LIBS="-lws2_32" && \ 111 make install 112ADD https://api.github.com/repos/aria2/aria2/git/refs/heads/master version.json 113RUN git clone https://github.com/aria2/aria2 && \ 114 cd aria2 && autoreconf -i && ./mingw-config && make && \ 115 $HOST-strip src/aria2c.exe 116