X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=java_strings.py;h=6bfd571bbf991caa8b5be640b409ce0ab33ac1d3;hb=313ded348d9f07bf24b38768bcccae320dd0e3a2;hp=e00f513f717a97dc1f76a9f25c8964019b21299d;hpb=d9feeb37d75db3732ab7ec17db04d7e717a85cbd;p=ldk-java diff --git a/java_strings.py b/java_strings.py index e00f513f..6bfd571b 100644 --- a/java_strings.py +++ b/java_strings.py @@ -1,5 +1,6 @@ from bindingstypes import * from enum import Enum +import sys class Target(Enum): JAVA = 1, @@ -83,11 +84,13 @@ class CommonBase { long ptr; LinkedList ptrs_to = new LinkedList(); protected CommonBase(long ptr) { this.ptr = ptr; } - public long _test_only_get_ptr() { return this.ptr; } } """ - self.c_file_pfx = """#include \"org_ldk_impl_bindings.h\" + self.c_file_pfx = """#include +// On OSX jlong (ie long long) is not equivalent to int64_t, so we override here +#define int64_t jlong +#include \"org_ldk_impl_bindings.h\" #include #include #include @@ -124,13 +127,15 @@ void __attribute__((constructor)) spawn_stderr_redirection() { else: self.c_file_pfx = self.c_file_pfx + "#define DEBUG_PRINT(...) fprintf(stderr, __VA_ARGS__)\n" - if not DEBUG: + if not DEBUG or sys.platform == "darwin": self.c_file_pfx = self.c_file_pfx + """#define MALLOC(a, _) malloc(a) #define FREE(p) if ((uint64_t)(p) > 1024) { free(p); } -#define DO_ASSERT(a) (void)(a) +""" + if not DEBUG: + self.c_file_pfx += """#define DO_ASSERT(a) (void)(a) #define CHECK(a) """ - else: + if DEBUG: self.c_file_pfx = self.c_file_pfx + """#include // Always run a, then assert it is true: #define DO_ASSERT(a) do { bool _assert_val = (a); assert(_assert_val); } while(0) @@ -144,7 +149,10 @@ void __attribute__((constructor)) debug_log_version() { DEBUG_PRINT("LDK C Bindings version did not match the header we built against\\n"); DEBUG_PRINT("Loaded LDK-Java Bindings with LDK %s and LDK-C-Bindings %s\\n", check_get_ldk_version(), check_get_ldk_bindings_version()); } +""" + if sys.platform != "darwin": + self.c_file_pfx += """ // Running a leak check across all the allocations and frees of the JDK is a mess, // so instead we implement our own naive leak checker here, relying on the -wrap // linker option to wrap malloc/calloc/realloc/free, tracking everyhing allocated @@ -152,8 +160,8 @@ void __attribute__((constructor)) debug_log_version() { #include """ - if self.target == Target.ANDROID: - self.c_file_pfx = self.c_file_pfx + """ + if self.target == Target.ANDROID: + self.c_file_pfx = self.c_file_pfx + """ #include #include @@ -194,9 +202,9 @@ void backtrace_symbols_fd(void ** buffer, int count, int _fd) { } } """ - else: - self.c_file_pfx = self.c_file_pfx + "#include \n" - self.c_file_pfx = self.c_file_pfx + """ + else: + self.c_file_pfx = self.c_file_pfx + "#include \n" + self.c_file_pfx = self.c_file_pfx + """ #include static mtx_t allocation_mtx; @@ -457,7 +465,10 @@ import java.util.Arrays; res = "JNIEnv *env;\n" res += "jint get_jenv_res = (*j_calls->vm)->GetEnv(j_calls->vm, (void**)&env, JNI_VERSION_1_6);\n" res += "if (get_jenv_res == JNI_EDETACHED) {\n" - res += "\tDO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);\n" + if self.target == Target.ANDROID: + res += "\tDO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, &env, NULL) == JNI_OK);\n" + else: + res += "\tDO_ASSERT((*j_calls->vm)->AttachCurrentThread(j_calls->vm, (void**)&env, NULL) == JNI_OK);\n" res += "} else {\n" res += "\tDO_ASSERT(get_jenv_res == JNI_OK);\n" res += "}\n"