#include "helper.h" #include "c.h" #include "ld.h" #include "tier1/utlstring.h" CUtlVector launcher_CompiledFiles = { "launcher/launcher.cpp", }; int launcher_build() { IFileSystem2::MakeDirectory(CUtlString("%s/bin",szOutputDir.GetString())); CCProject compileProject = {}; CLDProject ldProject = {}; compileProject.m_szName = "launcher"; compileProject.files = launcher_CompiledFiles; compileProject.includeDirectories = all_IncludeDirectories; compileProject.bFPIC = true; if (bStaticBuild) { compileProject.macros.AppendTail((C_Macro_t){"STATIC_BUILD","1"}); } ldProject = compileProject.Compile(); ldProject.linkType = ELINK_EXECUTABLE; CUtlString szBinaryOutput = CUtlString("%s/bin/funnygame", szOutputDir.GetString()); if (bStaticBuild) { ldProject.objects.AppendTail((CObject){tier0_lib}); ldProject.objects.AppendTail((CObject){tier1_lib}); ldProject.objects.AppendTail((CObject){rapier_lib}); ldProject.objects.AppendTail((CObject){engine_lib}); ldProject.objects.AppendTail((CObject){server_lib}); ldProject.objects.AppendTail((CObject){fgui_lib}); ldProject.objects.AppendTail((CObject){client_lib}); if (Target_t::DefaultTarget().kernel == TARGET_KERNEL_IOS) { ldProject.frameworks.AppendTail("SDL3"); ldProject.frameworks.AppendTail("CoreFoundation"); ldProject.frameworks.AppendTail("CoreGraphics"); ldProject.frameworks.AppendTail("IOSurface"); ldProject.frameworks.AppendTail("Metal"); ldProject.frameworks.AppendTail("Foundation"); ldProject.frameworks.AppendTail("QuartzCore"); ldProject.frameworks.AppendTail("UIKit"); ldProject.frameworkDirectories.AppendTail("external/ios"); IFileSystem2::CopyDirectory(CUtlString("%s/bin", szOutputDir.GetString()), "external/ios/SDL3.framework"); }; if (Target_t::DefaultTarget().kernel == TARGET_KERNEL_WINDOWS) { ldProject.objects.AppendTail((CObject){"external/windows/vulkan-1.dll"}); ldProject.objects.AppendTail((CObject){"external/windows/libSDL3.a"}); ldProject.objects.AppendTail((CObject){"external/windows/libpthread.a"}); ldProject.objects.AppendTail((CObject){"external/windows/libstdc++.a"}); if (bSteam) ldProject.objects.AppendTail((CObject){"external/steamworks/redistributable_bin/win64/steam_api64.dll"}); ldProject.libraries.AppendTail("ws2_32"); ldProject.libraries.AppendTail("ntdll"); ldProject.libraries.AppendTail("userenv"); ldProject.libraries.AppendTail("winmm"); ldProject.libraries.AppendTail("ole32"); ldProject.libraries.AppendTail("setupapi"); ldProject.libraries.AppendTail("gdi32"); ldProject.libraries.AppendTail("cfgmgr32"); ldProject.libraries.AppendTail("uuid"); ldProject.libraries.AppendTail("imm32"); ldProject.libraries.AppendTail("version"); ldProject.libraries.AppendTail("oleaut32"); IFileSystem2::CopyFile(CUtlString("%s/bin", szOutputDir.GetString()), "external/windows/libgcc_s_seh-1.dll"); IFileSystem2::CopyFile(CUtlString("%s/bin", szOutputDir.GetString()), "external/windows/libwinpthread-1.dll"); szBinaryOutput = CUtlString("%s/bin/funnygame.exe", szOutputDir.GetString()); } }; CUtlString outputProject = ldProject.Link(); IFileSystem2::CopyFile(szBinaryOutput, outputProject); return 0; }; DECLARE_BUILD_STAGE(launcher, launcher_build);