aboutsummaryrefslogtreecommitdiffhomepage
path: root/.github/workflows/aarch64.yml
blob: 7bbffc7771841235122adf7e4545c2081225769e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
name: AArch64

on: [ push, pull_request ]

env:
  BUILD_TYPE: Release

jobs:
  build_linux:
    strategy:
      matrix:
        platform: [ linux, android ]
      fail-fast: false

    runs-on: ubuntu-latest

    steps:

      - name: Install build dependencies
        run: >
          sudo apt-get update &&
          sudo apt-get install
          gcc-10-aarch64-linux-gnu
          g++-10-aarch64-linux-gnu
          ninja-build
          qemu-user

      - name: Checkout dynarmic repo
        uses: actions/checkout@v2

      - name: Ccache
        if: matrix.platform == 'linux'
        uses: hendrikmuhs/ccache-action@v1.2

      - name: Checkout ext-boost repo
        uses: actions/checkout@v2
        with:
          repository: MerryMage/ext-boost
          path: externals/ext-boost

      - name: Configure CMake for AArch64 (Linux)
        if: matrix.platform == 'linux'
        env:
          CC: aarch64-linux-gnu-gcc-10
          CXX: aarch64-linux-gnu-g++-10
        run: >
          cmake
          -B ${{github.workspace}}/build-arm64
          -DBOOST_INCLUDEDIR=${{github.workspace}}/externals/ext-boost
          -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}
          -DDYNARMIC_TESTS_USE_UNICORN=0
          -DDYNARMIC_USE_LLVM=0
          -G Ninja
          
      - name: Configure CMake for AArch64 (Android)
        if: matrix.platform == 'android'
        run: >
          cmake
          -B ${{github.workspace}}/build-arm64
          -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake
          -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}
          -DANDROID_ABI=arm64-v8a
          -DANDROID_PLATFORM=29
          -DBoost_INCLUDE_DIR=${{github.workspace}}/externals/ext-boost
          -DDYNARMIC_TESTS_USE_UNICORN=0
          -DDYNARMIC_USE_LLVM=0
          -G Ninja

      - name: Build AArch64
        working-directory: ${{github.workspace}}/build-arm64
        run: cmake --build . --config Release

      - name: Configure CMake for x86_64
        if: matrix.platform == 'linux'
        env:
          CC: gcc-10
          CXX: g++-10
        run: >
          cmake
          -B ${{github.workspace}}/build-x64
          -DBOOST_INCLUDEDIR=${{github.workspace}}/externals/ext-boost
          -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}
          -DCMAKE_C_COMPILER_LAUNCHER=ccache
          -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
          -DDYNARMIC_TESTS_USE_UNICORN=0
          -DDYNARMIC_USE_LLVM=0
          -G Ninja

      - name: Build x86_64
        if: matrix.platform == 'linux'
        working-directory: ${{github.workspace}}/build-x64
        run: cmake --build . --config Release

      - name: Basic tests
        if: matrix.platform == 'linux'
        working-directory: ${{github.workspace}}
        run: qemu-aarch64 -L /usr/aarch64-linux-gnu ./build-arm64/tests/dynarmic_tests -d yes

      - name: Test against x86_64 implementation (A32, thumb)
        if: matrix.platform == 'linux'
        working-directory: ${{github.workspace}}
        run: |
          diff <(qemu-aarch64 -L /usr/aarch64-linux-gnu ./build-arm64/tests/dynarmic_test_generator thumb 42 1 100000) <(./build-x64/tests/dynarmic_test_generator thumb 42 1 100000)
          diff <(qemu-aarch64 -L /usr/aarch64-linux-gnu ./build-arm64/tests/dynarmic_test_generator thumb 42 10 10000) <(./build-x64/tests/dynarmic_test_generator thumb 42 10 10000)
          diff <(qemu-aarch64 -L /usr/aarch64-linux-gnu ./build-arm64/tests/dynarmic_test_generator thumb 42 100 1000) <(./build-x64/tests/dynarmic_test_generator thumb 42 100 1000)

      - name: Test against x86_64 implementation (A32, arm)
        if: matrix.platform == 'linux'
        working-directory: ${{github.workspace}}
        run: |
          diff <(qemu-aarch64 -L /usr/aarch64-linux-gnu ./build-arm64/tests/dynarmic_test_generator arm 42 1 100000) <(./build-x64/tests/dynarmic_test_generator arm 42 1 100000)
          diff <(qemu-aarch64 -L /usr/aarch64-linux-gnu ./build-arm64/tests/dynarmic_test_generator arm 42 10 10000) <(./build-x64/tests/dynarmic_test_generator arm 42 10 10000)
          diff <(qemu-aarch64 -L /usr/aarch64-linux-gnu ./build-arm64/tests/dynarmic_test_generator arm 42 100 1000) <(./build-x64/tests/dynarmic_test_generator arm 42 100 1000)

      - name: Test against x86_64 implementation (A64)
        if: matrix.platform == 'linux'
        working-directory: ${{github.workspace}}
        run: |
          diff <(qemu-aarch64 -L /usr/aarch64-linux-gnu ./build-arm64/tests/dynarmic_test_generator a64 42 1 100000) <(./build-x64/tests/dynarmic_test_generator a64 42 1 100000)
          diff <(qemu-aarch64 -L /usr/aarch64-linux-gnu ./build-arm64/tests/dynarmic_test_generator a64 42 10 10000) <(./build-x64/tests/dynarmic_test_generator a64 42 10 10000)
          diff <(qemu-aarch64 -L /usr/aarch64-linux-gnu ./build-arm64/tests/dynarmic_test_generator a64 42 100 1000) <(./build-x64/tests/dynarmic_test_generator a64 42 100 1000)

  build_windows:
    strategy:
      fail-fast: false

    runs-on: windows-latest

    steps:

      - name: Checkout dynarmic repo
        uses: actions/checkout@v2

      - name: Checkout ext-boost repo
        uses: actions/checkout@v2
        with:
          repository: MerryMage/ext-boost
          path: externals/ext-boost

      - name: Setup msvc-arm64 environment
        uses: ilammy/msvc-dev-cmd@v1
        with:
          arch: amd64_arm64

      - name: Configure CMake for AArch64 (Windows)
        run: >
          cmake
          -B ${{github.workspace}}/build-arm64
          -DBOOST_INCLUDEDIR=${{github.workspace}}/externals/ext-boost
          -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}
          -DDYNARMIC_WARNINGS_AS_ERRORS=0
          -DDYNARMIC_TESTS_USE_UNICORN=0
          -DDYNARMIC_USE_LLVM=0
          -G Ninja

      - name: Build AArch64
        working-directory: ${{github.workspace}}/build-arm64
        run: cmake --build . --config Release