GCC14/C++23 compatibility fix #91
This file contains hidden or 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
# Copyright 2025 The Khronos Group Inc. | |
# SPDX-License-Identifier: Apache-2.0 | |
name: KTX-Software MacOS & iOS CI | |
# Seems no way to avoid duplicating this on logic in each .yml file. | |
# See https://github.com/actions/starter-workflows/issues/245. | |
on: | |
# Trigger the workflow on a pull request, | |
pull_request: | |
push: | |
# And on pushes to main, which will occur when a PR is merged. | |
branches: | |
- main | |
# Also trigger on push of release tags to any branch. Useful | |
# for testing release builds before merging to main. | |
tags: | |
- 'v[0-9]+.[0-9]+.[0-9]+' | |
- 'v[0-9]+.[0-9]+.[0-9]+-*' | |
paths-ignore: | |
- .appveyor.yml | |
- .github/workflows/android.yml | |
- .github/workflows/check-mkvk.yml | |
- .github/workflows/docs.yml | |
- .github/workflows/formatting.yml | |
- .github/workflows/publish-pyktx.yml | |
- .github/workflows/windows.yml | |
- .travis.yml | |
- README.md | |
- CODE_OF_CONDUCT.md | |
- CONTRIBUTING.md | |
- LICENSE.md | |
- LICENSES | |
- RELEASE_NOTES.md | |
- REUSE.toml | |
- install-gitconfig* | |
# Allow manual trigger | |
workflow_dispatch: | |
workflow_call: | |
jobs: | |
#formatting: | |
# uses: ./.github/workflows/formatting.yml | |
macos: | |
# Shortcircuit and don't burn CI time when formatting will reject | |
#needs: formatting | |
strategy: | |
matrix: | |
os: [ macos-13 ] | |
generator: [ Xcode ] | |
arch: [ x86_64 ] | |
vk_sdk_ver: ['1.3.290.0'] | |
options: [ | |
{config: 'Debug,Release', platform: macOS, | |
doc: ON, jni: ON, loadtests: OpenGL+Vulkan, py: ON, tools: ON, tools_cts: ON, | |
package: YES, sse: ON, opencl: OFF}, | |
{config: Release, platform: macOS, | |
doc: OFF, jni: OFF, loadtests: OFF, py: OFF, tools: OFF, tools_cts: OFF, | |
sse: ON, opencl: ON}, | |
{config: Release, platform: macOS, | |
doc: OFF, jni: OFF, loadtests: OFF, py: OFF, tools: OFF, tools_cts: OFF, | |
sse: OFF, opencl: ON}, | |
{config: Release, platform: macOS, | |
doc: OFF, jni: OFF, loadtests: OFF, py: OFF, tools: OFF, tools_cts: OFF, | |
sse: OFF, opencl: OFF} | |
] | |
include: | |
- name: Package (arm64) | |
os: macos-latest | |
generator: Xcode | |
arch: arm64 | |
vk_sdk_ver: '1.3.290.0' | |
options: { | |
config: Release, platform: macOS, | |
doc: ON, jni: ON, loadtests: OpenGL+Vulkan, py: OFF, tests: OFF, tools: ON, tools_cts: OFF, | |
package: YES, sse: ON, opencl: OFF | |
} | |
- name: OpenCL,SSE | |
os: macos-latest | |
generator: Xcode | |
arch: arm64 | |
vk_sdk_ver: '1.3.290.0' | |
options: { | |
config: Release, platform: macOS, | |
doc: OFF, jni: OFF, loadtests: OFF, py: OFF, tests: OFF, tools: OFF, tools_cts: OFF, | |
sse: ON, opencl: ON | |
} | |
- name: OpenCL | |
os: macos-latest | |
generator: Xcode | |
arch: arm64 | |
vk_sdk_ver: '1.3.290.0' | |
options: { | |
config: Release, platform: macOS, | |
doc: OFF, jni: OFF, loadtests: OFF, py: OFF, tests: OFF, tools: OFF, tools_cts: OFF, | |
sse: OFF, opencl: ON | |
} | |
- name: All OFF | |
os: macos-latest | |
generator: Xcode | |
arch: arm64 | |
vk_sdk_ver: '1.3.290.0' | |
options: { | |
config: Release, platform: macOS, | |
doc: OFF, jni: OFF, loadtests: OFF, py: OFF, tests: OFF, tools: OFF, tools_cts: OFF, | |
sse: OFF, opencl: OFF | |
} | |
- name: iOS | |
os: macos-latest | |
generator: Xcode | |
arch: arm64 | |
vk_sdk_ver: '1.3.290.0' | |
options: { | |
config: Release, platform: iOS, | |
doc: OFF, jni: OFF, loadtests: OpenGL+Vulkan, py: OFF, tests: OFF, tools: OFF, tools_cts: OFF, | |
package: YES, sse: OFF, opencl: OFF | |
} | |
name: ${{ matrix.name && matrix.name || format('{0} SSE,OpenCL:{1},{2}', matrix.os, matrix.options.sse, matrix.options.opencl) }} | |
runs-on: ${{ matrix.os }} | |
env: | |
GIT_LFS_SKIP_SMUDGE: 1 | |
HOMEBREW_NO_AUTO_UPDATE: 1 | |
APPLE_ID: ${{ secrets.APPLE_ID }} | |
DEVELOPMENT_TEAM: ${{ secrets.APPLE_DEVELOPMENT_TEAM }} | |
PKG_SIGN_IDENTITY: ${{ secrets.APPLE_PKG_SIGN_IDENTITY }} | |
CODE_SIGN_IDENTITY: ${{ secrets.APPLE_CODE_SIGN_IDENTITY }} | |
BUILD_DIR: build | |
REL_DESC_FILE: "build/rel_desc.md" | |
# Map test matrix elements to environmental variables, so that scripts launched from CI scripts may react to them. | |
# Some matrix variables have defaults if unspecified by the matrix | |
CMAKE_GEN: ${{ matrix.generator }} | |
ARCH: ${{ matrix.arch }} # iOS uses ARCH | |
ARCHS: ${{ matrix.arch }} # MacOS uses ARCHS | |
CONFIGURATION: ${{ matrix.options.config }} | |
PLATFORM: ${{ matrix.options.platform }} | |
FEATURE_DOC: ${{ matrix.options.doc }} | |
FEATURE_JNI: ${{ matrix.options.jni }} | |
FEATURE_LOADTESTS: ${{ matrix.options.loadtests }} | |
FEATURE_PY: ${{ matrix.options.py }} | |
FEATURE_TESTS: ${{ matrix.options.tests && matrix.options.tests || 'ON' }} | |
FEATURE_TOOLS: ${{ matrix.options.tools }} | |
FEATURE_TOOLS_CTS: ${{ matrix.options.tools_cts }} | |
PACKAGE: ${{ matrix.options.package && matrix.options.package || 'NO' }} | |
SUPPORT_OPENCL: ${{ matrix.options.opencl }} | |
SUPPORT_SSE: ${{ matrix.options.sse }} | |
WASM_BUILD: ${{ matrix.options.wasm && matrix.options.wasm || 'OFF' }} | |
WERROR: ${{ matrix.options.werror && matrix.options.werror || 'ON' }} | |
# CC Handled by job step | |
# CXX Handled by job step | |
PYTHON_DIST_DIR: interface/python_binding/dist | |
VULKAN_SDK_VER: ${{ matrix.vk_sdk_ver }} | |
# This is just to tell the Vulkan install script where to install. | |
# NOTE: Hardcoded $HOME expansion, due to 'env' context being unavailble in env: | |
VULKAN_INSTALL_DIR: /Users/runner/VulkanSDK/${{ matrix.vk_sdk_ver }} | |
VULKAN_SDK: /Users/runner/VulkanSDK/${{ matrix.vk_sdk_ver }}/macOS | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
# Fetch all history to make sure tags are | |
# included (used for version creation) | |
fetch-depth: 0 | |
- name: Add certificates to macOS keychain | |
env: | |
MACOS_CERTIFICATES_P12: ${{ secrets.MACOS_CERTIFICATES_P12 }} | |
MACOS_CERTIFICATES_PASSWORD: ${{ secrets.MACOS_CERTIFICATES_PASSWORD }} | |
ALTOOL_PASSWORD: ${{ secrets.ALTOOL_PASSWORD }} | |
ALTOOL_PW_LABEL: ${{ secrets.ALTOOL_PW_LABEL }} | |
run: ./scripts/before_build_macos.sh | |
- name: before_install | |
run: | | |
echo -n "Running on the following GitHub Actions CI runner: " && uname -a | |
echo -n "CMake version on the runner is " && cmake --version | |
echo -e "machine github.com\n login $GITHUB_TOKEN" >> ~/.netrc # Prevent rate limiting on Git LFS. | |
cat ~/.netrc | |
if [[ -n "$FEATURE_LOADTESTS" && "$FEATURE_LOADTESTS" != "OFF" ]]; then | |
# Install vcpkg. | |
pushd $HOME | |
git clone https://github.com/microsoft/vcpkg | |
cd vcpkg && ./bootstrap-vcpkg.sh -disableMetrics && echo "VCPKG_ROOT=`pwd`" >> $GITHUB_ENV | |
popd | |
fi | |
- name: Install Doxygen | |
if: matrix.options.doc == 'ON' | |
uses: ssciwr/doxygen-install@v1 | |
- name: Install Graphviz | |
if: matrix.options.doc == 'ON' | |
uses: ts-graphviz/setup-graphviz@v2 | |
- name: Run install script | |
run: ./scripts/install_macos.sh | |
- name: Set up Python 3.11 | |
if: matrix.options.py == 'ON' | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.11.4' | |
- name: before_script | |
run: | | |
if [ "$FEATURE_TOOLS_CTS" = "ON" ]; then | |
git submodule update --init --recursive tests/cts | |
fi | |
# Make sure embedded dates are correct. | |
./install-gitconfig.sh | |
scripts/smudge_date.sh | |
- name: script | |
run: | | |
set -e # Instead of trying to chain everything together with && | |
# otherwise subsequent commands will swallow bad exit status. | |
if [ "$PLATFORM" = "macOS" ]; then | |
./scripts/build_macos.sh | |
else | |
./scripts/build_ios.sh | |
fi | |
set +e | |
# Notarization can only run if secrets were set (upstream repo) | |
- name: Notarize | |
env: | |
ALTOOL_PASSWORD: ${{ secrets.ALTOOL_PASSWORD }} | |
ALTOOL_PW_LABEL: ${{ secrets.ALTOOL_PW_LABEL }} | |
if: matrix.options.platform == 'macOS' && matrix.options.package == 'YES' && env.APPLE_ID | |
run: ./scripts/notarize.sh $BUILD_DIR/KTX-Software-*.pkg $APPLE_ID $DEVELOPMENT_TEAM $ALTOOL_PASSWORD | |
- name: Prepare KTX artifacts | |
if: matrix.options.package == 'YES' | |
id: ktx-version | |
run: | | |
KTX_VERSION=`cat $BUILD_DIR/ktx.version` | |
echo "PACKAGE_NAME_SUFFIX=${KTX_VERSION}-${{matrix.options.platform}}-${{matrix.arch}}" >> $GITHUB_ENV | |
# For these artifact uploads, need to take care that only one CLangCL | |
# "package" job for each architecture produces artifacts. A second | |
# job would attempt to upload a same-named artifact. | |
- name: Upload artifact Install Package | |
if: matrix.options.package == 'YES' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: KTX-Software-${{env.PACKAGE_NAME_SUFFIX}} | |
path: ${{env.BUILD_DIR}}/KTX-Software-*-* | |
compression-level: 0 # Installer already compressed. | |
- name: Upload artifact pyktx | |
if: matrix.options.package == 'YES' && matrix.options.py == 'ON' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: pyktx-${{env.PACKAGE_NAME_SUFFIX}} | |
path: ${{env.BUILD_DIR}}/${{env.PYTHON_DIST_DIR}} | |
- name: Upload to Release | |
uses: softprops/action-gh-release@v2 | |
if: matrix.options.package == 'YES' && github.event_name == 'push' && github.ref_type == 'tag' | |
with: | |
draft: true | |
prerelease: true | |
files: | | |
${{env.BUILD_DIR}}/KTX-Software-*-* | |
${{env.BUILD_DIR}}/${{env.PYTHON_DIST_DIR}}/pyktx-* | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |