#include "c.h" #include "helper.h" #include "ld.h" #include "target.h" CUtlString shadercompiler_lib; CUtlString shadercompiler_exe; DECLARE_BUILD_STAGE(libshadercompiler) { CProject_t stProject; LinkProject_t stLinkProject; CUtlString szOutput; stProject.m_szName = "shadercompiler"; stProject.m_target = Target_t::HostTarget(); stProject.bFPIC = true; stProject.includeDirectories = { "public", "external/slang/include", "external/Vulkan-Headers/include", }; stProject.files = { "shadercompiler/slang/vulkan_spirv.cpp", "materialsystem/compiledshader.cpp", }; stLinkProject = ccompiler->Compile(&stProject); stLinkProject.linkType = ELINK_STATIC_LIBRARY; szOutput = linker->Link(&stLinkProject); shadercompiler_lib = szOutput; return 1; } DECLARE_BUILD_STAGE(shadercompiler) { CProject_t stProject; LinkProject_t stLinkProject; CUtlString szOutput; stProject.m_szName = "fsc"; stProject.m_target = Target_t::HostTarget(); stProject.includeDirectories = {"public"}; stProject.files = { "shadercompiler/main.cpp", }; stLinkProject = ccompiler->Compile(&stProject); stLinkProject.linkType = ELINK_EXECUTABLE; stLinkProject.objects.AppendTail((Object_t){tier0_lib}); stLinkProject.objects.AppendTail((Object_t){tier1_lib}); stLinkProject.objects.AppendTail((Object_t){tier2_lib}); stLinkProject.objects.AppendTail((Object_t){shadercompiler_lib}); stLinkProject.libraries = {"slang-compiler","slang-glslang-2025.24.2"}; stLinkProject.libraryDirectories = {"external/linux"}; szOutput = linker->Link(&stLinkProject); filesystem2->MakeDirectory(CUtlString("%s/bin/tools", szOutputDir.GetString())); filesystem2->CopyFile(CUtlString("%s/bin/tools", szOutputDir.GetString()), szOutput); filesystem2->CopyFile(CUtlString("%s/bin/tools", szOutputDir.GetString()), "external/linux/libslang-compiler.so.0.2025.24.2"); filesystem2->CopyFile(CUtlString("%s/bin/tools", szOutputDir.GetString()), "external/linux/libslang-glslang-2025.24.2.so"); shadercompiler_exe = CUtlString("%s/bin/tools/fsc", szOutputDir.GetString()); return 1; } DECLARE_BUILD_STAGE(compileshaders) { if (CommandLine()->CheckParam("-nofsc")) return 0; CUtlVector args = {"-i", "funnyassets", "-o", "build/funnygame/assets"}; runner->Run(shadercompiler_exe, args); runner->Wait(); return 0; };