mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-09-06 19:38:14 +00:00
ci: enable ccache
This commit is contained in:
44
.github/workflows/create-test-plan.py
vendored
44
.github/workflows/create-test-plan.py
vendored
@@ -166,6 +166,7 @@ class JobDetails:
|
|||||||
platform: str
|
platform: str
|
||||||
artifact: str
|
artifact: str
|
||||||
no_cmake: bool
|
no_cmake: bool
|
||||||
|
ccache: bool = False
|
||||||
build_tests: bool = True
|
build_tests: bool = True
|
||||||
container: str = ""
|
container: str = ""
|
||||||
cmake_build_type: str = "RelWithDebInfo"
|
cmake_build_type: str = "RelWithDebInfo"
|
||||||
@@ -231,6 +232,7 @@ class JobDetails:
|
|||||||
"name": self.name,
|
"name": self.name,
|
||||||
"key": self.key,
|
"key": self.key,
|
||||||
"os": self.os,
|
"os": self.os,
|
||||||
|
"ccache": self.ccache,
|
||||||
"container": self.container if self.container else "",
|
"container": self.container if self.container else "",
|
||||||
"platform": self.platform,
|
"platform": self.platform,
|
||||||
"artifact": self.artifact,
|
"artifact": self.artifact,
|
||||||
@@ -421,6 +423,7 @@ def spec_to_job(spec: JobSpec, key: str, trackmem_symbol_names: bool) -> JobDeta
|
|||||||
if spec.name.startswith("Ubuntu"):
|
if spec.name.startswith("Ubuntu"):
|
||||||
assert spec.os.value.startswith("ubuntu-")
|
assert spec.os.value.startswith("ubuntu-")
|
||||||
job.apt_packages.extend((
|
job.apt_packages.extend((
|
||||||
|
"ccache",
|
||||||
"gnome-desktop-testing",
|
"gnome-desktop-testing",
|
||||||
"libasound2-dev",
|
"libasound2-dev",
|
||||||
"libpulse-dev",
|
"libpulse-dev",
|
||||||
@@ -454,6 +457,7 @@ def spec_to_job(spec: JobSpec, key: str, trackmem_symbol_names: bool) -> JobDeta
|
|||||||
job.apt_packages.extend((
|
job.apt_packages.extend((
|
||||||
"libunwind-dev", # For SDL_test memory tracking
|
"libunwind-dev", # For SDL_test memory tracking
|
||||||
))
|
))
|
||||||
|
job.ccache = True
|
||||||
if trackmem_symbol_names:
|
if trackmem_symbol_names:
|
||||||
# older libunwind is slow
|
# older libunwind is slow
|
||||||
job.cmake_arguments.append("-DSDLTEST_TIMEOUT_MULTIPLIER=2")
|
job.cmake_arguments.append("-DSDLTEST_TIMEOUT_MULTIPLIER=2")
|
||||||
@@ -462,8 +466,10 @@ def spec_to_job(spec: JobSpec, key: str, trackmem_symbol_names: bool) -> JobDeta
|
|||||||
fpic = True
|
fpic = True
|
||||||
case SdlPlatform.Ios | SdlPlatform.Tvos:
|
case SdlPlatform.Ios | SdlPlatform.Tvos:
|
||||||
job.brew_packages.extend([
|
job.brew_packages.extend([
|
||||||
|
"ccache",
|
||||||
"ninja",
|
"ninja",
|
||||||
])
|
])
|
||||||
|
job.ccache = True
|
||||||
job.clang_tidy = False
|
job.clang_tidy = False
|
||||||
job.run_tests = False
|
job.run_tests = False
|
||||||
job.test_pkg_config = False
|
job.test_pkg_config = False
|
||||||
@@ -506,8 +512,12 @@ def spec_to_job(spec: JobSpec, key: str, trackmem_symbol_names: bool) -> JobDeta
|
|||||||
))
|
))
|
||||||
job.shared_lib = SharedLibType.DYLIB
|
job.shared_lib = SharedLibType.DYLIB
|
||||||
job.static_lib = StaticLibType.A
|
job.static_lib = StaticLibType.A
|
||||||
|
job.ccache = True
|
||||||
job.apt_packages = []
|
job.apt_packages = []
|
||||||
job.brew_packages.append("ninja")
|
job.brew_packages.extend((
|
||||||
|
"ccache",
|
||||||
|
"ninja",
|
||||||
|
))
|
||||||
if job.clang_tidy:
|
if job.clang_tidy:
|
||||||
job.brew_packages.append("llvm")
|
job.brew_packages.append("llvm")
|
||||||
if spec.xcode:
|
if spec.xcode:
|
||||||
@@ -515,6 +525,7 @@ def spec_to_job(spec: JobSpec, key: str, trackmem_symbol_names: bool) -> JobDeta
|
|||||||
case SdlPlatform.Android:
|
case SdlPlatform.Android:
|
||||||
job.android_gradle = spec.android_gradle
|
job.android_gradle = spec.android_gradle
|
||||||
job.android_mk = spec.android_mk
|
job.android_mk = spec.android_mk
|
||||||
|
job.apt_packages.append("ccache")
|
||||||
job.run_tests = False
|
job.run_tests = False
|
||||||
job.shared_lib = SharedLibType.SO
|
job.shared_lib = SharedLibType.SO
|
||||||
job.static_lib = StaticLibType.A
|
job.static_lib = StaticLibType.A
|
||||||
@@ -525,6 +536,7 @@ def spec_to_job(spec: JobSpec, key: str, trackmem_symbol_names: bool) -> JobDeta
|
|||||||
if spec.android_mk or spec.android_gradle:
|
if spec.android_mk or spec.android_gradle:
|
||||||
job.apt_packages = []
|
job.apt_packages = []
|
||||||
if not spec.no_cmake:
|
if not spec.no_cmake:
|
||||||
|
job.ccache = True
|
||||||
job.cmake_arguments.extend((
|
job.cmake_arguments.extend((
|
||||||
f"-DANDROID_PLATFORM={spec.android_platform}",
|
f"-DANDROID_PLATFORM={spec.android_platform}",
|
||||||
f"-DANDROID_ABI={spec.android_abi}",
|
f"-DANDROID_ABI={spec.android_abi}",
|
||||||
@@ -542,6 +554,8 @@ def spec_to_job(spec: JobSpec, key: str, trackmem_symbol_names: bool) -> JobDeta
|
|||||||
case SdlPlatform.Emscripten:
|
case SdlPlatform.Emscripten:
|
||||||
job.clang_tidy = False # clang-tidy does not understand -gsource-map
|
job.clang_tidy = False # clang-tidy does not understand -gsource-map
|
||||||
job.shared = False
|
job.shared = False
|
||||||
|
job.ccache = True
|
||||||
|
job.apt_packages.append("ccache")
|
||||||
job.cmake_config_emulator = "emcmake"
|
job.cmake_config_emulator = "emcmake"
|
||||||
job.cmake_build_type = "Debug"
|
job.cmake_build_type = "Debug"
|
||||||
job.test_pkg_config = False
|
job.test_pkg_config = False
|
||||||
@@ -567,11 +581,12 @@ def spec_to_job(spec: JobSpec, key: str, trackmem_symbol_names: bool) -> JobDeta
|
|||||||
job.setup_python = True
|
job.setup_python = True
|
||||||
job.pypi_packages.append("selenium")
|
job.pypi_packages.append("selenium")
|
||||||
case SdlPlatform.Ps2:
|
case SdlPlatform.Ps2:
|
||||||
|
job.ccache = False # actions/ccache does not work in psp container (incompatible tar of busybox)
|
||||||
build_parallel = False
|
build_parallel = False
|
||||||
job.shared = False
|
job.shared = False
|
||||||
job.sudo = ""
|
job.sudo = ""
|
||||||
job.apt_packages = []
|
job.apt_packages = []
|
||||||
job.apk_packages = ["cmake", "gmp", "mpc1", "mpfr4", "ninja", "pkgconf", "git", ]
|
job.apk_packages = ["ccache", "cmake", "gmp", "mpc1", "mpfr4", "ninja", "pkgconf", "git", ]
|
||||||
job.cmake_toolchain_file = "${PS2DEV}/ps2sdk/ps2dev.cmake"
|
job.cmake_toolchain_file = "${PS2DEV}/ps2sdk/ps2dev.cmake"
|
||||||
job.clang_tidy = False
|
job.clang_tidy = False
|
||||||
job.run_tests = False
|
job.run_tests = False
|
||||||
@@ -580,10 +595,11 @@ def spec_to_job(spec: JobSpec, key: str, trackmem_symbol_names: bool) -> JobDeta
|
|||||||
job.ldflags = ["-L${PS2DEV}/ps2sdk/ee/lib", "-L${PS2DEV}/gsKit/lib", "-L${PS2DEV}/ps2sdk/ports/lib", ]
|
job.ldflags = ["-L${PS2DEV}/ps2sdk/ee/lib", "-L${PS2DEV}/gsKit/lib", "-L${PS2DEV}/ps2sdk/ports/lib", ]
|
||||||
job.static_lib = StaticLibType.A
|
job.static_lib = StaticLibType.A
|
||||||
case SdlPlatform.Psp:
|
case SdlPlatform.Psp:
|
||||||
|
job.ccache = False # actions/ccache does not work in psp container (incompatible tar of busybox)
|
||||||
build_parallel = False
|
build_parallel = False
|
||||||
job.sudo = ""
|
job.sudo = ""
|
||||||
job.apt_packages = []
|
job.apt_packages = []
|
||||||
job.apk_packages = ["cmake", "gmp", "mpc1", "mpfr4", "ninja", "pkgconf", ]
|
job.apk_packages = ["ccache", "cmake", "gmp", "mpc1", "mpfr4", "ninja", "pkgconf", ]
|
||||||
job.cmake_toolchain_file = "${PSPDEV}/psp/share/pspdev.cmake"
|
job.cmake_toolchain_file = "${PSPDEV}/psp/share/pspdev.cmake"
|
||||||
job.clang_tidy = False
|
job.clang_tidy = False
|
||||||
job.run_tests = False
|
job.run_tests = False
|
||||||
@@ -593,9 +609,10 @@ def spec_to_job(spec: JobSpec, key: str, trackmem_symbol_names: bool) -> JobDeta
|
|||||||
job.pollute_directories = ["${PSPDEV}/include", "${PSPDEV}/psp/include", "${PSPDEV}/psp/sdk/include", ]
|
job.pollute_directories = ["${PSPDEV}/include", "${PSPDEV}/psp/include", "${PSPDEV}/psp/sdk/include", ]
|
||||||
job.static_lib = StaticLibType.A
|
job.static_lib = StaticLibType.A
|
||||||
case SdlPlatform.Vita:
|
case SdlPlatform.Vita:
|
||||||
|
job.ccache = True
|
||||||
job.sudo = ""
|
job.sudo = ""
|
||||||
job.apt_packages = []
|
job.apt_packages = []
|
||||||
job.apk_packages = ["cmake", "ninja", "pkgconf", "bash", "tar"]
|
job.apk_packages = ["ccache", "cmake", "ninja", "pkgconf", "bash", "tar"]
|
||||||
job.cmake_toolchain_file = "${VITASDK}/share/vita.toolchain.cmake"
|
job.cmake_toolchain_file = "${VITASDK}/share/vita.toolchain.cmake"
|
||||||
assert spec.vita_gles is not None
|
assert spec.vita_gles is not None
|
||||||
job.setup_vita_gles_type = {
|
job.setup_vita_gles_type = {
|
||||||
@@ -616,8 +633,10 @@ def spec_to_job(spec: JobSpec, key: str, trackmem_symbol_names: bool) -> JobDeta
|
|||||||
job.cc = "arm-vita-eabi-gcc"
|
job.cc = "arm-vita-eabi-gcc"
|
||||||
job.static_lib = StaticLibType.A
|
job.static_lib = StaticLibType.A
|
||||||
case SdlPlatform.Haiku:
|
case SdlPlatform.Haiku:
|
||||||
|
job.ccache = True
|
||||||
fpic = False
|
fpic = False
|
||||||
job.run_tests = False
|
job.run_tests = False
|
||||||
|
job.apt_packages.append("ccache")
|
||||||
job.cc = "x86_64-unknown-haiku-gcc"
|
job.cc = "x86_64-unknown-haiku-gcc"
|
||||||
job.cxx = "x86_64-unknown-haiku-g++"
|
job.cxx = "x86_64-unknown-haiku-g++"
|
||||||
job.sudo = ""
|
job.sudo = ""
|
||||||
@@ -629,20 +648,23 @@ def spec_to_job(spec: JobSpec, key: str, trackmem_symbol_names: bool) -> JobDeta
|
|||||||
job.shared_lib = SharedLibType.SO_0
|
job.shared_lib = SharedLibType.SO_0
|
||||||
job.static_lib = StaticLibType.A
|
job.static_lib = StaticLibType.A
|
||||||
case SdlPlatform.PowerPC64 | SdlPlatform.PowerPC:
|
case SdlPlatform.PowerPC64 | SdlPlatform.PowerPC:
|
||||||
|
job.ccache = True
|
||||||
# FIXME: Enable SDL_WERROR
|
# FIXME: Enable SDL_WERROR
|
||||||
job.werror = False
|
job.werror = False
|
||||||
job.clang_tidy = False
|
job.clang_tidy = False
|
||||||
job.run_tests = False
|
job.run_tests = False
|
||||||
job.sudo = ""
|
job.sudo = ""
|
||||||
job.apt_packages = []
|
job.apt_packages = ["ccache"]
|
||||||
job.shared_lib = SharedLibType.SO_0
|
job.shared_lib = SharedLibType.SO_0
|
||||||
job.static_lib = StaticLibType.A
|
job.static_lib = StaticLibType.A
|
||||||
job.cmake_arguments.extend((
|
job.cmake_arguments.extend((
|
||||||
"-DSDL_UNIX_CONSOLE_BUILD=ON",
|
"-DSDL_UNIX_CONSOLE_BUILD=ON",
|
||||||
))
|
))
|
||||||
case SdlPlatform.LoongArch64:
|
case SdlPlatform.LoongArch64:
|
||||||
|
job.ccache = True
|
||||||
fpic = True
|
fpic = True
|
||||||
job.run_tests = False
|
job.run_tests = False
|
||||||
|
job.apt_packages.append("ccache")
|
||||||
job.cc = "${LOONGARCH64_CC}"
|
job.cc = "${LOONGARCH64_CC}"
|
||||||
job.cxx = "${LOONGARCH64_CXX}"
|
job.cxx = "${LOONGARCH64_CXX}"
|
||||||
job.cmake_arguments.extend((
|
job.cmake_arguments.extend((
|
||||||
@@ -654,14 +676,16 @@ def spec_to_job(spec: JobSpec, key: str, trackmem_symbol_names: bool) -> JobDeta
|
|||||||
job.shared_lib = SharedLibType.SO_0
|
job.shared_lib = SharedLibType.SO_0
|
||||||
job.static_lib = StaticLibType.A
|
job.static_lib = StaticLibType.A
|
||||||
case SdlPlatform.N3ds:
|
case SdlPlatform.N3ds:
|
||||||
|
job.ccache = True
|
||||||
job.shared = False
|
job.shared = False
|
||||||
job.apt_packages = ["ninja-build", "binutils"]
|
job.apt_packages = ["ccache", "ninja-build", "binutils"]
|
||||||
job.clang_tidy = False
|
job.clang_tidy = False
|
||||||
job.run_tests = False
|
job.run_tests = False
|
||||||
job.cc_from_cmake = True
|
job.cc_from_cmake = True
|
||||||
job.cmake_toolchain_file = "${DEVKITPRO}/cmake/3DS.cmake"
|
job.cmake_toolchain_file = "${DEVKITPRO}/cmake/3DS.cmake"
|
||||||
job.static_lib = StaticLibType.A
|
job.static_lib = StaticLibType.A
|
||||||
case SdlPlatform.Msys2:
|
case SdlPlatform.Msys2:
|
||||||
|
job.ccache = True
|
||||||
job.shell = "msys2 {0}"
|
job.shell = "msys2 {0}"
|
||||||
assert spec.msys2_platform
|
assert spec.msys2_platform
|
||||||
job.msys2_msystem = spec.msys2_platform.value
|
job.msys2_msystem = spec.msys2_platform.value
|
||||||
@@ -676,9 +700,10 @@ def spec_to_job(spec: JobSpec, key: str, trackmem_symbol_names: bool) -> JobDeta
|
|||||||
job.shared_lib = SharedLibType.WIN32
|
job.shared_lib = SharedLibType.WIN32
|
||||||
job.static_lib = StaticLibType.A
|
job.static_lib = StaticLibType.A
|
||||||
case SdlPlatform.Riscos:
|
case SdlPlatform.Riscos:
|
||||||
|
job.ccache = False # FIXME: enable when container gets upgrade
|
||||||
# FIXME: Enable SDL_WERROR
|
# FIXME: Enable SDL_WERROR
|
||||||
job.werror = False
|
job.werror = False
|
||||||
job.apt_packages = ["cmake", "ninja-build"]
|
job.apt_packages = ["ccache", "cmake", "ninja-build"]
|
||||||
job.test_pkg_config = False
|
job.test_pkg_config = False
|
||||||
job.shared = False
|
job.shared = False
|
||||||
job.run_tests = False
|
job.run_tests = False
|
||||||
@@ -721,6 +746,11 @@ def spec_to_job(spec: JobSpec, key: str, trackmem_symbol_names: bool) -> JobDeta
|
|||||||
job.check_sources = True
|
job.check_sources = True
|
||||||
job.setup_python = True
|
job.setup_python = True
|
||||||
|
|
||||||
|
if job.ccache:
|
||||||
|
job.cmake_arguments.extend((
|
||||||
|
"-DCMAKE_C_COMPILER_LAUNCHER=ccache",
|
||||||
|
"-DCMAKE_CXX_COMPILER_LAUNCHER=ccache",
|
||||||
|
))
|
||||||
if not build_parallel:
|
if not build_parallel:
|
||||||
job.cmake_build_arguments.append("-j1")
|
job.cmake_build_arguments.append("-j1")
|
||||||
if job.cflags:
|
if job.cflags:
|
||||||
|
42
.github/workflows/generic.yml
vendored
42
.github/workflows/generic.yml
vendored
@@ -34,6 +34,7 @@ jobs:
|
|||||||
${{ (!matrix.platform.msys2-no-perl && format('{0}-perl', matrix.platform.msys2-env)) || '' }}
|
${{ (!matrix.platform.msys2-no-perl && format('{0}-perl', matrix.platform.msys2-env)) || '' }}
|
||||||
${{ matrix.platform.msys2-env }}-pkg-config
|
${{ matrix.platform.msys2-env }}-pkg-config
|
||||||
${{ matrix.platform.msys2-env }}-clang-tools-extra
|
${{ matrix.platform.msys2-env }}-clang-tools-extra
|
||||||
|
${{ (matrix.platform.ccache && format('{0}-ccache', matrix.platform.msys2-env)) || '' }}
|
||||||
- name: 'About this job'
|
- name: 'About this job'
|
||||||
run: |
|
run: |
|
||||||
echo "key=${{ matrix.platform.key }}"
|
echo "key=${{ matrix.platform.key }}"
|
||||||
@@ -165,6 +166,36 @@ jobs:
|
|||||||
done
|
done
|
||||||
done
|
done
|
||||||
|
|
||||||
|
- name: 'Calculate ccache key'
|
||||||
|
if: ${{ matrix.platform.ccache }}
|
||||||
|
id: prepare-restore-ccache
|
||||||
|
run: |
|
||||||
|
echo "timestamp=$(date -u "+%Y%m%d%H%M_%S")" >> "$GITHUB_OUTPUT"
|
||||||
|
- name: 'Restore ccache'
|
||||||
|
if: ${{ matrix.platform.ccache }}
|
||||||
|
uses: actions/cache/restore@v4
|
||||||
|
id: restore-ccache
|
||||||
|
with:
|
||||||
|
path: ${{ runner.temp }}/ccache
|
||||||
|
key: ccache-${{ matrix.platform.key }}-${{ steps.prepare-restore-ccache.outputs.timestamp }}
|
||||||
|
restore-keys: |
|
||||||
|
ccache-${{matrix.platform.key}}
|
||||||
|
- name: 'Configure ccache'
|
||||||
|
if: ${{ matrix.platform.ccache }}
|
||||||
|
run: |
|
||||||
|
echo 'CCACHE_DIR=${{ runner.temp }}/ccache' >>${GITHUB_ENV}
|
||||||
|
- name: 'Prepare ccache'
|
||||||
|
if: ${{ matrix.platform.ccache && steps.restore-ccache.outputs.cache-hit }}
|
||||||
|
run: |
|
||||||
|
if [ "x${{ runner.os }}" = "xmacOS" ]; then
|
||||||
|
touch_date="2025-02-01T12:00:00Z"
|
||||||
|
else
|
||||||
|
touch_date="2025-02-01"
|
||||||
|
fi
|
||||||
|
find "${CCACHE_DIR}" -type f -exec touch -a -m -d "$touch_date" {} +
|
||||||
|
ccache -s
|
||||||
|
ccache -z
|
||||||
|
|
||||||
- name: 'Configure (CMake)'
|
- name: 'Configure (CMake)'
|
||||||
if: ${{ !matrix.platform.no-cmake }}
|
if: ${{ !matrix.platform.no-cmake }}
|
||||||
#shell: ${{ matrix.platform.shell }}
|
#shell: ${{ matrix.platform.shell }}
|
||||||
@@ -357,6 +388,17 @@ jobs:
|
|||||||
if: ${{ matrix.platform.xcode-sdk != '' }}
|
if: ${{ matrix.platform.xcode-sdk != '' }}
|
||||||
run: |
|
run: |
|
||||||
xcodebuild -project Xcode/SDL/SDL.xcodeproj -target SDL3 -configuration Release -sdk ${{ matrix.platform.xcode-sdk }} clean build
|
xcodebuild -project Xcode/SDL/SDL.xcodeproj -target SDL3 -configuration Release -sdk ${{ matrix.platform.xcode-sdk }} clean build
|
||||||
|
- name: 'Prune old ccache files'
|
||||||
|
if: ${{ matrix.platform.ccache }}
|
||||||
|
run: |
|
||||||
|
ccache --evict-older-than=1d
|
||||||
|
ccache -s
|
||||||
|
- name: 'Save ccache'
|
||||||
|
if: ${{ matrix.platform.ccache }}
|
||||||
|
uses: actions/cache/save@v4
|
||||||
|
with:
|
||||||
|
path: ${{ runner.temp }}/ccache
|
||||||
|
key: ${{ steps.restore-ccache.outputs.cache-primary-key }}
|
||||||
- name: 'Check Sources'
|
- name: 'Check Sources'
|
||||||
if: ${{ matrix.platform.check-sources }}
|
if: ${{ matrix.platform.check-sources }}
|
||||||
run: |
|
run: |
|
||||||
|
Reference in New Issue
Block a user