Files
datatrace/build.bat

129 lines
4.3 KiB
Batchfile
Raw Permalink Normal View History

2026-07-10 14:13:02 +08:00
@echo off
setlocal EnableExtensions
rem ============================================================================
rem Build script for the PQ mapping/parser/tracing tool.
rem
rem Purpose:
rem 1. Compile sources from the source directory.
rem 2. Write bin\pq_tool.exe by default, or write the output path passed as %1.
rem 3. Require a 32-bit i686 MinGW compiler because the executable and
rem RocketMQ runtime DLLs must use the same 32-bit architecture.
rem
rem Inputs:
rem %1 Optional output exe path.
rem PQ_BUILD_TEMP Optional temp directory, useful when the system temp drive
rem has too little free space.
rem
rem Outputs:
rem Success: generated exe and optional DLL warnings.
rem Failure: non-zero errorlevel and a printed error message.
rem
rem Keep this file ASCII-only. cmd.exe parses batch files with the active code
rem page, and UTF-8 Chinese comments can break command parsing on some systems.
rem ============================================================================
rem ROOT is the directory containing this script. All relative paths are based on
rem the project root after pushd.
2026-07-10 14:13:02 +08:00
set "ROOT=%~dp0"
pushd "%ROOT%" >nul
set "SRC_DIR=%ROOT%source"
rem Prefer the known 32-bit MinGW g++; otherwise fall back to g++ from PATH.
2026-07-10 14:13:02 +08:00
set "DEFAULT_CXX=C:\Users\lnk\Downloads\mingw32\bin\g++.exe"
if exist "%DEFAULT_CXX%" (
set "CXX=%DEFAULT_CXX%"
) else (
set "CXX=g++"
)
rem The first argument controls the output path, so a test build can coexist with
rem the normal bin\pq_tool.exe.
2026-07-10 14:13:02 +08:00
set "OUT=%~1"
if "%OUT%"=="" set "OUT=bin\pq_tool.exe"
if not exist "bin" mkdir "bin"
if not exist "%SRC_DIR%\main.cpp" (
echo [ERR] Source directory not found: %SRC_DIR%
popd >nul
exit /b 1
)
rem Redirect TMP/TEMP when the caller provides a valid build temp directory.
2026-07-10 14:13:02 +08:00
if not "%PQ_BUILD_TEMP%"=="" (
if exist "%PQ_BUILD_TEMP%" (
set "TMP=%PQ_BUILD_TEMP%"
set "TEMP=%PQ_BUILD_TEMP%"
echo [INFO] TEMP: %PQ_BUILD_TEMP%
) else (
echo [WARN] PQ_BUILD_TEMP does not exist; using default TEMP.
)
)
rem -dumpmachine returns values such as i686-w64-mingw32. Reject x86_64 here.
2026-07-10 14:13:02 +08:00
echo [INFO] Compiler: %CXX%
for /f "delims=" %%M in ('"%CXX%" -dumpmachine 2^>nul') do set "TARGET=%%M"
echo [INFO] Target: %TARGET%
echo %TARGET% | findstr /i "i686" >nul
if errorlevel 1 (
echo [ERR] This project must be built with a 32-bit i686 MinGW compiler.
echo [ERR] Current compiler target is: %TARGET%
popd >nul
exit /b 1
)
echo [INFO] Output: %OUT%
rem Delete the old output before compiling. If deletion fails, the program is
rem usually still running or the file is locked by another process.
2026-07-10 14:13:02 +08:00
if exist "%OUT%" (
del /f "%OUT%" >nul 2>nul
if exist "%OUT%" (
echo [ERR] Cannot overwrite existing output. Is it still running? %OUT%
popd >nul
exit /b 1
)
)
rem Compile units:
rem main.cpp CLI entry, JSON/XML mapping parser, Excel XML output.
rem interface.cpp Win32 GUI, page interaction, preview, reverse XML output.
rem mq.cpp HTTP ledger/ICD fetch, RocketMQ loader, trace data storage.
rem icd_mapper.cpp Imports ICD descriptions into unmatched-origin workbook rows.
rem tinyxml2.cpp XML parsing/printing library.
2026-07-10 14:13:02 +08:00
"%CXX%" ^
-std=gnu++17 ^
-O2 ^
-Wall ^
-Wno-deprecated-declarations ^
-I"%SRC_DIR%" ^
-o "%OUT%" ^
2026-07-13 15:12:55 +08:00
"%SRC_DIR%\main.cpp" "%SRC_DIR%\interface.cpp" "%SRC_DIR%\mq.cpp" "%SRC_DIR%\icd_mapper.cpp" "%SRC_DIR%\tinyxml2.cpp" ^
2026-07-10 14:13:02 +08:00
-lcomctl32 -lcomdlg32 -lwinhttp -lole32 -luuid -lws2_32 -lgdi32 ^
-static-libgcc -static-libstdc++
if errorlevel 1 (
echo [ERR] Build failed.
popd >nul
exit /b 1
)
rem Confirm that the compiler really produced the output file.
2026-07-10 14:13:02 +08:00
if not exist "%OUT%" (
echo [ERR] Build command finished but output file was not created: %OUT%
popd >nul
exit /b 1
)
rem These DLLs are loaded dynamically at runtime. The program can still start
rem without them, but MQ tracing will fall back to runtime\json\mq_outbox_*.jsonl.
2026-07-10 14:13:02 +08:00
if not exist "bin\rocketmq-client-cpp.dll" (
echo [WARN] bin\rocketmq-client-cpp.dll is missing. MQ runtime will not load.
)
if not exist "bin\libwinpthread-1.dll" (
echo [WARN] bin\libwinpthread-1.dll is missing. RocketMQ DLL may fail to load.
)
echo [OK] Build complete: %OUT%
popd >nul
exit /b 0