Major changes: - LLVM backend initial implementation (compiler.rs, llvm mode) - Semantics layer integration in interpreter (operators.rs) - Phase 12 plugin architecture revision (3-layer system) - Builtin box removal preparation - MIR instruction set documentation (26→Core-15 migration) - Cross-backend testing infrastructure - Await/nowait syntax support New features: - LLVM AOT compilation support (--backend llvm) - Semantics layer for interpreter→VM flow - Tri-backend smoke tests - Plugin-only registry mode Bug fixes: - Interpreter plugin box arithmetic operations - Branch test returns incorrect values Documentation: - Phase 12 README.md updated with new plugin architecture - Removed obsolete NYIR proposals - Added LLVM test programs documentation Co-Authored-By: Claude <noreply@anthropic.com>
132 lines
4.7 KiB
Batchfile
132 lines
4.7 KiB
Batchfile
@echo off
|
||
setlocal ENABLEDELAYEDEXPANSION
|
||
chcp 65001 >nul
|
||
|
||
rem =============================
|
||
rem User config (編集ポイント)
|
||
rem =============================
|
||
rem LLVM のプレフィックス(ヘッダ/Core.h と CMake/LLVMConfig.cmake がある場所)
|
||
rem 例) 自前CMake: C:\LLVM-18
|
||
rem 例) vcpkg: C:\vcpkg\installed\x64-windows
|
||
set "LLVM_PREFIX=C:\LLVM-18"
|
||
|
||
rem AOTのみなら 0(libffi無効) / JITも使うなら 1(libffi有効)
|
||
set "USE_LIBFFI=0"
|
||
|
||
rem libffi のプレフィックス(USE_LIBFFI=1 のとき使用; vcpkg推奨)
|
||
set "LIBFFI_PREFIX=C:\vcpkg\installed\x64-windows"
|
||
|
||
rem Cargo 子プロセスへ PATH を強制注入(有効化=1)
|
||
set "FORCE_CARGO_PATH=1"
|
||
|
||
rem =============================
|
||
rem VS 開発環境(MSVC x64)を有効化
|
||
rem =============================
|
||
if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd.bat" (
|
||
call "%ProgramFiles%\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd.bat" -arch=x64
|
||
) else if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\2022\BuildTools\Common7\Tools\VsDevCmd.bat" (
|
||
call "%ProgramFiles(x86)%\Microsoft Visual Studio\2022\BuildTools\Common7\Tools\VsDevCmd.bat" -arch=x64
|
||
)
|
||
|
||
rem =============================
|
||
rem 前提チェック
|
||
rem =============================
|
||
if not exist "%LLVM_PREFIX%\include\llvm-c\Core.h" (
|
||
echo [ERROR] Core.h not found: "%LLVM_PREFIX%\include\llvm-c\Core.h"
|
||
echo LLVM_PREFIX をヘッダがある場所に直してください。
|
||
exit /b 2
|
||
)
|
||
if not exist "%LLVM_PREFIX%\lib\cmake\llvm\LLVMConfig.cmake" (
|
||
echo [ERROR] LLVMConfig.cmake not found: "%LLVM_PREFIX%\lib\cmake\llvm\LLVMConfig.cmake"
|
||
echo LLVM_PREFIX を CMake 定義がある場所に直してください。
|
||
exit /b 2
|
||
)
|
||
if not exist "%LLVM_PREFIX%\lib\LLVMCore.lib" (
|
||
echo [WARN] LLVMCore.lib が見つかりません: "%LLVM_PREFIX%\lib\LLVMCore.lib"
|
||
)
|
||
if not exist "%LLVM_PREFIX%\lib\LLVMSupport.lib" (
|
||
echo [WARN] LLVMSupport.lib が見つかりません: "%LLVM_PREFIX%\lib\LLVMSupport.lib"
|
||
)
|
||
|
||
rem =============================
|
||
rem 衝突しやすい環境変数を掃除
|
||
rem =============================
|
||
set LLVM_CONFIG_PATH=
|
||
set LLVM_SYS_180_NO_LIBFFI=
|
||
set LLVM_SYS_180_FFI_WORKAROUND=
|
||
|
||
rem =============================
|
||
rem このシェル限定の環境を設定
|
||
rem =============================
|
||
set "LLVM_SYS_180_PREFIX=%LLVM_PREFIX%"
|
||
set "LLVM_SYS_180_INCLUDE_DIR=%LLVM_PREFIX%\include"
|
||
set "LLVM_SYS_180_LIB_DIR=%LLVM_PREFIX%\lib"
|
||
set "LLVM_SYS_180_STRICT_VERSIONING=0"
|
||
set "PATH=%LLVM_PREFIX%\bin;%PATH%"
|
||
|
||
if "%USE_LIBFFI%"=="1" (
|
||
set "LLVM_SYS_NO_LIBFFI="
|
||
if exist "%LIBFFI_PREFIX%\lib\ffi.lib" (
|
||
set "LIB=%LIBFFI_PREFIX%\lib;%LIB%"
|
||
set "PATH=%LIBFFI_PREFIX%\bin;%PATH%"
|
||
) else (
|
||
echo [WARN] libffi not found at "%LIBFFI_PREFIX%\lib\ffi.lib" (JIT想定なら vcpkg で libffi を追加してください)
|
||
)
|
||
) else (
|
||
rem AOT-only
|
||
set "LLVM_SYS_NO_LIBFFI=1"
|
||
)
|
||
|
||
rem =============================
|
||
rem 現在の設定を表示
|
||
rem =============================
|
||
echo [ENV] LLVM_SYS_180_PREFIX=%LLVM_SYS_180_PREFIX%
|
||
echo [ENV] LLVM_SYS_180_INCLUDE_DIR=%LLVM_SYS_180_INCLUDE_DIR%
|
||
echo [ENV] LLVM_SYS_180_LIB_DIR=%LLVM_SYS_180_LIB_DIR%
|
||
echo [ENV] LLVM_SYS_NO_LIBFFI=%LLVM_SYS_NO_LIBFFI%
|
||
echo [ENV] LLVM_SYS_180_STRICT_VERSIONING=%LLVM_SYS_180_STRICT_VERSIONING%
|
||
where cl
|
||
where link
|
||
where clang
|
||
|
||
rem =============================
|
||
rem Cargo 子プロセスへ PATH を強制注入(必要なら)
|
||
rem =============================
|
||
if "%FORCE_CARGO_PATH%"=="1" (
|
||
if not exist ".cargo" mkdir ".cargo"
|
||
> ".cargo\config.toml" (
|
||
echo [env]
|
||
echo LLVM_SYS_180_PREFIX = "%LLVM_SYS_180_PREFIX:\=\\%"
|
||
echo LLVM_SYS_180_INCLUDE_DIR = "%LLVM_SYS_180_INCLUDE_DIR:\=\\%"
|
||
echo LLVM_SYS_180_LIB_DIR = "%LLVM_SYS_180_LIB_DIR:\=\\%"
|
||
if "%USE_LIBFFI%"=="1" (echo LLVM_SYS_NO_LIBFFI = "") else (echo LLVM_SYS_NO_LIBFFI = "1")
|
||
echo LLVM_SYS_180_STRICT_VERSIONING = "0"
|
||
echo PATH = { value = "%LLVM_SYS_180_PREFIX:\=\\%\bin;{PATH}", force = true }
|
||
)
|
||
echo [INFO] Wrote .cargo\config.toml
|
||
)
|
||
|
||
rem =============================
|
||
rem Rust toolchain を MSVC に固定&ビルド
|
||
rem =============================
|
||
echo [INFO] Using MSVC toolchain...
|
||
rustup default stable-x86_64-pc-windows-msvc
|
||
|
||
set "RUST_LOG=llvm_sys=trace"
|
||
echo [INFO] Cleaning...
|
||
cargo clean
|
||
|
||
echo [INFO] Building nyash (release, feature=llvm)...
|
||
cargo +stable-x86_64-pc-windows-msvc build --release --features llvm -vv -j24
|
||
if errorlevel 1 (
|
||
echo [ERROR] cargo build failed. 上の末尾(link.exe の行/ffi.libの有無)を確認してください。
|
||
exit /b 1
|
||
)
|
||
|
||
echo [OK] Build complete.
|
||
echo [HINT] AOT→EXE: powershell -ExecutionPolicy Bypass -File tools\build_llvm.ps1 apps\tests\ny-echo-lite\main.nyash -Out app_echo.exe
|
||
|
||
endlocal
|
||
exit /b 0
|
||
|