Skip to content

Commit fd24e96

Browse files
committed
Add CI workflow
1 parent 1a513d6 commit fd24e96

2 files changed

Lines changed: 156 additions & 0 deletions

File tree

.github/workflows/ci.yml

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
- master
8+
pull_request:
9+
10+
jobs:
11+
windows-msvc:
12+
name: Windows MSVC (${{ matrix.harfbuzz }}, ${{ matrix.freetype }})
13+
runs-on: windows-latest
14+
strategy:
15+
fail-fast: false
16+
matrix:
17+
harfbuzz: [ON, OFF]
18+
freetype: [ON, OFF]
19+
steps:
20+
- uses: actions/checkout@v4
21+
- uses: ilammy/msvc-dev-cmd@v1
22+
- name: Configure
23+
shell: pwsh
24+
run: >
25+
cmake -S . -B build -G Ninja
26+
-DCMAKE_C_COMPILER=cl
27+
-DCMAKE_CXX_COMPILER=cl
28+
-DVEFC_BUILD_DEMO=OFF
29+
-DVEFC_BUILD_TESTS=ON
30+
-DVEFC_ENABLE_HARFBUZZ=${{ matrix.harfbuzz }}
31+
-DVEFC_ENABLE_FREETYPE=${{ matrix.freetype }}
32+
- name: Build
33+
shell: pwsh
34+
run: cmake --build build
35+
- name: Test
36+
shell: pwsh
37+
run: ctest --test-dir build --output-on-failure
38+
39+
windows-clangcl:
40+
name: Windows clang-cl (${{ matrix.harfbuzz }}, ${{ matrix.freetype }})
41+
runs-on: windows-latest
42+
strategy:
43+
fail-fast: false
44+
matrix:
45+
harfbuzz: [ON, OFF]
46+
freetype: [ON, OFF]
47+
steps:
48+
- uses: actions/checkout@v4
49+
- uses: ilammy/msvc-dev-cmd@v1
50+
- name: Ensure toolchain
51+
shell: pwsh
52+
run: |
53+
if (-not (Get-Command clang-cl -ErrorAction SilentlyContinue)) {
54+
winget install --id LLVM.LLVM --silent --accept-package-agreements --accept-source-agreements
55+
Add-Content -Path $env:GITHUB_PATH -Value "${env:ProgramFiles}\LLVM\bin"
56+
}
57+
if (-not (Get-Command ninja -ErrorAction SilentlyContinue)) {
58+
winget install --id Ninja-build.Ninja --silent --accept-package-agreements --accept-source-agreements
59+
Add-Content -Path $env:GITHUB_PATH -Value "${env:ProgramFiles}\Ninja"
60+
}
61+
- name: Configure
62+
shell: pwsh
63+
run: >
64+
cmake -S . -B build -G Ninja
65+
-DCMAKE_C_COMPILER=clang-cl
66+
-DCMAKE_CXX_COMPILER=clang-cl
67+
-DVEFC_BUILD_DEMO=OFF
68+
-DVEFC_BUILD_TESTS=ON
69+
-DVEFC_ENABLE_HARFBUZZ=${{ matrix.harfbuzz }}
70+
-DVEFC_ENABLE_FREETYPE=${{ matrix.freetype }}
71+
- name: Build
72+
shell: pwsh
73+
run: cmake --build build
74+
- name: Test
75+
shell: pwsh
76+
run: ctest --test-dir build --output-on-failure
77+
78+
ubuntu-clang:
79+
name: Ubuntu clang (${{ matrix.harfbuzz }}, ${{ matrix.freetype }})
80+
runs-on: ubuntu-latest
81+
strategy:
82+
fail-fast: false
83+
matrix:
84+
harfbuzz: [ON, OFF]
85+
freetype: [ON, OFF]
86+
steps:
87+
- uses: actions/checkout@v4
88+
- name: Ensure Ninja
89+
run: |
90+
command -v ninja >/dev/null 2>&1 || sudo apt-get update
91+
command -v ninja >/dev/null 2>&1 || sudo apt-get install -y ninja-build
92+
- name: Configure
93+
run: >
94+
cmake -S . -B build -G Ninja
95+
-DCMAKE_C_COMPILER=clang
96+
-DCMAKE_CXX_COMPILER=clang++
97+
-DVEFC_BUILD_DEMO=OFF
98+
-DVEFC_BUILD_TESTS=ON
99+
-DVEFC_ENABLE_HARFBUZZ=${{ matrix.harfbuzz }}
100+
-DVEFC_ENABLE_FREETYPE=${{ matrix.freetype }}
101+
- name: Build
102+
run: cmake --build build
103+
- name: Test
104+
run: ctest --test-dir build --output-on-failure
105+
106+
macos-clang:
107+
name: macOS clang (${{ matrix.harfbuzz }}, ${{ matrix.freetype }})
108+
runs-on: macos-latest
109+
strategy:
110+
fail-fast: false
111+
matrix:
112+
harfbuzz: [ON, OFF]
113+
freetype: [ON, OFF]
114+
steps:
115+
- uses: actions/checkout@v4
116+
- name: Ensure Ninja
117+
run: |
118+
command -v ninja >/dev/null 2>&1 || brew install ninja
119+
- name: Configure
120+
run: >
121+
cmake -S . -B build -G Ninja
122+
-DCMAKE_C_COMPILER=clang
123+
-DCMAKE_CXX_COMPILER=clang++
124+
-DVEFC_BUILD_DEMO=OFF
125+
-DVEFC_BUILD_TESTS=ON
126+
-DVEFC_ENABLE_HARFBUZZ=${{ matrix.harfbuzz }}
127+
-DVEFC_ENABLE_FREETYPE=${{ matrix.freetype }}
128+
- name: Build
129+
run: cmake --build build
130+
- name: Test
131+
run: ctest --test-dir build --output-on-failure

README.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,31 @@ Except HarfBuzz, that's all the required dependencies. That said it's strongly r
8585
to use HarfBuzz ( TODO: HarfBuzz not supported yet, coming soon!! ) over the default utf8.h latin
8686
fallback text shaper.
8787
88+
## CMake build and tests
89+
90+
The repository now builds from the root `CMakeLists.txt`.
91+
92+
Key options:
93+
```
94+
VEFC_BUILD_DEMO=ON|OFF
95+
VEFC_BUILD_TESTS=ON|OFF
96+
VEFC_ENABLE_HARFBUZZ=ON|OFF
97+
VEFC_ENABLE_FREETYPE=ON|OFF
98+
```
99+
100+
Windows `clang-cl` + Ninja example:
101+
```bat
102+
:: Run from a VS Developer Command Prompt or after VsDevCmd.bat
103+
cmake -S . -B build -G Ninja ^
104+
-DCMAKE_C_COMPILER=clang-cl ^
105+
-DCMAKE_CXX_COMPILER=clang-cl ^
106+
-DVEFC_BUILD_TESTS=ON
107+
cmake --build build
108+
ctest --test-dir build --output-on-failure
109+
```
110+
111+
The test executables run with `demo/` as their working directory so the bundled fonts resolve without extra setup.
112+
88113
## Integration with rendering backend
89114

90115
VEFontCache is largely backend agnostic. Currently the demo project uses OpenGL 3.3 for Windows.

0 commit comments

Comments
 (0)