android port

This commit is contained in:
2026-08-28 21:23:08 +03:00
parent aaf298d8cc
commit eef7d2b046
41 changed files with 1428 additions and 142 deletions
+65 -22
View File
@@ -11,8 +11,12 @@ 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)
{
@@ -22,13 +26,30 @@ DECLARE_BUILD_STAGE(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);
ldProject.linkType = ELINK_EXECUTABLE;
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")});
@@ -36,10 +57,15 @@ DECLARE_BUILD_STAGE(launcher)
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(filesystem_std, "libfs")});
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);
@@ -52,16 +78,16 @@ DECLARE_BUILD_STAGE(launcher)
CUtlString szOutputDir = manifest.BuildManifest();
filesystem2->CopyDirectory(CUtlString("%s/core/",szOutputDir.GetString()), "../funnyassets/maps");
filesystem2->CopyDirectory(CUtlString("%s/core/",szOutputDir.GetString()), "../funnyassets/models");
filesystem2->CopyDirectory(CUtlString("%s/core/",szOutputDir.GetString()), "../funnyassets/meshes");
filesystem2->CopyDirectory(CUtlString("%s/core/",szOutputDir.GetString()), "../funnyassets/materials");
filesystem2->CopyDirectory(CUtlString("%s/core/",szOutputDir.GetString()), "../funnyassets/textures");
filesystem2->CopyDirectory(CUtlString("%s/core/",szOutputDir.GetString()), "../funnyassets/physics");
filesystem2->CopyFile(CUtlString("%s/core/",szOutputDir.GetString()), "../funnyassets/default.cfg");
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/shaders");
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)
@@ -74,20 +100,37 @@ DECLARE_BUILD_STAGE(launcher)
CUtlString szOutputDir = manifest.BuildManifest();
CUtlString szLibDir = CUtlString("%s/lib/%s",szOutputDir.GetString(), Target_t::StringFromCPU(compileProject.m_target.cpu));
filesystem2->MakeDirectory(szLibDir);
filesystem2->CopyFile(CUtlString("%s/libnative-app.so",szLibDir.GetString()), outputProject);
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()));
}
filesystem2->MakeDirectory(CUtlString("%s/assets/core/",szOutputDir.GetString()));
filesystem2->CopyDirectory(CUtlString("%s/assets/core/",szOutputDir.GetString()), "../funnyassets/maps");
filesystem2->CopyDirectory(CUtlString("%s/assets/core/",szOutputDir.GetString()), "../funnyassets/models");
filesystem2->CopyDirectory(CUtlString("%s/assets/core/",szOutputDir.GetString()), "../funnyassets/meshes");
filesystem2->CopyDirectory(CUtlString("%s/assets/core/",szOutputDir.GetString()), "../funnyassets/materials");
filesystem2->CopyDirectory(CUtlString("%s/assets/core/",szOutputDir.GetString()), "../funnyassets/textures");
filesystem2->CopyDirectory(CUtlString("%s/assets/core/",szOutputDir.GetString()), "../funnyassets/physics");
filesystem2->CopyFile(CUtlString("%s/assets/core/",szOutputDir.GetString()), "../funnyassets/default.cfg");
manifest.AddObject("lib");
manifest.AddObject("assets");
filesystem2->CopyDirectory(CUtlString("%s/assets/core/",szOutputDir.GetString()), "../build/funnygame/assets/shaders");
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");
}
+11 -3
View File
@@ -37,9 +37,12 @@ void *pEngineLib = NULL;
void *pTier0Lib = NULL;
typedef void (*EngineMainFn)(int argc, char** argv);
EngineMainFn pEngineMain;
extern void FunnyMain(int argc, char** argv);
extern "C" void FunnyMain(int argc, char** argv);
int main( int argc, char **argv ) {
#ifdef __ANDROID__
FunnyMain(argc, argv);
#endif
#ifdef __linux__
readlink("/proc/self/exe",szLauncherPath, MAX_PATH);
dirname(szLauncherPath);
@@ -100,14 +103,19 @@ int main( int argc, char **argv ) {
SetCurrentDirectoryA(szLauncherPath);
pEngineMain(argc, argv);
#endif
FunnyMain(argc, argv);
return 0;
};
#ifdef __ANDROID__
#include <android/log.h>
#include <android_native_app_glue.h>
struct android_app *g_android_app;
void android_main(struct android_app* app)
{
g_android_app = app;
const char *arg = "funnygame";
FunnyMain(1, (char**)&arg);
}
#endif