#include "helper.h" #include "c.h" #include "ld.h" #include "tier1/utlstring.h" CUtlVector launcher_CompiledFiles = { "launcher/launcher.cpp", }; DECLARE_BUILD_STAGE(launcher) { filesystem2->MakeDirectory(CUtlString("%s/bin",szOutputDir.GetString())); CProject_t compileProject = {}; LinkProject_t 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 = ccompiler->Compile(&compileProject); ldProject.linkType = ELINK_EXECUTABLE; CUtlString szBinaryOutput = CUtlString("%s/bin/funnygame", szOutputDir.GetString()); if (bStaticBuild) { ldProject.objects.AppendTail((Object_t){tier0_lib}); ldProject.objects.AppendTail((Object_t){tier1_lib}); ldProject.objects.AppendTail((Object_t){rapier_lib}); ldProject.objects.AppendTail((Object_t){engine_lib}); ldProject.objects.AppendTail((Object_t){server_lib}); ldProject.objects.AppendTail((Object_t){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"); filesystem2->CopyDirectory(CUtlString("%s/bin", szOutputDir.GetString()), "external/ios/SDL3.framework"); }; if (Target_t::DefaultTarget().kernel == TARGET_KERNEL_WINDOWS) { ldProject.objects.AppendTail((Object_t){"external/windows/vulkan-1.dll"}); ldProject.objects.AppendTail((Object_t){"external/windows/libSDL3.a"}); ldProject.objects.AppendTail((Object_t){"external/windows/libpthread.a"}); ldProject.objects.AppendTail((Object_t){"external/windows/libstdc++.a"}); if (bSteam) ldProject.objects.AppendTail((Object_t){"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"); filesystem2->CopyFile(CUtlString("%s/bin", szOutputDir.GetString()), "external/windows/libgcc_s_seh-1.dll"); filesystem2->CopyFile(CUtlString("%s/bin", szOutputDir.GetString()), "external/windows/libwinpthread-1.dll"); szBinaryOutput = CUtlString("%s/bin/funnygame.exe", szOutputDir.GetString()); } }; CUtlString outputProject = linker->Link(&ldProject); filesystem2->CopyFile(szBinaryOutput, outputProject); return 0; };