Skip to content

Commit 3ad560b

Browse files
add cbake cross-compilation, use ubuntu 22.04
1 parent 6071d28 commit 3ad560b

File tree

1 file changed

+48
-7
lines changed

1 file changed

+48
-7
lines changed

.github/workflows/nuget.yml

Lines changed: 48 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,11 @@ jobs:
6161
- os: osx
6262
runner: macos-14
6363
- os: linux
64-
runner: ubuntu-20.04
64+
runner: ubuntu-22.04
6565
- os: ios
6666
runner: macos-14
6767
- os: android
68-
runner: ubuntu-20.04
68+
runner: ubuntu-22.04
6969
exclude:
7070
- arch: arm
7171
os: win
@@ -131,6 +131,39 @@ jobs:
131131
echo "IPHONEOS_DEPLOYMENT_TARGET=12.1" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
132132
}
133133
134+
- name: Install clang+llvm
135+
if: matrix.os == 'linux'
136+
shell: pwsh
137+
run: |
138+
$ClangLlvmVersion='18.1.8'
139+
$ClangLlvmArch='x86_64'
140+
$ClangLlvmPlatform=@{'win'='windows';'osx'='macos';'linux'='ubuntu-22.04'}['${{matrix.os}}']
141+
$ClangLlvmBaseUrl="https://github.com/awakecoding/llvm-prebuilt/releases/download/v2025.2.0"
142+
$ClangLlvmName="clang+llvm-${ClangLlvmVersion}-${ClangLlvmArch}-${ClangLlvmPlatform}"
143+
wget -q "${ClangLlvmBaseUrl}/${ClangLlvmName}.tar.xz"
144+
$LLVM_PREFIX="/opt/llvm"
145+
tar -xf "${ClangLlvmName}.tar.xz" -C /tmp
146+
sudo mv "/tmp/${ClangLlvmName}" $LLVM_PREFIX
147+
$LLVM_BIN_PATH="$LLVM_PREFIX/bin"
148+
echo "PATH=$LLVM_BIN_PATH$([IO.Path]::PathSeparator)$Env:PATH" >> $Env:GITHUB_ENV
149+
150+
- name: Configure CBake
151+
if: matrix.os == 'linux'
152+
shell: pwsh
153+
run: |
154+
$CBakeVersion = "v2025.02.18.0"
155+
$CBakeRepoUrl = "https://github.com/Devolutions/CBake"
156+
$CBakeDownloadUrl = "$CBakeRepoUrl/releases/download/$CBakeVersion"
157+
git clone -b $CBakeVersion "https://github.com/Devolutions/CBake" cbake
158+
@('ubuntu-20.04-amd64-sysroot.tar.xz', 'ubuntu-20.04-arm64-sysroot.tar.xz') | % {
159+
curl -L --output "cbake/sysroots/$_" "$CBakeDownloadUrl/$_"
160+
tar -C "cbake/sysroots" -xf "cbake/sysroots/$_"
161+
Remove-Item "cbake/sysroots/$_" | Out-Null
162+
}
163+
$CBakeHome = Join-Path (Get-Location) 'cbake'
164+
echo "CBAKE_HOME=$CBakeHome" >> $Env:GITHUB_ENV
165+
sudo apt install ninja-build g++-aarch64-linux-gnu
166+
134167
- name: Build picky (${{matrix.os}}-${{matrix.arch}})
135168
shell: pwsh
136169
run: |
@@ -158,10 +191,18 @@ jobs:
158191
$Env:RUSTFLAGS="-C target-feature=+crt-static"
159192
}
160193
161-
if ($RustTarget -eq 'aarch64-unknown-linux-gnu') {
162-
sudo apt update
163-
sudo apt install gcc-aarch64-linux-gnu
164-
$Env:RUSTFLAGS="-C linker=aarch64-linux-gnu-gcc"
194+
if ($DotNetOs -eq 'linux') {
195+
$LinuxArch = @{'x64'='amd64';'arm64'='arm64'}[$DotNetArch]
196+
$CMakeToolchainFile = Join-Path $Env:CBAKE_HOME "cmake/linux.toolchain.cmake"
197+
$Env:SYSROOT_NAME = "ubuntu-20.04-$LinuxArch"
198+
$CMakeSourceDir = "$Env:CBAKE_HOME/cargo"
199+
$CMakeBuildDir = "$Env:CBAKE_HOME/cargo/${Env:SYSROOT_NAME}"
200+
$CMakeArgs = @(
201+
"-DSYSROOT_NAME=$Env:SYSROOT_NAME",
202+
"-DCMAKE_TOOLCHAIN_FILE=$CMakeToolchainFile"
203+
)
204+
cmake $CMakeSourceDir -G Ninja -B $CMakeBuildDir $CMakeArgs
205+
. "$HOME/.cargo/cbake/${RustTarget}-enter.ps1"
165206
}
166207
167208
$ProjectVersion = '${{ needs.preflight.outputs.project-version }}'
@@ -211,7 +252,7 @@ jobs:
211252
- name: Configure runner
212253
shell: pwsh
213254
run: |
214-
wget -q https://github.com/awakecoding/llvm-prebuilt/releases/download/v2025.1.0/cctools-x86_64-ubuntu-24.04.tar.xz
255+
wget -q https://github.com/awakecoding/llvm-prebuilt/releases/download/v2025.2.0/cctools-x86_64-ubuntu-24.04.tar.xz
215256
tar -xf cctools-x86_64-ubuntu-24.04.tar.xz -C /tmp
216257
sudo mv /tmp/cctools-x86_64-ubuntu-24.04/bin/lipo /usr/local/bin
217258
sudo mv /tmp/cctools-x86_64-ubuntu-24.04/bin/install_name_tool /usr/local/bin

0 commit comments

Comments
 (0)