Files
dstalk/build.bat
未知时光 3e9ba04df5 Stabilize Conan build and remove stale TLS code
Simplifies the active Windows build path around Boost.Beast/OpenSSL, fixes VS2017/clang-cl compatibility, and removes unused BearSSL/WinHTTP remnants so the project builds and tests cleanly.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-26 16:10:20 +08:00

147 lines
5.0 KiB
Batchfile

@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion
set "ROOT=%~dp0"
if "%ROOT:~-1%"=="\" set "ROOT=%ROOT:~0,-1%"
set "TOOLS=%ROOT%\tools\"
set "CMAKE_EXE=%TOOLS%cmake\bin\cmake.exe"
set "NINJA_EXE=%TOOLS%ninja\ninja.exe"
set "CLANG_EXE=%TOOLS%llvm\bin\clang-cl.exe"
set "CLANGXX_EXE=%TOOLS%llvm\bin\clang-cl.exe"
set "CONAN_EXE=%TOOLS%.venv\Scripts\conan.exe"
:: ============================================================
:: 1. 检查工具链,优先使用 tools\,缺失时回退到 PATH
:: ============================================================
echo [dstalk] 检查工具链...
if not exist "%CMAKE_EXE%" set "CMAKE_EXE=cmake"
if not exist "%NINJA_EXE%" set "NINJA_EXE=ninja"
if not exist "%CLANG_EXE%" (
set "CLANG_EXE=clang-cl.exe"
set "CLANGXX_EXE=clang-cl.exe"
)
if not exist "%CONAN_EXE%" set "CONAN_EXE=conan"
"%CMAKE_EXE%" --version >nul 2>&1 || (
echo [ERROR] CMake 未找到,请先运行 tools\setup.bat 或加入 PATH
pause & exit /b 1
)
"%NINJA_EXE%" --version >nul 2>&1 || (
echo [ERROR] Ninja 未找到,请先运行 tools\setup.bat 或加入 PATH
pause & exit /b 1
)
"%CLANG_EXE%" --version >nul 2>&1 || (
echo [ERROR] LLVM/Clang 未找到,请先运行 tools\setup.bat 或加入 PATH
pause & exit /b 1
)
for /f "tokens=1,2,3" %%a in ('"%CLANG_EXE%" --version 2^>nul') do (
if "%%a %%b"=="clang version" set "CLANG_VERSION=%%c"
)
for /f "tokens=1 delims=." %%v in ("!CLANG_VERSION!") do set "CLANG_MAJOR=%%v"
if "!CLANG_MAJOR!"=="" (
echo [ERROR] 无法检测 Clang 版本
pause & exit /b 1
)
"%CONAN_EXE%" --version >nul 2>&1 || (
echo [ERROR] Conan2 未找到,请先运行 tools\setup.bat 或加入 PATH
echo 需要已安装 Python 3.10+
pause & exit /b 1
)
if exist "%TOOLS%env.bat" call "%TOOLS%env.bat"
:: ============================================================
:: 2. 检测并加载 MSVC 环境
:: ============================================================
set "VCVARS="
set "VS_YEAR="
for %%v in (2022 2019 2017) do (
if not defined VCVARS (
for %%e in (Professional Community Enterprise BuildTools) do (
if not defined VCVARS if exist "C:\Program Files (x86)\Microsoft Visual Studio\%%v\%%e\VC\Auxiliary\Build\vcvarsall.bat" (
set "VCVARS=C:\Program Files (x86)\Microsoft Visual Studio\%%v\%%e\VC\Auxiliary\Build\vcvarsall.bat"
set "VS_YEAR=%%v"
)
if not defined VCVARS if exist "C:\Program Files\Microsoft Visual Studio\%%v\%%e\VC\Auxiliary\Build\vcvarsall.bat" (
set "VCVARS=C:\Program Files\Microsoft Visual Studio\%%v\%%e\VC\Auxiliary\Build\vcvarsall.bat"
set "VS_YEAR=%%v"
)
)
)
)
if "%VCVARS%"=="" (
echo [ERROR] 未找到 Visual Studio Build Tools
echo 请安装: https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2022
pause & exit /b 1
)
echo [dstalk] 加载 MSVC 环境...
call "%VCVARS%" x64 >nul 2>&1
set "MSVC_RUNTIME_VERSION=v143"
set "MSVC_CONAN_VERSION=193"
set "CONAN_CPPSTD=20"
if "!VS_YEAR!"=="2019" (
set "MSVC_RUNTIME_VERSION=v142"
set "MSVC_CONAN_VERSION=192"
)
if "!VS_YEAR!"=="2017" (
set "MSVC_RUNTIME_VERSION=v141"
set "MSVC_CONAN_VERSION=191"
set "CONAN_CPPSTD=17"
)
echo [dstalk] MSVC runtime: !MSVC_RUNTIME_VERSION!
:: ============================================================
:: 3. 使用 Clang 编译器
:: ============================================================
set "CC=%CLANG_EXE%"
set "CXX=%CLANGXX_EXE%"
cd /d "%ROOT%"
:: ============================================================
:: 4. Conan 安装依赖
:: ============================================================
echo [dstalk] Conan 安装/刷新依赖...
call "%CONAN_EXE%" install deps/ -of build --build=missing -s compiler=msvc -s compiler.version=!MSVC_CONAN_VERSION! -s compiler.cppstd=!CONAN_CPPSTD! -s compiler.runtime=dynamic -s compiler.runtime_type=Release -c tools.cmake.cmaketoolchain:generator=Ninja
if !errorlevel! neq 0 (
echo [ERROR] Conan 安装失败
pause & exit /b 1
)
set "CONAN_GENERATORS=%ROOT%\build\build\Release\generators"
:: ============================================================
:: 5. CMake 配置 + Ninja 编译
:: ============================================================
echo [dstalk] CMake 配置 + 编译...
"%CMAKE_EXE%" -S "%ROOT%" -B "%ROOT%\build" -G Ninja ^
-DCMAKE_MAKE_PROGRAM="%NINJA_EXE%" ^
-DCMAKE_C_COMPILER="%CLANG_EXE%" ^
-DCMAKE_CXX_COMPILER="%CLANGXX_EXE%" ^
-DCMAKE_TOOLCHAIN_FILE="%CONAN_GENERATORS%\conan_toolchain.cmake" ^
-DCMAKE_PREFIX_PATH="%CONAN_GENERATORS%" ^
-DCMAKE_BUILD_TYPE=Release ^
-DDSTALK_BUILD_GUI=OFF
if !errorlevel! neq 0 (
echo [ERROR] CMake 配置失败
pause & exit /b 1
)
"%CMAKE_EXE%" --build "%ROOT%\build"
if !errorlevel! neq 0 (
echo [ERROR] 编译失败
pause & exit /b 1
)
echo.
echo ============================================
echo 编译成功!
echo build\dstalk-core\dstalk.dll
echo build\dstalk-cli\dstalk-cli.exe
echo ============================================
pause