made build system more agnostic to the projet it builds
This commit is contained in:
+60
-1
@@ -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
@@ -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
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user