from bindingstypes import *
from enum import Enum
+import sys
class Target(Enum):
JAVA = 1,
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 <assert.h>
// Always run a, then assert it is true:
#define DO_ASSERT(a) do { bool _assert_val = (a); assert(_assert_val); } while(0)
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
#include <threads.h>
"""
- 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 <unwind.h>
#include <dlfcn.h>
}
}
"""
- else:
- self.c_file_pfx = self.c_file_pfx + "#include <execinfo.h>\n"
- self.c_file_pfx = self.c_file_pfx + """
+ else:
+ self.c_file_pfx = self.c_file_pfx + "#include <execinfo.h>\n"
+ self.c_file_pfx = self.c_file_pfx + """
#include <unistd.h>
static mtx_t allocation_mtx;