build: Add arm64 to the build matrix

This will also allow us to create official arm64 builds starting with
our next release.

Change-Id: Iaca5e8406c5e28883346a7884eb0f30815ad0d19
This commit is contained in:
Joey Parrish 2021-08-02 21:06:07 -07:00
parent e5a0d6aa58
commit 879e2fef16
3 changed files with 44 additions and 3 deletions

View File

@ -38,23 +38,31 @@ jobs:
needs: lint needs: lint
strategy: strategy:
matrix: matrix:
os: ["ubuntu-latest", "macos-latest", "windows-latest"] os: ["ubuntu-latest", "macos-latest", "windows-latest", "linux-arm64"]
build_type: ["Debug", "Release"] build_type: ["Debug", "Release"]
lib_type: ["static", "shared"] lib_type: ["static", "shared"]
include: include:
- os: ubuntu-latest - os: ubuntu-latest
os_name: linux os_name: linux
target_arch: x64
exe_ext: "" exe_ext: ""
build_type_suffix: "" build_type_suffix: ""
- os: macos-latest - os: macos-latest
os_name: osx os_name: osx
target_arch: x64
exe_ext: "" exe_ext: ""
build_type_suffix: "" build_type_suffix: ""
- os: windows-latest - os: windows-latest
os_name: win os_name: win
target_arch: x64
exe_ext: ".exe" exe_ext: ".exe"
# 64-bit outputs on Windows go to a different folder name. # 64-bit outputs on Windows go to a different folder name.
build_type_suffix: "_x64" build_type_suffix: "_x64"
- os: linux-arm64
os_name: linux-arm64
target_arch: arm64
exe_ext: ""
build_type_suffix: ""
name: Build and test ${{ matrix.os_name }} ${{ matrix.build_type }} ${{ matrix.lib_type }} name: Build and test ${{ matrix.os_name }} ${{ matrix.build_type }} ${{ matrix.lib_type }}
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}

View File

@ -8,6 +8,9 @@ inputs:
os_name: os_name:
description: The name of the OS (one word). Appended to artifact filenames. description: The name of the OS (one word). Appended to artifact filenames.
required: true required: true
target_arch:
description: The CPU architecture to target. We support x64, arm64.
required: true
lib_type: lib_type:
description: A library type, either "static" or "shared". description: A library type, either "static" or "shared".
required: true required: true
@ -48,6 +51,28 @@ runs:
echo "${GITHUB_WORKSPACE}/depot_tools" >> $GITHUB_PATH echo "${GITHUB_WORKSPACE}/depot_tools" >> $GITHUB_PATH
echo "::endgroup::" echo "::endgroup::"
- name: Build ninja (arm only)
shell: bash
run: |
# NOTE: There is no prebuilt copy of ninja for the "aarch64"
# architecture (as reported by "uname -p" on arm64). So we must build
# our own, as recommended by depot_tools when it fails to fetch a
# prebuilt copy for us.
# NOTE 2: It turns out that $GITHUB_PATH operates like a stack.
# Appending to that file places the new path at the beginning of $PATH
# for the next step, so this step must come _after_ installing
# depot_tools.
if [[ "${{ inputs.target_arch }}" == "arm64" ]]; then
echo "::group::Build ninja (arm-only)"
git clone https://github.com/ninja-build/ninja.git -b v1.8.2
# The --bootstrap option compiles ninja as well as configures it.
# This is the exact command prescribed by depot_tools when it fails to
# fetch a ninja binary for your platform.
(cd ninja && ./configure.py --bootstrap)
echo "${GITHUB_WORKSPACE}/ninja" >> $GITHUB_PATH
echo "::endgroup::"
fi
- name: Configure gclient - name: Configure gclient
shell: bash shell: bash
run: | run: |
@ -57,7 +82,7 @@ runs:
- name: Sync gclient - name: Sync gclient
env: env:
GYP_DEFINES: "target_arch=x64 libpackager_type=${{ inputs.lib_type }}_library" GYP_DEFINES: "target_arch=${{ inputs.target_arch }} libpackager_type=${{ inputs.lib_type }}_library"
GYP_MSVS_VERSION: "2019" GYP_MSVS_VERSION: "2019"
GYP_MSVS_OVERRIDE_PATH: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise" GYP_MSVS_OVERRIDE_PATH: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise"
shell: bash shell: bash

View File

@ -112,23 +112,31 @@ jobs:
needs: [setup, lint, draft_release] needs: [setup, lint, draft_release]
strategy: strategy:
matrix: matrix:
os: ["ubuntu-latest", "macos-latest", "windows-latest"] os: ["ubuntu-latest", "macos-latest", "windows-latest", "linux-arm64"]
build_type: ["Debug", "Release"] build_type: ["Debug", "Release"]
lib_type: ["static", "shared"] lib_type: ["static", "shared"]
include: include:
- os: ubuntu-latest - os: ubuntu-latest
os_name: linux os_name: linux
target_arch: x64
exe_ext: "" exe_ext: ""
build_type_suffix: "" build_type_suffix: ""
- os: macos-latest - os: macos-latest
os_name: osx os_name: osx
target_arch: x64
exe_ext: "" exe_ext: ""
build_type_suffix: "" build_type_suffix: ""
- os: windows-latest - os: windows-latest
os_name: win os_name: win
target_arch: x64
exe_ext: ".exe" exe_ext: ".exe"
# 64-bit outputs on Windows go to a different folder name. # 64-bit outputs on Windows go to a different folder name.
build_type_suffix: "_x64" build_type_suffix: "_x64"
- os: linux-arm64
os_name: linux-arm64
target_arch: arm64
exe_ext: ""
build_type_suffix: ""
name: Build and test ${{ matrix.os_name }} ${{ matrix.build_type }} ${{ matrix.lib_type }} name: Build and test ${{ matrix.os_name }} ${{ matrix.build_type }} ${{ matrix.lib_type }}
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}