Skip to content

Commit 2cc3e06

Browse files
committed
ci: try to fix android environment
1 parent 00c1031 commit 2cc3e06

File tree

1 file changed

+155
-17
lines changed

1 file changed

+155
-17
lines changed

.github/workflows/CI.yml

Lines changed: 155 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ jobs:
109109
node-version: 22
110110

111111
- name: Verify ARM64 Environment (Windows ARM64)
112-
if: ${{ contains(matrix.settings.host, 'windows-arm64') }}
112+
if: ${{ contains(matrix.settings.host, 'ARM') }}
113113
run: |
114114
echo "Verifying ARM64 native environment..."
115115
echo "Architecture: %PROCESSOR_ARCHITECTURE%"
@@ -147,30 +147,34 @@ jobs:
147147
continue-on-error: true
148148

149149
- name: Setup MSVC Environment (Windows ARM64)
150-
if: ${{ contains(matrix.settings.host, 'windows-arm64') }}
150+
if: ${{ contains(matrix.settings.host, 'ARM') }}
151151
run: |
152152
echo "Setting up MSVC environment for ARM64 Windows..."
153153
REM Try different Visual Studio paths for ARM64
154154
if exist "C:\Program Files\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" (
155155
echo "Found Visual Studio 2022 BuildTools"
156-
call "C:\Program Files\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" arm64
156+
call "C:\Program Files\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" amd64_arm64
157157
goto :done
158158
)
159159
if exist "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" (
160160
echo "Found Visual Studio 2019 BuildTools"
161-
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" arm64
161+
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" amd64_arm64
162162
goto :done
163163
)
164164
echo "Visual Studio not found, trying to find vcvarsall.bat..."
165165
for /f "tokens=*" %%i in ('where vcvarsall.bat 2^>nul') do (
166166
echo "Found vcvarsall.bat at: %%i"
167-
call "%%i" arm64
167+
call "%%i" amd64_arm64
168168
goto :done
169169
)
170170
echo "Warning: Visual Studio Build Tools not found"
171171
172172
:done
173173
echo "MSVC environment setup completed"
174+
echo "VCINSTALLDIR: %VCINSTALLDIR%"
175+
echo "INCLUDE: %INCLUDE%"
176+
echo "LIB: %LIB%"
177+
echo "PATH: %PATH%"
174178
shell: cmd
175179
continue-on-error: true
176180

@@ -189,18 +193,47 @@ jobs:
189193
shell: cmd
190194

191195
- name: Install Rust (Windows ARM64)
192-
if: ${{ contains(matrix.settings.host, 'windows-arm64') }}
196+
if: ${{ contains(matrix.settings.host, 'ARM') }}
193197
run: |
194198
echo "PROCESSOR_ARCHITECTURE: %PROCESSOR_ARCHITECTURE%"
195199
echo "PROCESSOR_ARCHITEW6432: %PROCESSOR_ARCHITEW6432%"
196200
# Use ARM64 version for ARM64 Windows runners
197201
curl -o rustup-init.exe https://win.rustup.rs/aarch64
198202
.\rustup-init.exe -y --default-toolchain stable --default-host aarch64-pc-windows-msvc
199203
echo "%USERPROFILE%\.cargo\bin" >> $env:GITHUB_PATH
204+
"%USERPROFILE%\.cargo\bin\rustup.exe" target add aarch64-pc-windows-msvc
200205
"%USERPROFILE%\.cargo\bin\rustup.exe" component add rustfmt clippy
201206
echo "CARGO_PATH=%USERPROFILE%\.cargo\bin" >> $env:GITHUB_ENV
202207
shell: cmd
203208

209+
- name: Setup C Compiler Environment (Windows ARM64)
210+
if: ${{ contains(matrix.settings.host, 'ARM') }}
211+
run: |
212+
echo "Setting up C compiler environment for Windows ARM64..."
213+
REM Set up environment variables for C compilation
214+
set "CC_aarch64_pc_windows_msvc=cl.exe"
215+
set "CXX_aarch64_pc_windows_msvc=cl.exe"
216+
set "AR_aarch64_pc_windows_msvc=lib.exe"
217+
set "TARGET_CC=cl.exe"
218+
set "TARGET_AR=lib.exe"
219+
220+
REM Set up include paths for C standard library
221+
set "INCLUDE=%VCINSTALLDIR%Include;%VCINSTALLDIR%Include\ucrt;%VCINSTALLDIR%Include\shared;%VCINSTALLDIR%Include\um;%VCINSTALLDIR%Include\winrt"
222+
set "LIB=%VCINSTALLDIR%Lib\ARM64;%VCINSTALLDIR%Lib\ARM64\ucrt;%VCINSTALLDIR%Lib\ARM64\um"
223+
224+
echo "CC_aarch64_pc_windows_msvc=%CC_aarch64_pc_windows_msvc%" >> $env:GITHUB_ENV
225+
echo "CXX_aarch64_pc_windows_msvc=%CXX_aarch64_pc_windows_msvc%" >> $env:GITHUB_ENV
226+
echo "AR_aarch64_pc_windows_msvc=%AR_aarch64_pc_windows_msvc%" >> $env:GITHUB_ENV
227+
echo "TARGET_CC=%TARGET_CC%" >> $env:GITHUB_ENV
228+
echo "TARGET_AR=%TARGET_AR%" >> $env:GITHUB_ENV
229+
echo "INCLUDE=%INCLUDE%" >> $env:GITHUB_ENV
230+
echo "LIB=%LIB%" >> $env:GITHUB_ENV
231+
232+
echo "C compiler environment setup completed"
233+
echo "INCLUDE: %INCLUDE%"
234+
echo "LIB: %LIB%"
235+
shell: cmd
236+
204237
- name: Install Rust (Non-Windows)
205238
if: ${{ !contains(matrix.settings.host, 'windows') }}
206239
uses: dtolnay/rust-toolchain@stable
@@ -219,16 +252,26 @@ jobs:
219252
# target/
220253
# key: ${{ matrix.settings.target }}-cargo-${{ matrix.settings.host }}
221254

222-
- name: Install Android NDK
255+
- name: Setup Android NDK Environment
223256
if: ${{ contains(matrix.settings.target, 'android') }}
224257
run: |
225-
echo "Installing Android NDK..."
226-
# Download and install Android NDK
227-
wget https://dl.google.com/android/repository/android-ndk-r25c-linux.zip
228-
unzip android-ndk-r25c-linux.zip
229-
NDK_ROOT="$PWD/android-ndk-r25c"
230-
echo "ANDROID_NDK_ROOT=$NDK_ROOT" >> $GITHUB_ENV
231-
echo "$NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin" >> $GITHUB_PATH
258+
echo "Setting up Android NDK environment using local installation..."
259+
260+
# Check if NDK_ROOT is set
261+
if [ -z "$NDK_ROOT" ]; then
262+
echo "❌ NDK_ROOT environment variable is not set"
263+
echo "Please set NDK_ROOT in your .bashrc or runner environment"
264+
exit 1
265+
fi
266+
267+
# Check if NDK directory exists
268+
if [ ! -d "$NDK_ROOT" ]; then
269+
echo "❌ NDK directory not found: $NDK_ROOT"
270+
echo "Please check your NDK installation path"
271+
exit 1
272+
fi
273+
274+
echo "✅ Using local NDK: $NDK_ROOT"
232275
233276
# Set up environment variables for Android targets
234277
if [[ "${{ matrix.settings.target }}" == "aarch64-linux-android" ]]; then
@@ -252,6 +295,7 @@ jobs:
252295
# Debug: Print environment variables
253296
echo "=== Environment Variables Debug ==="
254297
echo "Target: ${{ matrix.settings.target }}"
298+
echo "NDK_ROOT: $NDK_ROOT"
255299
echo "ANDROID_NDK_ROOT: $ANDROID_NDK_ROOT"
256300
echo "TARGET_CC: $TARGET_CC"
257301
echo "TARGET_AR: $TARGET_AR"
@@ -297,6 +341,30 @@ jobs:
297341
"%USERPROFILE%\.cargo\bin\rustc.exe" --version
298342
shell: cmd
299343

344+
- name: Verify Windows ARM64 Environment
345+
if: ${{ contains(matrix.settings.host, 'ARM') }}
346+
run: |
347+
echo "=== Windows ARM64 Environment Verification ==="
348+
echo "Target: ${{ matrix.settings.target }}"
349+
echo "CC_aarch64_pc_windows_msvc: %CC_aarch64_pc_windows_msvc%"
350+
echo "CXX_aarch64_pc_windows_msvc: %CXX_aarch64_pc_windows_msvc%"
351+
echo "AR_aarch64_pc_windows_msvc: %AR_aarch64_pc_windows_msvc%"
352+
echo "TARGET_CC: %TARGET_CC%"
353+
echo "TARGET_AR: %TARGET_AR%"
354+
echo "INCLUDE: %INCLUDE%"
355+
echo "LIB: %LIB%"
356+
echo "VCINSTALLDIR: %VCINSTALLDIR%"
357+
echo "=== Checking stdbool.h ==="
358+
if exist "%VCINSTALLDIR%Include\stdbool.h" (
359+
echo "stdbool.h found at: %VCINSTALLDIR%Include\stdbool.h"
360+
) else (
361+
echo "stdbool.h NOT FOUND in %VCINSTALLDIR%Include\"
362+
echo "Searching for stdbool.h..."
363+
dir /s /b "%VCINSTALLDIR%" | findstr /i stdbool.h
364+
)
365+
echo "=== End Verification ==="
366+
shell: cmd
367+
300368
- name: Verify Android Environment (Android targets)
301369
if: ${{ contains(matrix.settings.target, 'android') }}
302370
run: |
@@ -343,10 +411,75 @@ jobs:
343411
CC_aarch64_linux_android: ${{ env.CC_aarch64_linux_android }}
344412
CXX_aarch64_linux_android: ${{ env.CXX_aarch64_linux_android }}
345413
AR_aarch64_linux_android: ${{ env.AR_aarch64_linux_android }}
414+
CC_aarch64_pc_windows_msvc: ${{ env.CC_aarch64_pc_windows_msvc }}
415+
CXX_aarch64_pc_windows_msvc: ${{ env.CXX_aarch64_pc_windows_msvc }}
416+
AR_aarch64_pc_windows_msvc: ${{ env.AR_aarch64_pc_windows_msvc }}
417+
INCLUDE: ${{ env.INCLUDE }}
418+
LIB: ${{ env.LIB }}
346419

347-
- name: Build (Non-Windows)
348-
if: ${{ !contains(matrix.settings.host, 'windows') }}
349-
run: ${{ matrix.settings.build }}
420+
- name: Build (Windows ARM64)
421+
if: ${{ contains(matrix.settings.host, 'ARM') }}
422+
run: |
423+
echo "Setting up MSVC environment and building for Windows ARM64..."
424+
REM Set up MSVC environment for ARM64
425+
if exist "C:\Program Files\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" (
426+
echo "Found Visual Studio 2022 BuildTools"
427+
call "C:\Program Files\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" amd64_arm64
428+
) else if exist "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" (
429+
echo "Found Visual Studio 2019 BuildTools"
430+
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" amd64_arm64
431+
) else (
432+
echo "Visual Studio not found, trying to find vcvarsall.bat..."
433+
for /f "tokens=*" %%i in ('where vcvarsall.bat 2^>nul') do (
434+
echo "Found vcvarsall.bat at: %%i"
435+
call "%%i" amd64_arm64
436+
goto :build
437+
)
438+
echo "Warning: Visual Studio Build Tools not found"
439+
)
440+
441+
:build
442+
echo "Environment after vcvarsall:"
443+
echo "VCINSTALLDIR: %VCINSTALLDIR%"
444+
echo "INCLUDE: %INCLUDE%"
445+
echo "LIB: %LIB%"
446+
echo "PATH: %PATH%"
447+
448+
REM Set up Rust environment
449+
set PATH=%PATH%;%USERPROFILE%\.cargo\bin
450+
451+
REM Build the project
452+
${{ matrix.settings.build }}
453+
shell: cmd
454+
455+
- name: Build (Android)
456+
if: ${{ contains(matrix.settings.target, 'android') }}
457+
run: |
458+
echo "=== Building for Android target: ${{ matrix.settings.target }} ==="
459+
echo "ANDROID_NDK_ROOT: $ANDROID_NDK_ROOT"
460+
echo "TARGET_CC: $TARGET_CC"
461+
echo "TARGET_AR: $TARGET_AR"
462+
echo "CC_armv7_linux_androideabi: $CC_armv7_linux_androideabi"
463+
echo "CC_aarch64_linux_android: $CC_aarch64_linux_android"
464+
echo "PATH: $PATH"
465+
466+
# Verify NDK tools exist
467+
if [[ "${{ matrix.settings.target }}" == "armv7-linux-androideabi" ]]; then
468+
if [ -f "$CC_armv7_linux_androideabi" ]; then
469+
echo "✓ CC_armv7_linux_androideabi found: $CC_armv7_linux_androideabi"
470+
else
471+
echo "✗ CC_armv7_linux_androideabi NOT FOUND: $CC_armv7_linux_androideabi"
472+
fi
473+
elif [[ "${{ matrix.settings.target }}" == "aarch64-linux-android" ]]; then
474+
if [ -f "$CC_aarch64_linux_android" ]; then
475+
echo "✓ CC_aarch64_linux_android found: $CC_aarch64_linux_android"
476+
else
477+
echo "✗ CC_aarch64_linux_android NOT FOUND: $CC_aarch64_linux_android"
478+
fi
479+
fi
480+
481+
# Build the project
482+
${{ matrix.settings.build }}
350483
shell: bash
351484
env:
352485
ANDROID_NDK_ROOT: ${{ env.ANDROID_NDK_ROOT }}
@@ -358,6 +491,11 @@ jobs:
358491
CC_aarch64_linux_android: ${{ env.CC_aarch64_linux_android }}
359492
CXX_aarch64_linux_android: ${{ env.CXX_aarch64_linux_android }}
360493
AR_aarch64_linux_android: ${{ env.AR_aarch64_linux_android }}
494+
495+
- name: Build (Non-Windows)
496+
if: ${{ !contains(matrix.settings.host, 'windows') && !contains(matrix.settings.target, 'android') }}
497+
run: ${{ matrix.settings.build }}
498+
shell: bash
361499
- name: Upload artifact
362500
uses: actions/upload-artifact@v4
363501
if: matrix.settings.target != 'wasm32-wasip1-threads'

0 commit comments

Comments
 (0)