Files
funnygame/launcher/build.cpp
T
2026-08-28 21:23:08 +03:00

140 lines
6.7 KiB
C++

#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<CUtlString> 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;
};