ir/.github/workflows/push.yml
Anatol Belski 658c923580 msvc: capstone: Move to using the VS solution instead of vcpkg
Moving to the usage of the upstream sources removes layers of
complexity present in VCPKG and allows for more flexibility with regard
to the dependency handling. Things done:

- Switch to building capstone based from an upstream tag
- Explicitly remove any unused arch support in the build
- Use static lib to simplify on-prem usage
- Cache the capstone artifacts in the pipeline
- Automatically reset cache based on the values in Makefile and
  VC++ toolset version

The current capstone version is still kept 5.0-rc2. While evaluating a
possible downgrade to 4.0.2 as used by the Linux CI, some test
regressions are observed on the x64 side. If needed, those might be
spent a closer look, otherwise keeping the version seems ok.

Signed-off-by: Anatol Belski <anbelski@linux.microsoft.com>
2023-06-10 13:24:28 +02:00

124 lines
3.6 KiB
YAML

name: Push
on:
push:
branches:
- master
pull_request:
branches:
- "**"
permissions:
contents: read
jobs:
Linux_x86_64:
name: 'Linux x86_64'
runs-on: ubuntu-22.04
container:
image: ubuntu:22.04
steps:
- uses: actions/checkout@v3
- name: apt
run: |
apt update -y
DEBIAN_FRONTEND=noninteractive apt install -y \
gcc g++-12 \
libcapstone-dev \
libcapstone4 \
make
- name: make
run: make TARGET=x86_64 all
- name: test
run: make CXX=g++-12 TARGET=x86_64 test-ci
Linux_i386:
name: 'Linux i386'
runs-on: ubuntu-22.04
container:
image: ubuntu:22.04
steps:
- uses: actions/checkout@v3
- name: apt
run: |
dpkg --add-architecture i386
apt update -y
DEBIAN_FRONTEND=noninteractive apt install -y \
gcc g++-12 \
gcc-multilib \
libc6:i386 \
make \
wget
- name: Build capstone
run: |
# capstone isn't distributed for 32-bit so we need to build it manually
wget https://github.com/capstone-engine/capstone/archive/4.0.2.tar.gz -O capstone.tar.gz
tar zxvf capstone.tar.gz
cd capstone-4.0.2
./make.sh nix32
./make.sh install
cd ..
rm -rf capstone-4.0.2 capstone.tar.gz
- name: make
run: make TARGET=x86 all
- name: test
run: make CXX=g++-12 TARGET=x86 test-ci
Linux_aarch64:
name: 'Linux aarch64'
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: uraimo/run-on-arch-action@v2
name: QEMU
id: runcmd
with:
arch: aarch64
distro: ubuntu22.04
githubToken: ${{ github.token }}
install: |
apt update -y
DEBIAN_FRONTEND=noninteractive apt install -y \
gcc g++-12 \
libc6 \
libcapstone-dev \
libcapstone4 \
make
run: |
make CC=gcc TARGET=aarch64 all
# FIXME: For some reason some of the object files are rebuilt
make CC=gcc CXX=g++-12 TARGET=aarch64 test-ci
Windows:
strategy:
matrix:
arch: [x86, amd64]
runs-on: windows-2022
steps:
- uses: actions/checkout@v3
- uses: ilammy/msvc-dev-cmd@v1
with:
arch: ${{ matrix.arch }}
- name: Prepare env
shell: powershell
run: |
$tag = (nmake -nologo -f win32\Makefile capstone_tag).Trim()
echo ("CAPSTONE_TAG=" + $tag) | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
$dir = (nmake -nologo -f win32\Makefile capstone_dir).Trim()
echo ("CAPSTONE_DIR=" + $dir) | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
echo ("VCVER=" + $env:VCToolsVersion) | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
- name: Cache capstone
id: cache-capstone
uses: actions/cache@v3
with:
path: ${{ env.CAPSTONE_DIR }}
key: capstone-${{ matrix.arch }}-${{ env.CAPSTONE_TAG }}-${{ env.VCVER }}-0
- if: ${{ steps.cache-capstone.outputs.cache-hit != 'true' }}
name: Prepare capstone
shell: cmd
run: |
nmake -nologo -f win32\Makefile capstone
- name: Build
shell: cmd
run: nmake -nologo -f win32/Makefile
- name: Test
shell: cmd
run: |
nmake -nologo -f win32/Makefile test-ci