Bridj Changelog

What's new in Bridj 0.6.3 Snapshot

Jun 27, 2013
  • Added support for Raspberry Pi (Linux/armel (soft-float) and Linux/armhf (hard-float)).
  • Fixed support for Android/arm: artifact of last two releases lacked the binary, and had to move android libs from lib/ to libs/ (issue #382)
  • Improved performance of all operations of Pointers with bounds (~ 25% faster).
  • Added fallback to GCC demangler on Windows (issue #356).
  • Better logs, less logs (issue #328).
  • Don't warn about structs/classes with no fields in C++ runtime (issue #346).
  • Improved concurrency of callbacks and structs creation.

New in Bridj 0.6.2 (Jan 9, 2013)

  • Fixed serious crashes on Win64 in assembler optimizations
  • Fixed BridJ.protectFromGC !
  • Fixed raw assembler optimization for floats & doubles, finally! (+ updated Win binaries)
  • Fixed handling of classloaders in some use-cases (issue #283)
  • Fixed Platform.open(File) (issue #306)
  • Fixed Pointer.copyTo(dest, elementCount) (issue #317)
  • Fixed alignment of struct array fields (issue #319)
  • Fixed alignment of double fields on Linux 32 bits (issue #320)
  • Fixed dlopen log for non existing absolute library paths
  • Added experimental Linux/arm support (issue #327)
  • Added @Library.dependencies + test library
  • Added BridJ.getNativeLibraryName back
  • Added ComplexDouble struct for C99's `_Complex double` type.
  • Added GCC shortcut case for demangling of C++ constructors
  • Added Pointer.getIntAtIndex(long) / .setIntAtIndex(long, int) (and with all primitive variants)
  • Added quiet mode (BRIDJ_QUIET=1 / bridj.quiet=true) (issue #328)
  • Added assembler optimizations for functions with up to 16 arguments on Win64 !
  • Added parsing of Mach-O compressed symbols tries (LC_DYLD_INFO command) to dyncall (issue #311)
  • Added Pointer.withoutValidityInformation() (yields faster, unsafe pointer)
  • Added BridJ.subclassWithSynchronizedNativeMethods(Class) to create a subclass where all native methods are overridden
  • Added Pointer.getIntAtIndex(long) / .setIntAtIndex(long, int) (and with all primitive variants)
  • Added naive OSGi support to the main JAR.
  • Rationalized Java logs (issue #328)
  • Changed library extraction mechanism to allow extraction of dependencies (see @Library.dependencies); removed DeleteOldBinaries option
  • Special aliases for "c" and "m" libraries on windows (-> mscvrt)
  • Speedup assembler optimization on win64 (movsb -> movsq)
  • Removed ios-package (binaries for iOS/arm)

New in Bridj 0.6.2 Dev (Jul 23, 2012)

  • Fixed serious crashes on Win64 in assembler optimizations
  • Fixed handling of classloaders in some use-cases (issue #283)
  • Fixed Platform.open(File) (issue #306)
  • Fixed Pointer.copyTo(dest, elementCount) (issue #317)
  • Fixed alignment of struct array fields (issue #319)
  • Added parsing of Mach-O compressed symbols tries (LC_DYLD_INFO command) to dyncall (issue #311)
  • Added Pointer.withoutValidityInformation() (yields faster, unsafe pointer)
  • Added BridJ.subclassWithSynchronizedNativeMethods(Class) to create a subclass where all native methods are overridden
  • Removed ios-package (binaries for iOS/arm)

New in Bridj 0.6.1 (Apr 24, 2012)

  • Release artifacts are available in Maven Central
  • Fixed wchar_t and WideCString on MacOS X (issue #295)
  • Fixed @Name annotation
  • Fixed deletion of temporary extracted library files with shutdown hook (issue #197)
  • Fixed Unix binaries dependency on GLIBC 2.11 (lowered to version 2.2.5) (issue #195)
  • Fixed some pointer methods : 3D pointers allocation, Pointer.setXXXsAtOffset, float endianness conversion
  • Fixed regression on struct-valued struct fields (when implemented by java fields) (issue #200)
  • Fixed crash with valued enum return values (issue #196)
  • Fixed crash of dynamic callbacks on Win32
  • Fixed attachment of native threads in native -> Java callbacks (should attach them as JVM daemon threads)
  • Fixed C++ inner class name-mangling matching
  • Fixed signature of ITaskbarList3.SetProgressValue (issue #218)
  • Fixed Pointer.getByteBuffer() and Pointer.getBytes() (and all their type variants !)
  • Fixed StructIO.getEnumField (now returns an IntValuedEnum)
  • Fixed handling of CLong / SizeT java fields in structs (cf. issue #253)
  • Fixed StructIO.FieldDecl accessibility to allow override of all StructIO.Customizer methods (cf. issue #220)
  • Fixed regression on libc, created with null path (issue #217)
  • Fixed back-references in Visual C++ demangler (issue #291)
  • Fixed binding of IntValuedEnum types
  • Fixed handling of virtual destructors with GCC-compiled libraries (and virtual table pointer + runtime guess / check of virtual index for virtual methods) (issue #281)
  • Fixed shortcuts in GCC4Demangler (contrib from RŽmi ƒmonet, issue #211)
  • Added support for PointerIO (issue #261)
  • Added ProcessUtils.getCurrentProcessId()
  • Allow libname.so and name.so for embedded libraries on Unix (issue #215)
  • Enhanced multi-threaded performance of PointerIO.getInstance (issue #203)
  • Added Pointer.getXxxs(XxxBuffer)
  • Added alias mechanism for annotations : any annotation which class is itself annotated by @Ptr / @CLong can serve as an alias (issue #202)
  • Added native error log when LoadLibrary or dlopen failed
  • Added IntValuedEnum FlagSet.fromValue(int, E...)
  • Enabled all compiler optimizations on all platforms but win32
  • Updated doc of Pointer.getXxxs()
  • Added experimental by-value struct support on amd64 for structs larger than 64 bits (disabled by default, set -Dbridj.

New in Bridj 0.6 (Dec 7, 2011)

  • Added errno/GetLastError() mechanism : declare methods to throw org.bridj.LastError and it's all handled automatically (issue #74)
  • Added protected mode (-Dbridj.protected=true / BRIDJ_PROTECTED=1), to prevent native crashes (makes BridJ bindings slower + disables optimized raw calls).
  • Added proxy-based Objective-C delegates support (forwards unknown methods to a Java instance) (issue #188)
  • Added Objective-C 2.0 blocks support (similar to callbacks, inherit from ObjCBlock instead of Callback) (issue #192)
  • Added Pointer.asList() and .asList(ListType) to get a List view of the pointed memory
  • depending on the ListType, the view can be mutable / resizeable
  • removed the List interface from Pointer (which is now just an Iterable)
  • added Pointer.allocateList(type, capacity) to create a NativeList from scratch (has a .getPointer method to grab the resulting memory at the end)
  • Added Pointer.moveBytesTo(Pointer)
  • Added support for embedded libraries extraction from "lib/arch" paths (along with "org/bridj/lib/arch", where arch uses BridJ's convention)
  • Added TimeT (time_t), timeval classes (issue #72)
  • Added Platform.getMachine() (same result as `uname -m`)
  • Added support for multiarch Linux distributions (issue #2)
  • Added support for versioned library file names (issue #72)
  • Added global allocated memory alignment setting (BRIDJ_DEFAULT_ALIGNMENT env. var. & bridj.defaultAlignment property), + Pointer.allocateAlignedArray
  • Added basic calls log mechanism (disables direct mode) : -Dbridj.logCalls=true or BRIDJ_LOG_CALLS=1 (only logs the method name & signature, not the arguments or returned values)
  • Added BridJ.setMinLogLevel(Level) (issue #190)
  • Added Platform.addEmbeddedLibraryResourceRoot(root) to use & customize the embedded library extraction feature in user projects
  • Added support for packed structs (@Struct(pack = 1), or any other pack value)
  • Added check of BridJ environment variables and Java properties : if any BRIDJ_* env. var. or bridj.* property does not exist, it will log warnings + full list of valid options
  • Added @JNIBound annotation to mark native methods that should not be bound by BridJ but by plain old JNI
  • Fixed Pointer.next/.offset methods (used to throw errors a the end of iteration)
  • Fixed Pointer.getNativeObjectAtOffset(long byteOffset, Type type)
  • Fixed struct fields implemented as Java fields
  • Fixed resolution of MacOS X "ApplicationServices" framework binaries, such as CoreGraphics
  • Fixed some COM bugs with IUnknown
  • Fixed demangling/matching of CLong & SizeT
  • Fixed CLong & SizeT arguments
  • Fixed Objective-C runtime (basic features), added NSString constructor & NSDictionary (with conversion to/from Map)
  • Fixed crashes on Win32 (when using Pointer class in bound function arguments)
  • Fixed crash during deallocation of Callbacks + fixed leak of Callbacks (now need to retain a reference to callbacks or use BridJ.protectFromGC / unprotectFromGC)
  • Made the StructIO customization mechanism more flexible
  • Made JawtLibrary public
  • Various Javadoc tweaks