secondvoice/build_mingw.bat
StillHammer 07b792b2bd fix: Add MinGW build support and compatibility fixes
- Add MinGW compatibility shim for cpp-httplib GetAddrInfoExCancel
- Fix portaudio linking (portaudio_static -> portaudio)
- Disable -Werror for MinGW builds due to httplib incompatibilities
- Add console subsystem flag for MinGW builds
- Add debug logging utilities (Logger.h)
- Add MessageBox debugging for Windows troubleshooting
- Update build scripts with better error handling

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-20 11:43:13 +08:00

165 lines
3.5 KiB
Batchfile

@echo off
REM Build script for SecondVoice on Windows using MinGW (no Visual Studio!)
echo ========================================
echo SecondVoice - MinGW Build Script
echo ========================================
echo.
REM Check if MinGW/GCC is installed
where gcc >nul 2>&1
if %errorlevel% neq 0 (
echo [ERROR] GCC not found in PATH
echo.
echo Please run setup_mingw.bat first to install MinGW
echo .\setup_mingw.bat
echo.
pause
exit /b 1
)
echo [INFO] GCC found:
gcc --version | findstr "gcc"
echo.
REM Check if vcpkg is installed
if not defined VCPKG_ROOT (
echo [ERROR] VCPKG_ROOT environment variable not set
echo.
echo Please run setup_mingw.bat first to install vcpkg
echo .\setup_mingw.bat
echo.
pause
exit /b 1
)
echo [INFO] vcpkg found at: %VCPKG_ROOT%
echo.
REM Check if .env exists
if not exist ".env" (
echo [WARNING] .env file not found
echo Please create .env from .env.example and add your API keys:
echo copy .env.example .env
echo notepad .env
echo.
)
REM Check for CMake
where cmake >nul 2>&1
if %errorlevel% neq 0 (
echo [ERROR] CMake not found
echo Please run setup_mingw.bat first
pause
exit /b 1
)
REM Check for Ninja
where ninja >nul 2>&1
if %errorlevel% neq 0 (
echo [ERROR] Ninja not found
echo Please run setup_mingw.bat first
pause
exit /b 1
)
REM Parse command line arguments
set BUILD_TYPE=Release
set CLEAN_BUILD=0
:parse_args
if "%~1"=="" goto :done_parsing
if /i "%~1"=="--debug" (
set BUILD_TYPE=Debug
shift
goto :parse_args
)
if /i "%~1"=="--release" (
set BUILD_TYPE=Release
shift
goto :parse_args
)
if /i "%~1"=="--clean" (
set CLEAN_BUILD=1
shift
goto :parse_args
)
echo [WARNING] Unknown argument: %~1
shift
goto :parse_args
:done_parsing
echo [INFO] Build type: %BUILD_TYPE%
echo.
REM Clean build if requested
if %CLEAN_BUILD%==1 (
echo [INFO] Cleaning build directory...
if exist "build\mingw-%BUILD_TYPE%" (
rmdir /s /q "build\mingw-%BUILD_TYPE%"
)
echo.
)
REM Set preset name based on build type
if /i "%BUILD_TYPE%"=="Debug" (
set PRESET=mingw-debug
) else (
set PRESET=mingw-release
)
REM Configure with CMake - force MinGW triplet via environment variable
echo [INFO] Configuring CMake for MinGW build...
echo [INFO] Forcing vcpkg triplet: x64-mingw-dynamic
set VCPKG_DEFAULT_TRIPLET=x64-mingw-dynamic
set VCPKG_DEFAULT_HOST_TRIPLET=x64-mingw-dynamic
cmake -B build/mingw-%BUILD_TYPE% ^
-G Ninja ^
-DCMAKE_BUILD_TYPE=%BUILD_TYPE% ^
-DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%/scripts/buildsystems/vcpkg.cmake ^
-DVCPKG_TARGET_TRIPLET=x64-mingw-dynamic ^
-DVCPKG_HOST_TRIPLET=x64-mingw-dynamic ^
-DCMAKE_C_COMPILER=gcc ^
-DCMAKE_CXX_COMPILER=g++ ^
-DCMAKE_MAKE_PROGRAM=ninja
if %errorlevel% neq 0 (
echo.
echo [ERROR] CMake configuration failed
pause
exit /b 1
)
echo.
echo [INFO] Building with Ninja...
cmake --build build/mingw-%BUILD_TYPE%
if %errorlevel% neq 0 (
echo.
echo [ERROR] Build failed
pause
exit /b 1
)
echo.
echo ========================================
echo [SUCCESS] Build completed!
echo ========================================
echo.
echo Executable location:
echo build\mingw-%BUILD_TYPE%\SecondVoice.exe
echo.
echo To run the application:
echo cd build\mingw-%BUILD_TYPE%
echo SecondVoice.exe
echo.
echo Make sure you have:
echo 1. Created .env with your API keys
echo 2. config.json is present (copied automatically)
echo 3. A microphone connected
echo.
exit /b 0