#include "helper.h" #include "c.h" #include "ld.h" #include "tier1/utlstring.h" #define EXTERNAL "../external/" #define FUNNYSTDLIB EXTERNAL"funnystdlib/" ADD_DEPENDENCY_BUILD_FILE(tier0, FUNNYSTDLIB"tier0/build.cpp"); ADD_DEPENDENCY_BUILD_FILE(tier1, FUNNYSTDLIB"tier1/build.cpp"); ADD_DEPENDENCY_BUILD_FILE(tier2, FUNNYSTDLIB"tier2/build.cpp"); CUtlVector MaterialSystem_CompiledFiles = { "materialsystem.cpp", "compiledshader.cpp", }; CUtlVector RenderContextVulkan_CompiledFiles = { "compiledshader.cpp", "vulkan/shaderparser.cpp", "vulkan/rendercontext.cpp", "vulkan/commandbuffer.cpp", "vulkan/rendercommandlist.cpp", "vulkan/material.cpp", "vulkan/shader.cpp", "vulkan/utils.cpp", "vulkan/vma.cpp", "vulkan/commands/draw.cpp", "vulkan/commands/transfer.cpp", "vulkan/commands/base.cpp", "vulkan/libraries/raster.cpp", EXTERNAL"volk/volk.c", "gamewindow_sdl.cpp", "stb.c", }; DECLARE_BUILD_STAGE(MaterialSystem) { CProject_t compileProject = {}; LinkProject_t ldProject = {}; compileProject.m_szName = "MaterialSystem"; compileProject.files = MaterialSystem_CompiledFiles; compileProject.includeDirectories = { "../public", FUNNYSTDLIB"public", EXTERNAL"SDL/include", }; compileProject.bFPIC = true; ldProject = ccompiler->Compile(&compileProject); ldProject.linkType = ELINK_DYNAMIC_LIBRARY; ldProject.libraryObjects = { GET_PROJECT_LIBRARY(tier0, "tier0"), }; ldProject.objects.AppendTail({GET_PROJECT_LIBRARY(tier1, "tier1")}); if (ldProject.m_target.kernel == TARGET_KERNEL_WINDOWS) { ldProject.libraryDirectories.AppendTail(EXTERNAL"windows"); }; CUtlString outputProject = linker->Link(&ldProject); ADD_OUTPUT_OBJECT("MaterialSystem", outputProject); return 0; } DECLARE_BUILD_STAGE(RenderSystemVulkan) { if (Target_t::DefaultTarget().cpu == TARGET_CPU_WASM32) return 0; CProject_t compileProject = {}; LinkProject_t ldProject = {}; compileProject.m_szName = "RenderSystemVulkan"; compileProject.files = RenderContextVulkan_CompiledFiles; compileProject.includeDirectories = { "../public", FUNNYSTDLIB"public", EXTERNAL"SDL/include", EXTERNAL"Vulkan-Headers/include", EXTERNAL"Vulkan-Utility-Libraries/include", EXTERNAL"VulkanMemoryAllocator/include", EXTERNAL"volk" }; compileProject.bFPIC = true; ldProject = ccompiler->Compile(&compileProject); ldProject.linkType = ELINK_DYNAMIC_LIBRARY; ldProject.libraryObjects = { GET_PROJECT_LIBRARY(tier0, "tier0"), }; ldProject.objects.AppendTail({GET_PROJECT_LIBRARY(tier1, "tier1")}); ldProject.libraries.AppendTail("SDL3"); if (ldProject.m_target.kernel == TARGET_KERNEL_WINDOWS) { ldProject.libraryDirectories.AppendTail(EXTERNAL"windows"); ldProject.libraries.AppendTail("winpthread-1"); ldProject.libraries.AppendTail("winmm"); ldProject.libraries.AppendTail("ole32"); ldProject.libraries.AppendTail("gdi32"); ldProject.libraries.AppendTail("oleaut32"); ldProject.libraries.AppendTail("setupapi"); ldProject.libraries.AppendTail("imm32"); ldProject.libraries.AppendTail("version"); ldProject.libraries.AppendTail("shell32"); ldProject.libraries.AppendTail("uuid"); }; CUtlString outputProject = linker->Link(&ldProject); ADD_OUTPUT_OBJECT("RenderSystemVulkan", outputProject); return 0; }