Files
yunNote/Languages/cpp/llvm/llvm-build2.bat
2026-05-08 09:41:39 +08:00

150 lines
4.5 KiB
Batchfile

@echo off
setlocal enabledelayedexpansion
REM =================================================================
REM Stage 2: Complete Toolchain (using stage1 compiler)
REM =================================================================
REM Builds Clang + LLD + libc++ + libc++abi + compiler-rt + LLDB
REM =================================================================
echo ================================================================
echo Stage 2: Building Complete Toolchain
echo ================================================================
REM =============== CONFIGURATION ===============
set LLVM_SOURCE_DIR=E:\llvm-project-llvmorg-22.1.5
set STAGE1_DIR=E:\llvm-stage1
set BUILD_DIR=E:\llvm-build-stage2
set INSTALL_DIR=E:\llvm-final
set PARALLEL_JOBS=8
set CMAKE_GENERATOR=Ninja
REM ==============================================
echo.
echo Configuration:
echo Source: %LLVM_SOURCE_DIR%
echo Stage1: %STAGE1_DIR%
echo Build: %BUILD_DIR%
echo Install: %INSTALL_DIR%
echo Generator: %CMAKE_GENERATOR%
echo Jobs: %PARALLEL_JOBS%
echo.
REM Check if source directory exists
if not exist "%LLVM_SOURCE_DIR%\llvm\CMakeLists.txt" (
echo ERROR: Source directory not found or invalid!
exit /b 1
)
REM Check if stage1 compiler exists
if not exist "%STAGE1_DIR%\bin\clang++.exe" (
echo ERROR: Stage1 compiler not found!
echo Please run build-stage1.bat first
exit /b 1
)
REM Clean previous build if exists
if exist "%BUILD_DIR%" (
echo Removing previous build directory...
rmdir /s /q "%BUILD_DIR%"
)
REM Create directories
mkdir "%BUILD_DIR%"
mkdir "%INSTALL_DIR%"
REM Navigate to build directory
cd /d "%BUILD_DIR%"
echo.
echo ================================================================
echo Configuring with CMake...
echo ================================================================
REM Configure with CMake
cmake -G "%CMAKE_GENERATOR%" ^
-DCMAKE_C_COMPILER="%STAGE1_DIR%\bin\clang.exe" ^
-DCMAKE_CXX_COMPILER="%STAGE1_DIR%\bin\clang++.exe" ^
-DCMAKE_BUILD_TYPE=Release ^
-DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%" ^
-DLLVM_TARGETS_TO_BUILD="X86" ^
-DLLVM_ENABLE_PROJECTS="clang;lld;lldb" ^
-DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind;compiler-rt" ^
-DLLVM_INCLUDE_TESTS=OFF ^
-DLLVM_INCLUDE_EXAMPLES=OFF ^
-DLLVM_INCLUDE_UTILS=OFF ^
-DCLANG_DEFAULT_CXX_STDLIB=libc++ ^
-DCLANG_DEFAULT_LINKER=lld ^
-DCLANG_DEFAULT_RTLIB=compiler-rt ^
-DLLVM_DEFAULT_TARGET_TRIPLE=x86_64-windows-msvc ^
-DLLVM_USE_CRT_RELEASE=MT ^
-DLIBCXX_HAS_WIN32_THREAD_API=ON ^
-DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON ^
-DLIBCXX_CXX_ABI=libcxxabi ^
-DLIBCXXABI_USE_LLVM_UNWINDER=ON ^
-DLLDB_ENABLE_PYTHON=OFF ^
-DLLDB_INCLUDE_TESTS=OFF ^
"%LLVM_SOURCE_DIR%\llvm"
if errorlevel 1 (
echo ERROR: CMake configuration failed!
exit /b 1
)
echo.
echo ================================================================
echo Building complete toolchain...
echo ================================================================
echo This will take 1-3 hours depending on your system.
echo.
REM Build and install
cmake --build . --config Release --target install --parallel %PARALLEL_JOBS%
if errorlevel 1 (
echo ERROR: Build failed!
exit /b 1
)
echo.
echo ================================================================
echo Verifying the final toolchain...
echo ================================================================
REM Test the compiler
echo #include ^<iostream^> > test.cpp
echo int main() { std::cout ^<^< "Hello from libc++!\\n"; } >> test.cpp
"%INSTALL_DIR%\bin\clang++.exe" -std=c++20 test.cpp -o test.exe
if errorlevel 1 (
echo ERROR: Compilation test failed!
goto cleanup
)
REM Test the debugger
if exist "%INSTALL_DIR%\bin\lldb.exe" (
"%INSTALL_DIR%\bin\lldb.exe" --version
) else (
echo WARNING: LLDB not built or not found
)
echo.
echo ================================================================
echo SUCCESS! Complete toolchain installed to: %INSTALL_DIR%
echo.
echo Toolchain contents:
echo - clang++.exe (C++ compiler with libc++ as default)
echo - lld-link.exe (LLD linker)
echo - lldb.exe (Debugger)
echo - include/c++/v1 (C++ standard library headers)
echo - lib/clang/... (Built-in headers and libraries)
echo.
echo To use it, add to PATH: %INSTALL_DIR%\bin
echo Test compilation: clang++ -std=c++20 your_file.cpp
echo ================================================================
:cleanup
REM Clean up test files
if exist test.cpp del test.cpp
if exist test.exe del test.exe
if exist test.pdb del test.pdb