diff --git a/examples/minimal/src/android-bind.zig b/examples/minimal/src/android-bind.zig index 908928e..0fd96f5 100644 --- a/examples/minimal/src/android-bind.zig +++ b/examples/minimal/src/android-bind.zig @@ -109,7 +109,7 @@ const struct_unnamed_2 = extern struct { fds_bits: [16]c_ulong, }; pub const __kernel_fd_set = struct_unnamed_2; -pub const __kernel_sighandler_t = ?*const fn (c_int) callconv(.C) void; +pub const __kernel_sighandler_t = ?*const fn (c_int) callconv(.c) void; pub const __kernel_key_t = c_int; pub const __kernel_mqd_t = c_int; pub const __kernel_old_uid_t = c_ushort; @@ -445,7 +445,7 @@ const enum_unnamed_14 = enum(c_int) { ALOOPER_EVENT_INVALID = 16, _, }; -pub const ALooper_callbackFunc = ?*const fn (c_int, c_int, ?*anyopaque) callconv(.C) c_int; +pub const ALooper_callbackFunc = ?*const fn (c_int, c_int, ?*anyopaque) callconv(.c) c_int; pub extern fn ALooper_pollOnce(timeoutMillis: c_int, outFd: [*c]c_int, outEvents: [*c]c_int, outData: [*c]?*anyopaque) c_int; pub extern fn ALooper_pollAll(timeoutMillis: c_int, outFd: [*c]c_int, outEvents: [*c]c_int, outData: [*c]?*anyopaque) c_int; pub extern fn ALooper_wake(looper: ?*ALooper) void; @@ -483,11 +483,11 @@ pub const struct_JNIInvokeInterface = extern struct { reserved0: ?*anyopaque, reserved1: ?*anyopaque, reserved2: ?*anyopaque, - DestroyJavaVM: *const fn (*JavaVM) callconv(.C) jint, - AttachCurrentThread: *const fn (*JavaVM, **JNIEnv, ?*anyopaque) callconv(.C) jint, - DetachCurrentThread: *const fn (*JavaVM) callconv(.C) jint, - GetEnv: *const fn (*JavaVM, *?*anyopaque, jint) callconv(.C) jint, - AttachCurrentThreadAsDaemon: *const fn (*JavaVM, **JNIEnv, ?*anyopaque) callconv(.C) jint, + DestroyJavaVM: *const fn (*JavaVM) callconv(.c) jint, + AttachCurrentThread: *const fn (*JavaVM, **JNIEnv, ?*anyopaque) callconv(.c) jint, + DetachCurrentThread: *const fn (*JavaVM) callconv(.c) jint, + GetEnv: *const fn (*JavaVM, *?*anyopaque, jint) callconv(.c) jint, + AttachCurrentThreadAsDaemon: *const fn (*JavaVM, **JNIEnv, ?*anyopaque) callconv(.c) jint, }; pub const union_jvalue = extern union { z: jboolean, @@ -524,235 +524,235 @@ pub const JNINativeInterface = extern struct { reserved1: ?*anyopaque, reserved2: ?*anyopaque, reserved3: ?*anyopaque, - GetVersion: *const fn (*JNIEnv) callconv(.C) jint, - DefineClass: *const fn (*JNIEnv, [*:0]const u8, jobject, [*c]const jbyte, jsize) callconv(.C) jclass, - FindClass: *const fn (*JNIEnv, [*:0]const u8) callconv(.C) jclass, - FromReflectedMethod: *const fn (*JNIEnv, jobject) callconv(.C) jmethodID, - FromReflectedField: *const fn (*JNIEnv, jobject) callconv(.C) jfieldID, - ToReflectedMethod: *const fn (*JNIEnv, jclass, jmethodID, jboolean) callconv(.C) jobject, - GetSuperclass: *const fn (*JNIEnv, jclass) callconv(.C) jclass, - IsAssignableFrom: *const fn (*JNIEnv, jclass, jclass) callconv(.C) jboolean, - ToReflectedField: *const fn (*JNIEnv, jclass, jfieldID, jboolean) callconv(.C) jobject, - Throw: *const fn (*JNIEnv, jthrowable) callconv(.C) jint, - ThrowNew: *const fn (*JNIEnv, jclass, [*:0]const u8) callconv(.C) jint, - ExceptionOccurred: *const fn (*JNIEnv) callconv(.C) jthrowable, - ExceptionDescribe: *const fn (*JNIEnv) callconv(.C) void, - ExceptionClear: *const fn (*JNIEnv) callconv(.C) void, - FatalError: *const fn (*JNIEnv, [*:0]const u8) callconv(.C) void, - PushLocalFrame: *const fn (*JNIEnv, jint) callconv(.C) jint, - PopLocalFrame: *const fn (*JNIEnv, jobject) callconv(.C) jobject, - NewGlobalRef: *const fn (*JNIEnv, jobject) callconv(.C) jobject, - DeleteGlobalRef: *const fn (*JNIEnv, jobject) callconv(.C) void, - DeleteLocalRef: *const fn (*JNIEnv, jobject) callconv(.C) void, - IsSameObject: *const fn (*JNIEnv, jobject, jobject) callconv(.C) jboolean, - NewLocalRef: *const fn (*JNIEnv, jobject) callconv(.C) jobject, - EnsureLocalCapacity: *const fn (*JNIEnv, jint) callconv(.C) jint, - AllocObject: *const fn (*JNIEnv, jclass) callconv(.C) jobject, - NewObject: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.C) jobject, - NewObjectV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.C) jobject, - NewObjectA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.C) jobject, - GetObjectClass: *const fn (*JNIEnv, jobject) callconv(.C) jclass, - IsInstanceOf: *const fn (*JNIEnv, jobject, jclass) callconv(.C) jboolean, - GetMethodID: *const fn (*JNIEnv, jclass, [*:0]const u8, [*:0]const u8) callconv(.C) jmethodID, - CallObjectMethod: *const fn (*JNIEnv, jobject, jmethodID, ...) callconv(.C) jobject, - CallObjectMethodV: *const fn (*JNIEnv, jobject, jmethodID, va_list) callconv(.C) jobject, - CallObjectMethodA: *const fn (*JNIEnv, jobject, jmethodID, [*c]const jvalue) callconv(.C) jobject, - CallBooleanMethod: *const fn (*JNIEnv, jobject, jmethodID, ...) callconv(.C) jboolean, - CallBooleanMethodV: *const fn (*JNIEnv, jobject, jmethodID, va_list) callconv(.C) jboolean, - CallBooleanMethodA: *const fn (*JNIEnv, jobject, jmethodID, [*c]const jvalue) callconv(.C) jboolean, - CallByteMethod: *const fn (*JNIEnv, jobject, jmethodID, ...) callconv(.C) jbyte, - CallByteMethodV: *const fn (*JNIEnv, jobject, jmethodID, va_list) callconv(.C) jbyte, - CallByteMethodA: *const fn (*JNIEnv, jobject, jmethodID, [*c]const jvalue) callconv(.C) jbyte, - CallCharMethod: *const fn (*JNIEnv, jobject, jmethodID, ...) callconv(.C) jchar, - CallCharMethodV: *const fn (*JNIEnv, jobject, jmethodID, va_list) callconv(.C) jchar, - CallCharMethodA: *const fn (*JNIEnv, jobject, jmethodID, [*c]const jvalue) callconv(.C) jchar, - CallShortMethod: *const fn (*JNIEnv, jobject, jmethodID, ...) callconv(.C) jshort, - CallShortMethodV: *const fn (*JNIEnv, jobject, jmethodID, va_list) callconv(.C) jshort, - CallShortMethodA: *const fn (*JNIEnv, jobject, jmethodID, [*c]const jvalue) callconv(.C) jshort, - CallIntMethod: *const fn (*JNIEnv, jobject, jmethodID, ...) callconv(.C) jint, - CallIntMethodV: *const fn (*JNIEnv, jobject, jmethodID, va_list) callconv(.C) jint, - CallIntMethodA: *const fn (*JNIEnv, jobject, jmethodID, [*c]const jvalue) callconv(.C) jint, - CallLongMethod: *const fn (*JNIEnv, jobject, jmethodID, ...) callconv(.C) jlong, - CallLongMethodV: *const fn (*JNIEnv, jobject, jmethodID, va_list) callconv(.C) jlong, - CallLongMethodA: *const fn (*JNIEnv, jobject, jmethodID, [*c]const jvalue) callconv(.C) jlong, - CallFloatMethod: *const fn (*JNIEnv, jobject, jmethodID, ...) callconv(.C) jfloat, - CallFloatMethodV: *const fn (*JNIEnv, jobject, jmethodID, va_list) callconv(.C) jfloat, - CallFloatMethodA: *const fn (*JNIEnv, jobject, jmethodID, [*c]const jvalue) callconv(.C) jfloat, - CallDoubleMethod: *const fn (*JNIEnv, jobject, jmethodID, ...) callconv(.C) jdouble, - CallDoubleMethodV: *const fn (*JNIEnv, jobject, jmethodID, va_list) callconv(.C) jdouble, - CallDoubleMethodA: *const fn (*JNIEnv, jobject, jmethodID, [*c]const jvalue) callconv(.C) jdouble, - CallVoidMethod: *const fn (*JNIEnv, jobject, jmethodID, ...) callconv(.C) void, - CallVoidMethodV: *const fn (*JNIEnv, jobject, jmethodID, va_list) callconv(.C) void, - CallVoidMethodA: *const fn (*JNIEnv, jobject, jmethodID, [*c]const jvalue) callconv(.C) void, - CallNonvirtualObjectMethod: *const fn (*JNIEnv, jobject, jclass, jmethodID, ...) callconv(.C) jobject, - CallNonvirtualObjectMethodV: *const fn (*JNIEnv, jobject, jclass, jmethodID, va_list) callconv(.C) jobject, - CallNonvirtualObjectMethodA: *const fn (*JNIEnv, jobject, jclass, jmethodID, [*c]const jvalue) callconv(.C) jobject, - CallNonvirtualBooleanMethod: *const fn (*JNIEnv, jobject, jclass, jmethodID, ...) callconv(.C) jboolean, - CallNonvirtualBooleanMethodV: *const fn (*JNIEnv, jobject, jclass, jmethodID, va_list) callconv(.C) jboolean, - CallNonvirtualBooleanMethodA: *const fn (*JNIEnv, jobject, jclass, jmethodID, [*c]const jvalue) callconv(.C) jboolean, - CallNonvirtualByteMethod: *const fn (*JNIEnv, jobject, jclass, jmethodID, ...) callconv(.C) jbyte, - CallNonvirtualByteMethodV: *const fn (*JNIEnv, jobject, jclass, jmethodID, va_list) callconv(.C) jbyte, - CallNonvirtualByteMethodA: *const fn (*JNIEnv, jobject, jclass, jmethodID, [*c]const jvalue) callconv(.C) jbyte, - CallNonvirtualCharMethod: *const fn (*JNIEnv, jobject, jclass, jmethodID, ...) callconv(.C) jchar, - CallNonvirtualCharMethodV: *const fn (*JNIEnv, jobject, jclass, jmethodID, va_list) callconv(.C) jchar, - CallNonvirtualCharMethodA: *const fn (*JNIEnv, jobject, jclass, jmethodID, [*c]const jvalue) callconv(.C) jchar, - CallNonvirtualShortMethod: *const fn (*JNIEnv, jobject, jclass, jmethodID, ...) callconv(.C) jshort, - CallNonvirtualShortMethodV: *const fn (*JNIEnv, jobject, jclass, jmethodID, va_list) callconv(.C) jshort, - CallNonvirtualShortMethodA: *const fn (*JNIEnv, jobject, jclass, jmethodID, [*c]const jvalue) callconv(.C) jshort, - CallNonvirtualIntMethod: *const fn (*JNIEnv, jobject, jclass, jmethodID, ...) callconv(.C) jint, - CallNonvirtualIntMethodV: *const fn (*JNIEnv, jobject, jclass, jmethodID, va_list) callconv(.C) jint, - CallNonvirtualIntMethodA: *const fn (*JNIEnv, jobject, jclass, jmethodID, [*c]const jvalue) callconv(.C) jint, - CallNonvirtualLongMethod: *const fn (*JNIEnv, jobject, jclass, jmethodID, ...) callconv(.C) jlong, - CallNonvirtualLongMethodV: *const fn (*JNIEnv, jobject, jclass, jmethodID, va_list) callconv(.C) jlong, - CallNonvirtualLongMethodA: *const fn (*JNIEnv, jobject, jclass, jmethodID, [*c]const jvalue) callconv(.C) jlong, - CallNonvirtualFloatMethod: *const fn (*JNIEnv, jobject, jclass, jmethodID, ...) callconv(.C) jfloat, - CallNonvirtualFloatMethodV: *const fn (*JNIEnv, jobject, jclass, jmethodID, va_list) callconv(.C) jfloat, - CallNonvirtualFloatMethodA: *const fn (*JNIEnv, jobject, jclass, jmethodID, [*c]const jvalue) callconv(.C) jfloat, - CallNonvirtualDoubleMethod: *const fn (*JNIEnv, jobject, jclass, jmethodID, ...) callconv(.C) jdouble, - CallNonvirtualDoubleMethodV: *const fn (*JNIEnv, jobject, jclass, jmethodID, va_list) callconv(.C) jdouble, - CallNonvirtualDoubleMethodA: *const fn (*JNIEnv, jobject, jclass, jmethodID, [*c]const jvalue) callconv(.C) jdouble, - CallNonvirtualVoidMethod: *const fn (*JNIEnv, jobject, jclass, jmethodID, ...) callconv(.C) void, - CallNonvirtualVoidMethodV: *const fn (*JNIEnv, jobject, jclass, jmethodID, va_list) callconv(.C) void, - CallNonvirtualVoidMethodA: *const fn (*JNIEnv, jobject, jclass, jmethodID, [*c]const jvalue) callconv(.C) void, - GetFieldID: *const fn (*JNIEnv, jclass, [*:0]const u8, [*:0]const u8) callconv(.C) jfieldID, - GetObjectField: *const fn (*JNIEnv, jobject, jfieldID) callconv(.C) jobject, - GetBooleanField: *const fn (*JNIEnv, jobject, jfieldID) callconv(.C) jboolean, - GetByteField: *const fn (*JNIEnv, jobject, jfieldID) callconv(.C) jbyte, - GetCharField: *const fn (*JNIEnv, jobject, jfieldID) callconv(.C) jchar, - GetShortField: *const fn (*JNIEnv, jobject, jfieldID) callconv(.C) jshort, - GetIntField: *const fn (*JNIEnv, jobject, jfieldID) callconv(.C) jint, - GetLongField: *const fn (*JNIEnv, jobject, jfieldID) callconv(.C) jlong, - GetFloatField: *const fn (*JNIEnv, jobject, jfieldID) callconv(.C) jfloat, - GetDoubleField: *const fn (*JNIEnv, jobject, jfieldID) callconv(.C) jdouble, - SetObjectField: *const fn (*JNIEnv, jobject, jfieldID, jobject) callconv(.C) void, - SetBooleanField: *const fn (*JNIEnv, jobject, jfieldID, jboolean) callconv(.C) void, - SetByteField: *const fn (*JNIEnv, jobject, jfieldID, jbyte) callconv(.C) void, - SetCharField: *const fn (*JNIEnv, jobject, jfieldID, jchar) callconv(.C) void, - SetShortField: *const fn (*JNIEnv, jobject, jfieldID, jshort) callconv(.C) void, - SetIntField: *const fn (*JNIEnv, jobject, jfieldID, jint) callconv(.C) void, - SetLongField: *const fn (*JNIEnv, jobject, jfieldID, jlong) callconv(.C) void, - SetFloatField: *const fn (*JNIEnv, jobject, jfieldID, jfloat) callconv(.C) void, - SetDoubleField: *const fn (*JNIEnv, jobject, jfieldID, jdouble) callconv(.C) void, - GetStaticMethodID: *const fn (*JNIEnv, jclass, [*:0]const u8, [*:0]const u8) callconv(.C) jmethodID, - CallStaticObjectMethod: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.C) jobject, - CallStaticObjectMethodV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.C) jobject, - CallStaticObjectMethodA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.C) jobject, - CallStaticBooleanMethod: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.C) jboolean, - CallStaticBooleanMethodV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.C) jboolean, - CallStaticBooleanMethodA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.C) jboolean, - CallStaticByteMethod: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.C) jbyte, - CallStaticByteMethodV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.C) jbyte, - CallStaticByteMethodA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.C) jbyte, - CallStaticCharMethod: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.C) jchar, - CallStaticCharMethodV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.C) jchar, - CallStaticCharMethodA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.C) jchar, - CallStaticShortMethod: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.C) jshort, - CallStaticShortMethodV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.C) jshort, - CallStaticShortMethodA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.C) jshort, - CallStaticIntMethod: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.C) jint, - CallStaticIntMethodV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.C) jint, - CallStaticIntMethodA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.C) jint, - CallStaticLongMethod: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.C) jlong, - CallStaticLongMethodV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.C) jlong, - CallStaticLongMethodA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.C) jlong, - CallStaticFloatMethod: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.C) jfloat, - CallStaticFloatMethodV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.C) jfloat, - CallStaticFloatMethodA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.C) jfloat, - CallStaticDoubleMethod: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.C) jdouble, - CallStaticDoubleMethodV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.C) jdouble, - CallStaticDoubleMethodA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.C) jdouble, - CallStaticVoidMethod: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.C) void, - CallStaticVoidMethodV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.C) void, - CallStaticVoidMethodA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.C) void, - GetStaticFieldID: *const fn (*JNIEnv, jclass, [*:0]const u8, [*:0]const u8) callconv(.C) jfieldID, - GetStaticObjectField: *const fn (*JNIEnv, jclass, jfieldID) callconv(.C) jobject, - GetStaticBooleanField: *const fn (*JNIEnv, jclass, jfieldID) callconv(.C) jboolean, - GetStaticByteField: *const fn (*JNIEnv, jclass, jfieldID) callconv(.C) jbyte, - GetStaticCharField: *const fn (*JNIEnv, jclass, jfieldID) callconv(.C) jchar, - GetStaticShortField: *const fn (*JNIEnv, jclass, jfieldID) callconv(.C) jshort, - GetStaticIntField: *const fn (*JNIEnv, jclass, jfieldID) callconv(.C) jint, - GetStaticLongField: *const fn (*JNIEnv, jclass, jfieldID) callconv(.C) jlong, - GetStaticFloatField: *const fn (*JNIEnv, jclass, jfieldID) callconv(.C) jfloat, - GetStaticDoubleField: *const fn (*JNIEnv, jclass, jfieldID) callconv(.C) jdouble, - SetStaticObjectField: *const fn (*JNIEnv, jclass, jfieldID, jobject) callconv(.C) void, - SetStaticBooleanField: *const fn (*JNIEnv, jclass, jfieldID, jboolean) callconv(.C) void, - SetStaticByteField: *const fn (*JNIEnv, jclass, jfieldID, jbyte) callconv(.C) void, - SetStaticCharField: *const fn (*JNIEnv, jclass, jfieldID, jchar) callconv(.C) void, - SetStaticShortField: *const fn (*JNIEnv, jclass, jfieldID, jshort) callconv(.C) void, - SetStaticIntField: *const fn (*JNIEnv, jclass, jfieldID, jint) callconv(.C) void, - SetStaticLongField: *const fn (*JNIEnv, jclass, jfieldID, jlong) callconv(.C) void, - SetStaticFloatField: *const fn (*JNIEnv, jclass, jfieldID, jfloat) callconv(.C) void, - SetStaticDoubleField: *const fn (*JNIEnv, jclass, jfieldID, jdouble) callconv(.C) void, - NewString: *const fn (*JNIEnv, [*c]const jchar, jsize) callconv(.C) jstring, - GetStringLength: *const fn (*JNIEnv, jstring) callconv(.C) jsize, - GetStringChars: *const fn (*JNIEnv, jstring, [*c]jboolean) callconv(.C) [*c]const jchar, - ReleaseStringChars: *const fn (*JNIEnv, jstring, [*c]const jchar) callconv(.C) void, - NewStringUTF: *const fn (*JNIEnv, [*:0]const u8) callconv(.C) jstring, - GetStringUTFLength: *const fn (*JNIEnv, jstring) callconv(.C) jsize, - GetStringUTFChars: *const fn (*JNIEnv, jstring, [*c]jboolean) callconv(.C) [*:0]const u8, - ReleaseStringUTFChars: *const fn (*JNIEnv, jstring, [*:0]const u8) callconv(.C) void, - GetArrayLength: *const fn (*JNIEnv, jarray) callconv(.C) jsize, - NewObjectArray: *const fn (*JNIEnv, jsize, jclass, jobject) callconv(.C) jobjectArray, - GetObjectArrayElement: *const fn (*JNIEnv, jobjectArray, jsize) callconv(.C) jobject, - SetObjectArrayElement: *const fn (*JNIEnv, jobjectArray, jsize, jobject) callconv(.C) void, - NewBooleanArray: *const fn (*JNIEnv, jsize) callconv(.C) jbooleanArray, - NewByteArray: *const fn (*JNIEnv, jsize) callconv(.C) jbyteArray, - NewCharArray: *const fn (*JNIEnv, jsize) callconv(.C) jcharArray, - NewShortArray: *const fn (*JNIEnv, jsize) callconv(.C) jshortArray, - NewIntArray: *const fn (*JNIEnv, jsize) callconv(.C) jintArray, - NewLongArray: *const fn (*JNIEnv, jsize) callconv(.C) jlongArray, - NewFloatArray: *const fn (*JNIEnv, jsize) callconv(.C) jfloatArray, - NewDoubleArray: *const fn (*JNIEnv, jsize) callconv(.C) jdoubleArray, - GetBooleanArrayElements: *const fn (*JNIEnv, jbooleanArray, [*c]jboolean) callconv(.C) [*c]jboolean, - GetByteArrayElements: *const fn (*JNIEnv, jbyteArray, [*c]jboolean) callconv(.C) [*c]jbyte, - GetCharArrayElements: *const fn (*JNIEnv, jcharArray, [*c]jboolean) callconv(.C) [*c]jchar, - GetShortArrayElements: *const fn (*JNIEnv, jshortArray, [*c]jboolean) callconv(.C) [*c]jshort, - GetIntArrayElements: *const fn (*JNIEnv, jintArray, [*c]jboolean) callconv(.C) [*c]jint, - GetLongArrayElements: *const fn (*JNIEnv, jlongArray, [*c]jboolean) callconv(.C) [*c]jlong, - GetFloatArrayElements: *const fn (*JNIEnv, jfloatArray, [*c]jboolean) callconv(.C) [*c]jfloat, - GetDoubleArrayElements: *const fn (*JNIEnv, jdoubleArray, [*c]jboolean) callconv(.C) [*c]jdouble, - ReleaseBooleanArrayElements: *const fn (*JNIEnv, jbooleanArray, [*c]jboolean, jint) callconv(.C) void, - ReleaseByteArrayElements: *const fn (*JNIEnv, jbyteArray, [*c]jbyte, jint) callconv(.C) void, - ReleaseCharArrayElements: *const fn (*JNIEnv, jcharArray, [*c]jchar, jint) callconv(.C) void, - ReleaseShortArrayElements: *const fn (*JNIEnv, jshortArray, [*c]jshort, jint) callconv(.C) void, - ReleaseIntArrayElements: *const fn (*JNIEnv, jintArray, [*c]jint, jint) callconv(.C) void, - ReleaseLongArrayElements: *const fn (*JNIEnv, jlongArray, [*c]jlong, jint) callconv(.C) void, - ReleaseFloatArrayElements: *const fn (*JNIEnv, jfloatArray, [*c]jfloat, jint) callconv(.C) void, - ReleaseDoubleArrayElements: *const fn (*JNIEnv, jdoubleArray, [*c]jdouble, jint) callconv(.C) void, - GetBooleanArrayRegion: *const fn (*JNIEnv, jbooleanArray, jsize, jsize, [*c]jboolean) callconv(.C) void, - GetByteArrayRegion: *const fn (*JNIEnv, jbyteArray, jsize, jsize, [*c]jbyte) callconv(.C) void, - GetCharArrayRegion: *const fn (*JNIEnv, jcharArray, jsize, jsize, [*c]jchar) callconv(.C) void, - GetShortArrayRegion: *const fn (*JNIEnv, jshortArray, jsize, jsize, [*c]jshort) callconv(.C) void, - GetIntArrayRegion: *const fn (*JNIEnv, jintArray, jsize, jsize, [*c]jint) callconv(.C) void, - GetLongArrayRegion: *const fn (*JNIEnv, jlongArray, jsize, jsize, [*c]jlong) callconv(.C) void, - GetFloatArrayRegion: *const fn (*JNIEnv, jfloatArray, jsize, jsize, [*c]jfloat) callconv(.C) void, - GetDoubleArrayRegion: *const fn (*JNIEnv, jdoubleArray, jsize, jsize, [*c]jdouble) callconv(.C) void, - SetBooleanArrayRegion: *const fn (*JNIEnv, jbooleanArray, jsize, jsize, [*c]const jboolean) callconv(.C) void, - SetByteArrayRegion: *const fn (*JNIEnv, jbyteArray, jsize, jsize, [*c]const jbyte) callconv(.C) void, - SetCharArrayRegion: *const fn (*JNIEnv, jcharArray, jsize, jsize, [*c]const jchar) callconv(.C) void, - SetShortArrayRegion: *const fn (*JNIEnv, jshortArray, jsize, jsize, [*c]const jshort) callconv(.C) void, - SetIntArrayRegion: *const fn (*JNIEnv, jintArray, jsize, jsize, [*c]const jint) callconv(.C) void, - SetLongArrayRegion: *const fn (*JNIEnv, jlongArray, jsize, jsize, [*c]const jlong) callconv(.C) void, - SetFloatArrayRegion: *const fn (*JNIEnv, jfloatArray, jsize, jsize, [*c]const jfloat) callconv(.C) void, - SetDoubleArrayRegion: *const fn (*JNIEnv, jdoubleArray, jsize, jsize, [*c]const jdouble) callconv(.C) void, - RegisterNatives: *const fn (*JNIEnv, jclass, [*c]const JNINativeMethod, jint) callconv(.C) jint, - UnregisterNatives: *const fn (*JNIEnv, jclass) callconv(.C) jint, - MonitorEnter: *const fn (*JNIEnv, jobject) callconv(.C) jint, - MonitorExit: *const fn (*JNIEnv, jobject) callconv(.C) jint, - GetJavaVM: *const fn (*JNIEnv, [*c][*c]JavaVM) callconv(.C) jint, - GetStringRegion: *const fn (*JNIEnv, jstring, jsize, jsize, [*c]jchar) callconv(.C) void, - GetStringUTFRegion: *const fn (*JNIEnv, jstring, jsize, jsize, [*c]u8) callconv(.C) void, - GetPrimitiveArrayCritical: *const fn (*JNIEnv, jarray, [*c]jboolean) callconv(.C) ?*anyopaque, - ReleasePrimitiveArrayCritical: *const fn (*JNIEnv, jarray, ?*anyopaque, jint) callconv(.C) void, - GetStringCritical: *const fn (*JNIEnv, jstring, [*c]jboolean) callconv(.C) [*c]const jchar, - ReleaseStringCritical: *const fn (*JNIEnv, jstring, [*c]const jchar) callconv(.C) void, - NewWeakGlobalRef: *const fn (*JNIEnv, jobject) callconv(.C) jweak, - DeleteWeakGlobalRef: *const fn (*JNIEnv, jweak) callconv(.C) void, - ExceptionCheck: *const fn (*JNIEnv) callconv(.C) jboolean, - NewDirectByteBuffer: *const fn (*JNIEnv, ?*anyopaque, jlong) callconv(.C) jobject, - GetDirectBufferAddress: *const fn (*JNIEnv, jobject) callconv(.C) ?*anyopaque, - GetDirectBufferCapacity: *const fn (*JNIEnv, jobject) callconv(.C) jlong, - GetObjectRefType: *const fn (*JNIEnv, jobject) callconv(.C) jobjectRefType, + GetVersion: *const fn (*JNIEnv) callconv(.c) jint, + DefineClass: *const fn (*JNIEnv, [*:0]const u8, jobject, [*c]const jbyte, jsize) callconv(.c) jclass, + FindClass: *const fn (*JNIEnv, [*:0]const u8) callconv(.c) jclass, + FromReflectedMethod: *const fn (*JNIEnv, jobject) callconv(.c) jmethodID, + FromReflectedField: *const fn (*JNIEnv, jobject) callconv(.c) jfieldID, + ToReflectedMethod: *const fn (*JNIEnv, jclass, jmethodID, jboolean) callconv(.c) jobject, + GetSuperclass: *const fn (*JNIEnv, jclass) callconv(.c) jclass, + IsAssignableFrom: *const fn (*JNIEnv, jclass, jclass) callconv(.c) jboolean, + ToReflectedField: *const fn (*JNIEnv, jclass, jfieldID, jboolean) callconv(.c) jobject, + Throw: *const fn (*JNIEnv, jthrowable) callconv(.c) jint, + ThrowNew: *const fn (*JNIEnv, jclass, [*:0]const u8) callconv(.c) jint, + ExceptionOccurred: *const fn (*JNIEnv) callconv(.c) jthrowable, + ExceptionDescribe: *const fn (*JNIEnv) callconv(.c) void, + ExceptionClear: *const fn (*JNIEnv) callconv(.c) void, + FatalError: *const fn (*JNIEnv, [*:0]const u8) callconv(.c) void, + PushLocalFrame: *const fn (*JNIEnv, jint) callconv(.c) jint, + PopLocalFrame: *const fn (*JNIEnv, jobject) callconv(.c) jobject, + NewGlobalRef: *const fn (*JNIEnv, jobject) callconv(.c) jobject, + DeleteGlobalRef: *const fn (*JNIEnv, jobject) callconv(.c) void, + DeleteLocalRef: *const fn (*JNIEnv, jobject) callconv(.c) void, + IsSameObject: *const fn (*JNIEnv, jobject, jobject) callconv(.c) jboolean, + NewLocalRef: *const fn (*JNIEnv, jobject) callconv(.c) jobject, + EnsureLocalCapacity: *const fn (*JNIEnv, jint) callconv(.c) jint, + AllocObject: *const fn (*JNIEnv, jclass) callconv(.c) jobject, + NewObject: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.c) jobject, + NewObjectV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.c) jobject, + NewObjectA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.c) jobject, + GetObjectClass: *const fn (*JNIEnv, jobject) callconv(.c) jclass, + IsInstanceOf: *const fn (*JNIEnv, jobject, jclass) callconv(.c) jboolean, + GetMethodID: *const fn (*JNIEnv, jclass, [*:0]const u8, [*:0]const u8) callconv(.c) jmethodID, + CallObjectMethod: *const fn (*JNIEnv, jobject, jmethodID, ...) callconv(.c) jobject, + CallObjectMethodV: *const fn (*JNIEnv, jobject, jmethodID, va_list) callconv(.c) jobject, + CallObjectMethodA: *const fn (*JNIEnv, jobject, jmethodID, [*c]const jvalue) callconv(.c) jobject, + CallBooleanMethod: *const fn (*JNIEnv, jobject, jmethodID, ...) callconv(.c) jboolean, + CallBooleanMethodV: *const fn (*JNIEnv, jobject, jmethodID, va_list) callconv(.c) jboolean, + CallBooleanMethodA: *const fn (*JNIEnv, jobject, jmethodID, [*c]const jvalue) callconv(.c) jboolean, + CallByteMethod: *const fn (*JNIEnv, jobject, jmethodID, ...) callconv(.c) jbyte, + CallByteMethodV: *const fn (*JNIEnv, jobject, jmethodID, va_list) callconv(.c) jbyte, + CallByteMethodA: *const fn (*JNIEnv, jobject, jmethodID, [*c]const jvalue) callconv(.c) jbyte, + CallCharMethod: *const fn (*JNIEnv, jobject, jmethodID, ...) callconv(.c) jchar, + CallCharMethodV: *const fn (*JNIEnv, jobject, jmethodID, va_list) callconv(.c) jchar, + CallCharMethodA: *const fn (*JNIEnv, jobject, jmethodID, [*c]const jvalue) callconv(.c) jchar, + CallShortMethod: *const fn (*JNIEnv, jobject, jmethodID, ...) callconv(.c) jshort, + CallShortMethodV: *const fn (*JNIEnv, jobject, jmethodID, va_list) callconv(.c) jshort, + CallShortMethodA: *const fn (*JNIEnv, jobject, jmethodID, [*c]const jvalue) callconv(.c) jshort, + CallIntMethod: *const fn (*JNIEnv, jobject, jmethodID, ...) callconv(.c) jint, + CallIntMethodV: *const fn (*JNIEnv, jobject, jmethodID, va_list) callconv(.c) jint, + CallIntMethodA: *const fn (*JNIEnv, jobject, jmethodID, [*c]const jvalue) callconv(.c) jint, + CallLongMethod: *const fn (*JNIEnv, jobject, jmethodID, ...) callconv(.c) jlong, + CallLongMethodV: *const fn (*JNIEnv, jobject, jmethodID, va_list) callconv(.c) jlong, + CallLongMethodA: *const fn (*JNIEnv, jobject, jmethodID, [*c]const jvalue) callconv(.c) jlong, + CallFloatMethod: *const fn (*JNIEnv, jobject, jmethodID, ...) callconv(.c) jfloat, + CallFloatMethodV: *const fn (*JNIEnv, jobject, jmethodID, va_list) callconv(.c) jfloat, + CallFloatMethodA: *const fn (*JNIEnv, jobject, jmethodID, [*c]const jvalue) callconv(.c) jfloat, + CallDoubleMethod: *const fn (*JNIEnv, jobject, jmethodID, ...) callconv(.c) jdouble, + CallDoubleMethodV: *const fn (*JNIEnv, jobject, jmethodID, va_list) callconv(.c) jdouble, + CallDoubleMethodA: *const fn (*JNIEnv, jobject, jmethodID, [*c]const jvalue) callconv(.c) jdouble, + CallVoidMethod: *const fn (*JNIEnv, jobject, jmethodID, ...) callconv(.c) void, + CallVoidMethodV: *const fn (*JNIEnv, jobject, jmethodID, va_list) callconv(.c) void, + CallVoidMethodA: *const fn (*JNIEnv, jobject, jmethodID, [*c]const jvalue) callconv(.c) void, + CallNonvirtualObjectMethod: *const fn (*JNIEnv, jobject, jclass, jmethodID, ...) callconv(.c) jobject, + CallNonvirtualObjectMethodV: *const fn (*JNIEnv, jobject, jclass, jmethodID, va_list) callconv(.c) jobject, + CallNonvirtualObjectMethodA: *const fn (*JNIEnv, jobject, jclass, jmethodID, [*c]const jvalue) callconv(.c) jobject, + CallNonvirtualBooleanMethod: *const fn (*JNIEnv, jobject, jclass, jmethodID, ...) callconv(.c) jboolean, + CallNonvirtualBooleanMethodV: *const fn (*JNIEnv, jobject, jclass, jmethodID, va_list) callconv(.c) jboolean, + CallNonvirtualBooleanMethodA: *const fn (*JNIEnv, jobject, jclass, jmethodID, [*c]const jvalue) callconv(.c) jboolean, + CallNonvirtualByteMethod: *const fn (*JNIEnv, jobject, jclass, jmethodID, ...) callconv(.c) jbyte, + CallNonvirtualByteMethodV: *const fn (*JNIEnv, jobject, jclass, jmethodID, va_list) callconv(.c) jbyte, + CallNonvirtualByteMethodA: *const fn (*JNIEnv, jobject, jclass, jmethodID, [*c]const jvalue) callconv(.c) jbyte, + CallNonvirtualCharMethod: *const fn (*JNIEnv, jobject, jclass, jmethodID, ...) callconv(.c) jchar, + CallNonvirtualCharMethodV: *const fn (*JNIEnv, jobject, jclass, jmethodID, va_list) callconv(.c) jchar, + CallNonvirtualCharMethodA: *const fn (*JNIEnv, jobject, jclass, jmethodID, [*c]const jvalue) callconv(.c) jchar, + CallNonvirtualShortMethod: *const fn (*JNIEnv, jobject, jclass, jmethodID, ...) callconv(.c) jshort, + CallNonvirtualShortMethodV: *const fn (*JNIEnv, jobject, jclass, jmethodID, va_list) callconv(.c) jshort, + CallNonvirtualShortMethodA: *const fn (*JNIEnv, jobject, jclass, jmethodID, [*c]const jvalue) callconv(.c) jshort, + CallNonvirtualIntMethod: *const fn (*JNIEnv, jobject, jclass, jmethodID, ...) callconv(.c) jint, + CallNonvirtualIntMethodV: *const fn (*JNIEnv, jobject, jclass, jmethodID, va_list) callconv(.c) jint, + CallNonvirtualIntMethodA: *const fn (*JNIEnv, jobject, jclass, jmethodID, [*c]const jvalue) callconv(.c) jint, + CallNonvirtualLongMethod: *const fn (*JNIEnv, jobject, jclass, jmethodID, ...) callconv(.c) jlong, + CallNonvirtualLongMethodV: *const fn (*JNIEnv, jobject, jclass, jmethodID, va_list) callconv(.c) jlong, + CallNonvirtualLongMethodA: *const fn (*JNIEnv, jobject, jclass, jmethodID, [*c]const jvalue) callconv(.c) jlong, + CallNonvirtualFloatMethod: *const fn (*JNIEnv, jobject, jclass, jmethodID, ...) callconv(.c) jfloat, + CallNonvirtualFloatMethodV: *const fn (*JNIEnv, jobject, jclass, jmethodID, va_list) callconv(.c) jfloat, + CallNonvirtualFloatMethodA: *const fn (*JNIEnv, jobject, jclass, jmethodID, [*c]const jvalue) callconv(.c) jfloat, + CallNonvirtualDoubleMethod: *const fn (*JNIEnv, jobject, jclass, jmethodID, ...) callconv(.c) jdouble, + CallNonvirtualDoubleMethodV: *const fn (*JNIEnv, jobject, jclass, jmethodID, va_list) callconv(.c) jdouble, + CallNonvirtualDoubleMethodA: *const fn (*JNIEnv, jobject, jclass, jmethodID, [*c]const jvalue) callconv(.c) jdouble, + CallNonvirtualVoidMethod: *const fn (*JNIEnv, jobject, jclass, jmethodID, ...) callconv(.c) void, + CallNonvirtualVoidMethodV: *const fn (*JNIEnv, jobject, jclass, jmethodID, va_list) callconv(.c) void, + CallNonvirtualVoidMethodA: *const fn (*JNIEnv, jobject, jclass, jmethodID, [*c]const jvalue) callconv(.c) void, + GetFieldID: *const fn (*JNIEnv, jclass, [*:0]const u8, [*:0]const u8) callconv(.c) jfieldID, + GetObjectField: *const fn (*JNIEnv, jobject, jfieldID) callconv(.c) jobject, + GetBooleanField: *const fn (*JNIEnv, jobject, jfieldID) callconv(.c) jboolean, + GetByteField: *const fn (*JNIEnv, jobject, jfieldID) callconv(.c) jbyte, + GetCharField: *const fn (*JNIEnv, jobject, jfieldID) callconv(.c) jchar, + GetShortField: *const fn (*JNIEnv, jobject, jfieldID) callconv(.c) jshort, + GetIntField: *const fn (*JNIEnv, jobject, jfieldID) callconv(.c) jint, + GetLongField: *const fn (*JNIEnv, jobject, jfieldID) callconv(.c) jlong, + GetFloatField: *const fn (*JNIEnv, jobject, jfieldID) callconv(.c) jfloat, + GetDoubleField: *const fn (*JNIEnv, jobject, jfieldID) callconv(.c) jdouble, + SetObjectField: *const fn (*JNIEnv, jobject, jfieldID, jobject) callconv(.c) void, + SetBooleanField: *const fn (*JNIEnv, jobject, jfieldID, jboolean) callconv(.c) void, + SetByteField: *const fn (*JNIEnv, jobject, jfieldID, jbyte) callconv(.c) void, + SetCharField: *const fn (*JNIEnv, jobject, jfieldID, jchar) callconv(.c) void, + SetShortField: *const fn (*JNIEnv, jobject, jfieldID, jshort) callconv(.c) void, + SetIntField: *const fn (*JNIEnv, jobject, jfieldID, jint) callconv(.c) void, + SetLongField: *const fn (*JNIEnv, jobject, jfieldID, jlong) callconv(.c) void, + SetFloatField: *const fn (*JNIEnv, jobject, jfieldID, jfloat) callconv(.c) void, + SetDoubleField: *const fn (*JNIEnv, jobject, jfieldID, jdouble) callconv(.c) void, + GetStaticMethodID: *const fn (*JNIEnv, jclass, [*:0]const u8, [*:0]const u8) callconv(.c) jmethodID, + CallStaticObjectMethod: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.c) jobject, + CallStaticObjectMethodV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.c) jobject, + CallStaticObjectMethodA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.c) jobject, + CallStaticBooleanMethod: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.c) jboolean, + CallStaticBooleanMethodV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.c) jboolean, + CallStaticBooleanMethodA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.c) jboolean, + CallStaticByteMethod: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.c) jbyte, + CallStaticByteMethodV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.c) jbyte, + CallStaticByteMethodA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.c) jbyte, + CallStaticCharMethod: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.c) jchar, + CallStaticCharMethodV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.c) jchar, + CallStaticCharMethodA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.c) jchar, + CallStaticShortMethod: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.c) jshort, + CallStaticShortMethodV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.c) jshort, + CallStaticShortMethodA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.c) jshort, + CallStaticIntMethod: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.c) jint, + CallStaticIntMethodV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.c) jint, + CallStaticIntMethodA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.c) jint, + CallStaticLongMethod: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.c) jlong, + CallStaticLongMethodV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.c) jlong, + CallStaticLongMethodA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.c) jlong, + CallStaticFloatMethod: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.c) jfloat, + CallStaticFloatMethodV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.c) jfloat, + CallStaticFloatMethodA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.c) jfloat, + CallStaticDoubleMethod: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.c) jdouble, + CallStaticDoubleMethodV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.c) jdouble, + CallStaticDoubleMethodA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.c) jdouble, + CallStaticVoidMethod: *const fn (*JNIEnv, jclass, jmethodID, ...) callconv(.c) void, + CallStaticVoidMethodV: *const fn (*JNIEnv, jclass, jmethodID, va_list) callconv(.c) void, + CallStaticVoidMethodA: *const fn (*JNIEnv, jclass, jmethodID, [*c]const jvalue) callconv(.c) void, + GetStaticFieldID: *const fn (*JNIEnv, jclass, [*:0]const u8, [*:0]const u8) callconv(.c) jfieldID, + GetStaticObjectField: *const fn (*JNIEnv, jclass, jfieldID) callconv(.c) jobject, + GetStaticBooleanField: *const fn (*JNIEnv, jclass, jfieldID) callconv(.c) jboolean, + GetStaticByteField: *const fn (*JNIEnv, jclass, jfieldID) callconv(.c) jbyte, + GetStaticCharField: *const fn (*JNIEnv, jclass, jfieldID) callconv(.c) jchar, + GetStaticShortField: *const fn (*JNIEnv, jclass, jfieldID) callconv(.c) jshort, + GetStaticIntField: *const fn (*JNIEnv, jclass, jfieldID) callconv(.c) jint, + GetStaticLongField: *const fn (*JNIEnv, jclass, jfieldID) callconv(.c) jlong, + GetStaticFloatField: *const fn (*JNIEnv, jclass, jfieldID) callconv(.c) jfloat, + GetStaticDoubleField: *const fn (*JNIEnv, jclass, jfieldID) callconv(.c) jdouble, + SetStaticObjectField: *const fn (*JNIEnv, jclass, jfieldID, jobject) callconv(.c) void, + SetStaticBooleanField: *const fn (*JNIEnv, jclass, jfieldID, jboolean) callconv(.c) void, + SetStaticByteField: *const fn (*JNIEnv, jclass, jfieldID, jbyte) callconv(.c) void, + SetStaticCharField: *const fn (*JNIEnv, jclass, jfieldID, jchar) callconv(.c) void, + SetStaticShortField: *const fn (*JNIEnv, jclass, jfieldID, jshort) callconv(.c) void, + SetStaticIntField: *const fn (*JNIEnv, jclass, jfieldID, jint) callconv(.c) void, + SetStaticLongField: *const fn (*JNIEnv, jclass, jfieldID, jlong) callconv(.c) void, + SetStaticFloatField: *const fn (*JNIEnv, jclass, jfieldID, jfloat) callconv(.c) void, + SetStaticDoubleField: *const fn (*JNIEnv, jclass, jfieldID, jdouble) callconv(.c) void, + NewString: *const fn (*JNIEnv, [*c]const jchar, jsize) callconv(.c) jstring, + GetStringLength: *const fn (*JNIEnv, jstring) callconv(.c) jsize, + GetStringChars: *const fn (*JNIEnv, jstring, [*c]jboolean) callconv(.c) [*c]const jchar, + ReleaseStringChars: *const fn (*JNIEnv, jstring, [*c]const jchar) callconv(.c) void, + NewStringUTF: *const fn (*JNIEnv, [*:0]const u8) callconv(.c) jstring, + GetStringUTFLength: *const fn (*JNIEnv, jstring) callconv(.c) jsize, + GetStringUTFChars: *const fn (*JNIEnv, jstring, [*c]jboolean) callconv(.c) [*:0]const u8, + ReleaseStringUTFChars: *const fn (*JNIEnv, jstring, [*:0]const u8) callconv(.c) void, + GetArrayLength: *const fn (*JNIEnv, jarray) callconv(.c) jsize, + NewObjectArray: *const fn (*JNIEnv, jsize, jclass, jobject) callconv(.c) jobjectArray, + GetObjectArrayElement: *const fn (*JNIEnv, jobjectArray, jsize) callconv(.c) jobject, + SetObjectArrayElement: *const fn (*JNIEnv, jobjectArray, jsize, jobject) callconv(.c) void, + NewBooleanArray: *const fn (*JNIEnv, jsize) callconv(.c) jbooleanArray, + NewByteArray: *const fn (*JNIEnv, jsize) callconv(.c) jbyteArray, + NewCharArray: *const fn (*JNIEnv, jsize) callconv(.c) jcharArray, + NewShortArray: *const fn (*JNIEnv, jsize) callconv(.c) jshortArray, + NewIntArray: *const fn (*JNIEnv, jsize) callconv(.c) jintArray, + NewLongArray: *const fn (*JNIEnv, jsize) callconv(.c) jlongArray, + NewFloatArray: *const fn (*JNIEnv, jsize) callconv(.c) jfloatArray, + NewDoubleArray: *const fn (*JNIEnv, jsize) callconv(.c) jdoubleArray, + GetBooleanArrayElements: *const fn (*JNIEnv, jbooleanArray, [*c]jboolean) callconv(.c) [*c]jboolean, + GetByteArrayElements: *const fn (*JNIEnv, jbyteArray, [*c]jboolean) callconv(.c) [*c]jbyte, + GetCharArrayElements: *const fn (*JNIEnv, jcharArray, [*c]jboolean) callconv(.c) [*c]jchar, + GetShortArrayElements: *const fn (*JNIEnv, jshortArray, [*c]jboolean) callconv(.c) [*c]jshort, + GetIntArrayElements: *const fn (*JNIEnv, jintArray, [*c]jboolean) callconv(.c) [*c]jint, + GetLongArrayElements: *const fn (*JNIEnv, jlongArray, [*c]jboolean) callconv(.c) [*c]jlong, + GetFloatArrayElements: *const fn (*JNIEnv, jfloatArray, [*c]jboolean) callconv(.c) [*c]jfloat, + GetDoubleArrayElements: *const fn (*JNIEnv, jdoubleArray, [*c]jboolean) callconv(.c) [*c]jdouble, + ReleaseBooleanArrayElements: *const fn (*JNIEnv, jbooleanArray, [*c]jboolean, jint) callconv(.c) void, + ReleaseByteArrayElements: *const fn (*JNIEnv, jbyteArray, [*c]jbyte, jint) callconv(.c) void, + ReleaseCharArrayElements: *const fn (*JNIEnv, jcharArray, [*c]jchar, jint) callconv(.c) void, + ReleaseShortArrayElements: *const fn (*JNIEnv, jshortArray, [*c]jshort, jint) callconv(.c) void, + ReleaseIntArrayElements: *const fn (*JNIEnv, jintArray, [*c]jint, jint) callconv(.c) void, + ReleaseLongArrayElements: *const fn (*JNIEnv, jlongArray, [*c]jlong, jint) callconv(.c) void, + ReleaseFloatArrayElements: *const fn (*JNIEnv, jfloatArray, [*c]jfloat, jint) callconv(.c) void, + ReleaseDoubleArrayElements: *const fn (*JNIEnv, jdoubleArray, [*c]jdouble, jint) callconv(.c) void, + GetBooleanArrayRegion: *const fn (*JNIEnv, jbooleanArray, jsize, jsize, [*c]jboolean) callconv(.c) void, + GetByteArrayRegion: *const fn (*JNIEnv, jbyteArray, jsize, jsize, [*c]jbyte) callconv(.c) void, + GetCharArrayRegion: *const fn (*JNIEnv, jcharArray, jsize, jsize, [*c]jchar) callconv(.c) void, + GetShortArrayRegion: *const fn (*JNIEnv, jshortArray, jsize, jsize, [*c]jshort) callconv(.c) void, + GetIntArrayRegion: *const fn (*JNIEnv, jintArray, jsize, jsize, [*c]jint) callconv(.c) void, + GetLongArrayRegion: *const fn (*JNIEnv, jlongArray, jsize, jsize, [*c]jlong) callconv(.c) void, + GetFloatArrayRegion: *const fn (*JNIEnv, jfloatArray, jsize, jsize, [*c]jfloat) callconv(.c) void, + GetDoubleArrayRegion: *const fn (*JNIEnv, jdoubleArray, jsize, jsize, [*c]jdouble) callconv(.c) void, + SetBooleanArrayRegion: *const fn (*JNIEnv, jbooleanArray, jsize, jsize, [*c]const jboolean) callconv(.c) void, + SetByteArrayRegion: *const fn (*JNIEnv, jbyteArray, jsize, jsize, [*c]const jbyte) callconv(.c) void, + SetCharArrayRegion: *const fn (*JNIEnv, jcharArray, jsize, jsize, [*c]const jchar) callconv(.c) void, + SetShortArrayRegion: *const fn (*JNIEnv, jshortArray, jsize, jsize, [*c]const jshort) callconv(.c) void, + SetIntArrayRegion: *const fn (*JNIEnv, jintArray, jsize, jsize, [*c]const jint) callconv(.c) void, + SetLongArrayRegion: *const fn (*JNIEnv, jlongArray, jsize, jsize, [*c]const jlong) callconv(.c) void, + SetFloatArrayRegion: *const fn (*JNIEnv, jfloatArray, jsize, jsize, [*c]const jfloat) callconv(.c) void, + SetDoubleArrayRegion: *const fn (*JNIEnv, jdoubleArray, jsize, jsize, [*c]const jdouble) callconv(.c) void, + RegisterNatives: *const fn (*JNIEnv, jclass, [*c]const JNINativeMethod, jint) callconv(.c) jint, + UnregisterNatives: *const fn (*JNIEnv, jclass) callconv(.c) jint, + MonitorEnter: *const fn (*JNIEnv, jobject) callconv(.c) jint, + MonitorExit: *const fn (*JNIEnv, jobject) callconv(.c) jint, + GetJavaVM: *const fn (*JNIEnv, [*c][*c]JavaVM) callconv(.c) jint, + GetStringRegion: *const fn (*JNIEnv, jstring, jsize, jsize, [*c]jchar) callconv(.c) void, + GetStringUTFRegion: *const fn (*JNIEnv, jstring, jsize, jsize, [*c]u8) callconv(.c) void, + GetPrimitiveArrayCritical: *const fn (*JNIEnv, jarray, [*c]jboolean) callconv(.c) ?*anyopaque, + ReleasePrimitiveArrayCritical: *const fn (*JNIEnv, jarray, ?*anyopaque, jint) callconv(.c) void, + GetStringCritical: *const fn (*JNIEnv, jstring, [*c]jboolean) callconv(.c) [*c]const jchar, + ReleaseStringCritical: *const fn (*JNIEnv, jstring, [*c]const jchar) callconv(.c) void, + NewWeakGlobalRef: *const fn (*JNIEnv, jobject) callconv(.c) jweak, + DeleteWeakGlobalRef: *const fn (*JNIEnv, jweak) callconv(.c) void, + ExceptionCheck: *const fn (*JNIEnv) callconv(.c) jboolean, + NewDirectByteBuffer: *const fn (*JNIEnv, ?*anyopaque, jlong) callconv(.c) jobject, + GetDirectBufferAddress: *const fn (*JNIEnv, jobject) callconv(.c) ?*anyopaque, + GetDirectBufferCapacity: *const fn (*JNIEnv, jobject) callconv(.c) jlong, + GetObjectRefType: *const fn (*JNIEnv, jobject) callconv(.c) jobjectRefType, }; pub const struct__JNIEnv = extern struct { functions: [*c]const JNINativeInterface, @@ -1996,22 +1996,22 @@ pub extern fn ANativeWindow_setBuffersTransform(window: ?*ANativeWindow, transfo pub extern fn ANativeWindow_setBuffersDataSpace(window: ?*ANativeWindow, dataSpace: i32) i32; pub extern fn ANativeWindow_getBuffersDataSpace(window: ?*ANativeWindow) i32; pub const ANativeActivityCallbacks = extern struct { - onStart: ?*const fn (*ANativeActivity) callconv(.C) void, - onResume: ?*const fn (*ANativeActivity) callconv(.C) void, - onSaveInstanceState: ?*const fn (*ANativeActivity, *usize) callconv(.C) ?[*]u8, - onPause: ?*const fn (*ANativeActivity) callconv(.C) void, - onStop: ?*const fn (*ANativeActivity) callconv(.C) void, - onDestroy: ?*const fn (*ANativeActivity) callconv(.C) void, - onWindowFocusChanged: ?*const fn (*ANativeActivity, c_int) callconv(.C) void, - onNativeWindowCreated: ?*const fn (*ANativeActivity, *ANativeWindow) callconv(.C) void, - onNativeWindowResized: ?*const fn (*ANativeActivity, *ANativeWindow) callconv(.C) void, - onNativeWindowRedrawNeeded: ?*const fn (*ANativeActivity, *ANativeWindow) callconv(.C) void, - onNativeWindowDestroyed: ?*const fn (*ANativeActivity, *ANativeWindow) callconv(.C) void, - onInputQueueCreated: ?*const fn (*ANativeActivity, *AInputQueue) callconv(.C) void, - onInputQueueDestroyed: ?*const fn (*ANativeActivity, *AInputQueue) callconv(.C) void, - onContentRectChanged: ?*const fn (*ANativeActivity, *const ARect) callconv(.C) void, - onConfigurationChanged: ?*const fn (*ANativeActivity) callconv(.C) void, - onLowMemory: ?*const fn (*ANativeActivity) callconv(.C) void, + onStart: ?*const fn (*ANativeActivity) callconv(.c) void, + onResume: ?*const fn (*ANativeActivity) callconv(.c) void, + onSaveInstanceState: ?*const fn (*ANativeActivity, *usize) callconv(.c) ?[*]u8, + onPause: ?*const fn (*ANativeActivity) callconv(.c) void, + onStop: ?*const fn (*ANativeActivity) callconv(.c) void, + onDestroy: ?*const fn (*ANativeActivity) callconv(.c) void, + onWindowFocusChanged: ?*const fn (*ANativeActivity, c_int) callconv(.c) void, + onNativeWindowCreated: ?*const fn (*ANativeActivity, *ANativeWindow) callconv(.c) void, + onNativeWindowResized: ?*const fn (*ANativeActivity, *ANativeWindow) callconv(.c) void, + onNativeWindowRedrawNeeded: ?*const fn (*ANativeActivity, *ANativeWindow) callconv(.c) void, + onNativeWindowDestroyed: ?*const fn (*ANativeActivity, *ANativeWindow) callconv(.c) void, + onInputQueueCreated: ?*const fn (*ANativeActivity, *AInputQueue) callconv(.c) void, + onInputQueueDestroyed: ?*const fn (*ANativeActivity, *AInputQueue) callconv(.c) void, + onContentRectChanged: ?*const fn (*ANativeActivity, *const ARect) callconv(.c) void, + onConfigurationChanged: ?*const fn (*ANativeActivity) callconv(.c) void, + onLowMemory: ?*const fn (*ANativeActivity) callconv(.c) void, }; pub const ANativeActivity = extern struct { callbacks: *ANativeActivityCallbacks, @@ -2025,7 +2025,7 @@ pub const ANativeActivity = extern struct { assetManager: ?*AAssetManager, obbPath: [*:0]const u8, }; -pub const ANativeActivity_createFunc = *const fn ([*c]ANativeActivity, ?*anyopaque, usize) callconv(.C) void; +pub const ANativeActivity_createFunc = *const fn ([*c]ANativeActivity, ?*anyopaque, usize) callconv(.c) void; pub extern fn ANativeActivity_finish(activity: [*c]ANativeActivity) void; pub extern fn ANativeActivity_setWindowFormat(activity: [*c]ANativeActivity, format: i32) void; @@ -2624,4 +2624,4 @@ pub const AHardwareBuffer_UsageFlags = enum_AHardwareBuffer_UsageFlags; pub const ANativeWindow_LegacyFormat = enum_ANativeWindow_LegacyFormat; pub const ANativeWindowTransform = enum_ANativeWindowTransform; -pub extern fn __system_property_get(name: [*:0]const u8, value: [*]u8) callconv(.C) c_int; +pub extern fn __system_property_get(name: [*:0]const u8, value: [*]u8) callconv(.c) c_int; diff --git a/examples/minimal/src/minimal.zig b/examples/minimal/src/minimal.zig index f589421..06ea918 100644 --- a/examples/minimal/src/minimal.zig +++ b/examples/minimal/src/minimal.zig @@ -37,7 +37,7 @@ fn nativeActivityOnCreate(activity: *androidbind.ANativeActivity, savedState: [] \\ App pid: {} \\ Build mode: {s} \\ ABI: {s}-{s}-{s} - \\ Compiler version: {} + \\ Compiler version: {}.{}.{} \\ Compiler backend: {s} , .{ "Minimal App", // build_options.app_name, @@ -48,7 +48,9 @@ fn nativeActivityOnCreate(activity: *androidbind.ANativeActivity, savedState: [] @tagName(builtin.cpu.arch), @tagName(builtin.os.tag), @tagName(builtin.abi), - builtin.zig_version, + builtin.zig_version.major, + builtin.zig_version.minor, + builtin.zig_version.patch, @tagName(builtin.zig_backend), }); @@ -81,7 +83,7 @@ comptime { } /// Android entry point -fn NativeActivity_onCreate(activity: *androidbind.ANativeActivity, rawSavedState: ?[*]u8, rawSavedStateSize: usize) callconv(.C) void { +fn NativeActivity_onCreate(activity: *androidbind.ANativeActivity, rawSavedState: ?[*]u8, rawSavedStateSize: usize) callconv(.c) void { const savedState: []const u8 = if (rawSavedState) |s| s[0..rawSavedStateSize] else @@ -147,7 +149,7 @@ fn makeNativeActivityGlue(comptime App: type) androidbind.ANativeActivityCallbac } // return value must be created with malloc(), so we pass the c_allocator to App.onSaveInstanceState - fn onSaveInstanceState(activity: *androidbind.ANativeActivity, outSize: *usize) callconv(.C) ?[*]u8 { + fn onSaveInstanceState(activity: *androidbind.ANativeActivity, outSize: *usize) callconv(.c) ?[*]u8 { outSize.* = 0; if (!@hasDecl(App, "onSaveInstanceState")) { log.debug("ANativeActivity callback onSaveInstanceState not available on {s}", .{@typeName(App)}); @@ -162,52 +164,52 @@ fn makeNativeActivityGlue(comptime App: type) androidbind.ANativeActivityCallbac return null; } - fn onDestroy(activity: *androidbind.ANativeActivity) callconv(.C) void { + fn onDestroy(activity: *androidbind.ANativeActivity) callconv(.c) void { const instance = activity.instance orelse return; const app: *App = @ptrCast(@alignCast(instance)); app.deinit(); std.heap.c_allocator.destroy(app); } - fn onStart(activity: *androidbind.ANativeActivity) callconv(.C) void { + fn onStart(activity: *androidbind.ANativeActivity) callconv(.c) void { invoke(activity, "onStart", .{}); } - fn onResume(activity: *androidbind.ANativeActivity) callconv(.C) void { + fn onResume(activity: *androidbind.ANativeActivity) callconv(.c) void { invoke(activity, "onResume", .{}); } - fn onPause(activity: *androidbind.ANativeActivity) callconv(.C) void { + fn onPause(activity: *androidbind.ANativeActivity) callconv(.c) void { invoke(activity, "onPause", .{}); } - fn onStop(activity: *androidbind.ANativeActivity) callconv(.C) void { + fn onStop(activity: *androidbind.ANativeActivity) callconv(.c) void { invoke(activity, "onStop", .{}); } - fn onConfigurationChanged(activity: *androidbind.ANativeActivity) callconv(.C) void { + fn onConfigurationChanged(activity: *androidbind.ANativeActivity) callconv(.c) void { invoke(activity, "onConfigurationChanged", .{}); } - fn onLowMemory(activity: *androidbind.ANativeActivity) callconv(.C) void { + fn onLowMemory(activity: *androidbind.ANativeActivity) callconv(.c) void { invoke(activity, "onLowMemory", .{}); } - fn onWindowFocusChanged(activity: *androidbind.ANativeActivity, hasFocus: c_int) callconv(.C) void { + fn onWindowFocusChanged(activity: *androidbind.ANativeActivity, hasFocus: c_int) callconv(.c) void { invoke(activity, "onWindowFocusChanged", .{(hasFocus != 0)}); } - fn onNativeWindowCreated(activity: *androidbind.ANativeActivity, window: *androidbind.ANativeWindow) callconv(.C) void { + fn onNativeWindowCreated(activity: *androidbind.ANativeActivity, window: *androidbind.ANativeWindow) callconv(.c) void { invoke(activity, "onNativeWindowCreated", .{window}); } - fn onNativeWindowResized(activity: *androidbind.ANativeActivity, window: *androidbind.ANativeWindow) callconv(.C) void { + fn onNativeWindowResized(activity: *androidbind.ANativeActivity, window: *androidbind.ANativeWindow) callconv(.c) void { invoke(activity, "onNativeWindowResized", .{window}); } - fn onNativeWindowRedrawNeeded(activity: *androidbind.ANativeActivity, window: *androidbind.ANativeWindow) callconv(.C) void { + fn onNativeWindowRedrawNeeded(activity: *androidbind.ANativeActivity, window: *androidbind.ANativeWindow) callconv(.c) void { invoke(activity, "onNativeWindowRedrawNeeded", .{window}); } - fn onNativeWindowDestroyed(activity: *androidbind.ANativeActivity, window: *androidbind.ANativeWindow) callconv(.C) void { + fn onNativeWindowDestroyed(activity: *androidbind.ANativeActivity, window: *androidbind.ANativeWindow) callconv(.c) void { invoke(activity, "onNativeWindowDestroyed", .{window}); } - fn onInputQueueCreated(activity: *androidbind.ANativeActivity, input_queue: *androidbind.AInputQueue) callconv(.C) void { + fn onInputQueueCreated(activity: *androidbind.ANativeActivity, input_queue: *androidbind.AInputQueue) callconv(.c) void { invoke(activity, "onInputQueueCreated", .{input_queue}); } - fn onInputQueueDestroyed(activity: *androidbind.ANativeActivity, input_queue: *androidbind.AInputQueue) callconv(.C) void { + fn onInputQueueDestroyed(activity: *androidbind.ANativeActivity, input_queue: *androidbind.AInputQueue) callconv(.c) void { invoke(activity, "onInputQueueDestroyed", .{input_queue}); } - fn onContentRectChanged(activity: *androidbind.ANativeActivity, rect: *const androidbind.ARect) callconv(.C) void { + fn onContentRectChanged(activity: *androidbind.ANativeActivity, rect: *const androidbind.ARect) callconv(.c) void { invoke(activity, "onContentRectChanged", .{rect}); } }; diff --git a/examples/sdl2/src/sdl-zig-demo.zig b/examples/sdl2/src/sdl-zig-demo.zig index 31f0ecc..5123269 100644 --- a/examples/sdl2/src/sdl-zig-demo.zig +++ b/examples/sdl2/src/sdl-zig-demo.zig @@ -27,7 +27,7 @@ comptime { } /// This needs to be exported for Android builds -fn SDL_main() callconv(.C) void { +fn SDL_main() callconv(.c) void { if (comptime builtin.abi.isAndroid()) { _ = std.start.callMain(); } else { diff --git a/examples/sdl2/third-party/sdl2/build.zig b/examples/sdl2/third-party/sdl2/build.zig index d882be3..359ca59 100644 --- a/examples/sdl2/third-party/sdl2/build.zig +++ b/examples/sdl2/third-party/sdl2/build.zig @@ -10,16 +10,14 @@ pub fn build(b: *std.Build) !void { const sdl_include_path = sdl_path.path(b, "include"); const is_shared_library = target.result.abi.isAndroid(); // NOTE(jae): 2024-09-22: Android uses shared library as SDL2 loads it as part of SDLActivity.java - const lib = if (!is_shared_library) b.addStaticLibrary(.{ + const lib = b.addLibrary(.{ .name = "SDL2", - .target = target, - .optimize = optimize, - .link_libc = true, - }) else b.addSharedLibrary(.{ - .name = "SDL2", - .target = target, - .optimize = optimize, - .link_libc = true, + .root_module = b.createModule(.{ + .target = target, + .optimize = optimize, + .link_libc = true, + }), + .linkage = if (is_shared_library) .dynamic else .static, }); lib.addCSourceFiles(.{ diff --git a/src/android/android.zig b/src/android/android.zig index 9712d8c..c8abbd8 100644 --- a/src/android/android.zig +++ b/src/android/android.zig @@ -103,7 +103,10 @@ const LogWriter = struct { line_len: usize = 0, const Error = error{}; - const Writer = std.io.Writer(*@This(), Error, write); + const Writer = if (builtin.zig_version.major == 0 and builtin.zig_version.minor == 14) + std.io.Writer(*@This(), Error, write) + else + std.io.GenericWriter(*@This(), Error, write); fn write(self: *@This(), buffer: []const u8) Error!usize { for (buffer) |char| { @@ -168,8 +171,11 @@ const Panic = struct { /// This is used to catch and handle panics triggered by the panic handler. threadlocal var panic_stage: usize = 0; + const is_zig_014_or_less = (builtin.zig_version.major == 0 and builtin.zig_version.minor <= 14); + fn panic(message: []const u8, ret_addr: ?usize) noreturn { @branchHint(.cold); + if (!is_zig_014_or_less) @compileError("Android Panic needs to be updated to the newer io.Writer vtable implementation to work in Zig 0.15.0+"); if (comptime !builtin.abi.isAndroid()) @compileError("do not use Android panic for non-Android builds"); const first_trace_addr = ret_addr orelse @returnAddress(); panicImpl(first_trace_addr, message); @@ -223,12 +229,6 @@ const Panic = struct { } const io = struct { - const tty = struct { - inline fn detectConfig(_: *LogWriter) std.io.tty.Config { - return .no_color; - } - }; - var writer = LogWriter{ .level = .fatal, }; @@ -307,14 +307,13 @@ const Panic = struct { fn dumpStackTrace(stack_trace: std.builtin.StackTrace) void { nosuspend { + const stderr = io.getStdErr().writer(); if (comptime builtin.target.cpu.arch.isWasm()) { if (native_os == .wasi) { - const stderr = io.getStdErr().writer(); stderr.print("Unable to dump stack trace: not implemented for Wasm\n", .{}) catch return; } return; } - const stderr = io.getStdErr().writer(); if (builtin.strip_debug_info) { stderr.print("Unable to dump stack trace: debug info stripped\n", .{}) catch return; return; @@ -325,13 +324,13 @@ const Panic = struct { }; if (builtin.zig_version.major == 0 and builtin.zig_version.minor == 13) { // Legacy 0.13.0 - writeStackTrace(stack_trace, stderr, getDebugInfoAllocator(), debug_info, io.tty.detectConfig(io.getStdErr())) catch |err| { + writeStackTrace(stack_trace, stderr, getDebugInfoAllocator(), debug_info, .no_color) catch |err| { stderr.print("Unable to dump stack trace: {s}\n", .{@errorName(err)}) catch return; return; }; } else { // 0.14.0-dev+ - writeStackTrace(stack_trace, stderr, debug_info, io.tty.detectConfig(io.getStdErr())) catch |err| { + writeStackTrace(stack_trace, stderr, debug_info, .no_color) catch |err| { stderr.print("Unable to dump stack trace: {s}\n", .{@errorName(err)}) catch return; return; }; @@ -342,14 +341,13 @@ const Panic = struct { const writeCurrentStackTrace = std.debug.writeCurrentStackTrace; fn dumpCurrentStackTrace(start_addr: ?usize) void { nosuspend { + const stderr = io.getStdErr().writer(); if (comptime builtin.target.cpu.arch.isWasm()) { if (native_os == .wasi) { - const stderr = io.getStdErr().writer(); stderr.print("Unable to dump stack trace: not implemented for Wasm\n", .{}) catch return; } return; } - const stderr = io.getStdErr().writer(); if (builtin.strip_debug_info) { stderr.print("Unable to dump stack trace: debug info stripped\n", .{}) catch return; return; @@ -358,7 +356,7 @@ const Panic = struct { stderr.print("Unable to dump stack trace: Unable to open debug info: {s}\n", .{@errorName(err)}) catch return; return; }; - writeCurrentStackTrace(stderr, debug_info, io.tty.detectConfig(io.getStdErr()), start_addr) catch |err| { + writeCurrentStackTrace(stderr, debug_info, .no_color, start_addr) catch |err| { stderr.print("Unable to dump stack trace: {s}\n", .{@errorName(err)}) catch return; return; }; diff --git a/src/androidbuild/androidbuild.zig b/src/androidbuild/androidbuild.zig index 0f7901b..9d91f16 100644 --- a/src/androidbuild/androidbuild.zig +++ b/src/androidbuild/androidbuild.zig @@ -100,7 +100,10 @@ pub fn runNameContext(comptime name: []const u8) []const u8 { pub fn printErrorsAndExit(message: []const u8, errors: []const []const u8) noreturn { nosuspend { log.err("{s}", .{message}); - const stderr = std.io.getStdErr().writer(); + const stderr = if (builtin.zig_version.major == 0 and builtin.zig_version.minor <= 14) + std.io.getStdErr().writer() + else + std.fs.File.stderr(); std.debug.lockStdErr(); defer std.debug.unlockStdErr(); for (errors) |err| { @@ -108,14 +111,14 @@ pub fn printErrorsAndExit(message: []const u8, errors: []const []const u8) noret const headline = it.next() orelse continue; stderr.writeAll("- ") catch {}; stderr.writeAll(headline) catch {}; - stderr.writeByte('\n') catch {}; + stderr.writeAll("\n") catch {}; while (it.next()) |line| { stderr.writeAll(" ") catch {}; stderr.writeAll(line) catch {}; - stderr.writeByte('\n') catch {}; + stderr.writeAll("\n") catch {}; } } - stderr.writeByte('\n') catch {}; + stderr.writeAll("\n") catch {}; } std.process.exit(1); } diff --git a/src/androidbuild/apk.zig b/src/androidbuild/apk.zig index dc7bdb8..2cecb5a 100644 --- a/src/androidbuild/apk.zig +++ b/src/androidbuild/apk.zig @@ -786,7 +786,7 @@ fn applyLibLinkCppWorkaroundIssue19(apk: *Apk, artifact: *Step.Compile) void { const b = apk.b; const should_apply_fix = (artifact.root_module.link_libcpp == true or - artifact.dependsOnSystemLibrary("c++abi_zig_workaround")); + dependsOnSystemLibrary(artifact, "c++abi_zig_workaround")); if (!should_apply_fix) { return; } @@ -821,6 +821,22 @@ fn applyLibLinkCppWorkaroundIssue19(apk: *Apk, artifact: *Step.Compile) void { } } +/// Copy-paste of "dependsOnSystemLibrary" that only checks if that system library is included to +/// workaround a bug with in Zig 0.15.0-dev.1092+d772c0627 +fn dependsOnSystemLibrary(compile: *Step.Compile, name: []const u8) bool { + for (compile.getCompileDependencies(true)) |some_compile| { + for (some_compile.root_module.getGraph().modules) |mod| { + for (mod.link_objects.items) |lo| { + switch (lo) { + .system_lib => |lib| if (std.mem.eql(u8, lib.name, name)) return true, + else => {}, + } + } + } + } + return false; +} + fn updateSharedLibraryOptions(artifact: *std.Build.Step.Compile) void { if (artifact.linkage) |linkage| { if (linkage != .dynamic) { diff --git a/src/androidbuild/builtin_options_update.zig b/src/androidbuild/builtin_options_update.zig index b85f574..14187de 100644 --- a/src/androidbuild/builtin_options_update.zig +++ b/src/androidbuild/builtin_options_update.zig @@ -41,9 +41,11 @@ fn make(step: *Step, _: Build.Step.MakeOptions) !void { const builtin_options_update: *BuiltinOptionsUpdate = @fieldParentPtr("step", step); const options = builtin_options_update.options; - const package_name_path = builtin_options_update.package_name_stdout.getPath2(b, step); + const package_name_path = builtin_options_update.package_name_stdout.getPath3(b, step); - const file = try fs.openFileAbsolute(package_name_path, .{}); + // NOTE(jae): 2025-07-23 + // As of Zig 0.15.0-dev.1092+d772c0627, package_name_path.openFile("") is not possible as it assumes you're appending *something* + const file = try package_name_path.root_dir.handle.openFile(package_name_path.sub_path, .{}); // Read package name from stdout and strip line feed / carriage return // ie. "com.zig.sdl2\n\r" diff --git a/src/androidbuild/d8glob.zig b/src/androidbuild/d8glob.zig index 63b898e..9fd3000 100644 --- a/src/androidbuild/d8glob.zig +++ b/src/androidbuild/d8glob.zig @@ -48,7 +48,7 @@ fn make(step: *Step, _: Build.Step.MakeOptions) !void { const glob: *@This() = @fieldParentPtr("step", step); const d8 = glob.run; - const search_dir = glob.dir.getPath2(b, step); + const search_dir = glob.dir.getPath3(b, step); // NOTE(jae): 2024-09-22 // Change current working directory to where the Java classes are @@ -62,8 +62,11 @@ fn make(step: *Step, _: Build.Step.MakeOptions) !void { // - If "d8" has the ability to pass a file of command line parameters, that would work too but I haven't seen any in the docs d8.setCwd(glob.dir); - var dir = try fs.openDirAbsolute(search_dir, .{ .iterate = true }); + // NOTE(jae): 2025-07-23 + // As of Zig 0.15.0-dev.1092+d772c0627, package_name_path.openDir("") is not possible as it assumes you're appending a sub-path + var dir = try search_dir.root_dir.handle.openDir(search_dir.sub_path, .{ .iterate = true }); defer dir.close(); + var walker = try dir.walk(arena); defer walker.deinit(); while (try walker.next()) |entry| { @@ -83,7 +86,7 @@ fn make(step: *Step, _: Build.Step.MakeOptions) !void { // This is to avoid the Java error "command line too long" that can occur with d8 d8.addArg(entry.path); d8.addFileInput(LazyPath{ - .cwd_relative = try fs.path.resolve(arena, &.{ search_dir, entry.path }), + .cwd_relative = try search_dir.root_dir.join(b.allocator, &.{ search_dir.sub_path, entry.path }), }); } }