• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1name: CI
2
3on: [push, pull_request]
4
5jobs:
6  build-windows:
7    runs-on: windows-${{ matrix.config.server }}
8    name: build-${{ matrix.config.toolchain}}-${{ matrix.config.arch}}
9    strategy:
10      fail-fast: false
11      matrix:
12        config:
13          - {toolchain: Visual Studio 15 2017, arch: Win32, server: 2016}
14          - {toolchain: Visual Studio 15 2017, arch: x64, server: 2016}
15          - {toolchain: Visual Studio 16 2019, arch: Win32, server: 2019}
16          - {toolchain: Visual Studio 16 2019, arch: x64, server: 2019}
17          - {toolchain: Visual Studio 17 2022, arch: Win32, server: 2022}
18          - {toolchain: Visual Studio 17 2022, arch: x64, server: 2022}
19    steps:
20      - uses: actions/checkout@v2
21      - name: Envinfo
22        run: npx envinfo
23      - name: Build
24        shell: cmd
25        run: |
26          mkdir -p build
27          cd build
28          cmake .. -DBUILD_TESTING=ON -G "${{ matrix.config.toolchain }}" -A ${{ matrix.config.arch }}
29          cmake --build .
30      - name: Test
31        shell: cmd
32        run: |
33          cd build
34          ctest -C Debug --output-on-failure
35
36  build-android:
37    runs-on: ubuntu-latest
38    container: reactnativecommunity/react-native-android:2020-5-20
39    steps:
40      - uses: actions/checkout@v2
41      - name: Envinfo
42        run: npx envinfo
43      - name: Build android arm64
44        # see build options you can use in https://developer.android.com/ndk/guides/cmake
45        run: |
46          mkdir build && cd build
47          $ANDROID_HOME/cmake/3.10.2.4988404/bin/cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_HOME/ndk/20.0.5594570/build/cmake/android.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DANDROID_ABI="arm64-v8a" -DANDROID_PLATFORM=android-24 ..
48          $ANDROID_HOME/cmake/3.10.2.4988404/bin/cmake --build .
49
50  build-macos:
51    runs-on: macos-10.15
52    steps:
53      - uses: actions/checkout@v2
54      - name: Envinfo
55        run: npx envinfo
56      - name: Setup
57        run: |
58          brew install ninja
59      - name: Build
60        run: |
61          mkdir build
62          cd build && cmake .. -DBUILD_TESTING=ON -G Ninja
63          cmake --build .
64          ls -lh
65      - name: Test
66        run: |
67          cd build && ctest -V
68
69  build-cross-qemu:
70    runs-on: ubuntu-latest
71    name: build-cross-qemu-${{ matrix.config.target }}
72
73    strategy:
74      fail-fast: false
75      matrix:
76        config:
77          - {target: arm,     toolchain: gcc-arm-linux-gnueabi,     cc: arm-linux-gnueabi-gcc,      qemu: qemu-arm-static     }
78          - {target: armhf,   toolchain: gcc-arm-linux-gnueabihf,   cc: arm-linux-gnueabihf-gcc,    qemu: qemu-arm-static     }
79          - {target: aarch64, toolchain: gcc-aarch64-linux-gnu,     cc: aarch64-linux-gnu-gcc,      qemu: qemu-aarch64-static }
80          - {target: riscv64, toolchain: gcc-riscv64-linux-gnu,     cc: riscv64-linux-gnu-gcc,      qemu: qemu-riscv64-static }
81          - {target: ppc,     toolchain: gcc-powerpc-linux-gnu,     cc: powerpc-linux-gnu-gcc,      qemu: qemu-ppc-static     }
82          - {target: ppc64,   toolchain: gcc-powerpc64-linux-gnu,   cc: powerpc64-linux-gnu-gcc,    qemu: qemu-ppc64-static   }
83          - {target: ppc64le, toolchain: gcc-powerpc64le-linux-gnu, cc: powerpc64le-linux-gnu-gcc,  qemu: qemu-ppc64le-static }
84          - {target: s390x,   toolchain: gcc-s390x-linux-gnu,       cc: s390x-linux-gnu-gcc,        qemu: qemu-s390x-static   }
85          - {target: mips,    toolchain: gcc-mips-linux-gnu,          cc: mips-linux-gnu-gcc,         qemu: qemu-mips-static     }
86          - {target: mips64,  toolchain: gcc-mips64-linux-gnuabi64,   cc: mips64-linux-gnuabi64-gcc,  qemu: qemu-mips64-static   }
87          - {target: mipsel,  toolchain: gcc-mipsel-linux-gnu,        cc: mipsel-linux-gnu-gcc,       qemu: qemu-mipsel-static   }
88          - {target: mips64el,toolchain: gcc-mips64el-linux-gnuabi64, cc: mips64el-linux-gnuabi64-gcc,qemu: qemu-mips64el-static }
89          - {target: alpha,   toolchain: gcc-alpha-linux-gnu,       cc: alpha-linux-gnu-gcc,        qemu: qemu-alpha-static   }
90          - {target: arm (u64 slots),     toolchain: gcc-arm-linux-gnueabi,     cc: arm-linux-gnueabi-gcc,      qemu: qemu-arm-static}
91          - {target: aarch64 (u64 slots), toolchain: gcc-aarch64-linux-gnu,     cc: aarch64-linux-gnu-gcc,      qemu: qemu-aarch64-static}
92          - {target: ppc (u64 slots),     toolchain: gcc-powerpc-linux-gnu,     cc: powerpc-linux-gnu-gcc,      qemu: qemu-ppc-static}
93          - {target: ppc64 (u64 slots),   toolchain: gcc-powerpc64-linux-gnu,   cc: powerpc64-linux-gnu-gcc,    qemu: qemu-ppc64-static}
94
95    steps:
96      - uses: actions/checkout@v2
97      - name: Install QEMU
98        # this ensure install latest qemu on ubuntu, apt get version is old
99        env:
100          QEMU_SRC: "http://archive.ubuntu.com/ubuntu/pool/universe/q/qemu"
101          QEMU_VER: "qemu-user-static_4\\.2-.*_amd64.deb$"
102        run: |
103          DEB=`curl -s $QEMU_SRC/ | grep -o -E 'href="([^"#]+)"' | cut -d'"' -f2 | grep $QEMU_VER | tail -1`
104          wget $QEMU_SRC/$DEB
105          sudo dpkg -i $DEB
106      - name: Install ${{ matrix.config.toolchain }}
107        run: |
108          sudo apt update
109          sudo apt install ${{ matrix.config.toolchain }} -y
110      - name: Build
111        run: |
112          mkdir build
113          cd build && cmake .. -DBUILD_TESTING=ON -DQEMU=ON -DCMAKE_C_COMPILER=${{ matrix.config.cc }}
114          cmake --build .
115          ls -lh
116      - name: Test
117        run: |
118          ${{ matrix.config.qemu }} build/uv_run_tests_a
119