Files
hakorune/build_win_env_and_build.bat
Moe Charm 11506cee3b Phase 11-12: LLVM backend initial, semantics layer, plugin unification
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>
2025-09-01 23:44:34 +09:00

132 lines
4.7 KiB
Batchfile
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@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のみなら 0libffi無効 / JITも使うなら 1libffi有効
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