Skip to content

Commit

Permalink
Build universal (x86_64+arm64) binaries for MacOS
Browse files Browse the repository at this point in the history
Fixes #1727
  • Loading branch information
JasonGross committed May 7, 2024
1 parent 2bd0653 commit c8df5d9
Showing 1 changed file with 56 additions and 14 deletions.
70 changes: 56 additions & 14 deletions .github/workflows/coq-macos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,21 @@ on:
jobs:
build:

runs-on: macOS-11
strategy:
fail-fast: false
matrix:
# macOS 11, 12, 13 are x86_64; macOS 14 is arm64
os: [{name: 'macOS 11',
arch: 'x86_64',
runs-on: 'macos-11'}, # move to macOS-12 when 11 is removed
{name: 'macOS 14',
arch: 'arm64',
runs-on: 'macos-14'}]

runs-on: ${{ matrix.os.runs-on }}

concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
group: ${{ github.workflow }}-${{ matrix.os.runs-on }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true

env:
Expand All @@ -28,7 +39,7 @@ jobs:
OPAMYES: "true"
OPAMCONFIRMLEVEL: "unsafe-yes"

name: macos
name: ${{ matrix.os.name }} (${{ matrix.os.arch }})

steps:
- uses: actions/checkout@v4
Expand Down Expand Up @@ -60,22 +71,22 @@ jobs:
- name: upload OCaml files
uses: actions/upload-artifact@v3
with:
name: ExtractionOCaml
name: ExtractionOCaml-${{ matrix.os.arch }}
path: src/ExtractionOCaml
- name: upload js_of_ocaml files
uses: actions/upload-artifact@v3
with:
name: ExtractionJsOfOCaml
name: ExtractionJsOfOCaml-${{ matrix.os.arch }}
path: src/ExtractionJsOfOCaml
- name: upload standalone files
uses: actions/upload-artifact@v3
with:
name: standalone-macos
name: standalone-macos-${{ matrix.os.arch }}
path: dist/fiat_crypto
- name: upload standalone js files
uses: actions/upload-artifact@v3
with:
name: standalone-html-macos
name: standalone-html-macos-${{ matrix.os.arch }}
path: fiat-html
- name: install
run: opam exec -- etc/ci/github-actions-make.sh EXTERNAL_DEPENDENCIES=1 SKIP_COQSCRIPTS_INCLUDE=1 install install-standalone-ocaml
Expand All @@ -90,7 +101,7 @@ jobs:
# - name: upload timing and .vo info
# uses: actions/upload-artifact@v3
# with:
# name: build-outputs
# name: build-outputs-${{ matrix.os.arch }}
# path: .
# if: always ()
# - name: validate
Expand All @@ -99,35 +110,64 @@ jobs:
# make TIMED=1 validate COQCHKFLAGS="-o ${COQCHKEXTRAFLAGS}"
# if: github.event_name != 'pull_request'

test-standalone:
combine-standalone:
runs-on: macos-latest
needs: build
steps:
- uses: actions/checkout@v4
- name: Download standalone MacOS
- name: Download standalone MacOS x86_64
uses: actions/download-artifact@v3
with:
name: standalone-macos-x86_64
path: dist-x86_64/
- name: Download standalone MacOS arm64
uses: actions/download-artifact@v3
with:
name: standalone-macos-arm64
path: dist-arm64/
- name: Create universal binary
run: |
mkdir -p dist
lipo -create -output dist/fiat_crypto dist-x86_64/fiat_crypto dist-arm64/fiat_crypto
- name: upload universal binary
uses: actions/upload-artifact@v3
with:
name: standalone-macos
path: dist/fiat_crypto

test-standalone:
strategy:
fail-fast: false
matrix:
arch: ['', '-x86_64', '-arm64']
runs-on: macos-latest
needs: [build, combine-standalone]
steps:
- uses: actions/checkout@v4
- name: Download standalone MacOS${{ matrix.arc }}
uses: actions/download-artifact@v3
with:
name: standalone-macos${{ matrix.arc }}
path: dist/
- name: List files
run: find dist
- run: chmod +x dist/fiat_crypto
- name: Test files
run: |
echo "::group::file fiat_crypto"
echo "::group::file fiat_crypto (${{ matrix.arch }})"
file dist/fiat_crypto
echo "::endgroup::"
echo "::group::otool -L fiat_crypto"
echo "::group::otool -L fiat_crypto (${{ matrix.arch }})"
otool -L dist/fiat_crypto
echo "::endgroup::"
echo "::group::lipo -info fiat_crypto"
echo "::group::lipo -info fiat_crypto (${{ matrix.arch }})"
lipo -info dist/fiat_crypto
echo "::endgroup::"
etc/ci/test-run-fiat-crypto.sh dist/fiat_crypto
publish-standalone:
runs-on: ubuntu-latest
needs: build
needs: combine-standalone
permissions:
contents: write # IMPORTANT: mandatory for making GitHub Releases
steps:
Expand All @@ -147,6 +187,8 @@ jobs:
arch="$(etc/ci/find-arch.sh dist/fiat_crypto)"
tag="$(git describe --tags HEAD)"
fname="Fiat-Cryptography_${tag}_macOS_${arch}"
printf '::warning::%s (%s)\n' "$fname" "$(file dist/fiat_crypto 2>&1)"
exit 1
echo "$fname"
mv dist/fiat_crypto "dist/$fname"
find dist
Expand Down

0 comments on commit c8df5d9

Please sign in to comment.