Skip to content

Commit 5979a9c

Browse files
committed
chore: Update CMake configuration to support custom LLVM download directory and enhance GitHub Actions workflow with caching and compiler launcher settings for improved build performance.
1 parent 802a262 commit 5979a9c

3 files changed

Lines changed: 74 additions & 32 deletions

File tree

.github/workflows/wheels.yml

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,25 +11,51 @@ on:
1111

1212
jobs:
1313
build_wheels:
14-
name: Build ${{ matrix.os }} wheels
15-
runs-on: ${{ matrix.os }}
14+
name: Build ${{ matrix.name }}
15+
runs-on: ${{ matrix.runs_on }}
1616
env:
17+
CIBW_BUILD: "cp39-*"
1718
CMAKE_BUILD_PARALLEL_LEVEL: "4"
19+
CTIDY_LLVM_DOWNLOAD_DIR: ${{ github.workspace }}/.cache/llvm-downloads
20+
CIBW_ARCHS: ${{ matrix.cibw_archs }}
1821
strategy:
1922
fail-fast: false
2023
matrix:
21-
os:
22-
- ubuntu-latest
24+
include:
25+
- name: linux-x86_64
26+
runs_on: ubuntu-latest
27+
cibw_archs: x86_64
28+
use_ccache: true
2329
steps:
2430
- uses: actions/checkout@v4
2531
- uses: actions/setup-python@v5
2632
with:
2733
python-version: "3.12"
34+
- uses: actions/cache@v4
35+
with:
36+
path: .cache/llvm-downloads
37+
key: llvm-downloads-${{ matrix.name }}-${{ hashFiles('pyproject.toml') }}
38+
- if: matrix.use_ccache
39+
uses: actions/cache@v4
40+
with:
41+
path: .ccache
42+
key: ccache-${{ matrix.name }}-${{ hashFiles('CMakeLists.txt', 'pyproject.toml', 'src/ctidy/**') }}
43+
restore-keys: |
44+
ccache-${{ matrix.name }}-
45+
- if: matrix.use_ccache && startsWith(matrix.runs_on, 'ubuntu')
46+
run: sudo apt-get update && sudo apt-get install -y ccache
47+
- if: matrix.use_ccache && startsWith(matrix.runs_on, 'macos')
48+
run: brew install ccache
49+
- if: matrix.use_ccache
50+
run: |
51+
echo "CCACHE_DIR=$GITHUB_WORKSPACE/.ccache" >> "$GITHUB_ENV"
52+
echo "CMAKE_C_COMPILER_LAUNCHER=$(command -v ccache)" >> "$GITHUB_ENV"
53+
echo "CMAKE_CXX_COMPILER_LAUNCHER=$(command -v ccache)" >> "$GITHUB_ENV"
2854
- run: python -m pip install --upgrade cibuildwheel
2955
- run: python -m cibuildwheel --output-dir wheelhouse
3056
- uses: actions/upload-artifact@v4
3157
with:
32-
name: wheels-${{ matrix.os }}
58+
name: wheels-${{ matrix.name }}
3359
path: wheelhouse/*.whl
3460

3561
build_sdist:

CMakeLists.txt

Lines changed: 42 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ else()
1717
set(CTIDY_LLVM_BUILD_PARALLEL_LEVEL 4)
1818
endif()
1919

20+
if(DEFINED ENV{CTIDY_LLVM_DOWNLOAD_DIR} AND NOT "$ENV{CTIDY_LLVM_DOWNLOAD_DIR}" STREQUAL "")
21+
set(CTIDY_LLVM_DOWNLOAD_DIR "$ENV{CTIDY_LLVM_DOWNLOAD_DIR}")
22+
else()
23+
set(CTIDY_LLVM_DOWNLOAD_DIR "${CMAKE_BINARY_DIR}/downloads")
24+
endif()
25+
2026
set(CTIDY_INSTALL_ROOT "${SKBUILD_PLATLIB_DIR}/ctidy/data")
2127
set(CTIDY_INSTALL_BIN_DIR "${CTIDY_INSTALL_ROOT}/bin")
2228
set(CTIDY_INSTALL_RESOURCE_DIR
@@ -37,33 +43,33 @@ set(CTIDY_CLANG_APPLY_REPLACEMENTS
3743
)
3844

3945
set(CTIDY_EXTERNAL_CMAKE_ARGS
40-
-DCMAKE_BUILD_TYPE=Release
41-
-DBUILD_SHARED_LIBS=OFF
42-
-DCLANG_ENABLE_ARCMT=OFF
43-
-DCLANG_ENABLE_CLANGD=OFF
44-
-DCLANG_ENABLE_STATIC_ANALYZER=ON
45-
-DCLANG_INSTALL_SCANBUILD=OFF
46-
-DCLANG_INSTALL_SCANVIEW=OFF
47-
-DLLVM_BUILD_BENCHMARKS=OFF
48-
-DLLVM_BUILD_DOCS=OFF
49-
-DLLVM_BUILD_EXAMPLES=OFF
50-
-DLLVM_BUILD_RUNTIME=OFF
51-
-DLLVM_BUILD_RUNTIMES=OFF
52-
-DLLVM_BUILD_TELEMETRY=OFF
53-
-DLLVM_BUILD_TESTS=OFF
54-
-DLLVM_ENABLE_BINDINGS=OFF
55-
-DLLVM_ENABLE_LIBXML2=OFF
56-
-DLLVM_ENABLE_PROJECTS:STRING=clang,clang-tools-extra
57-
-DLLVM_ENABLE_OCAMLDOC=OFF
58-
-DLLVM_ENABLE_ZLIB=OFF
59-
-DLLVM_ENABLE_ZSTD=OFF
60-
-DLLVM_INCLUDE_BENCHMARKS=OFF
61-
-DLLVM_INCLUDE_DOCS=OFF
62-
-DLLVM_INCLUDE_EXAMPLES=OFF
63-
-DLLVM_INCLUDE_RUNTIMES=OFF
64-
-DLLVM_INCLUDE_TESTS=OFF
65-
-DLLVM_INCLUDE_UTILS=ON
66-
-DLLVM_TARGETS_TO_BUILD=Native
46+
-DCMAKE_BUILD_TYPE=Release
47+
-DBUILD_SHARED_LIBS=OFF
48+
-DCLANG_ENABLE_ARCMT=OFF
49+
-DCLANG_ENABLE_CLANGD=OFF
50+
-DCLANG_ENABLE_STATIC_ANALYZER=ON
51+
-DCLANG_INSTALL_SCANBUILD=OFF
52+
-DCLANG_INSTALL_SCANVIEW=OFF
53+
-DLLVM_BUILD_BENCHMARKS=OFF
54+
-DLLVM_BUILD_DOCS=OFF
55+
-DLLVM_BUILD_EXAMPLES=OFF
56+
-DLLVM_BUILD_RUNTIME=OFF
57+
-DLLVM_BUILD_RUNTIMES=OFF
58+
-DLLVM_BUILD_TELEMETRY=OFF
59+
-DLLVM_BUILD_TESTS=OFF
60+
-DLLVM_ENABLE_BINDINGS=OFF
61+
-DLLVM_ENABLE_LIBXML2=OFF
62+
-DLLVM_ENABLE_OCAMLDOC=OFF
63+
-DLLVM_ENABLE_PROJECTS:STRING=clang,clang-tools-extra
64+
-DLLVM_ENABLE_ZLIB=OFF
65+
-DLLVM_ENABLE_ZSTD=OFF
66+
-DLLVM_INCLUDE_BENCHMARKS=OFF
67+
-DLLVM_INCLUDE_DOCS=OFF
68+
-DLLVM_INCLUDE_EXAMPLES=OFF
69+
-DLLVM_INCLUDE_RUNTIMES=OFF
70+
-DLLVM_INCLUDE_TESTS=OFF
71+
-DLLVM_INCLUDE_UTILS=ON
72+
-DLLVM_TARGETS_TO_BUILD=Native
6773
)
6874

6975
if(CMAKE_C_COMPILER)
@@ -78,6 +84,14 @@ if(CMAKE_ASM_COMPILER)
7884
list(APPEND CTIDY_EXTERNAL_CMAKE_ARGS -DCMAKE_ASM_COMPILER:FILEPATH=${CMAKE_ASM_COMPILER})
7985
endif()
8086

87+
if(DEFINED ENV{CMAKE_C_COMPILER_LAUNCHER} AND NOT "$ENV{CMAKE_C_COMPILER_LAUNCHER}" STREQUAL "")
88+
list(APPEND CTIDY_EXTERNAL_CMAKE_ARGS -DCMAKE_C_COMPILER_LAUNCHER:FILEPATH=$ENV{CMAKE_C_COMPILER_LAUNCHER})
89+
endif()
90+
91+
if(DEFINED ENV{CMAKE_CXX_COMPILER_LAUNCHER} AND NOT "$ENV{CMAKE_CXX_COMPILER_LAUNCHER}" STREQUAL "")
92+
list(APPEND CTIDY_EXTERNAL_CMAKE_ARGS -DCMAKE_CXX_COMPILER_LAUNCHER:FILEPATH=$ENV{CMAKE_CXX_COMPILER_LAUNCHER})
93+
endif()
94+
8195
if(WIN32)
8296
list(APPEND CTIDY_EXTERNAL_CMAKE_ARGS -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded)
8397
endif()
@@ -86,6 +100,7 @@ ExternalProject_Add(
86100
ctidy_llvm
87101
URL "${CTIDY_LLVM_URL}"
88102
DOWNLOAD_EXTRACT_TIMESTAMP TRUE
103+
DOWNLOAD_DIR "${CTIDY_LLVM_DOWNLOAD_DIR}"
89104
SOURCE_DIR "${CTIDY_LLVM_SOURCE_DIR}"
90105
SOURCE_SUBDIR llvm
91106
BINARY_DIR "${CTIDY_LLVM_BINARY_DIR}"

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ scripts = { ctidy = "ctidy.cli:main" }
3737
build-dir = "build/{wheel_tag}"
3838
cmake.source-dir = "."
3939
cmake.version = ">=3.20"
40+
wheel.py-api = "py3"
4041
wheel.packages = ["src/ctidy"]
4142
sdist.include = [
4243
".github/workflows/*.yml",

0 commit comments

Comments
 (0)