From abe03cebebc8d0b6f611800403f033deba136820 Mon Sep 17 00:00:00 2001 From: Tindy X <49061470+tindy2013@users.noreply.github.com> Date: Mon, 7 Sep 2020 20:08:19 +0800 Subject: [PATCH] Add Windows Autobuild CI (#244) * Add Windows x64 CI * Add missing dependency * Fix rapidjson build * Add Windows build to Travis CI Add Windows x86 build to GitHub Actions * Fix mingw32-make not found * Fix subsystem on Actions Fix install prefix on Travis CI. * Use MINGW_PREFIX instead of /usr * Clean up scripts Add Windows x86 build to Travis CI. --- .github/workflows/build.yml | 41 ++++++++++++++++++ .travis.yml | 72 +++++++++++++++++++++++++++++++- scripts/build.alpine.release.sh | 2 +- scripts/build.windows.release.sh | 41 ++++++++++++++++++ 4 files changed, 154 insertions(+), 2 deletions(-) create mode 100644 scripts/build.windows.release.sh diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 040fc4b..f2265fb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -40,3 +40,44 @@ jobs: with: name: subconverter_darwin64 path: subconverter/ + + windows64_build: + name: Windows x86_64 Build + runs-on: windows-latest + defaults: + run: + shell: msys2 {0} + steps: + - uses: actions/checkout@v2 + - uses: msys2/setup-msys2@v2 + with: + update: true + install: base-devel git mingw-w64-x86_64-gcc mingw-w64-x86_64-cmake mingw-w64-x86_64-libevent mingw-w64-x86_64-pcre2 python2 python2-pip + - name: Build + run: bash scripts/build.windows.release.sh + - name: Upload + uses: actions/upload-artifact@v1 + with: + name: subconverter_win64 + path: subconverter/ + + windows32_build: + name: Windows x86 Build + runs-on: windows-latest + defaults: + run: + shell: msys2 {0} + steps: + - uses: actions/checkout@v2 + - uses: msys2/setup-msys2@v2 + with: + update: true + install: base-devel git mingw-w64-i686-gcc mingw-w64-i686-cmake mingw-w64-i686-libevent mingw-w64-i686-pcre2 python2 python2-pip + msystem: MINGW32 + - name: Build + run: bash scripts/build.windows.release.sh + - name: Upload + uses: actions/upload-artifact@v1 + with: + name: subconverter_win32 + path: subconverter/ diff --git a/.travis.yml b/.travis.yml index 649e081..ca6246e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -80,4 +80,74 @@ jobs: skip_cleanup: true draft: true on: - tags: true + tags: true + - name: "Windows x86_64 Build" + os: windows + before_install: + - |- + [[ ! -f C:/tools/msys64/msys2_shell.cmd ]] && rm -rf C:/tools/msys64 + choco uninstall -y mingw + choco upgrade --no-progress -y msys2 + export msys2='cmd //C RefreshEnv.cmd ' + export msys2+='& set MSYS=winsymlinks:nativestrict ' + export msys2+='& C:\\tools\\msys64\\msys2_shell.cmd -defterm -no-start' + export mingw64="$msys2 -mingw64 -full-path -here -c "\"\$@"\" --" + export msys2+=" -msys2 -c "\"\$@"\" --" + $msys2 pacman --sync --noconfirm --needed base-devel git mingw-w64-x86_64-gcc mingw-w64-x86_64-cmake mingw-w64-x86_64-libevent mingw-w64-x86_64-pcre2 python2 python2-pip + taskkill //IM gpg-agent.exe //F + export PATH=/C/tools/msys64/mingw64/bin:$PATH + export MAKE=make + before_cache: + - |- + $msys2 pacman --sync --clean --noconfirm + cache: + directories: + - $HOME/AppData/Local/Temp/chocolatey + - /C/tools/msys64 + script: + - $mingw64 bash scripts/build.windows.release.sh + before_deploy: + - 7z a subconverter_win64.7z subconverter/ + deploy: + provider: releases + token: "$GITHUB_OAUTH_TOKEN" + file: "subconverter_win64.7z" + skip_cleanup: true + draft: true + on: + tags: true + - name: "Windows x86 Build" + os: windows + before_install: + - |- + [[ ! -f C:/tools/msys64/msys2_shell.cmd ]] && rm -rf C:/tools/msys64 + choco uninstall -y mingw + choco upgrade --no-progress -y msys2 + export msys2='cmd //C RefreshEnv.cmd ' + export msys2+='& set MSYS=winsymlinks:nativestrict ' + export msys2+='& C:\\tools\\msys64\\msys2_shell.cmd -defterm -no-start' + export mingw32="$msys2 -mingw32 -full-path -here -c "\"\$@"\" --" + export msys2+=" -msys2 -c "\"\$@"\" --" + $msys2 pacman --sync --noconfirm --needed base-devel git mingw-w64-i686-gcc mingw-w64-i686-cmake mingw-w64-i686-libevent mingw-w64-i686-pcre2 python2 python2-pip + taskkill //IM gpg-agent.exe //F + export PATH=/C/tools/msys64/mingw64/bin:$PATH + export MAKE=make + before_cache: + - |- + $msys2 pacman --sync --clean --noconfirm + cache: + directories: + - $HOME/AppData/Local/Temp/chocolatey + - /C/tools/msys64 + script: + - $mingw32 bash scripts/build.windows.release.sh + before_deploy: + - 7z a subconverter_win32.7z subconverter/ + deploy: + provider: releases + token: "$GITHUB_OAUTH_TOKEN" + file: "subconverter_win32.7z" + skip_cleanup: true + draft: true + on: + tags: true diff --git a/scripts/build.alpine.release.sh b/scripts/build.alpine.release.sh index ce35765..8368f79 100644 --- a/scripts/build.alpine.release.sh +++ b/scripts/build.alpine.release.sh @@ -6,7 +6,7 @@ apk add mbedtls-dev mbedtls-static zlib-dev rapidjson-dev libevent-dev libevent- git clone https://github.com/curl/curl --depth=1 cd curl -cmake -DCMAKE_USE_MBEDTLS=ON -DHTTP_ONLY=ON -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_USE_LIBSSH2=OFF . > /dev/null +cmake -DCMAKE_USE_MBEDTLS=ON -DHTTP_ONLY=ON -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_USE_LIBSSH2=OFF -DBUILD_CURL_EXE=OFF . > /dev/null make install -j2 > /dev/null cd .. diff --git a/scripts/build.windows.release.sh b/scripts/build.windows.release.sh new file mode 100644 index 0000000..f8bbda9 --- /dev/null +++ b/scripts/build.windows.release.sh @@ -0,0 +1,41 @@ +#!/bin/bash +set -xe + +git clone https://github.com/curl/curl --depth=1 +cd curl +cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_USE_LIBSSH2=OFF -DHTTP_ONLY=ON -DCMAKE_USE_SCHANNEL=ON -DBUILD_SHARED_LIBS=OFF -DBUILD_CURL_EXE=OFF -DCMAKE_INSTALL_PREFIX=$MINGW_PREFIX -G "Unix Makefiles" . +make install -j4 +cd .. + +git clone https://github.com/jbeder/yaml-cpp --depth=1 +cd yaml-cpp +cmake -DCMAKE_BUILD_TYPE=Release -DYAML_CPP_BUILD_TESTS=OFF -DYAML_CPP_BUILD_TOOLS=OFF -DCMAKE_INSTALL_PREFIX=$MINGW_PREFIX -G "Unix Makefiles" . +make install -j4 +cd .. + +git clone https://github.com/svaarala/duktape --depth=1 +cd duktape +pip2 install PyYAML +mkdir dist +python2 util/dist.py +cd dist/source/src +gcc -c -O3 -o duktape.o duktape.c +gcc -c -O3 -o duk_module_node.o -I. ../extras/module-node/duk_module_node.c +ar cr libduktape.a duktape.o +ar cr libduktape_module.a duk_module_node.o +install -m0644 ./*.a $MINGW_PREFIX/lib +install -m0644 ./duk*.h $MINGW_PREFIX/include +install -m0644 ../extras/module-node/duk_module_node.h $MINGW_PREFIX/include +cd ../../../.. + +git clone https://github.com/Tencent/rapidjson --depth=1 +cd rapidjson +cmake -DRAPIDJSON_BUILD_DOC=OFF -DRAPIDJSON_BUILD_EXAMPLES=OFF -DRAPIDJSON_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX=$MINGW_PREFIX -G "Unix Makefiles" . +make install -j4 +cd .. + +cmake -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles" . +make -j4 +rm subconverter.exe +g++ $(find CMakeFiles/subconverter.dir/src -name "*.obj") curl/lib/libcurl.a -o base/subconverter.exe -static -levent -lpcre2-8 -lduktape -lduktape_module -lyaml-cpp -lcrypt32 -lws2_32 -lwsock32 -lz -s +mv base subconverter \ No newline at end of file