diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2020-11-24 00:26:20 +0100 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2020-11-24 00:56:25 +0100 |
| commit | 78c8889a76602ef06e2b560cf72b6d5f68bf28ac (patch) | |
| tree | af213f1157ec970c9ba63acac681a33270434759 /.github | |
| parent | 5974b85665c260a020367b4527613414d2d6c157 (diff) | |
| download | PROJ-78c8889a76602ef06e2b560cf72b6d5f68bf28ac.tar.gz PROJ-78c8889a76602ef06e2b560cf72b6d5f68bf28ac.zip | |
GitHub action: add a mingw_w64 build
Diffstat (limited to '.github')
| -rw-r--r-- | .github/workflows/mingw_w64.yml | 24 | ||||
| -rwxr-xr-x | .github/workflows/mingw_w64/start.sh | 117 |
2 files changed, 141 insertions, 0 deletions
diff --git a/.github/workflows/mingw_w64.yml b/.github/workflows/mingw_w64.yml new file mode 100644 index 00000000..8e323efa --- /dev/null +++ b/.github/workflows/mingw_w64.yml @@ -0,0 +1,24 @@ +name: mingw_w64 build + +on: [push, pull_request] + +jobs: + + mingw_w64_build: + runs-on: ubuntu-latest + if: "!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]')" + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Cache + uses: actions/cache@v2 + id: cache + with: + path: | + ${{ github.workspace }}/ccache.tar.gz + key: ${{ runner.os }}-cache-mingw_w64-${{ github.run_id }} + restore-keys: ${{ runner.os }}-cache-mingw_w64- + + - name: Build + run: docker run -e CI -e TRAVIS_OS_NAME=linux -e BUILD_NAME=mingw_w64 -e WORK_DIR="$PWD" -v $PWD:$PWD ubuntu:18.04 $PWD/.github/workflows/mingw_w64/start.sh diff --git a/.github/workflows/mingw_w64/start.sh b/.github/workflows/mingw_w64/start.sh new file mode 100755 index 00000000..e6d04ff0 --- /dev/null +++ b/.github/workflows/mingw_w64/start.sh @@ -0,0 +1,117 @@ +#!/bin/sh + +set -e + +SCRIPT_DIR=$(dirname "$0") +case $SCRIPT_DIR in + "/"*) + ;; + ".") + SCRIPT_DIR=$(pwd) + ;; + *) + SCRIPT_DIR=$(pwd)/$(dirname "$0") + ;; +esac + +apt-get update -y +DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + sudo wget tzdata + +USER=root +export USER + +cd "$WORK_DIR" + +if test -f "$WORK_DIR/ccache.tar.gz"; then + echo "Restoring ccache..." + (cd $HOME && tar xzf "$WORK_DIR/ccache.tar.gz") +fi + +export PROJ_DB_CACHE_DIR="$HOME/.ccache" + +sudo apt-get install -y --no-install-recommends \ + ccache \ + binutils-mingw-w64-x86-64 \ + gcc-mingw-w64-x86-64 \ + g++-mingw-w64-x86-64 \ + g++-mingw-w64 \ + mingw-w64-tools \ + wine-stable \ + make autoconf automake libtool zip \ + sqlite3 \ + curl ca-certificates + +# Select posix/pthread for std::mutex +update-alternatives --set x86_64-w64-mingw32-gcc /usr/bin/x86_64-w64-mingw32-gcc-posix +update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix + +ccache -M 500M +ccache -s + +MINGW_ARCH=x86_64-w64-mingw32 +MINGW_PREFIX=/usr/lib/gcc/$MINGW_ARCH/7.3-posix + +export CCACHE_CPP2=yes +export CC="ccache $MINGW_ARCH-gcc" +export CXX="ccache $MINGW_ARCH-g++" +export LD=$MINGW_ARCH-ld + +UNAME="$(uname)" || UNAME="" +NPROC=$(nproc); +echo "NPROC=${NPROC}" +export MAKEFLAGS="-j ${NPROC}" + +# prepare wine environment +export WINE_PREFIX="$HOME/.wine" +WINE_SYSDIR=$WINE_PREFIX/drive_c/windows +wine64 cmd /c dir +ln -s $MINGW_PREFIX/libstdc++-6.dll $WINE_SYSDIR +ln -s $MINGW_PREFIX/libgcc_s_seh-1.dll $WINE_SYSDIR +ln -s $MINGW_PREFIX/libgcc_s_sjlj-1.dll $WINE_SYSDIR +ln -s /usr/$MINGW_ARCH/lib/libwinpthread-1.dll $WINE_SYSDIR + +# build zlib +wget https://github.com/madler/zlib/archive/v1.2.11.tar.gz +tar xzf v1.2.11.tar.gz +(cd zlib-1.2.11 && sudo make install -fwin32/Makefile.gcc SHARED_MODE=1 PREFIX=x86_64-w64-mingw32- DESTDIR=/usr/$MINGW_ARCH/) +sudo mkdir -p /usr/$MINGW_ARCH/include +sudo mkdir -p /usr/$MINGW_ARCH/lib +sudo cp /usr/$MINGW_ARCH/*.h /usr/$MINGW_ARCH/include +sudo cp /usr/$MINGW_ARCH/libz.* /usr/$MINGW_ARCH/lib +ln -s /usr/$MINGW_ARCH/zlib1.dll $WINE_SYSDIR + +# build libtiff +wget https://download.osgeo.org/libtiff/tiff-4.1.0.tar.gz +tar xzf tiff-4.1.0.tar.gz +(cd tiff-4.1.0 && ./configure --host=$MINGW_ARCH --prefix=/usr/$MINGW_ARCH && make && sudo make install) +ln -s /usr/$MINGW_ARCH/bin/libtiff-5.dll $WINE_SYSDIR + +# build sqlite3 +wget https://sqlite.org/2018/sqlite-autoconf-3250100.tar.gz +tar xzf sqlite-autoconf-3250100.tar.gz +(cd sqlite-autoconf-3250100 && +./configure --host=$MINGW_ARCH --prefix=/usr/$MINGW_ARCH && make && sudo make install) +ln -s /usr/$MINGW_ARCH/bin/libsqlite3-0.dll $WINE_SYSDIR + +# prepare build files +./autogen.sh +# autoconf build +mkdir build_autoconf +cd build_autoconf +CFLAGS="-Werror" CXXFLAGS="-Werror" ../configure --host=$MINGW_ARCH --prefix=/tmp/proj_autoconf_install --without-curl +make +make install +make dist-all +find /tmp/proj_autoconf_install +(cd test; make) +cp -r ../data/tests /tmp/proj_autoconf_install/share/proj +cp ../data/tests/egm96_15_downsampled.gtx /tmp/proj_autoconf_install/share/proj/egm96_15.gtx +cp ../data/tests/ntv2_0_downsampled.gsb /tmp/proj_autoconf_install/share/proj/ntv2_0.gsb +wine64 test/unit/test_cpp_api.exe + +ccache -s + +echo "Saving ccache..." +rm -f "$WORK_DIR/ccache.tar.gz" +(cd $HOME && tar czf "$WORK_DIR/ccache.tar.gz" .ccache) |
