Jau C++ Support Library inclusive Java JNI Binding ================================================== Git Repository ============== This project's canonical repositories is hosted on [Gothel Software](https://jausoft.com/cgit/jaucpp.git/). Goals ============ This project aims to provide general C++ collections, algorithms and utilizies inclusive utilizities for a Java JNI binding. This project was extracted from [Direct-BT](https://jausoft.com/cgit/direct_bt.git/about/) to enable general use and enforce better encapsulation. API Documentation ============ Up to date API documentation can be found: * [C++ API Doc](https://jausoft.com/projects/jaucpp/build/documentation/cpp/html/index.html). Examples ============ See *Direct-BT* [C++ API Doc](https://jausoft.com/projects/direct_bt/build/documentation/cpp/html/index.html). Supported Platforms =================== C++17 and better. Building Binaries ========================= It is advised to include this library into your main project, e.g. as a git-submodule. Then add *jaucpp/include/* to your include-path and also add the source files under *jaucpp/src/* into your build recipe. This library's build recipe are functional though, but currently only intended to support unit testing and to produce a Doxygen API doc. The project requires CMake 3.13+ for building and a Java JDK >= 11. Installing build dependencies on Debian (10 or 11): ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.sh} apt install git apt install build-essential g++ gcc libc-dev libpthread-stubs0-dev apt install libunwind8 libunwind-dev apt install openjdk-11-jdk openjdk-11-jre apt install cmake cmake-extras extra-cmake-modules apt install doxygen graphviz ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ For a generic build use: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.sh} CPU_COUNT=`getconf _NPROCESSORS_ONLN` git clone https://jausoft.com/cgit/jaucpp.git cd jaucpp mkdir build cd build cmake -DBUILDJAVA=ON -DBUILDEXAMPLES=ON -DBUILD_TESTING=ON .. make -j $CPU_COUNT install test doc ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The install target of the last command will create the include/ and lib/ directories with a copy of the headers and library objects respectively in your build location. Note that doing an out-of-source build may cause issues when rebuilding later on. Our cmake configure has a number of options, *cmake-gui* or *ccmake* can show you all the options. The interesting ones are detailed below: Changing install path from /usr/local to /usr ~~~~~~~~~~~~~ -DCMAKE_INSTALL_PREFIX=/usr ~~~~~~~~~~~~~ Building debug build: ~~~~~~~~~~~~~ -DDEBUG=ON ~~~~~~~~~~~~~ Building debug and instrumentation (sanitizer) build: ~~~~~~~~~~~~~ -DDEBUG=ON -DINSTRUMENTATION=ON ~~~~~~~~~~~~~ Using clang instead of gcc: ~~~~~~~~~~~~~ -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++ ~~~~~~~~~~~~~ Cross-compiling on a different system: ~~~~~~~~~~~~~ -DCMAKE_CXX_FLAGS:STRING=-m32 -march=i586 -DCMAKE_C_FLAGS:STRING=-m32 -march=i586 ~~~~~~~~~~~~~ To build Java bindings: ~~~~~~~~~~~~~ -DBUILDJAVA=ON ~~~~~~~~~~~~~ To build documentation run: ~~~~~~~~~~~~~ make doc ~~~~~~~~~~~~~ Changes ============ **1.0.0** * First stable release (TODO) **0.2.1** * Added cow_vector and sc_atomic_critical * Passed GCC all warnings, compile clean * Passed GCC sanitizer runtime checks * Passed valgrind's memcheck, helgrind and drd validating no memory leak nor data race or deadlock using dbt_scanner10 * Added native de-mangled backtrace support using *libunwind* and and *abi::__cxa_demangle* **0.1.0** * Extraction from Direct-BT