From 7b1bce969e42611959aaabfebfa1f699bdaec4bf Mon Sep 17 00:00:00 2001 From: spacemeowx2 Date: Tue, 16 Oct 2018 16:24:21 +0800 Subject: [PATCH] compile 32bit exe automatically --- .drone.yml | 29 ++++++++++++++++----- cmake/toolchain-mingw32.cmake | 23 ++++++++++++++++ docker/Dockerfile.win32 | 19 ++++++++++++++ docker/{Dockerfile.win => Dockerfile.win64} | 0 src/gateway.c | 3 ++- src/packet.c | 3 ++- 6 files changed, 69 insertions(+), 8 deletions(-) create mode 100644 cmake/toolchain-mingw32.cmake create mode 100644 docker/Dockerfile.win32 rename docker/{Dockerfile.win => Dockerfile.win64} (100%) diff --git a/.drone.yml b/.drone.yml index aceeaef..cc439b9 100644 --- a/.drone.yml +++ b/.drone.yml @@ -5,10 +5,16 @@ pipeline: - docker build --rm -t switch-lan-play-build:linux -f docker/Dockerfile.linux . volumes: - /var/run/docker.sock:/var/run/docker.sock - build-docker-win: + build-docker-win32: image: docker commands: - - docker build --rm -t switch-lan-play-build:win -f docker/Dockerfile.win . + - docker build --rm -t switch-lan-play-build:win32 -f docker/Dockerfile.win32 . + volumes: + - /var/run/docker.sock:/var/run/docker.sock + build-docker-win64: + image: docker + commands: + - docker build --rm -t switch-lan-play-build:win64 -f docker/Dockerfile.win64 . volumes: - /var/run/docker.sock:/var/run/docker.sock lan-play-linux: @@ -18,13 +24,23 @@ pipeline: - mkdir build.linux && cd build.linux - cmake .. - make -j$$(nproc) - lan-play-windows: + - mv ./lan-play ./lan-play-linux + lan-play-win32: + group: build + image: switch-lan-play-build:win32 + commands: + - mkdir build.win32 && cd build.win32 + - cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain-mingw32.cmake .. + - make -j$$(nproc) + - mv ./lan-play.exe ./lan-play-win32.exe + lan-play-win64: group: build - image: switch-lan-play-build:win + image: switch-lan-play-build:win64 commands: - - mkdir build.win && cd build.win + - mkdir build.win64 && cd build.win64 - cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain-mingw64.cmake .. - make -j$$(nproc) + - mv ./lan-play.exe ./lan-play-win64.exe server: group: build image: node:alpine @@ -37,7 +53,8 @@ pipeline: secrets: [ github_token ] files: - build.linux/lan-play - - build.win/lan-play.exe + - build.win32/lan-play-win32.exe + - build.win64/lan-play-win64.exe checksum: - sha1 prerelease: true diff --git a/cmake/toolchain-mingw32.cmake b/cmake/toolchain-mingw32.cmake new file mode 100644 index 0000000..79968e7 --- /dev/null +++ b/cmake/toolchain-mingw32.cmake @@ -0,0 +1,23 @@ +# https://github.com/zyga/cmake-toolchains/blob/master/Toolchain-Ubuntu-mingw32.cmake + +set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") +set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "") + +set(CMAKE_SYSTEM_NAME Windows) +set(TOOLCHAIN_PREFIX i686-w64-mingw32) + +# cross compilers to use for C and C++ +set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc) +set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++) +set(CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres) + +# target environment on the build host system +# set 1st to dir with the cross compiler's C/C++ headers/libs +set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX}) + +# modify default behavior of FIND_XXX() commands to +# search for headers/libs in the target environment and +# search for programs in the build host environment +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) diff --git a/docker/Dockerfile.win32 b/docker/Dockerfile.win32 new file mode 100644 index 0000000..717e3e9 --- /dev/null +++ b/docker/Dockerfile.win32 @@ -0,0 +1,19 @@ +FROM buildpack-deps:jessie + +RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && sed -i 's/security.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list + +RUN apt update +RUN apt install -y cmake make +RUN apt install -y mingw32 unzip +COPY ./cmake/toolchain-mingw32.cmake / +RUN curl -L -o /tmp/libev-v1.23.0.tar.gz https://github.com/libuv/libuv/archive/v1.23.0.tar.gz +RUN tar xvf /tmp/libev-v1.23.0.tar.gz -C /tmp + +ENV HOST=i686-w64-mingw32 +ENV TARGET=i686-w64-mingw32 +ENV PREFIX=/usr/i686-w64-mingw32/ +RUN cd /tmp/libuv-1.23.0 \ + && ./autogen.sh \ + && ./configure --host=$HOST --target=$TARGET --prefix=$PREFIX --disable-shared --enable-static \ + && make -j$(nproc) \ + && make install diff --git a/docker/Dockerfile.win b/docker/Dockerfile.win64 similarity index 100% rename from docker/Dockerfile.win rename to docker/Dockerfile.win64 diff --git a/src/gateway.c b/src/gateway.c index 441af22..a6b07f1 100644 --- a/src/gateway.c +++ b/src/gateway.c @@ -257,8 +257,9 @@ int gateway_uvl_output(uvl_t *handle, const uv_buf_t bufs[], unsigned int nbufs) uint8_t buffer[8192]; uint8_t *buf = buffer; uint32_t len = 0; + int i; - for (int i = 0; i < nbufs; i++) { + for (i = 0; i < nbufs; i++) { RT_ASSERT(len + bufs[i].len < sizeof(buffer)) memcpy(buf, bufs[i].base, bufs[i].len); buf += bufs[i].len; diff --git a/src/packet.c b/src/packet.c index 61cb7f5..4b98006 100644 --- a/src/packet.c +++ b/src/packet.c @@ -181,9 +181,10 @@ void payload_print_hex(const struct payload *payload) { const struct payload *part = payload; int i = 0; + int j; while (part) { - for (int j = 0; j < part->len; j++) { + for (j = 0; j < part->len; j++) { printf(" %02x", part->ptr[j]); if ( ++i % 16 == 0 ) { printf("\n");