From 52d2694bc7861aebbc75b8b46b1b8bfae2430b61 Mon Sep 17 00:00:00 2001 From: Eric House Date: Wed, 29 May 2019 19:16:56 -0700 Subject: [PATCH] add support for 64-bit ARM Add a third processor type to the .so, and fix first compile-time warnings and then a few dumb bugs based on assumptions about ptr sizes. Works to play networked games and browse wordlists, but is not extensively tested and needs to be before release. --- .../org/eehouse/android/xw4/BoardCanvas.java | 5 +- .../android/xw4/DictBrowseDelegate.java | 2 +- .../org/eehouse/android/xw4/ThumbCanvas.java | 2 +- .../org/eehouse/android/xw4/jni/DrawCtx.java | 2 +- .../org/eehouse/android/xw4/jni/XwJNI.java | 78 +++++++++---------- xwords4/android/jni/drawwrapper.c | 6 +- xwords4/android/jni/xwjni.c | 77 +++++++++--------- xwords4/android/scripts/getsigs.sh | 2 +- xwords4/android/scripts/ndksetup.sh | 2 +- xwords4/linux/linuxmain.c | 2 + 10 files changed, 91 insertions(+), 87 deletions(-) diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/BoardCanvas.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/BoardCanvas.java index d3270d53a..b6ae01e58 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/BoardCanvas.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/BoardCanvas.java @@ -546,9 +546,10 @@ public class BoardCanvas extends Canvas implements DrawCtx { } } - public void dictChanged( final int newPtr ) + @Override + public void dictChanged( final long newPtr ) { - int curPtr = m_dict.getDictPtr(); + long curPtr = m_dict.getDictPtr(); if ( curPtr != newPtr ) { if ( 0 == newPtr ) { m_fontDims = null; diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DictBrowseDelegate.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DictBrowseDelegate.java index 56d91b5f5..29ff4909b 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DictBrowseDelegate.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DictBrowseDelegate.java @@ -54,7 +54,7 @@ public class DictBrowseDelegate extends DelegateBase private static final int MIN_LEN = 2; private Activity m_activity; - private int m_dictClosure = 0; + private long m_dictClosure = 0L; private int m_lang; private String m_name; private DictUtils.DictLoc m_loc; diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/ThumbCanvas.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/ThumbCanvas.java index d855a757f..f49cc4939 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/ThumbCanvas.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/ThumbCanvas.java @@ -54,7 +54,7 @@ public class ThumbCanvas extends BoardCanvas { // calling us. So don't switch threads for the dict_getChars() // call @Override - public void dictChanged( int dictPtr ) + public void dictChanged( long dictPtr ) { if ( 0 != dictPtr ) { m_fontDims = null; diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/DrawCtx.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/DrawCtx.java index 68e5069f7..f41b45262 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/DrawCtx.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/DrawCtx.java @@ -81,6 +81,6 @@ public interface DrawCtx { void objFinished( /*BoardObjectType*/int typ, Rect rect ); - void dictChanged( int dictPtr ); + void dictChanged( long dictPtr ); } diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/XwJNI.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/XwJNI.java index e882d11c6..54af63004 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/XwJNI.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/jni/XwJNI.java @@ -36,19 +36,19 @@ public class XwJNI { private static final String TAG = XwJNI.class.getSimpleName(); public static class GamePtr implements AutoCloseable { - private int m_ptr = 0; + private long m_ptr = 0; private int m_refCount = 0; private long m_rowid; private String mStack; - private GamePtr( int ptr, long rowid ) + private GamePtr( long ptr, long rowid ) { m_ptr = ptr; m_rowid = rowid; mStack = android.util.Log.getStackTraceString(new Exception()); } - public synchronized int ptr() + public synchronized long ptr() { Assert.assertTrue( 0 != m_ptr ); return m_ptr; @@ -110,7 +110,7 @@ public class XwJNI { return s_JNI; } - private int m_ptr; + private long m_ptr; private XwJNI() { m_ptr = initGlobals( new DUtilCtxt(), JNIUtilsImpl.get() ); @@ -188,7 +188,7 @@ public class XwJNI { private static GamePtr initGameJNI( long rowid ) { int seed = Utils.nextRandomInt(); - int ptr = initGameJNI( getJNI().m_ptr, seed ); + long ptr = initGameJNI( getJNI().m_ptr, seed ); GamePtr result = 0 == ptr ? null : new GamePtr( ptr, rowid ); return result; } @@ -453,14 +453,14 @@ public class XwJNI { // Dicts public static class DictWrapper { - private int m_dictPtr; + private long m_dictPtr; public DictWrapper() { - m_dictPtr = 0; + m_dictPtr = 0L; } - public DictWrapper( int dictPtr ) + public DictWrapper( long dictPtr ) { m_dictPtr = dictPtr; dict_ref( dictPtr ); @@ -474,7 +474,7 @@ public class XwJNI { } } - public int getDictPtr() + public long getDictPtr() { return m_dictPtr; } @@ -487,64 +487,64 @@ public class XwJNI { } } - public static native boolean dict_tilesAreSame( int dict1, int dict2 ); - public static native String[] dict_getChars( int dict ); + public static native boolean dict_tilesAreSame( long dict1, long dict2 ); + public static native String[] dict_getChars( long dict ); public static boolean dict_getInfo( byte[] dict, String name, String path, boolean check, DictInfo info ) { return dict_getInfo( getJNI().m_ptr, dict, name, path, check, info ); } - public static native int dict_getTileValue( int dictPtr, int tile ); + public static native int dict_getTileValue( long dictPtr, int tile ); // Dict iterator public final static int MAX_COLS_DICT = 15; // from dictiter.h - public static int dict_iter_init( byte[] dict, String name, - String path ) + public static long dict_iter_init( byte[] dict, String name, + String path ) { return dict_iter_init( getJNI().m_ptr, dict, name, path ); } - public static native void dict_iter_setMinMax( int closure, + public static native void dict_iter_setMinMax( long closure, int min, int max ); - public static native void dict_iter_destroy( int closure ); - public static native int dict_iter_wordCount( int closure ); - public static native int[] dict_iter_getCounts( int closure ); - public static native String dict_iter_nthWord( int closure, int nn ); - public static native String[] dict_iter_getPrefixes( int closure ); - public static native int[] dict_iter_getIndices( int closure ); - public static native int dict_iter_getStartsWith( int closure, + public static native void dict_iter_destroy( long closure ); + public static native int dict_iter_wordCount( long closure ); + public static native int[] dict_iter_getCounts( long closure ); + public static native String dict_iter_nthWord( long closure, int nn ); + public static native String[] dict_iter_getPrefixes( long closure ); + public static native int[] dict_iter_getIndices( long closure ); + public static native int dict_iter_getStartsWith( long closure, String prefix ); - public static native String dict_iter_getDesc( int closure ); + public static native String dict_iter_getDesc( long closure ); // Private methods -- called only here - private static native int initGlobals(DUtilCtxt dutil, JNIUtils jniu); - private static native void cleanGlobals( int jniState ); - private static native byte[] gi_to_stream( int jniState, CurGameInfo gi ); - private static native void gi_from_stream( int jniState, CurGameInfo gi, + private static native long initGlobals( DUtilCtxt dutil, JNIUtils jniu ); + private static native void cleanGlobals( long jniState ); + private static native byte[] gi_to_stream( long jniState, CurGameInfo gi ); + private static native void gi_from_stream( long jniState, CurGameInfo gi, byte[] stream ); - private static native byte[] nli_to_stream( int jniState, NetLaunchInfo nli ); - private static native void nli_from_stream( int jniState, NetLaunchInfo nli, + private static native byte[] nli_to_stream( long jniState, NetLaunchInfo nli ); + private static native void nli_from_stream( long jniState, NetLaunchInfo nli, byte[] stream ); - private static native int initGameJNI( int jniState, int seed ); - private static native void envDone( int globals ); - private static native void dict_ref( int dictPtr ); - private static native void dict_unref( int dictPtr ); - private static native boolean dict_getInfo( int jniState, byte[] dict, + private static native long initGameJNI( long jniState, int seed ); + private static native void envDone( long globals ); + private static native void dict_ref( long dictPtr ); + private static native void dict_unref( long dictPtr ); + private static native boolean dict_getInfo( long jniState, byte[] dict, String name, String path, boolean check, DictInfo info ); - private static native int dict_iter_init( int jniState, byte[] dict, - String name, String path ); + private static native long dict_iter_init( long jniState, byte[] dict, + String name, String path ); private static native byte[][] - smsproto_prepOutbound( int jniState, SMS_CMD cmd, int gameID, byte[] buf, + smsproto_prepOutbound( long jniState, SMS_CMD cmd, int gameID, byte[] buf, String phone, int port, boolean forceNow, /*out*/int[] waitSecs ); - private static native SMSProtoMsg[] smsproto_prepInbound( int jniState, + private static native SMSProtoMsg[] smsproto_prepInbound( long jniState, byte[] data, String fromPhone, int wantPort); - private static native boolean haveEnv( int jniState ); + private static native boolean haveEnv( long jniState ); } diff --git a/xwords4/android/jni/drawwrapper.c b/xwords4/android/jni/drawwrapper.c index 756dce740..8d79c9e79 100644 --- a/xwords4/android/jni/drawwrapper.c +++ b/xwords4/android/jni/drawwrapper.c @@ -567,7 +567,7 @@ and_draw_dictChanged( DrawCtx* dctx, XP_S16 playerNum, if ( code != draw->curLang ) { draw->curLang = code; - DRAW_CBK_HEADER( "dictChanged", "(I)V" ); + DRAW_CBK_HEADER( "dictChanged", "(J)V" ); /* /\* create a DictWrapper object -- if the API changes to require it *\/ */ /* jclass rclass = (*env)->FindClass( env, PKG_PATH("jni/XwJNI$DictWrapper") ); */ @@ -576,7 +576,7 @@ and_draw_dictChanged( DrawCtx* dctx, XP_S16 playerNum, /* jmethodID initId = (*env)->GetMethodID( env, rclass, "", sig ); */ /* jobject jdict = (*env)->NewObject( env, rclass, initId, (int)dict ); */ - (*env)->CallVoidMethod( env, draw->jdraw, mid, (jint)dict ); + (*env)->CallVoidMethod( env, draw->jdraw, mid, (jlong)dict ); } } } @@ -653,7 +653,7 @@ makeDraw( MPFORMAL EnvThreadInfo* ti, jobject jdraw ) draw->ti = ti; MPASSIGN( draw->mpool, mpool ); - for ( int ii = 0; ii < sizeof(*draw->vtable)/4; ++ii ) { + for ( int ii = 0; ii < sizeof(*draw->vtable)/sizeof(void*); ++ii ) { ((void**)(draw->vtable))[ii] = draw_doNothing; } diff --git a/xwords4/android/jni/xwjni.c b/xwords4/android/jni/xwjni.c index 84ea1ce71..5dd852d19 100644 --- a/xwords4/android/jni/xwjni.c +++ b/xwords4/android/jni/xwjni.c @@ -111,7 +111,7 @@ releaseMPool( JNIGlobalState* globalState ) #ifdef GAMEPTR_IS_OBJECT typedef jobject GamePtrType; #else -typedef int GamePtrType; +typedef long GamePtrType; #endif #ifdef LOG_MAPPING @@ -188,7 +188,7 @@ map_thread_prv( EnvThreadInfo* ti, JNIEnv* env, const char* caller ) firstEmpty->env = env; #ifdef LOG_MAPPING firstEmpty->ownerFunc = caller; - XP_LOGF( "%s: entry %d: mapped env %p to thread %x", __func__, + XP_LOGF( "%s: entry %zu: mapped env %p to thread %x", __func__, firstEmpty - ti->entries, env, (int)self ); XP_LOGF( "%s: num entries USED now %d", __func__, countUsed(ti) ); #endif @@ -294,20 +294,21 @@ getState( JNIEnv* env, GamePtrType gamePtr, const char* func ) } #endif XP_ASSERT( NULL != gamePtr ); /* fired */ - jmethodID mid = getMethodID( env, gamePtr, "ptr", "()I" ); + jmethodID mid = getMethodID( env, gamePtr, "ptr", "()J" ); XP_ASSERT( !!mid ); - return (JNIState*)(*env)->CallIntMethod( env, gamePtr, mid ); + return (JNIState*)(*env)->CallLongMethod( env, gamePtr, mid ); } #else # define getState( env, gamePtr, func ) ((JNIState*)(gamePtr)) #endif -JNIEXPORT jint JNICALL +JNIEXPORT jlong JNICALL Java_org_eehouse_android_xw4_jni_XwJNI_initGlobals ( JNIEnv* env, jclass C, jobject jdutil, jobject jniu ) { #ifdef MEM_DEBUG MemPoolCtx* mpool = mpool_make( NULL ); + XP_LOGF( "%s(): ptr size: %zu", __func__, sizeof(mpool) ); #endif JNIGlobalState* globalState = (JNIGlobalState*)XP_CALLOC( mpool, sizeof(*globalState) ); @@ -320,12 +321,12 @@ Java_org_eehouse_android_xw4_jni_XwJNI_initGlobals globalState->smsProto = smsproto_init( MPPARM( mpool ) globalState->dutil ); MPASSIGN( globalState->mpool, mpool ); // LOG_RETURNF( "%p", globalState ); - return (jint)globalState; + return (jlong)globalState; } JNIEXPORT void JNICALL Java_org_eehouse_android_xw4_jni_XwJNI_cleanGlobals -( JNIEnv* env, jclass C, jint jniGlobalPtr ) +( JNIEnv* env, jclass C, jlong jniGlobalPtr ) { // LOG_FUNC(); if ( 0 != jniGlobalPtr ) { @@ -589,7 +590,7 @@ streamFromJStream( MPFORMAL JNIEnv* env, VTableMgr* vtMgr, jbyteArray jstream ) ****************************************************/ JNIEXPORT jbyteArray JNICALL Java_org_eehouse_android_xw4_jni_XwJNI_gi_1to_1stream -( JNIEnv* env, jclass C, jint jniGlobalPtr, jobject jgi ) +( JNIEnv* env, jclass C, jlong jniGlobalPtr, jobject jgi ) { jbyteArray result; JNIGlobalState* globalState = (JNIGlobalState*)jniGlobalPtr; @@ -611,7 +612,7 @@ Java_org_eehouse_android_xw4_jni_XwJNI_gi_1to_1stream JNIEXPORT void JNICALL Java_org_eehouse_android_xw4_jni_XwJNI_gi_1from_1stream -( JNIEnv* env, jclass C, jint jniGlobalPtr, jobject jgi, jbyteArray jstream ) +( JNIEnv* env, jclass C, jlong jniGlobalPtr, jobject jgi, jbyteArray jstream ) { JNIGlobalState* globalState = (JNIGlobalState*)jniGlobalPtr; #ifdef MEM_DEBUG @@ -637,7 +638,7 @@ Java_org_eehouse_android_xw4_jni_XwJNI_gi_1from_1stream JNIEXPORT jbyteArray JNICALL Java_org_eehouse_android_xw4_jni_XwJNI_nli_1to_1stream -( JNIEnv* env, jclass C, jint jniGlobalPtr, jobject njli ) +( JNIEnv* env, jclass C, jlong jniGlobalPtr, jobject njli ) { LOG_FUNC(); JNIGlobalState* globalState = (JNIGlobalState*)jniGlobalPtr; @@ -662,7 +663,7 @@ Java_org_eehouse_android_xw4_jni_XwJNI_nli_1to_1stream JNIEXPORT void JNICALL Java_org_eehouse_android_xw4_jni_XwJNI_nli_1from_1stream -( JNIEnv* env, jclass C, jint jniGlobalPtr, jobject jnli, jbyteArray jstream ) +( JNIEnv* env, jclass C, jlong jniGlobalPtr, jobject jnli, jbyteArray jstream ) { LOG_FUNC(); JNIGlobalState* globalState = (JNIGlobalState*)jniGlobalPtr; @@ -717,7 +718,7 @@ Java_org_eehouse_android_xw4_jni_XwJNI_comms_1getUUID JNIEXPORT void JNICALL Java_org_eehouse_android_xw4_jni_XwJNI_dict_1ref -( JNIEnv* env, jclass C, jint dictPtr ) +( JNIEnv* env, jclass C, jlong dictPtr ) { if ( 0 != dictPtr ) { DictionaryCtxt* dict = (DictionaryCtxt*)dictPtr; @@ -727,7 +728,7 @@ Java_org_eehouse_android_xw4_jni_XwJNI_dict_1ref JNIEXPORT void JNICALL Java_org_eehouse_android_xw4_jni_XwJNI_dict_1unref -( JNIEnv* env, jclass C, jint dictPtr ) +( JNIEnv* env, jclass C, jlong dictPtr ) { if ( 0 != dictPtr ) { DictionaryCtxt* dict = (DictionaryCtxt*)dictPtr; @@ -737,7 +738,7 @@ Java_org_eehouse_android_xw4_jni_XwJNI_dict_1unref JNIEXPORT jboolean JNICALL Java_org_eehouse_android_xw4_jni_XwJNI_dict_1getInfo -( JNIEnv* env, jclass C, jint jniGlobalPtr, jbyteArray jDictBytes, +( JNIEnv* env, jclass C, jlong jniGlobalPtr, jbyteArray jDictBytes, jstring jname, jstring jpath, jboolean check, jobject jinfo ) { jboolean result = false; @@ -770,7 +771,7 @@ Java_org_eehouse_android_xw4_jni_XwJNI_dict_1getInfo /* Dictionary methods: don't use gamePtr */ JNIEXPORT jboolean JNICALL Java_org_eehouse_android_xw4_jni_XwJNI_dict_1tilesAreSame -( JNIEnv* env, jclass C, jint dictPtr1, jint dictPtr2 ) +( JNIEnv* env, jclass C, jlong dictPtr1, jlong dictPtr2 ) { jboolean result; const DictionaryCtxt* dict1 = (DictionaryCtxt*)dictPtr1; @@ -783,7 +784,7 @@ Java_org_eehouse_android_xw4_jni_XwJNI_dict_1tilesAreSame JNIEXPORT jobjectArray JNICALL Java_org_eehouse_android_xw4_jni_XwJNI_dict_1getChars -( JNIEnv* env, jclass C, jint dictPtr ) +( JNIEnv* env, jclass C, jlong dictPtr ) { jobject result = NULL; result = and_dictionary_getChars( env, (DictionaryCtxt*)dictPtr ); @@ -792,7 +793,7 @@ Java_org_eehouse_android_xw4_jni_XwJNI_dict_1getChars JNIEXPORT jint JNICALL Java_org_eehouse_android_xw4_jni_XwJNI_dict_1getTileValue -( JNIEnv* env, jclass C, jint dictPtr, jint tile ) +( JNIEnv* env, jclass C, jlong dictPtr, jint tile ) { return dict_getTileValue( (DictionaryCtxt*)dictPtr, tile ); } @@ -840,7 +841,7 @@ msgArrayToJMsgArray( JNIEnv* env, const SMSMsgArray* arr ) JNIEXPORT jobjectArray JNICALL Java_org_eehouse_android_xw4_jni_XwJNI_smsproto_1prepOutbound -( JNIEnv* env, jclass C, jint jniGlobalPtr, jobject jCmd, jint jGameID, +( JNIEnv* env, jclass C, jlong jniGlobalPtr, jobject jCmd, jint jGameID, jbyteArray jData, jstring jToPhone, jint jPort, jboolean jForce, jintArray jWaitSecsArr ) { @@ -878,7 +879,7 @@ Java_org_eehouse_android_xw4_jni_XwJNI_smsproto_1prepOutbound JNIEXPORT jobjectArray JNICALL Java_org_eehouse_android_xw4_jni_XwJNI_smsproto_1prepInbound -( JNIEnv* env, jclass C, jint jniGlobalPtr, jbyteArray jData, +( JNIEnv* env, jclass C, jlong jniGlobalPtr, jbyteArray jData, jstring jFromPhone, jint jWantPort ) { jobjectArray result = NULL; @@ -933,9 +934,9 @@ struct _JNIState { #define XWJNI_END() \ } \ -JNIEXPORT jint JNICALL +JNIEXPORT jlong JNICALL Java_org_eehouse_android_xw4_jni_XwJNI_initGameJNI -( JNIEnv* env, jclass C, int jniGlobalPtr, jint seed ) +( JNIEnv* env, jclass C, jlong jniGlobalPtr, jint seed ) { #ifdef MEM_DEBUG MemPoolCtx* mpool = ((JNIGlobalState*)jniGlobalPtr)->mpool; @@ -953,12 +954,12 @@ Java_org_eehouse_android_xw4_jni_XwJNI_initGameJNI srandom( seed ); /* LOG_RETURNF( "%p", state ); */ - return (jint) state; + return (jlong) state; } JNIEXPORT void JNICALL Java_org_eehouse_android_xw4_jni_XwJNI_envDone -( JNIEnv* env, jclass C, int jniGlobalPtr ) +( JNIEnv* env, jclass C, jlong jniGlobalPtr ) { JNIGlobalState* globalJNI = (JNIGlobalState*)jniGlobalPtr; MAP_REMOVE( &globalJNI->ti, env ); @@ -2211,7 +2212,7 @@ Java_org_eehouse_android_xw4_jni_XwJNI_comms_1getAddrDisabled JNIEXPORT jboolean JNICALL Java_org_eehouse_android_xw4_jni_XwJNI_haveEnv -( JNIEnv* env, jclass C, jint jniGlobalPtr ) +( JNIEnv* env, jclass C, jlong jniGlobalPtr ) { JNIGlobalState* globalState = (JNIGlobalState*)jniGlobalPtr; jboolean result = NULL != prvEnvForMe(&globalState->ti); @@ -2263,12 +2264,12 @@ typedef struct _DictIterData { static void makeIndex( DictIterData* data ); static void freeIndices( DictIterData* data ); -JNIEXPORT jint JNICALL +JNIEXPORT jlong JNICALL Java_org_eehouse_android_xw4_jni_XwJNI_dict_1iter_1init -( JNIEnv* env, jclass C, jint jniGlobalPtr, jbyteArray jDictBytes, jstring jname, - jstring jpath ) +( JNIEnv* env, jclass C, jlong jniGlobalPtr, jbyteArray jDictBytes, + jstring jname, jstring jpath ) { - jint closure = 0; + jlong closure = 0; JNIGlobalState* globalState = (JNIGlobalState*)jniGlobalPtr; DictionaryCtxt* dict = makeDict( MPPARM(globalState->mpool) env, @@ -2284,14 +2285,14 @@ Java_org_eehouse_android_xw4_jni_XwJNI_dict_1iter_1init #ifdef MEM_DEBUG data->mpool = globalState->mpool; #endif - closure = (int)data; + closure = (jlong)data; } return closure; } JNIEXPORT void JNICALL Java_org_eehouse_android_xw4_jni_XwJNI_dict_1iter_1setMinMax -( JNIEnv* env, jclass C, jint closure, jint min, jint max ) +( JNIEnv* env, jclass C, jlong closure, jint min, jint max ) { DictIterData* data = (DictIterData*)closure; if ( NULL != data ) { @@ -2303,7 +2304,7 @@ Java_org_eehouse_android_xw4_jni_XwJNI_dict_1iter_1setMinMax JNIEXPORT void JNICALL Java_org_eehouse_android_xw4_jni_XwJNI_dict_1iter_1destroy -( JNIEnv* env, jclass C, jint closure ) +( JNIEnv* env, jclass C, jlong closure ) { DictIterData* data = (DictIterData*)closure; if ( NULL != data ) { @@ -2320,7 +2321,7 @@ Java_org_eehouse_android_xw4_jni_XwJNI_dict_1iter_1destroy JNIEXPORT jint JNICALL Java_org_eehouse_android_xw4_jni_XwJNI_dict_1iter_1wordCount -(JNIEnv* env, jclass C, jint closure ) +(JNIEnv* env, jclass C, jlong closure ) { jint result = 0; DictIterData* data = (DictIterData*)closure; @@ -2332,7 +2333,7 @@ Java_org_eehouse_android_xw4_jni_XwJNI_dict_1iter_1wordCount JNIEXPORT jintArray JNICALL Java_org_eehouse_android_xw4_jni_XwJNI_dict_1iter_1getCounts -(JNIEnv* env, jclass C, jint closure ) +(JNIEnv* env, jclass C, jlong closure ) { jintArray result = NULL; DictIterData* data = (DictIterData*)closure; @@ -2352,7 +2353,7 @@ Java_org_eehouse_android_xw4_jni_XwJNI_dict_1iter_1getCounts JNIEXPORT jobjectArray JNICALL Java_org_eehouse_android_xw4_jni_XwJNI_dict_1iter_1getPrefixes -( JNIEnv* env, jclass C, jint closure ) +( JNIEnv* env, jclass C, jlong closure ) { jobjectArray result = NULL; DictIterData* data = (DictIterData*)closure; @@ -2375,7 +2376,7 @@ Java_org_eehouse_android_xw4_jni_XwJNI_dict_1iter_1getPrefixes JNIEXPORT jintArray JNICALL Java_org_eehouse_android_xw4_jni_XwJNI_dict_1iter_1getIndices -( JNIEnv* env, jclass C , jint closure ) +( JNIEnv* env, jclass C, jlong closure ) { jintArray jindices = NULL; DictIterData* data = (DictIterData*)closure; @@ -2391,7 +2392,7 @@ Java_org_eehouse_android_xw4_jni_XwJNI_dict_1iter_1getIndices JNIEXPORT jstring JNICALL Java_org_eehouse_android_xw4_jni_XwJNI_dict_1iter_1nthWord -( JNIEnv* env, jclass C, jint closure, jint nn) +( JNIEnv* env, jclass C, jlong closure, jint nn) { jstring result = NULL; DictIterData* data = (DictIterData*)closure; @@ -2407,7 +2408,7 @@ Java_org_eehouse_android_xw4_jni_XwJNI_dict_1iter_1nthWord JNIEXPORT jint JNICALL Java_org_eehouse_android_xw4_jni_XwJNI_dict_1iter_1getStartsWith -( JNIEnv* env, jclass C, jint closure, jstring jprefix ) +( JNIEnv* env, jclass C, jlong closure, jstring jprefix ) { jint result = -1; DictIterData* data = (DictIterData*)closure; @@ -2423,7 +2424,7 @@ Java_org_eehouse_android_xw4_jni_XwJNI_dict_1iter_1getStartsWith JNIEXPORT jstring JNICALL Java_org_eehouse_android_xw4_jni_XwJNI_dict_1iter_1getDesc -( JNIEnv* env, jclass C, jint closure ) +( JNIEnv* env, jclass C, jlong closure ) { jstring result = NULL; DictIterData* data = (DictIterData*)closure; diff --git a/xwords4/android/scripts/getsigs.sh b/xwords4/android/scripts/getsigs.sh index 24fdc6942..78e1b6b24 100755 --- a/xwords4/android/scripts/getsigs.sh +++ b/xwords4/android/scripts/getsigs.sh @@ -3,7 +3,7 @@ set -e -u NODE=xw4 -VARIANT=xw4 +VARIANT=xw4NoSMS CLASSPATH=${CLASSPATH:-""} usage() { diff --git a/xwords4/android/scripts/ndksetup.sh b/xwords4/android/scripts/ndksetup.sh index da0bab45c..ca848749f 100755 --- a/xwords4/android/scripts/ndksetup.sh +++ b/xwords4/android/scripts/ndksetup.sh @@ -42,7 +42,7 @@ if [ -n "$XWORDS_DEBUG_ARMONLY" ]; then elif [ -n "$XWORDS_DEBUG_X86ONLY" ]; then echo "APP_ABI := x86" >> $TMP_MK else - echo "APP_ABI := armeabi x86" >> $TMP_MK + echo "APP_ABI := armeabi arm64-v8a x86" >> $TMP_MK fi # echo "APP_OPTIM := debug" >> $TMP_MK diff --git a/xwords4/linux/linuxmain.c b/xwords4/linux/linuxmain.c index 845e6b41d..c39445e2e 100644 --- a/xwords4/linux/linuxmain.c +++ b/xwords4/linux/linuxmain.c @@ -2049,6 +2049,8 @@ dawg2dict( const LaunchParams* params, GSList* testDicts ) int main( int argc, char** argv ) { + XP_LOGF( "%s(): ptr size: %zu", __func__, sizeof(argv) ); + int opt; int totalPlayerCount = 0; XP_Bool isServer = XP_FALSE;