-
Notifications
You must be signed in to change notification settings - Fork 0
executable file
·143 lines (125 loc) · 4.83 KB
/
cmake-multi-platform.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
name: CI Build
on:
push:
branches: [main, dev]
pull_request:
branches: [main]
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
include:
- os: windows-latest
c_compiler: cl
cpp_compiler: cl
- os: ubuntu-latest
c_compiler: gcc
cpp_compiler: g++
- os: macos-latest
c_compiler: clang
cpp_compiler: clang++
steps:
- name: Checkout code
uses: actions/checkout@v4
### Ubuntu Dependencies
- name: Install dependencies (Ubuntu)
if: matrix.os == 'ubuntu-latest'
run: |
sudo apt-get update
sudo apt-get install -y ninja-build \
qt6-base-dev qt6-tools-dev qt6-tools-dev-tools \
qt6-l10n-tools libgl1-mesa-dev libglu1-mesa-dev
echo "CMAKE_PREFIX_PATH=/usr/lib/x86_64-linux-gnu/cmake/Qt6" >> $GITHUB_ENV
### macOS Dependencies
- name: Install dependencies (macOS)
if: matrix.os == 'macos-latest'
run: |
brew install ninja qt
echo "CMAKE_PREFIX_PATH=$(brew --prefix qt)" >> $GITHUB_ENV
### Windows Setup
- name: Install dependencies (Windows)
if: matrix.os == 'windows-latest'
shell: powershell
run: |
choco install visualstudio2022buildtools -y
choco install ninja -y
choco install cmake --installargs 'ADD_CMAKE_TO_PATH=System' -y
choco install python3 -y
choco install gperf -y
choco install llvm -y
pip install html5lib
- name: Install bison manually if missing
if: matrix.os == 'windows-latest'
shell: powershell
run: |
$bisonPath = "C:\ProgramData\chocolatey\bin\bison.exe"
if (-not (Test-Path $bisonPath)) {
Write-Host "bison is not available via Chocolatey. Installing manually..."
$bisonUrl = "https://mirrors.kernel.org/gnu/bison/bison-3.8.2.zip" # Reliable mirror
$bisonDir = "C:\bison"
$bisonZip = "$bisonDir\bison.zip"
New-Item -ItemType Directory -Path $bisonDir -Force
# Retry logic for downloading the file
$maxRetries = 3
$retryCount = 0
$success = $false
while (-not $success -and $retryCount -lt $maxRetries) {
try {
$response = Invoke-WebRequest -Uri $bisonUrl -OutFile $bisonZip -UseBasicParsing
if ($response.Headers["Content-Type"] -notmatch "application/zip") {
throw "Downloaded file is not a ZIP archive"
}
$success = $true
} catch {
$retryCount++
Write-Host "Download failed. Retrying ($retryCount/$maxRetries)..."
Start-Sleep -Seconds 5
}
}
# Ensure the ZIP file exists and is valid
if (-not (Test-Path $bisonZip) -or (Get-Item $bisonZip).Length -lt 100000) {
Write-Host "Error: bison ZIP file is invalid or incomplete. Exiting."
exit 1
}
# Extract the ZIP archive using 7-Zip
$sevenZipPath = "C:\Program Files\7-Zip\7z.exe"
if (-not (Test-Path $sevenZipPath)) {
choco install 7zip -y
}
Start-Process -FilePath $sevenZipPath -ArgumentList "x `"$bisonZip`" -o`"$bisonDir`" -y" -NoNewWindow -Wait
# Ensure extraction succeeded
if (-not (Test-Path "$bisonDir\bin\bison.exe")) {
Write-Host "Error: bison could not be extracted. Exiting."
exit 1
}
$env:PATH += ";$bisonDir\bin"
[System.Environment]::SetEnvironmentVariable("PATH", $env:PATH, [System.EnvironmentVariableTarget]::Process)
} else {
Write-Host "bison found at $bisonPath"
}
- name: Validate and Add Missing Tools to PATH (Windows)
if: matrix.os == 'windows-latest'
shell: powershell
run: |
$gperfPath = "C:\ProgramData\chocolatey\bin\gperf.exe"
$clangPath = "C:\Program Files\LLVM\bin\clang.exe"
if (-not (Test-Path $gperfPath)) {
Write-Host "gperf is not available. Reinstalling..."
choco install gperf -y
} else {
Write-Host "gperf found at $gperfPath"
}
if (-not (Test-Path $clangPath)) {
Write-Host "clang is not available. Check LLVM installation."
exit 1
} else {
Write-Host "clang found at $clangPath"
}
# Add tools to PATH
$env:PATH += ";C:\ProgramData\chocolatey\bin;C:\Program Files\LLVM\bin"
[System.EnvironmentVariableTarget]::Process)
# Restore Qt Source Cache and Build Workflow Continues...
# <Unchanged from previous sections for Windows-specific Qt source and build steps>