build system improvements #2451
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: macos | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
on: [push, pull_request] | |
defaults: | |
run: | |
shell: bash | |
jobs: | |
macos: | |
runs-on: macos-11 | |
env: | |
# Bump number to reset all caches. | |
CACHE_EPOCH: '0' | |
CLICOLOR_FORCE: '1' | |
MACOSX_DEPLOYMENT_TARGET: '11' | |
MAKEFLAGS: 'OUTPUT_DIR=build' | |
steps: | |
- name: XCode version | |
run: xcode-select -p | |
# Checkout / fetch. {{{ | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
clean: false | |
fetch-depth: 0 | |
filter: tree:0 | |
show-progress: false | |
- name: Fetch | |
run: make fetchthirdparty | |
# }}} | |
# Restore / setup caches. {{{ | |
- name: Generate cache key | |
run: make TARGET= cache-key | |
# Note: if we get a hit on the primary key, then the rest of the job can be skipped: | |
# there's no point in building the same version, and we don't have any tests to run. | |
- name: Restore build cache | |
id: ccache-restore | |
uses: actions/cache/restore@v4 | |
with: | |
path: /Users/runner/Library/Caches/ccache | |
key: ${{ env.CACHE_EPOCH }}-${{ runner.os }}-ccache-${{ hashFiles('cache-key') }} | |
restore-keys: ${{ env.CACHE_EPOCH }}-${{ runner.os }}-ccache- | |
- name: Install ccache | |
if: steps.ccache-restore.outputs.cache-hit != 'true' | |
run: | | |
wget --progress=dot:mega https://github.com/ccache/ccache/releases/download/v4.9.1/ccache-4.9.1-darwin.tar.gz | |
tar xf ccache-4.9.1-darwin.tar.gz | |
printf '%s\n' "$PWD/ccache-4.9.1-darwin" >>"${GITHUB_PATH}" | |
- name: Setup build cache | |
if: steps.ccache-restore.outputs.cache-hit != 'true' | |
run: | | |
set -x | |
which ccache | |
ccache --version | |
ccache --zero-stats | |
ccache --max-size=256M | |
ccache --show-config | |
# }}} | |
# Install dependencies. {{{ | |
- name: Setup Python | |
if: steps.ccache-restore.outputs.cache-hit != 'true' | |
uses: actions/setup-python@v5 | |
with: | |
# Note: Python 3.12 removal of `distutils` breaks GLib's build. | |
python-version: '3.11' | |
- name: Install homebrew dependencies | |
if: steps.ccache-restore.outputs.cache-hit != 'true' | |
uses: ./.github/actions/brew_cache | |
with: | |
cache_epoch: '${{ env.CACHE_EPOCH }}' | |
packages: > | |
autoconf | |
automake | |
binutils | |
cmake | |
coreutils | |
gettext | |
gnu-getopt | |
grep | |
libtool | |
make | |
nasm | |
pkg-config | |
wget | |
- name: Update PATH | |
if: steps.ccache-restore.outputs.cache-hit != 'true' | |
run: > | |
printf '%s\n' | |
"$(brew --prefix)/opt/gettext/bin" | |
"$(brew --prefix)/opt/gnu-getopt/bin" | |
"$(brew --prefix)/opt/grep/libexec/gnubin" | |
"$(brew --prefix)/opt/make/libexec/gnubin" | |
| tee "${GITHUB_PATH}" | |
# }}} | |
# Build. {{{ | |
- name: Build | |
if: steps.ccache-restore.outputs.cache-hit != 'true' | |
run: make | |
- name: Dump binaries runtime path & dependencies | |
if: steps.ccache-restore.outputs.cache-hit != 'true' | |
run: make bindeps | |
# }}} | |
# Clean / save caches. {{{ | |
- name: Clean build cache | |
if: steps.ccache-restore.outputs.cache-hit != 'true' && always() | |
run: | | |
set -x | |
ccache --cleanup >/dev/null | |
ccache --show-stats --verbose | |
- name: Save build cache | |
uses: actions/cache/save@v4 | |
if: steps.ccache-restore.outputs.cache-hit != 'true' | |
with: | |
path: /Users/runner/Library/Caches/ccache | |
key: ${{ steps.ccache-restore.outputs.cache-primary-key }} | |
# }}} | |
# vim: foldmethod=marker foldlevel=0 |