#include "target.h" #include "helper.h" #include "c.h" #include "ld.h" #include "tier1/utlstring.h" #include "appletool.h" ADD_DEPENDENCY_BUILD_FILE(cfg, "../buildcfg.cpp"); ADD_DEPENDENCY_BUILD_FILE(engine, "../engine/build.cpp"); ADD_DEPENDENCY_BUILD_FILE(ms, "../materialsystem/build.cpp"); ADD_DEPENDENCY_BUILD_FILE(fs, "../external/funnystdlib/stdfilesystems/build.cpp"); ADD_DEPENDENCY_BUILD_FILE(tier0, "../external/funnystdlib/tier0/build.cpp"); ADD_DEPENDENCY_BUILD_FILE(tier1, "../external/funnystdlib/tier1/build.cpp"); ADD_DEPENDENCY_BUILD_FILE(tier2, "../external/funnystdlib/tier2/build.cpp"); ADD_DEPENDENCY_BUILD_FILE(server, "../game/server/build.cpp"); ADD_DEPENDENCY_BUILD_FILE(client, "../game/client/build.cpp"); ADD_DEPENDENCY_BUILD_FILE(rapier, "../rapier/build.cpp"); #define EXTERNAL "../external/" DECLARE_BUILD_STAGE(launcher) { CProject_t compileProject = {}; LinkProject_t ldProject = {}; compileProject.m_szName = "launcher"; compileProject.files = {"launcher.cpp"}; compileProject.includeDirectories = {"../external/SDL/include"}; compileProject.m_target = Target_t::DefaultTarget(); if (compileProject.m_target.kernel == TARGET_KERNEL_ANDROID) { compileProject.files.AppendTail(EXTERNAL "android/android_native_app_glue.c"); compileProject.includeDirectories.AppendTail(EXTERNAL "android"); compileProject.bFPIC = true; } ldProject = ccompiler->Compile(&compileProject); if (compileProject.m_target.kernel == TARGET_KERNEL_ANDROID) ldProject.linkType = ELINK_DYNAMIC_LIBRARY; else ldProject.linkType = ELINK_EXECUTABLE; if (compileProject.m_target.kernel == TARGET_KERNEL_IOS) { ldProject.frameworkDirectories = {"../external/ios"}; ldProject.frameworks = {"SDL3"}; } if (compileProject.m_target.kernel == TARGET_KERNEL_ANDROID) { ldProject.libraries.AppendTail("android"); ldProject.libraries.AppendTail("log"); if (compileProject.m_target.cpu == TARGET_CPU_AARCH64) ldProject.libraryDirectories.AppendTail(EXTERNAL "android/aarch64"); } if ( GET_PROJECT_VALUE(config, "static") == "true" ) { ldProject.objects.AppendTail({GET_PROJECT_OBJECT(engine, "engine")}); ldProject.objects.AppendTail({GET_PROJECT_OBJECT(MaterialSystem, "MaterialSystem")}); ldProject.objects.AppendTail({GET_PROJECT_OBJECT(RenderSystemVulkan, "RenderSystemVulkan")}); ldProject.objects.AppendTail({GET_PROJECT_OBJECT(tier0, "libtier0")}); ldProject.objects.AppendTail({GET_PROJECT_OBJECT(tier1, "tier1")}); ldProject.objects.AppendTail({GET_PROJECT_OBJECT(tier2, "tier2")}); if (ldProject.m_target.kernel != TARGET_KERNEL_ANDROID) ldProject.objects.AppendTail({GET_PROJECT_OBJECT(filesystem_std, "libfs")}); ldProject.objects.AppendTail({GET_PROJECT_OBJECT(shadercompiler, "fs")}); ldProject.objects.AppendTail({GET_PROJECT_OBJECT(Server, "server")}); ldProject.objects.AppendTail({GET_PROJECT_OBJECT(Client, "client")}); ldProject.objects.AppendTail({GET_PROJECT_OBJECT(rapier, "physics")}); ldProject.objects.AppendTail({GET_PROJECT_OBJECT(rapier, "rapier_static")}); ldProject.libraries.AppendTail("openxr_loader"); } CUtlString outputProject = linker->Link(&ldProject); if (compileProject.m_target.kernel == TARGET_KERNEL_IOS) { AppleManifest_t manifest = {}; manifest.SetPackageName("funnygame"); manifest.SetPackageID("com.kotofyt.funnygame"); manifest.SetPackageExecutable(outputProject); CUtlString szOutputDir = manifest.BuildManifest(); filesystem2->CopyDirectory(CUtlString("%s/core/",szOutputDir.GetString()), "../funnyassets/game/maps"); filesystem2->CopyDirectory(CUtlString("%s/core/",szOutputDir.GetString()), "../funnyassets/game/models"); filesystem2->CopyDirectory(CUtlString("%s/core/",szOutputDir.GetString()), "../funnyassets/game/meshes"); filesystem2->CopyDirectory(CUtlString("%s/core/",szOutputDir.GetString()), "../funnyassets/game/materials"); filesystem2->CopyDirectory(CUtlString("%s/core/",szOutputDir.GetString()), "../funnyassets/game/textures"); filesystem2->CopyDirectory(CUtlString("%s/core/",szOutputDir.GetString()), "../funnyassets/game/physics"); filesystem2->CopyFile(CUtlString("%s/core/",szOutputDir.GetString()), "../funnyassets/game/default.cfg"); filesystem2->CopyDirectory(szOutputDir, "../external/ios/SDL3.framework"); filesystem2->CopyDirectory(CUtlString("%s/core/",szOutputDir.GetString()), "../build/funnygame/assets/game/shaders"); CUtlString szIpa = AppleTool()->BuildPackage( manifest, szOutputDir ); } if (compileProject.m_target.kernel == TARGET_KERNEL_ANDROID) { AndroidManifest_t manifest = {}; manifest.SetPackageName("funnygame"); manifest.SetPackageID("com.kotofyt.funnygame"); manifest.SetTargetSDKVersion(32); manifest.SetMinSDKVersion(32); CUtlString szOutputDir = manifest.BuildManifest(); CUtlVector libdirs = {}; CUtlString nativelibs; if (compileProject.m_target.cpu == TARGET_CPU_AARCH64) { libdirs.AppendTail(CUtlString("%s/lib/aarch64",szOutputDir.GetString())); libdirs.AppendTail(CUtlString("%s/lib/arm64-v8a",szOutputDir.GetString())); nativelibs.AppendTail(EXTERNAL "android/aarch64"); } for (auto lib: libdirs) { filesystem2->MakeDirectory(lib); filesystem2->CopyFile(CUtlString("%s/libnative-app.so",lib.GetString()), outputProject); filesystem2->CopyFile(lib, CUtlString("%s/libc++_shared.so",nativelibs.GetString())); filesystem2->CopyFile(lib, CUtlString("%s/libopenxr_loader.so",nativelibs.GetString())); filesystem2->CopyFile(lib, CUtlString("%s/libVkLayer_khronos_validation.so",nativelibs.GetString())); } manifest.AddObject("lib"); manifest.AddObject("assets"); filesystem2->MakeDirectory(CUtlString("%s/assets/game/core/",szOutputDir.GetString())); filesystem2->CopyDirectory(CUtlString("%s/assets/game/core/",szOutputDir.GetString()), "../funnyassets/maps"); filesystem2->CopyDirectory(CUtlString("%s/assets/game/core/",szOutputDir.GetString()), "../funnyassets/models"); filesystem2->CopyDirectory(CUtlString("%s/assets/game/core/",szOutputDir.GetString()), "../funnyassets/meshes"); filesystem2->CopyDirectory(CUtlString("%s/assets/game/core/",szOutputDir.GetString()), "../funnyassets/materials"); filesystem2->CopyDirectory(CUtlString("%s/assets/game/core/",szOutputDir.GetString()), "../funnyassets/textures"); filesystem2->CopyDirectory(CUtlString("%s/assets/game/core/",szOutputDir.GetString()), "../funnyassets/physics"); filesystem2->CopyFile(CUtlString("%s/assets/game/core/",szOutputDir.GetString()), "../funnyassets/default.cfg"); filesystem2->CopyDirectory(CUtlString("%s/assets/game/core/",szOutputDir.GetString()), "../build/funnygame/assets/shaders"); CUtlString szApkPackage = APKTool()->BuildPackage( manifest, szOutputDir ); APKTool()->SignPackage(szApkPackage, NULL, "kotofyt", "password1", "password1"); } ADD_OUTPUT_OBJECT("launcher", outputProject); return 0; };