diff --git a/CMakeLists.txt b/CMakeLists.txt index 392920e8..fbdb4bb3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -73,6 +73,8 @@ elseif(ANDROID) set(LOVR_USE_LUAJIT OFF) # Until buildvm re-invoke works set(LOVR_USE_SSE OFF) # Assume ARM. Technically wrong on Android X86…? set(LOVR_BUILD_SHARED ON) # Android has only "activities" + + option(LOVR_ENABLE_ANDROID "Enable the Android module" ON) elseif(UNIX) if(APPLE) set(CMAKE_MACOSX_RPATH 1) @@ -569,7 +571,7 @@ elseif(EMSCRIPTEN) target_sources(lovr PRIVATE src/platform/web.c) elseif(ANDROID) target_link_libraries(lovr log EGL GLESv3) - target_sources(lovr PRIVATE src/platform/android.c) + target_sources(lovr PRIVATE src/platform/android.c src/api/android.c) elseif(UNIX) target_sources(lovr PRIVATE src/platform/linux.c) endif() diff --git a/src/api.h b/src/api.h index 73f66f84..86e02723 100644 --- a/src/api.h +++ b/src/api.h @@ -8,6 +8,7 @@ // Module loaders LOVR_API int luaopen_lovr(lua_State* L); +LOVR_API int luaopen_lovr_android(lua_State* L); LOVR_API int luaopen_lovr_audio(lua_State* L); LOVR_API int luaopen_lovr_data(lua_State* L); LOVR_API int luaopen_lovr_event(lua_State* L); diff --git a/src/api/android.c b/src/api/android.c new file mode 100644 index 00000000..70cb23a7 --- /dev/null +++ b/src/api/android.c @@ -0,0 +1,31 @@ +#include "api.h" +#include "sds.h" + +static int l_lovrGetApplicationId(lua_State *L) { + pid_t pid = getpid(); + sds procPath = sdscatfmt(sdsempty(), "/proc/%d/cmdline", (int)pid); + FILE *procFile = fopen(procPath, "r"); + sdsfree(procPath); + if (procFile) { + sds procData = sdsempty(); + char data[64]; + int read; + while (read = fread(data, sizeof(data), 1, procFile)) { + procData = sdscatlen(procData, data, read); + } + sdsfree(procData); + } else { + lua_pushnil(L); + } + return 1; +} + +static const luaL_Reg lovrAndroid[] = { + { "getApplicationId", l_lovrGetApplicationId }, +} + +LOVR_API int luaopen_lovr_android(lua_State* L) { + lua_newtable(L); + luaL_register(L, NULL, lovrAndroid); + return 1; +} \ No newline at end of file diff --git a/src/api/lovr.c b/src/api/lovr.c index b29966dd..8f9baf15 100644 --- a/src/api/lovr.c +++ b/src/api/lovr.c @@ -6,6 +6,9 @@ const luaL_Reg lovrModules[] = { { "lovr", luaopen_lovr }, +#ifdef LOVR_ENABLE_ANDROID + { "lovr.android", luaopen_lovr_android }, +#endif #ifdef LOVR_ENABLE_AUDIO { "lovr.audio", luaopen_lovr_audio }, #endif diff --git a/src/resources/boot.lua b/src/resources/boot.lua index 034025d2..927568ee 100644 --- a/src/resources/boot.lua +++ b/src/resources/boot.lua @@ -50,6 +50,7 @@ end function lovr.boot() local conf = { modules = { + android = true, audio = true, data = true, event = true,