aboutsummaryrefslogtreecommitdiffstats
path: root/README.md
blob: 5a90159a632bd3117e707ca7bdd3fe31719059f2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154

Jau Support Library (C++, Java, ...)

Git Repository

This project's canonical repositories is hosted on Gothel Software.

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 to enable general use and enforce better encapsulation.

API Documentation

Up to date API documentation can be found:

Examples

See Direct-BT C++ API Doc.

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 jaulib/include/ to your include-path and also add the source files under jaulib/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):

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:

CPU_COUNT=`getconf _NPROCESSORS_ONLN`
git clone https://jausoft.com/cgit/jaulib.git
cd jaulib
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

Disable stripping native lib even in non debug build:

-DUSE_STRIP=OFF

Override default javac debug arguments source,lines:

-DJAVAC_DEBUG_ARGS="source,lines,vars"

-DJAVAC_DEBUG_ARGS="none"

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.3.0

  • TODO
  • Offering JaulibSetup.cmake for parent projects for aligned setup.
  • Java: Working JNI-Lib bootstraping w/ fat-jar. Passing all unit tests.
  • Java: Generating jar and source-zip packages (normal + fat); Enable full junit testing.
  • Finalized jau::cow_darray and its iterator API. All write API entries were added to the mutable iterator.
  • Introduce jau::callocator for jau::darray to support realloc instead of alloc, copy and dtor
  • Passed gcc-10, gcc-11, clang-9 and clang-11
  • Passed detailed cow_iterator test.
  • jau::cow_vector is marked deprecated, as only jau::cow_darray can give certain guarantees using jau::darray
  • jau::cow_vector is aligned to jau::cow_darray and also uses jau::cow_ro_iterator and jau::cow_rw_iterator
  • Added jau::darray and jau::cow_darray (using jau::cow_ro_iterator and jau::cow_rw_iterator)
  • Test: Using imported Catch2 (v3-devel) for C++ unit testing
  • Reduced ringbuffer to single implementation, adding move-operations
  • Added basic_types.hpp: 'to_decimal_string(..)' implementing DecString() inlines.
  • Use nsize_t and snsize_t where appropriate for smaller footprint
  • Have ringbuffer's Size_type parameterized
  • Bugfixes and added cow_array

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