made build system more agnostic to the projet it builds

This commit is contained in:
2026-07-27 15:16:39 -04:00
parent 0d6b196ce6
commit b196641f18
19 changed files with 1717 additions and 1404 deletions
+60 -1
View File
@@ -4,8 +4,67 @@ setlocal
set SCRIPT_DIR=%~dp0
cd /d "%SCRIPT_DIR%.."
if not exist "Intermediate" mkdir "Intermediate"
echo Generating Visual Studio / Rider solution and project files...
misc\fbuild.exe gen
set PLAN=Intermediate\vs_plan.txt
if exist "%PLAN%" del /f /q "%PLAN%"
>>"%PLAN%" echo GLOBAL_INCLUDE $(SolutionDir)Juliet\include;$(SolutionDir)Juliet\src;$(SolutionDir)Game;$(SolutionDir)External\imgui;$(SolutionDir)External\imgui\backends;
>>"%PLAN%" echo DEF_COMMON JULIET_WIN32;UNICODE;_UNICODE;WIN32_LEAN_AND_MEAN;_CRT_SECURE_NO_WARNINGS;
>>"%PLAN%" echo DEF_DEBUG DEBUG;JULIET_DEBUG;PROFILING_ENABLED;JULIET_ENABLE_IMGUI;
>>"%PLAN%" echo DEF_PROFILE RELEASE;PROFILING_ENABLED;JULIET_ENABLE_IMGUI;
>>"%PLAN%" echo DEF_RELEASE RELEASE;
>>"%PLAN%" echo PROJECT Juliet
>>"%PLAN%" echo EXTRA_DEF JULIET_EXPORT;
>>"%PLAN%" echo PROJECT Game
>>"%PLAN%" echo EXTRA_DEF JULIET_EXPORT;
>>"%PLAN%" echo PROJECT JulietApp
>>"%PLAN%" echo PROJECT Romeo
>>"%PLAN%" echo PROJECT JulietShaderCompiler
>>"%PLAN%" echo INCLUDE_SEARCH $(SolutionDir)Juliet\include;$(SolutionDir)Juliet\src;$(SolutionDir)External\imgui;$(SolutionDir)JulietShaderCompiler;
>>"%PLAN%" echo DEBUG_CMD ..\..\Assets\source\SolidColor.frag.hlsl -o ..\..\Assets\compiled\SolidColor.frag.dxil
>>"%PLAN%" echo PROJECT ImGui External\imgui
>>"%PLAN%" echo EXTRA_DEF IMGUI_API=__declspec(dllexport);
>>"%PLAN%" echo PROJECT_SRC External\imgui\imgui.cpp
>>"%PLAN%" echo PROJECT_SRC External\imgui\imgui_demo.cpp
>>"%PLAN%" echo PROJECT_SRC External\imgui\imgui_draw.cpp
>>"%PLAN%" echo PROJECT_SRC External\imgui\imgui_tables.cpp
>>"%PLAN%" echo PROJECT_SRC External\imgui\imgui_widgets.cpp
>>"%PLAN%" echo PROJECT_SRC External\imgui\backends\imgui_impl_win32.cpp
>>"%PLAN%" echo PROJECT_SRC External\imgui\backends\imgui_impl_dx12.cpp
>>"%PLAN%" echo PROJECT_SRC External\imgui\imgui.h
>>"%PLAN%" echo PROJECT_SRC External\imgui\imgui_internal.h
>>"%PLAN%" echo PROJECT_SRC External\imgui\imstb_rectpack.h
>>"%PLAN%" echo PROJECT_SRC External\imgui\imstb_textedit.h
>>"%PLAN%" echo PROJECT_SRC External\imgui\imstb_truetype.h
>>"%PLAN%" echo PROJECT_SRC External\imgui\backends\imgui_impl_win32.h
>>"%PLAN%" echo PROJECT_SRC External\imgui\backends\imgui_impl_dx12.h
>>"%PLAN%" echo SOLUTION Juliet
>>"%PLAN%" echo SLN_PROJ JulietApp
>>"%PLAN%" echo SLN_PROJ Juliet
>>"%PLAN%" echo SLN_PROJ Game
>>"%PLAN%" echo SLN_PROJ ImGui
>>"%PLAN%" echo SOLUTION Romeo
>>"%PLAN%" echo SLN_PROJ Romeo
>>"%PLAN%" echo SLN_PROJ Juliet
>>"%PLAN%" echo SLN_PROJ ImGui
>>"%PLAN%" echo SOLUTION JulietShaderCompiler
>>"%PLAN%" echo SLN_PROJ JulietShaderCompiler
>>"%PLAN%" echo SLN_PROJ Juliet
>>"%PLAN%" echo SLN_PROJ ImGui
call misc\build.bat gen_vs "%PLAN%"
if %ERRORLEVEL% neq 0 (
echo Solution generation failed!
+19 -5
View File
@@ -27,6 +27,11 @@ set CONFIG_SPECIFIED=0
:parse_args
if "%~1"=="" goto check_defaults
if /i "%~1"=="gen_vs" (
set COMMAND_GEN_VS=1
set GEN_VS_PLAN=%~2
goto do_compile_build_tool
)
if /i "%~1"=="debug" set CONFIG_DEBUG=1& set CONFIG_SPECIFIED=1
if /i "%~1"=="release" set CONFIG_RELEASE=1& set CONFIG_SPECIFIED=1
if /i "%~1"=="profile" set CONFIG_PROFILE=1& set CONFIG_SPECIFIED=1
@@ -41,7 +46,7 @@ goto parse_args
if !CONFIG_SPECIFIED! equ 0 set CONFIG_DEBUG=1& if !TARGET_SPECIFIED! equ 0 set CONFIG_RELEASE=1& set CONFIG_PROFILE=1
if !TARGET_SPECIFIED! equ 0 set TARGET_JULIET=1& set TARGET_GAME=1& set TARGET_ROMEO=1& set TARGET_SHADER=1
:start_build
:do_compile_build_tool
if not exist "%FBUILD%" (
echo [BUILD FAILED] Could not find %FBUILD%.
exit /b 1
@@ -60,7 +65,7 @@ if !ERRORLEVEL! neq 0 (
)
:: Check if build.exe needs to be compiled (missing, version changed, or source changed)
set BUILD_TOOL_VER=4
set BUILD_TOOL_VER=11
set NEED_RECOMPILE_BUILD_TOOL=0
if not exist "%BUILD_TOOL%" (
set NEED_RECOMPILE_BUILD_TOOL=1
@@ -109,6 +114,12 @@ if !NEED_RECOMPILE_BUILD_TOOL! equ 1 (
for %%I in ("%BUILD_SRC%") do (echo %%~tI)>"Intermediate\build_tool.stamp"
)
if "!COMMAND_GEN_VS!"=="1" (
echo [BUILD] Generating Visual Studio Projects and Solutions...
"%BUILD_TOOL%" gen_vs "!GEN_VS_PLAN!"
exit /b !ERRORLEVEL!
)
echo [BUILD] Generating Build Plan...
set PLAN_FILE=Intermediate\build_plan.txt
if exist "!PLAN_FILE!" del /f /q "!PLAN_FILE!"
@@ -183,10 +194,13 @@ echo COMMAND %COMPILER% %COMPILER_FLAGS% /DIMGUI_API=__declspec^(dllexport^) /DJ
:: --- Game.dll ---
if !BUILD_GAME_DLL! equ 1 (
echo STEP Building Game.dll [!CFG!]>>"!PLAN_FILE!"
echo OUTPUT bin\x64-!CFG!\Game.dll>>"!PLAN_FILE!"
set "GAME_DLL_NAME=Game"
if defined GAME_BUILD_ID set "GAME_DLL_NAME=Game-!GAME_BUILD_ID!"
echo STEP Building !GAME_DLL_NAME!.dll [!CFG!]>>"!PLAN_FILE!"
echo OUTPUT bin\x64-!CFG!\!GAME_DLL_NAME!.dll>>"!PLAN_FILE!"
echo DEPENDS Game^|Juliet^|External\imgui>>"!PLAN_FILE!"
echo COMMAND %COMPILER% %COMPILER_FLAGS% /DIMGUI_API=__declspec^(dllimport^) /DJULIET_EXPORT /LD /Fe"bin\x64-!CFG!\Game.dll" Intermediate\Game\*.cpp /link %COMMON_LIBS% bin\x64-!CFG!\Juliet.lib /INCREMENTAL /ILK:Intermediate\x64-!CFG!\Game.ilk /PDB:Intermediate\x64-!CFG!\Game.pdb>>"!PLAN_FILE!"
echo COMMAND %COMPILER% %COMPILER_FLAGS% /DIMGUI_API=__declspec^(dllimport^) /DJULIET_EXPORT /LD /Fe"bin\x64-!CFG!\!GAME_DLL_NAME!.dll" Intermediate\Game\*.cpp /link %COMMON_LIBS% bin\x64-!CFG!\Juliet.lib /INCREMENTAL /ILK:Intermediate\x64-!CFG!\!GAME_DLL_NAME!.ilk /PDB:Intermediate\x64-!CFG!\!GAME_DLL_NAME!.pdb>>"!PLAN_FILE!"
)
:: --- JulietApp.exe ---
+18 -17
View File
@@ -1,37 +1,35 @@
@echo off
setlocal
:: --- 1. Handle Compiler Choice ---
:: Default to Clang, but allow override via "build_game.bat msvc"
set "COMPILER_TYPE=%~1"
if "%COMPILER_TYPE%"=="" set "COMPILER_TYPE=clang"
:: --- 1. Handle Config Choice ---
:: Default to debug config, but allow override
set "CONFIG_ARG=%~1"
if /I "%CONFIG_ARG%"=="" set "CONFIG_ARG=debug"
if /I "%CONFIG_ARG%"=="clang" set "CONFIG_ARG=debug"
if /I "%CONFIG_ARG%"=="msvc" set "CONFIG_ARG=debug"
if /I "%COMPILER_TYPE%"=="clang" (
set "PLATFORM=x64Clang"
) else (
set "PLATFORM=x64"
)
set "CONFIG=Debug"
if /I "%CONFIG_ARG%"=="profile" set "CONFIG=Profile"
if /I "%CONFIG_ARG%"=="release" set "CONFIG=Release"
:: --- 2. Generate Random ID & Setup Paths ---
set "CONFIG=Debug"
set "GAME_BUILD_ID=%RANDOM%"
set "TARGET=Game-%PLATFORM%-%CONFIG%"
set "OUT_DIR=%~dp0..\bin\%PLATFORM%-%CONFIG%"
set "OUT_DIR=%~dp0..\bin\x64-%CONFIG%"
echo --- Building %TARGET% (ID: %GAME_BUILD_ID%) ---
echo --- Building Game (ID: %GAME_BUILD_ID%) [%CONFIG%] ---
:: --- 3. Manage Lock File ---
if not exist "%OUT_DIR%" mkdir "%OUT_DIR%"
pushd "%OUT_DIR%"
:: Clean up old DLLs/PDBs in this folder to prevent clutter
del Game-*.dll Game-*.pdb > NUL 2> NUL
del Game-*.dll Game-*.pdb Game-*.ilk Game-*.exp Game-*.lib > NUL 2> NUL
echo %GAME_BUILD_ID% > lock.tmp
popd
:: --- 4. Run FASTBuild ---
:: We pass the ID via an Environment Variable so the .bff can read it
:: --- 4. Run Build System ---
:: Pass GAME_BUILD_ID environment variable so build.bat can use it
set "GAME_BUILD_ID=%GAME_BUILD_ID%"
fbuild %TARGET% -cache
call "%~dp0build.bat" %CONFIG_ARG% game
if %ERRORLEVEL% NEQ 0 (
echo.
@@ -39,6 +37,9 @@ if %ERRORLEVEL% NEQ 0 (
goto :cleanup
)
:: Copy output to Game.dll for the engine to load
copy /y "%OUT_DIR%\Game-%GAME_BUILD_ID%.dll" "%OUT_DIR%\Game.dll" > NUL
echo.
echo SUCCESS: Generated %OUT_DIR%\Game-%GAME_BUILD_ID%.dll