omni_tool/build.bat

199 lines
6.0 KiB
Batchfile

@echo off
chcp 65001 >nul 2>&1
title Build Omnitool (MinGW)
echo.
echo ==========================================
echo Build Omnitool (MinGW)
echo ==========================================
echo.
REM ====================== Parameters ======================
set "CLEAN=0"
if /I "%~1"=="clean" set "CLEAN=1"
if /I "%~1"=="rebuild" set "CLEAN=1"
if /I "%~1"=="-c" set "CLEAN=1"
REM ====================== Path Config ======================
set "QT_PATH=D:\01.InstallInfo\InstallPath\QT\6.6.2\mingw_64"
set "MINGW_PATH=D:\01.InstallInfo\InstallPath\QT\Tools\mingw1120_64"
set "PROJ_ROOT=%~dp0"
if not exist "%QT_PATH%\bin\qmake.exe" (
echo ERROR: Cannot find qmake.exe
pause
exit /b 1
)
if not exist "%MINGW_PATH%\bin\g++.exe" (
echo ERROR: Cannot find g++.exe
pause
exit /b 1
)
echo [1/6] Configuring MinGW environment...
set "PATH=%MINGW_PATH%\bin;%QT_PATH%\bin;%PATH%"
echo QT: %QT_PATH%
echo MinGW: %MINGW_PATH%
REM ====================== Kill running program ======================
echo.
echo [2/6] Checking running program...
tasklist /FI "IMAGENAME eq Omnitool.exe" 2>NUL | find /I "Omnitool.exe" >NUL 2>&1
if not errorlevel 1 (
echo Program is running, closing...
taskkill /F /IM "Omnitool.exe" >nul 2>&1
timeout /t 1 /nobreak >nul
)
REM ====================== Clean (only in clean mode) ======================
echo.
if "%CLEAN%"=="1" (
echo [3/6] Full clean rebuild...
if exist "Makefile" del /Q "Makefile" 2>nul
if exist "Makefile.Debug" del /Q "Makefile.Debug" 2>nul
if exist "Makefile.Release" del /Q "Makefile.Release" 2>nul
if exist ".qmake.stash" del /Q ".qmake.stash" 2>nul
if exist "debug" rmdir /S /Q "debug" 2>nul
if exist "release" rmdir /S /Q "release" 2>nul
if exist "build" rmdir /S /Q "build" 2>nul
if exist "bin\Omnitool.exe" del /Q "bin\Omnitool.exe" 2>nul
echo Build artifacts cleaned (bin DLLs preserved)
) else (
echo [3/6] Incremental build (use: build.bat clean for full rebuild)
)
REM ====================== qmake ======================
echo.
if not exist "Makefile.Release" (
echo Running qmake...
qmake Omnitool.pro -spec win32-g++ CONFIG+=release
if errorlevel 1 (
echo ERROR: qmake failed
pause
exit /b 1
)
echo [OK] qmake done
) else (
echo [OK] Makefile.Release exists, skip qmake
)
REM ====================== Compile ======================
echo.
echo [4/6] Compiling Release...
mingw32-make -f Makefile.Release -j%NUMBER_OF_PROCESSORS%
if errorlevel 1 (
echo.
echo ERROR: Compilation failed
pause
exit /b 1
)
echo [OK] Compilation done
REM ====================== Dependencies ======================
echo.
echo [5/6] Ensuring dependencies...
if not exist "bin" mkdir "bin"
REM ---- 3rd party DLLs ----
set "NEED_WINDEPLOYQT=0"
if exist "3rd\ElaWidgetTools\bin\ElaWidgetTools.dll" (
if not exist "bin\ElaWidgetTools.dll" (
copy /Y "3rd\ElaWidgetTools\bin\ElaWidgetTools.dll" "bin\" >nul
echo [+] ElaWidgetTools.dll
)
) else (
echo [!] WARNING: ElaWidgetTools.dll not found
)
if exist "3rd\qscintilla\bin\qscintilla2_qt6.dll" (
if not exist "bin\qscintilla2_qt6.dll" (
copy /Y "3rd\qscintilla\bin\qscintilla2_qt6.dll" "bin\" >nul
echo [+] qscintilla2_qt6.dll
)
) else (
echo [!] WARNING: qscintilla2_qt6.dll not found
)
REM ---- windeployqt (only when Qt core DLLs missing) ----
if not exist "bin\Qt6Core.dll" set "NEED_WINDEPLOYQT=1"
if not exist "bin\Qt6Gui.dll" set "NEED_WINDEPLOYQT=1"
if not exist "bin\Qt6Widgets.dll" set "NEED_WINDEPLOYQT=1"
if "%NEED_WINDEPLOYQT%"=="1" (
echo Running windeployqt...
windeployqt "bin\Omnitool.exe" --release --no-translations --no-system-d3d-compiler --no-opengl-sw
echo [OK] Qt DLLs deployed
) else (
echo [OK] Qt DLLs already present, skip windeployqt
)
REM ---- SQL Drivers ----
if not exist "bin\sqldrivers" mkdir "bin\sqldrivers"
set "SQLDRV=%QT_PATH%\plugins\sqldrivers"
if not exist "bin\sqldrivers\qsqlodbc.dll" (
if exist "%SQLDRV%\qsqlodbc.dll" (
copy /Y "%SQLDRV%\qsqlodbc.dll" "bin\sqldrivers\" >nul
echo [+] sqldrivers\qsqlodbc.dll
)
)
if not exist "bin\sqldrivers\qsqlite.dll" (
if exist "%SQLDRV%\qsqlite.dll" (
copy /Y "%SQLDRV%\qsqlite.dll" "bin\sqldrivers\" >nul
echo [+] sqldrivers\qsqlite.dll
)
)
if not exist "bin\sqldrivers\qsqlpsql.dll" (
if exist "%SQLDRV%\qsqlpsql.dll" (
copy /Y "%SQLDRV%\qsqlpsql.dll" "bin\sqldrivers\" >nul
echo [+] sqldrivers\qsqlpsql.dll
)
)
REM ---- QtPrintSupport.dll ----
if not exist "bin\Qt6PrintSupport.dll" (
if exist "%QT_PATH%\bin\Qt6PrintSupport.dll" (
copy /Y "%QT_PATH%\bin\Qt6PrintSupport.dll" "bin\" >nul
echo [+] Qt6PrintSupport.dll
)
)
REM ---- Platforms plugin (critical) ----
if not exist "bin\platforms" mkdir "bin\platforms"
if not exist "bin\platforms\qwindows.dll" (
if exist "%QT_PATH%\plugins\platforms\qwindows.dll" (
copy /Y "%QT_PATH%\plugins\platforms\qwindows.dll" "bin\platforms\" >nul
echo [+] platforms\qwindows.dll
)
)
REM ---- Styles plugin ----
if not exist "bin\styles" mkdir "bin\styles"
if not exist "bin\styles\qmodernwindowsstyle.dll" (
if exist "%QT_PATH%\plugins\styles\qmodernwindowsstyle.dll" (
copy /Y "%QT_PATH%\plugins\styles\qmodernwindowsstyle.dll" "bin\styles\" >nul
echo [+] styles\qmodernwindowsstyle.dll
)
)
echo [OK] Dependencies checked
REM ====================== Resources ======================
echo.
echo [6/6] Copying resources...
if not exist "bin\resources" mkdir "bin\resources"
if exist "resources\*" xcopy /E /Y /Q "resources\*" "bin\resources\" >nul 2>&1
echo [OK] Resources copied
REM ====================== Done ======================
echo.
echo ==========================================
echo Build SUCCESSFUL!
echo ==========================================
echo.
echo Output: bin\Omnitool.exe
echo Tip: "build.bat clean" for full rebuild
echo.
pause