@@ -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