From d6345abb2a087d1eecd12614538c21b7d47b835b Mon Sep 17 00:00:00 2001 From: Robert Bragg Date: Sat, 22 Jul 2023 18:12:01 +0100 Subject: [PATCH] GameActivity PATCH: rename C symbols that need export Give C symbols that need to be exported a `_C` suffix so that they can be linked into a Rust symbol with the correct name (Since we can't directly export from C/C++ with Rust+Cargo) See: https://github.com/rust-lang/rfcs/issues/2771 --- .../game-activity-csrc/game-activity/GameActivity.cpp | 8 ++++++-- .../game-activity-csrc/game-activity/GameActivity.h | 2 +- .../native_app_glue/android_native_app_glue.c | 7 +++++-- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/android-activity/game-activity-csrc/game-activity/GameActivity.cpp b/android-activity/game-activity-csrc/game-activity/GameActivity.cpp index 3721b6d..4dbc9e8 100644 --- a/android-activity/game-activity-csrc/game-activity/GameActivity.cpp +++ b/android-activity/game-activity-csrc/game-activity/GameActivity.cpp @@ -485,7 +485,7 @@ static jlong initializeNativeCode_native( readConfigurationValues(code, javaConfig); - GameActivity_onCreate(code, rawSavedState, rawSavedSize); + GameActivity_onCreate_C(code, rawSavedState, rawSavedSize); code->gameTextInput = GameTextInput_init(env, 0); GameTextInput_setEventCallback(code->gameTextInput, @@ -1130,8 +1130,12 @@ extern "C" int GameActivity_register(JNIEnv *env) { NELEM(g_methods)); } +// XXX: This symbol is renamed with a _C suffix and then re-exported from +// Rust because Rust/Cargo don't give us a way to directly export symbols +// from C/C++ code: https://github.com/rust-lang/rfcs/issues/2771 +// extern "C" JNIEXPORT jlong JNICALL -Java_com_google_androidgamesdk_GameActivity_initializeNativeCode( +Java_com_google_androidgamesdk_GameActivity_initializeNativeCode_C( JNIEnv *env, jobject javaGameActivity, jstring internalDataDir, jstring obbDir, jstring externalDataDir, jobject jAssetMgr, jbyteArray savedState, jobject javaConfig) { diff --git a/android-activity/game-activity-csrc/game-activity/GameActivity.h b/android-activity/game-activity-csrc/game-activity/GameActivity.h index 702f754..b945069 100644 --- a/android-activity/game-activity-csrc/game-activity/GameActivity.h +++ b/android-activity/game-activity-csrc/game-activity/GameActivity.h @@ -296,7 +296,7 @@ typedef void GameActivity_createFunc(GameActivity* activity, void* savedState, * "android.app.func_name" string meta-data in your manifest to use a different * function. */ -extern GameActivity_createFunc GameActivity_onCreate; +extern GameActivity_createFunc GameActivity_onCreate_C; /** * Finish the given activity. Its finish() method will be called, causing it diff --git a/android-activity/game-activity-csrc/game-activity/native_app_glue/android_native_app_glue.c b/android-activity/game-activity-csrc/game-activity/native_app_glue/android_native_app_glue.c index 223c762..09a4b22 100644 --- a/android-activity/game-activity-csrc/game-activity/native_app_glue/android_native_app_glue.c +++ b/android-activity/game-activity-csrc/game-activity/native_app_glue/android_native_app_glue.c @@ -616,9 +616,12 @@ static void onContentRectChanged(GameActivity* activity, const ARect *rect) { pthread_mutex_unlock(&android_app->mutex); } - +// XXX: This symbol is renamed with a _C suffix and then re-exported from +// Rust because Rust/Cargo don't give us a way to directly export symbols +// from C/C++ code: https://github.com/rust-lang/rfcs/issues/2771 +// JNIEXPORT -void GameActivity_onCreate(GameActivity* activity, void* savedState, +void GameActivity_onCreate_C(GameActivity* activity, void* savedState, size_t savedStateSize) { LOGV("Creating: %p", activity); activity->callbacks->onDestroy = onDestroy;