diff --git a/Directory.build.props b/Directory.build.props
index 97b8ab4..6b4fbd7 100644
--- a/Directory.build.props
+++ b/Directory.build.props
@@ -3,4 +3,7 @@
C:\Program Files\LLVM
19.1.0
+
+
+
diff --git a/Natvis/Juliet.natvis b/Natvis/Juliet.natvis
new file mode 100644
index 0000000..e465336
--- /dev/null
+++ b/Natvis/Juliet.natvis
@@ -0,0 +1,43 @@
+
+
+
+ {(void*)InternalPtr}
+
+ - InternalPtr
+
+
+
+
+ <null>
+ {InternalPtr}
+
+ InternalPtr
+
+
+
+
+ {{ size={Count} capacity={Capacity} }}
+
+ - Count
+ - Capacity
+
+ Count
+ Data
+
+
+
+
+
+ {Name,s} (used={Position} / reserved={ReserveSize})
+ Arena (used={Position} / reserved={ReserveSize})
+
+ - Name,s
+ - Position
+ - Committed
+ - ReserveSize
+ - Alignment
+ - Current
+ - Previous
+
+
+
diff --git a/Natvis/String.natvis b/Natvis/String.natvis
new file mode 100644
index 0000000..a4dbd86
--- /dev/null
+++ b/Natvis/String.natvis
@@ -0,0 +1,42 @@
+
+
+
+ <empty>
+ {Str,[Size]s8}
+ Str,[Size]s8
+
+ - Size
+
+ Size
+ Str
+
+
+
+
+
+ <empty>
+ {Str,[Size]su}
+ Str,[Size]su
+
+ - Size
+
+ Size
+ Str
+
+
+
+
+
+ <empty> (capacity={Capacity})
+ {Str,[Size]s8} (capacity={Capacity})
+ Str,[Size]s8
+
+ - Size
+ - Capacity
+
+ Size
+ Str
+
+
+
+
\ No newline at end of file
diff --git a/misc/build.bat b/misc/build.bat
index 71ffe50..5d965e2 100644
--- a/misc/build.bat
+++ b/misc/build.bat
@@ -9,7 +9,7 @@ cd /d "%~dp0\.."
set BUILD_TOOL=misc\build_system.exe
set BUILD_SRC=tools\build_system.c
-set BUILD_TOOL_VER=1.6
+set BUILD_TOOL_VER=1.7
set COMMAND_GEN_VS=0
@@ -177,6 +177,14 @@ if /i "!CFG!"=="Debug" (
set COMMON_LIBS=kernel32.lib user32.lib Advapi32.lib gdi32.lib dxguid.lib Ws2_32.lib dxgi.lib imm32.lib dwmapi.lib d3dcompiler.lib dxcompiler.lib shell32.lib winhttp.lib delayimp.lib
+set NATVIS_LINK_FLAGS=
+for %%F in (Natvis\*.natvis) do (
+ set "NATVIS_LINK_FLAGS=!NATVIS_LINK_FLAGS! /NATVIS:%%F"
+)
+if exist External\imgui\misc\debuggers\imgui.natvis (
+ set "NATVIS_LINK_FLAGS=!NATVIS_LINK_FLAGS! /NATVIS:External\imgui\misc\debuggers\imgui.natvis"
+)
+
if defined IMGUI_UNITY_SRCS (
echo STEP Compiling ImGui Shared Objs [!CFG!]>>"!PLAN_FILE!"
echo OUTPUT Intermediate\x64-!CFG!\ImGui_Unity1.obj>>"!PLAN_FILE!"
@@ -206,7 +214,7 @@ set "JULIET_LINK_CMD=!LINK_FLAGS!"
echo STEP Building Juliet.dll [!CFG!]>>"!PLAN_FILE!"
echo OUTPUT bin\x64-!CFG!\Juliet.dll>>"!PLAN_FILE!"
echo DEPENDS Juliet^|External\imgui^|Intermediate\x64-!CFG!\Juliet_PCH.obj>>"!PLAN_FILE!"
-echo COMMAND %COMPILER% !JULIET_LINK_CMD! /DIMGUI_API=__declspec^(dllexport^) /DJULIET_EXPORT /LD /Fe"bin\x64-!CFG!\Juliet.dll" !JULIET_INPUTS! Intermediate\x64-!CFG!\Juliet_PCH.obj %IMGUI_OBJS% /link %COMMON_LIBS% /INCREMENTAL /ILK:Intermediate\x64-!CFG!\Juliet.ilk /PDB:Intermediate\x64-!CFG!\Juliet.pdb>>"!PLAN_FILE!"
+echo COMMAND %COMPILER% !JULIET_LINK_CMD! /DIMGUI_API=__declspec^(dllexport^) /DJULIET_EXPORT /LD /Fe"bin\x64-!CFG!\Juliet.dll" !JULIET_INPUTS! Intermediate\x64-!CFG!\Juliet_PCH.obj %IMGUI_OBJS% /link %COMMON_LIBS% !NATVIS_LINK_FLAGS! /INCREMENTAL /ILK:Intermediate\x64-!CFG!\Juliet.ilk /PDB:Intermediate\x64-!CFG!\Juliet.pdb>>"!PLAN_FILE!"
:: --- Game.dll ---
if !BUILD_GAME_DLL! equ 1 (
@@ -231,7 +239,7 @@ if !BUILD_GAME_DLL! equ 1 (
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^|Intermediate\x64-!CFG!\Game_PCH.obj>>"!PLAN_FILE!"
- echo COMMAND %COMPILER% !GAME_LINK_CMD! /DIMGUI_API=__declspec^(dllimport^) /DJULIET_EXPORT /LD /Fe"bin\x64-!CFG!\!GAME_DLL_NAME!.dll" !GAME_INPUTS! Intermediate\x64-!CFG!\Game_PCH.obj /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!"
+ echo COMMAND %COMPILER% !GAME_LINK_CMD! /DIMGUI_API=__declspec^(dllimport^) /DJULIET_EXPORT /LD /Fe"bin\x64-!CFG!\!GAME_DLL_NAME!.dll" !GAME_INPUTS! Intermediate\x64-!CFG!\Game_PCH.obj /link %COMMON_LIBS% bin\x64-!CFG!\Juliet.lib !NATVIS_LINK_FLAGS! /INCREMENTAL /ILK:Intermediate\x64-!CFG!\!GAME_DLL_NAME!.ilk /PDB:Intermediate\x64-!CFG!\!GAME_DLL_NAME!.pdb>>"!PLAN_FILE!"
)
:: --- JulietApp.exe ---
@@ -254,7 +262,7 @@ if !TARGET_JULIET! equ 1 (
echo STEP Building JulietApp.exe [!CFG!]>>"!PLAN_FILE!"
echo OUTPUT bin\x64-!CFG!\JulietApp.exe>>"!PLAN_FILE!"
echo DEPENDS JulietApp^|Game^|Juliet^|External\imgui^|Intermediate\x64-!CFG!\JulietApp_PCH.obj>>"!PLAN_FILE!"
- echo COMMAND %COMPILER% !APP_LINK_CMD! /DIMGUI_API=__declspec^(dllimport^) /Fe"bin\x64-!CFG!\JulietApp.exe" !APP_INPUTS! Intermediate\x64-!CFG!\JulietApp_PCH.obj /link %COMMON_LIBS% bin\x64-!CFG!\Juliet.lib /SUBSYSTEM:CONSOLE /INCREMENTAL /ILK:Intermediate\x64-!CFG!\JulietApp.ilk /PDB:Intermediate\x64-!CFG!\JulietApp.pdb>>"!PLAN_FILE!"
+ echo COMMAND %COMPILER% !APP_LINK_CMD! /DIMGUI_API=__declspec^(dllimport^) /Fe"bin\x64-!CFG!\JulietApp.exe" !APP_INPUTS! Intermediate\x64-!CFG!\JulietApp_PCH.obj /link %COMMON_LIBS% bin\x64-!CFG!\Juliet.lib !NATVIS_LINK_FLAGS! /SUBSYSTEM:CONSOLE /INCREMENTAL /ILK:Intermediate\x64-!CFG!\JulietApp.ilk /PDB:Intermediate\x64-!CFG!\JulietApp.pdb>>"!PLAN_FILE!"
)
:: --- Romeo.exe ---
@@ -277,7 +285,7 @@ if !TARGET_ROMEO! equ 1 (
echo STEP Building Romeo.exe [!CFG!]>>"!PLAN_FILE!"
echo OUTPUT bin\x64-!CFG!\Romeo.exe>>"!PLAN_FILE!"
echo DEPENDS Romeo^|Juliet^|External\imgui^|Intermediate\x64-!CFG!\Romeo_PCH.obj>>"!PLAN_FILE!"
- echo COMMAND %COMPILER% !ROMEO_LINK_CMD! /DIMGUI_API=__declspec^(dllimport^) /Fe"bin\x64-!CFG!\Romeo.exe" !ROMEO_INPUTS! Intermediate\x64-!CFG!\Romeo_PCH.obj /link %COMMON_LIBS% bin\x64-!CFG!\Juliet.lib /SUBSYSTEM:WINDOWS /INCREMENTAL /ILK:Intermediate\x64-!CFG!\Romeo.ilk /PDB:Intermediate\x64-!CFG!\Romeo.pdb>>"!PLAN_FILE!"
+ echo COMMAND %COMPILER% !ROMEO_LINK_CMD! /DIMGUI_API=__declspec^(dllimport^) /Fe"bin\x64-!CFG!\Romeo.exe" !ROMEO_INPUTS! Intermediate\x64-!CFG!\Romeo_PCH.obj /link %COMMON_LIBS% bin\x64-!CFG!\Juliet.lib !NATVIS_LINK_FLAGS! /SUBSYSTEM:WINDOWS /INCREMENTAL /ILK:Intermediate\x64-!CFG!\Romeo.ilk /PDB:Intermediate\x64-!CFG!\Romeo.pdb>>"!PLAN_FILE!"
)
:: --- JulietShaderCompiler.exe ---
@@ -300,7 +308,7 @@ if !TARGET_SHADER! equ 1 (
echo STEP Building JulietShaderCompiler.exe [!CFG!]>>"!PLAN_FILE!"
echo OUTPUT bin\x64-!CFG!\JulietShaderCompiler.exe>>"!PLAN_FILE!"
echo DEPENDS JulietShaderCompiler^|Juliet^|Intermediate\x64-!CFG!\JulietShaderCompiler_PCH.obj>>"!PLAN_FILE!"
- echo COMMAND %COMPILER% !SHADER_LINK_CMD! /DIMGUI_API=__declspec^(dllimport^) /Fe"bin\x64-!CFG!\JulietShaderCompiler.exe" !SHADER_INPUTS! Intermediate\x64-!CFG!\JulietShaderCompiler_PCH.obj /link %COMMON_LIBS% bin\x64-!CFG!\Juliet.lib /SUBSYSTEM:CONSOLE /INCREMENTAL /ILK:Intermediate\x64-!CFG!\JulietShaderCompiler.ilk /PDB:Intermediate\x64-!CFG!\JulietShaderCompiler.pdb>>"!PLAN_FILE!"
+ echo COMMAND %COMPILER% !SHADER_LINK_CMD! /DIMGUI_API=__declspec^(dllimport^) /Fe"bin\x64-!CFG!\JulietShaderCompiler.exe" !SHADER_INPUTS! Intermediate\x64-!CFG!\JulietShaderCompiler_PCH.obj /link %COMMON_LIBS% bin\x64-!CFG!\Juliet.lib !NATVIS_LINK_FLAGS! /SUBSYSTEM:CONSOLE /INCREMENTAL /ILK:Intermediate\x64-!CFG!\JulietShaderCompiler.ilk /PDB:Intermediate\x64-!CFG!\JulietShaderCompiler.pdb>>"!PLAN_FILE!"
)
exit /b 0
diff --git a/tools/build_system.c b/tools/build_system.c
index 183d6b0..fdb2b11 100644
--- a/tools/build_system.c
+++ b/tools/build_system.c
@@ -1221,6 +1221,14 @@ static void GenerateProject(const char* projectName, const char* projectDir, con
CollectFiles(projectDir, NULL, ".inl", srcFiles);
}
+ FilePathList* natvisFiles = CreateFilePathList();
+ if (DirectoryExists("Natvis")) {
+ CollectFiles("Natvis", NULL, ".natvis", natvisFiles);
+ }
+ if (FileExists("External\\imgui\\misc\\debuggers\\imgui.natvis")) {
+ FilePathListAdd(natvisFiles, "External\\imgui\\misc\\debuggers\\imgui.natvis");
+ }
+
char* buf = (char*)ArenaPush(4 * 1024 * 1024);
int offset = 0;
@@ -1315,6 +1323,14 @@ static void GenerateProject(const char* projectName, const char* projectDir, con
}
offset += sprintf_s(buf + offset, (4 * 1024 * 1024) - offset, " \n");
+ if (natvisFiles->Count > 0) {
+ offset += sprintf_s(buf + offset, (4 * 1024 * 1024) - offset, " \n");
+ for (int i = 0; i < natvisFiles->Count; i++) {
+ offset += sprintf_s(buf + offset, (4 * 1024 * 1024) - offset, " \n", natvisFiles->Paths[i]);
+ }
+ offset += sprintf_s(buf + offset, (4 * 1024 * 1024) - offset, " \n");
+ }
+
offset += sprintf_s(buf + offset, (4 * 1024 * 1024) - offset,
" \n"
" \n"
@@ -1373,6 +1389,16 @@ static void GenerateProject(const char* projectName, const char* projectDir, con
}
}
+ if (natvisFiles->Count > 0) {
+ bool found = false;
+ for (int f = 0; f < filterCount; f++) {
+ if (_stricmp(filters[f], "Natvis") == 0) { found = true; break; }
+ }
+ if (!found && filterCount < 512) {
+ strcpy_s(filters[filterCount++], 256, "Natvis");
+ }
+ }
+
char* filterBuf = (char*)ArenaPush(4 * 1024 * 1024);
int filterOffset = 0;
filterOffset += sprintf_s(filterBuf + filterOffset, (4 * 1024 * 1024) - filterOffset,
@@ -1416,6 +1442,15 @@ static void GenerateProject(const char* projectName, const char* projectDir, con
" <%s Include=\"..\\%s\" />\n", type, path);
}
}
+
+ if (natvisFiles->Count > 0) {
+ for (int i = 0; i < natvisFiles->Count; i++) {
+ filterOffset += sprintf_s(filterBuf + filterOffset, (4 * 1024 * 1024) - filterOffset,
+ " \n"
+ " Natvis\n"
+ " \n", natvisFiles->Paths[i]);
+ }
+ }
filterOffset += sprintf_s(filterBuf + filterOffset, (4 * 1024 * 1024) - filterOffset,
" \n\n");