koffi 1.3.5 → 1.3.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CMakeLists.txt +1 -1
- package/ChangeLog.md +36 -0
- package/benchmark/atoi_koffi.js +3 -4
- package/benchmark/atoi_napi.js +2 -3
- package/benchmark/atoi_node_ffi.js +3 -4
- package/benchmark/raylib_cc.cc +3 -4
- package/benchmark/raylib_cc.js +31 -0
- package/benchmark/raylib_koffi.js +8 -9
- package/benchmark/raylib_node_ffi.js +4 -5
- package/benchmark/raylib_node_raylib.js +4 -5
- package/build/qemu/1.3.8/koffi_darwin_arm64.tar.gz +0 -0
- package/build/qemu/1.3.8/koffi_darwin_x64.tar.gz +0 -0
- package/build/qemu/1.3.8/koffi_freebsd_arm64.tar.gz +0 -0
- package/build/qemu/1.3.8/koffi_freebsd_ia32.tar.gz +0 -0
- package/build/qemu/1.3.8/koffi_freebsd_x64.tar.gz +0 -0
- package/build/qemu/1.3.8/koffi_linux_arm32hf.tar.gz +0 -0
- package/build/qemu/1.3.8/koffi_linux_arm64.tar.gz +0 -0
- package/build/qemu/1.3.8/koffi_linux_ia32.tar.gz +0 -0
- package/build/qemu/1.3.8/koffi_linux_riscv64hf64.tar.gz +0 -0
- package/build/qemu/1.3.8/koffi_linux_x64.tar.gz +0 -0
- package/build/qemu/1.3.8/koffi_openbsd_ia32.tar.gz +0 -0
- package/build/qemu/1.3.8/koffi_openbsd_x64.tar.gz +0 -0
- package/build/qemu/1.3.8/koffi_win32_arm64.tar.gz +0 -0
- package/build/qemu/1.3.8/koffi_win32_ia32.tar.gz +0 -0
- package/build/qemu/1.3.8/koffi_win32_x64.tar.gz +0 -0
- package/doc/_static/perf_linux_20220627.png +0 -0
- package/doc/_static/perf_linux_20220628.png +0 -0
- package/doc/_static/perf_windows_20220627.png +0 -0
- package/doc/_static/perf_windows_20220628.png +0 -0
- package/doc/benchmarks.md +78 -58
- package/doc/benchmarks.xlsx +0 -0
- package/doc/conf.py +1 -1
- package/doc/contribute.md +8 -11
- package/doc/dist/html/_sources/benchmarks.md.txt +78 -58
- package/doc/dist/html/_sources/contribute.md.txt +8 -11
- package/doc/dist/html/_sources/functions.md.txt +9 -8
- package/doc/dist/html/_sources/index.rst.txt +3 -0
- package/doc/dist/html/_sources/platforms.md.txt +17 -5
- package/doc/dist/html/_sources/start.md.txt +14 -3
- package/doc/dist/html/_sources/types.md.txt +15 -11
- package/doc/dist/html/_static/basic.css +12 -14
- package/doc/dist/html/_static/perf_linux_20220627.png +0 -0
- package/doc/dist/html/_static/perf_linux_20220628.png +0 -0
- package/doc/dist/html/_static/perf_windows_20220627.png +0 -0
- package/doc/dist/html/_static/perf_windows_20220628.png +0 -0
- package/doc/dist/html/benchmarks.html +148 -159
- package/doc/dist/html/changes.html +44 -2
- package/doc/dist/html/contribute.html +30 -33
- package/doc/dist/html/functions.html +19 -18
- package/doc/dist/html/genindex.html +2 -2
- package/doc/dist/html/index.html +19 -10
- package/doc/dist/html/memory.html +2 -2
- package/doc/dist/html/objects.inv +0 -0
- package/doc/dist/html/platforms.html +44 -10
- package/doc/dist/html/search.html +2 -2
- package/doc/dist/html/searchindex.js +1 -1
- package/doc/dist/html/start.html +25 -12
- package/doc/dist/html/types.html +31 -11
- package/doc/functions.md +9 -8
- package/doc/index.rst +3 -0
- package/doc/platforms.md +17 -5
- package/doc/start.md +14 -3
- package/doc/types.md +15 -11
- package/package.json +7 -4
- package/qemu/qemu.js +30 -19
- package/qemu/registry/machines.json +19 -19
- package/qemu/registry/sha256sum.txt +5 -5
- package/src/abi_arm32.cc +9 -2
- package/src/abi_arm32_fwd.S +7 -7
- package/src/abi_arm64.cc +9 -2
- package/src/abi_arm64_fwd.S +11 -7
- package/src/abi_arm64_fwd.asm +7 -7
- package/src/abi_riscv64.cc +9 -2
- package/src/abi_riscv64_fwd.S +11 -11
- package/src/abi_x64_sysv.cc +9 -2
- package/src/abi_x64_sysv_fwd.S +11 -11
- package/src/abi_x64_win.cc +9 -2
- package/src/abi_x64_win_fwd.asm +7 -7
- package/src/abi_x86.cc +9 -2
- package/src/abi_x86_fwd.S +3 -0
- package/src/abi_x86_fwd.asm +3 -0
- package/src/call.cc +20 -10
- package/src/ffi.cc +17 -8
- package/src/ffi.hh +4 -3
- package/src/util.cc +1 -1
- package/test/async.js +1 -1
- package/test/callbacks.js +25 -2
- package/test/misc.c +57 -2
- package/test/raylib.js +4 -4
- package/test/sqlite.js +5 -5
- package/test/sync.js +22 -7
- package/build/qemu/1.3.5/koffi_darwin_arm64.tar.gz +0 -0
- package/build/qemu/1.3.5/koffi_darwin_x64.tar.gz +0 -0
- package/build/qemu/1.3.5/koffi_freebsd_arm64.tar.gz +0 -0
- package/build/qemu/1.3.5/koffi_freebsd_ia32.tar.gz +0 -0
- package/build/qemu/1.3.5/koffi_freebsd_x64.tar.gz +0 -0
- package/build/qemu/1.3.5/koffi_linux_arm32hf.tar.gz +0 -0
- package/build/qemu/1.3.5/koffi_linux_arm64.tar.gz +0 -0
- package/build/qemu/1.3.5/koffi_linux_ia32.tar.gz +0 -0
- package/build/qemu/1.3.5/koffi_linux_riscv64hf64.tar.gz +0 -0
- package/build/qemu/1.3.5/koffi_linux_x64.tar.gz +0 -0
- package/build/qemu/1.3.5/koffi_openbsd_ia32.tar.gz +0 -0
- package/build/qemu/1.3.5/koffi_openbsd_x64.tar.gz +0 -0
- package/build/qemu/1.3.5/koffi_win32_arm64.tar.gz +0 -0
- package/build/qemu/1.3.5/koffi_win32_ia32.tar.gz +0 -0
- package/build/qemu/1.3.5/koffi_win32_x64.tar.gz +0 -0
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
|
|
6
6
|
<link rel="index" title="Index" href="genindex" /><link rel="search" title="Search" href="search" /><link rel="next" title="Changelog" href="changes" /><link rel="prev" title="Benchmarks" href="benchmarks" />
|
|
7
7
|
|
|
8
|
-
<meta name="generator" content="sphinx-5.0.
|
|
8
|
+
<meta name="generator" content="sphinx-5.0.2, furo 2022.06.21"/>
|
|
9
9
|
<title>Contributing - Koffi</title>
|
|
10
10
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
|
11
11
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=40978830699223671f4072448e654b5958f38b89" />
|
|
@@ -162,7 +162,7 @@
|
|
|
162
162
|
</form>
|
|
163
163
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
|
164
164
|
<ul class="current">
|
|
165
|
-
<li class="toctree-l1"><a class="reference internal" href="platforms">
|
|
165
|
+
<li class="toctree-l1"><a class="reference internal" href="platforms">Requirements</a></li>
|
|
166
166
|
<li class="toctree-l1"><a class="reference internal" href="start">Quick start</a></li>
|
|
167
167
|
<li class="toctree-l1"><a class="reference internal" href="types">Data types</a></li>
|
|
168
168
|
<li class="toctree-l1"><a class="reference internal" href="functions">Function calls</a></li>
|
|
@@ -214,8 +214,8 @@
|
|
|
214
214
|
<h2>Build from source<a class="headerlink" href="#build-from-source" title="Permalink to this heading">#</a></h2>
|
|
215
215
|
<p>We provide prebuilt binaries, packaged in the NPM archive, so in most cases it should be as simple as <code class="docutils literal notranslate"><span class="pre">npm</span> <span class="pre">install</span> <span class="pre">koffi</span></code>. If you want to hack Koffi or use a specific platform, follow the instructions below.</p>
|
|
216
216
|
<p>Start by cloning the repository with <a class="reference external" href="https://git-scm.com/">Git</a>:</p>
|
|
217
|
-
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>git clone https://github.com/Koromix/luigi
|
|
218
|
-
<span class="nb">cd</span> luigi/koffi
|
|
217
|
+
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span>git clone https://github.com/Koromix/luigi
|
|
218
|
+
<span class="linenos">2</span><span class="nb">cd</span> luigi/koffi
|
|
219
219
|
</pre></div>
|
|
220
220
|
</div>
|
|
221
221
|
<p>As said before, this is a monorepository containg multiple projects, hence the name.</p>
|
|
@@ -228,8 +228,8 @@
|
|
|
228
228
|
<li><p><a class="reference external" href="https://nodejs.org/">Node.js</a> 12 or later</p></li>
|
|
229
229
|
</ul>
|
|
230
230
|
<p>Once this is done, run this command <em>from the test or the benchmark directory</em> (depending on what you want to build):</p>
|
|
231
|
-
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="nb">cd</span> koffi/test <span class="c1"># or cd koffi/benchmark</span>
|
|
232
|
-
node ../../cnoke/cnoke.js
|
|
231
|
+
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="nb">cd</span> koffi/test <span class="c1"># or cd koffi/benchmark</span>
|
|
232
|
+
<span class="linenos">2</span>node ../../cnoke/cnoke.js
|
|
233
233
|
</pre></div>
|
|
234
234
|
</div>
|
|
235
235
|
</section>
|
|
@@ -243,8 +243,8 @@ node ../../cnoke/cnoke.js
|
|
|
243
243
|
<li><p><a class="reference external" href="https://nodejs.org/">Node.js</a> 12 or later</p></li>
|
|
244
244
|
</ul>
|
|
245
245
|
<p>Once this is done, run this command <em>from the test or the benchmark directory</em> (depending on what you want to build):</p>
|
|
246
|
-
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="nb">cd</span> koffi/test <span class="c1"># or cd koffi/benchmark</span>
|
|
247
|
-
node ../../cnoke/cnoke.js
|
|
246
|
+
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="nb">cd</span> koffi/test <span class="c1"># or cd koffi/benchmark</span>
|
|
247
|
+
<span class="linenos">2</span>node ../../cnoke/cnoke.js
|
|
248
248
|
</pre></div>
|
|
249
249
|
</div>
|
|
250
250
|
</section>
|
|
@@ -254,57 +254,54 @@ node ../../cnoke/cnoke.js
|
|
|
254
254
|
<p>Koffi is tested on multiple architectures using emulated (accelerated when possible) QEMU machines. First, you need to install qemu packages, such as <code class="docutils literal notranslate"><span class="pre">qemu-system</span></code> (or even <code class="docutils literal notranslate"><span class="pre">qemu-system-gui</span></code>) on Ubuntu.</p>
|
|
255
255
|
<p>These machines are not included directly in this repository (for license and size reasons), but they are available here: <a class="reference external" href="https://koromix.dev/files/machines/">https://koromix.dev/files/machines/</a></p>
|
|
256
256
|
<p>For example, if you want to run the tests on Debian ARM64, run the following commands:</p>
|
|
257
|
-
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="nb">cd</span> luigi/koffi/qemu/
|
|
258
|
-
wget -q -O- https://koromix.dev/files/machines/qemu_debian_arm64.tar.zst <span class="p">|</span> zstd -d <span class="p">|</span> tar xv
|
|
259
|
-
sha256sum -c --ignore-missing registry/sha256sum.txt
|
|
257
|
+
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="nb">cd</span> luigi/koffi/qemu/
|
|
258
|
+
<span class="linenos">2</span>wget -q -O- https://koromix.dev/files/machines/qemu_debian_arm64.tar.zst <span class="p">|</span> zstd -d <span class="p">|</span> tar xv
|
|
259
|
+
<span class="linenos">3</span>sha256sum -c --ignore-missing registry/sha256sum.txt
|
|
260
260
|
</pre></div>
|
|
261
261
|
</div>
|
|
262
262
|
<p>Note that the machine disk content may change each time the machine runs, so the checksum test will fail once a machine has been used at least once.</p>
|
|
263
263
|
<p>And now you can run the tests with:</p>
|
|
264
|
-
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>node qemu.js <span class="c1"># Several options are available, use --help</span>
|
|
264
|
+
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span>node qemu.js <span class="nb">test</span> <span class="c1"># Several options are available, use --help</span>
|
|
265
265
|
</pre></div>
|
|
266
266
|
</div>
|
|
267
267
|
<p>And be patient, this can be pretty slow for emulated machines. The Linux machines have and use ccache to build Koffi, so subsequent build steps will get much more tolerable.</p>
|
|
268
268
|
<p>By default, machines are started and stopped for each test. But you can start the machines ahead of time and run the tests multiple times instead:</p>
|
|
269
|
-
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>node qemu.js start <span class="c1"># Start the machines</span>
|
|
270
|
-
node qemu.js <span class="c1"># Test (without shutting down)</span>
|
|
271
|
-
node qemu.js <span class="c1"># Test again</span>
|
|
272
|
-
node qemu.js stop <span class="c1"># Stop everything</span>
|
|
269
|
+
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span>node qemu.js start <span class="c1"># Start the machines</span>
|
|
270
|
+
<span class="linenos">2</span>node qemu.js <span class="nb">test</span> <span class="c1"># Test (without shutting down)</span>
|
|
271
|
+
<span class="linenos">3</span>node qemu.js <span class="nb">test</span> <span class="c1"># Test again</span>
|
|
272
|
+
<span class="linenos">4</span>node qemu.js stop <span class="c1"># Stop everything</span>
|
|
273
273
|
</pre></div>
|
|
274
274
|
</div>
|
|
275
275
|
<p>You can also restrict the test to a subset of machines:</p>
|
|
276
|
-
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="c1"># Full test cycle</span>
|
|
277
|
-
node qemu.js <span class="nb">test</span> debian_x64 debian_i386
|
|
278
|
-
|
|
279
|
-
<span class="c1"># Separate start, test, shutdown</span>
|
|
280
|
-
node qemu.js start debian_x64 debian_i386
|
|
281
|
-
node qemu.js <span class="nb">test</span> debian_x64 debian_i386
|
|
282
|
-
node qemu.js stop
|
|
276
|
+
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="c1"># Full test cycle</span>
|
|
277
|
+
<span class="linenos">2</span>node qemu.js <span class="nb">test</span> debian_x64 debian_i386
|
|
278
|
+
<span class="linenos">3</span>
|
|
279
|
+
<span class="linenos">4</span><span class="c1"># Separate start, test, shutdown</span>
|
|
280
|
+
<span class="linenos">5</span>node qemu.js start debian_x64 debian_i386
|
|
281
|
+
<span class="linenos">6</span>node qemu.js <span class="nb">test</span> debian_x64 debian_i386
|
|
282
|
+
<span class="linenos">7</span>node qemu.js stop
|
|
283
283
|
</pre></div>
|
|
284
284
|
</div>
|
|
285
285
|
<p>Finally, you can join a running machine with SSH with the following shortcut, if you need to do some debugging or any other manual procedure:</p>
|
|
286
|
-
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>node qemu.js ssh debian_i386
|
|
286
|
+
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span>node qemu.js ssh debian_i386
|
|
287
287
|
</pre></div>
|
|
288
288
|
</div>
|
|
289
289
|
<p>Each machine is configured to run a VNC server available locally, which you can use to access the display, using KRDC or any other compatible viewer. Use the <code class="docutils literal notranslate"><span class="pre">info</span></code> command to get the VNC port.</p>
|
|
290
|
-
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>node qemu.js info debian_x64
|
|
290
|
+
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span>node qemu.js info debian_x64
|
|
291
291
|
</pre></div>
|
|
292
292
|
</div>
|
|
293
293
|
</section>
|
|
294
294
|
<section id="todo-list">
|
|
295
295
|
<h2>Todo list<a class="headerlink" href="#todo-list" title="Permalink to this heading">#</a></h2>
|
|
296
|
-
<p>
|
|
297
|
-
<ul class="simple">
|
|
298
|
-
<li><p>Automate Windows/AArch64 (qemu) and macOS/AArch64 (how?) tests and builds</p></li>
|
|
299
|
-
<li><p>Create a real-world example, using several libraries (Raylib, SQLite, libsodium) to illustrate how to work with various C API styles</p></li>
|
|
300
|
-
</ul>
|
|
301
|
-
<p>The following features are also planned eventually, not necessarily in that order:</p>
|
|
296
|
+
<p>The following features and improvements are planned, not necessarily in that order:</p>
|
|
302
297
|
<ul class="simple">
|
|
303
|
-
<li><p>
|
|
298
|
+
<li><p>Provide better ways to automatically deal with caller/heap-allocated memory (strings, etc.)</p></li>
|
|
299
|
+
<li><p>Optimize passing of structs and arrays (avoid setting named properties one by one? separate HFA-specific helper functions?)</p></li>
|
|
300
|
+
<li><p>Automate Windows/AArch64 (qemu) and macOS/AArch64 (how? … thanks Apple) tests</p></li>
|
|
301
|
+
<li><p>Create a real-world example, using several libraries (Raylib, SQLite, libsodium) to illustrate various C API styles</p></li>
|
|
304
302
|
<li><p>Add simple struct type parser</p></li>
|
|
305
303
|
<li><p>Add more ways to manually encode and decode various types to and from byte arrays</p></li>
|
|
306
304
|
<li><p>Add support for unions</p></li>
|
|
307
|
-
<li><p>Provide better ways to automatically deal with caller/heap-allocated memory (strings, etc.)</p></li>
|
|
308
305
|
<li><p>Port Koffi to PowerPC (POWER9+) ABI</p></li>
|
|
309
306
|
<li><p>Fix assembly unwind and CFI directives for better debugging experience</p></li>
|
|
310
307
|
</ul>
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
|
|
6
6
|
<link rel="index" title="Index" href="genindex" /><link rel="search" title="Search" href="search" /><link rel="next" title="Memory usage" href="memory" /><link rel="prev" title="Data types" href="types" />
|
|
7
7
|
|
|
8
|
-
<meta name="generator" content="sphinx-5.0.
|
|
8
|
+
<meta name="generator" content="sphinx-5.0.2, furo 2022.06.21"/>
|
|
9
9
|
<title>Function calls - Koffi</title>
|
|
10
10
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
|
11
11
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=40978830699223671f4072448e654b5958f38b89" />
|
|
@@ -162,7 +162,7 @@
|
|
|
162
162
|
</form>
|
|
163
163
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
|
164
164
|
<ul class="current">
|
|
165
|
-
<li class="toctree-l1"><a class="reference internal" href="platforms">
|
|
165
|
+
<li class="toctree-l1"><a class="reference internal" href="platforms">Requirements</a></li>
|
|
166
166
|
<li class="toctree-l1"><a class="reference internal" href="start">Quick start</a></li>
|
|
167
167
|
<li class="toctree-l1"><a class="reference internal" href="types">Data types</a></li>
|
|
168
168
|
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Function calls</a></li>
|
|
@@ -220,8 +220,8 @@
|
|
|
220
220
|
<section id="classic-syntax">
|
|
221
221
|
<h3>Classic syntax<a class="headerlink" href="#classic-syntax" title="Permalink to this heading">#</a></h3>
|
|
222
222
|
<p>To declare a function, you need to specify its non-mangled name, its return type, and its parameters. Use an ellipsis as the last parameter for variadic functions.</p>
|
|
223
|
-
<div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="kd">const</span><span class="w"> </span><span class="nx">printf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">'printf'</span><span class="p">,</span><span class="w"> </span><span class="s1">'int'</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s1">'
|
|
224
|
-
<span class="linenos">2</span><span class="kd">const</span><span class="w"> </span><span class="nx">atoi</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">'atoi'</span><span class="p">,</span><span class="w"> </span><span class="s1">'int'</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s1">'
|
|
223
|
+
<div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="kd">const</span><span class="w"> </span><span class="nx">printf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">'printf'</span><span class="p">,</span><span class="w"> </span><span class="s1">'int'</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s1">'str'</span><span class="p">,</span><span class="w"> </span><span class="s1">'...'</span><span class="p">]);</span><span class="w"></span>
|
|
224
|
+
<span class="linenos">2</span><span class="kd">const</span><span class="w"> </span><span class="nx">atoi</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">'atoi'</span><span class="p">,</span><span class="w"> </span><span class="s1">'int'</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s1">'str'</span><span class="p">]);</span><span class="w"></span>
|
|
225
225
|
</pre></div>
|
|
226
226
|
</div>
|
|
227
227
|
<p>Koffi automatically tries mangled names for non-standard x86 calling conventions. See the section <a class="reference internal" href="#synchronous-calls"><span class="std std-doc">on standard calls</span></a> for more information on this subject.</p>
|
|
@@ -230,7 +230,7 @@
|
|
|
230
230
|
<h3>C-like prototypes<a class="headerlink" href="#c-like-prototypes" title="Permalink to this heading">#</a></h3>
|
|
231
231
|
<p>If you prefer, you can declare functions using simple C-like prototype strings, as shown below:</p>
|
|
232
232
|
<div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="kd">const</span><span class="w"> </span><span class="nx">printf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">'int printf(const char *fmt, ...)'</span><span class="p">);</span><span class="w"></span>
|
|
233
|
-
<span class="linenos">2</span><span class="kd">const</span><span class="w"> </span><span class="nx">atoi</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">'int atoi(
|
|
233
|
+
<span class="linenos">2</span><span class="kd">const</span><span class="w"> </span><span class="nx">atoi</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">'int atoi(str)'</span><span class="p">);</span><span class="w"> </span><span class="c1">// The parameter name is not used by Koffi, and optional</span><span class="w"></span>
|
|
234
234
|
</pre></div>
|
|
235
235
|
</div>
|
|
236
236
|
<p>You can use <code class="docutils literal notranslate"><span class="pre">()</span></code> or <code class="docutils literal notranslate"><span class="pre">(void)</span></code> for functions that take no argument.</p>
|
|
@@ -279,8 +279,8 @@
|
|
|
279
279
|
<span class="linenos">2</span><span class="kd">const</span><span class="w"> </span><span class="nx">lib</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">load</span><span class="p">(</span><span class="s1">'user32.dll'</span><span class="p">);</span><span class="w"></span>
|
|
280
280
|
<span class="linenos">3</span>
|
|
281
281
|
<span class="linenos">4</span><span class="c1">// The following two declarations are equivalent, and use Stdcall</span><span class="w"></span>
|
|
282
|
-
<span class="linenos">5</span><span class="kd">const</span><span class="w"> </span><span class="nx">MessageBoxA_1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">stdcall</span><span class="p">(</span><span class="s1">'MessageBoxA'</span><span class="p">,</span><span class="w"> </span><span class="s1">'int'</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s1">'void *'</span><span class="p">,</span><span class="w"> </span><span class="s1">'
|
|
283
|
-
<span class="linenos">6</span><span class="kd">const</span><span class="w"> </span><span class="nx">MessageBoxA_2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">'int __stdcall MessageBoxA(void *hwnd,
|
|
282
|
+
<span class="linenos">5</span><span class="kd">const</span><span class="w"> </span><span class="nx">MessageBoxA_1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">stdcall</span><span class="p">(</span><span class="s1">'MessageBoxA'</span><span class="p">,</span><span class="w"> </span><span class="s1">'int'</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s1">'void *'</span><span class="p">,</span><span class="w"> </span><span class="s1">'str'</span><span class="p">,</span><span class="w"> </span><span class="s1">'str'</span><span class="p">,</span><span class="w"> </span><span class="s1">'uint'</span><span class="p">]);</span><span class="w"></span>
|
|
283
|
+
<span class="linenos">6</span><span class="kd">const</span><span class="w"> </span><span class="nx">MessageBoxA_2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">'int __stdcall MessageBoxA(void *hwnd, str text, str caption, uint type)'</span><span class="p">);</span><span class="w"></span>
|
|
284
284
|
</pre></div>
|
|
285
285
|
</div>
|
|
286
286
|
</section>
|
|
@@ -310,10 +310,10 @@
|
|
|
310
310
|
<h2>Variadic functions<a class="headerlink" href="#variadic-functions" title="Permalink to this heading">#</a></h2>
|
|
311
311
|
<p>Variadic functions are declared with an ellipsis as the last argument.</p>
|
|
312
312
|
<p>In order to call a variadic function, you must provide two Javascript arguments for each additional C parameter, the first one is the expected type and the second one is the value.</p>
|
|
313
|
-
<div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="kd">const</span><span class="w"> </span><span class="nx">printf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">'printf'</span><span class="p">,</span><span class="w"> </span><span class="s1">'int'</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s1">'
|
|
313
|
+
<div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="kd">const</span><span class="w"> </span><span class="nx">printf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">'printf'</span><span class="p">,</span><span class="w"> </span><span class="s1">'int'</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s1">'str'</span><span class="p">,</span><span class="w"> </span><span class="s1">'...'</span><span class="p">]);</span><span class="w"></span>
|
|
314
314
|
<span class="linenos">2</span>
|
|
315
315
|
<span class="linenos">3</span><span class="c1">// The variadic arguments are: 6 (int), 8.5 (double), 'THE END' (const char *)</span><span class="w"></span>
|
|
316
|
-
<span class="linenos">4</span><span class="nx">printf</span><span class="p">(</span><span class="s1">'Integer %d, double %g,
|
|
316
|
+
<span class="linenos">4</span><span class="nx">printf</span><span class="p">(</span><span class="s1">'Integer %d, double %g, str %s'</span><span class="p">,</span><span class="w"> </span><span class="s1">'int'</span><span class="p">,</span><span class="w"> </span><span class="mf">6</span><span class="p">,</span><span class="w"> </span><span class="s1">'double'</span><span class="p">,</span><span class="w"> </span><span class="mf">8.5</span><span class="p">,</span><span class="w"> </span><span class="s1">'str'</span><span class="p">,</span><span class="w"> </span><span class="s1">'THE END'</span><span class="p">);</span><span class="w"></span>
|
|
317
317
|
</pre></div>
|
|
318
318
|
</div>
|
|
319
319
|
<p>On x86 platforms, only the Cdecl convention can be used for variadic functions.</p>
|
|
@@ -370,15 +370,16 @@
|
|
|
370
370
|
<span class="linenos"> 4</span><span class="kd">const</span><span class="w"> </span><span class="nx">sqlite3_db</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">handle</span><span class="p">(</span><span class="s1">'sqlite3_db'</span><span class="p">);</span><span class="w"></span>
|
|
371
371
|
<span class="linenos"> 5</span>
|
|
372
372
|
<span class="linenos"> 6</span><span class="c1">// Use koffi.out() on a pointer to copy out (from C to JS) after the call</span><span class="w"></span>
|
|
373
|
-
<span class="linenos"> 7</span><span class="kd">const</span><span class="w"> </span><span class="nx">sqlite3_open_v2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">'sqlite3_open_v2'</span><span class="p">,</span><span class="w"> </span><span class="s1">'int'</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s1">'
|
|
374
|
-
<span class="linenos"> 8</span>
|
|
375
|
-
<span class="linenos"> 9</span
|
|
376
|
-
<span class="linenos">10</span><span class="kd">const</span><span class="w"> </span><span class="nx">
|
|
377
|
-
<span class="linenos">11</span>
|
|
378
|
-
<span class="linenos">12</span
|
|
379
|
-
<span class="linenos">13</span><span class="
|
|
380
|
-
<span class="linenos">14</span><span class="w">
|
|
381
|
-
<span class="linenos">15</span><span class="
|
|
373
|
+
<span class="linenos"> 7</span><span class="kd">const</span><span class="w"> </span><span class="nx">sqlite3_open_v2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">'sqlite3_open_v2'</span><span class="p">,</span><span class="w"> </span><span class="s1">'int'</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s1">'str'</span><span class="p">,</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">out</span><span class="p">(</span><span class="nx">koffi</span><span class="p">.</span><span class="nx">pointer</span><span class="p">(</span><span class="nx">sqlite3_db</span><span class="p">)),</span><span class="w"> </span><span class="s1">'int'</span><span class="p">,</span><span class="w"> </span><span class="s1">'str'</span><span class="p">]);</span><span class="w"></span>
|
|
374
|
+
<span class="linenos"> 8</span><span class="kd">const</span><span class="w"> </span><span class="nx">sqlite3_close_v2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">'sqlite3_close_v2'</span><span class="p">,</span><span class="w"> </span><span class="s1">'int'</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="nx">sqlite3_db</span><span class="p">]);</span><span class="w"></span>
|
|
375
|
+
<span class="linenos"> 9</span>
|
|
376
|
+
<span class="linenos">10</span><span class="kd">const</span><span class="w"> </span><span class="nx">SQLITE_OPEN_READWRITE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mh">0x2</span><span class="p">;</span><span class="w"></span>
|
|
377
|
+
<span class="linenos">11</span><span class="kd">const</span><span class="w"> </span><span class="nx">SQLITE_OPEN_CREATE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mh">0x4</span><span class="p">;</span><span class="w"></span>
|
|
378
|
+
<span class="linenos">12</span>
|
|
379
|
+
<span class="linenos">13</span><span class="kd">let</span><span class="w"> </span><span class="nx">db</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{};</span><span class="w"></span>
|
|
380
|
+
<span class="linenos">14</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">sqlite3_open_v2</span><span class="p">(</span><span class="s1">':memory:'</span><span class="p">,</span><span class="w"> </span><span class="nx">db</span><span class="p">,</span><span class="w"> </span><span class="nx">SQLITE_OPEN_READWRITE</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">SQLITE_OPEN_CREATE</span><span class="p">,</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mf">0</span><span class="p">)</span><span class="w"></span>
|
|
381
|
+
<span class="linenos">15</span><span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="ne">Error</span><span class="p">(</span><span class="s1">'Failed to open database'</span><span class="p">);</span><span class="w"></span>
|
|
382
|
+
<span class="linenos">16</span><span class="nx">sqlite3_close_v2</span><span class="p">(</span><span class="nx">db</span><span class="p">);</span><span class="w"></span>
|
|
382
383
|
</pre></div>
|
|
383
384
|
</div>
|
|
384
385
|
</section>
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
|
5
5
|
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="#" /><link rel="search" title="Search" href="search" />
|
|
6
6
|
|
|
7
|
-
<meta name="generator" content="sphinx-5.0.
|
|
7
|
+
<meta name="generator" content="sphinx-5.0.2, furo 2022.06.21"/><title>Index - Koffi</title>
|
|
8
8
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
|
9
9
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=40978830699223671f4072448e654b5958f38b89" />
|
|
10
10
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
|
|
@@ -160,7 +160,7 @@
|
|
|
160
160
|
</form>
|
|
161
161
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
|
162
162
|
<ul>
|
|
163
|
-
<li class="toctree-l1"><a class="reference internal" href="platforms">
|
|
163
|
+
<li class="toctree-l1"><a class="reference internal" href="platforms">Requirements</a></li>
|
|
164
164
|
<li class="toctree-l1"><a class="reference internal" href="start">Quick start</a></li>
|
|
165
165
|
<li class="toctree-l1"><a class="reference internal" href="types">Data types</a></li>
|
|
166
166
|
<li class="toctree-l1"><a class="reference internal" href="functions">Function calls</a></li>
|
package/doc/dist/html/index.html
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
<head><meta charset="utf-8"/>
|
|
4
4
|
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
|
5
5
|
<meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
|
|
6
|
-
<link rel="index" title="Index" href="genindex" /><link rel="search" title="Search" href="search" /><link rel="next" title="
|
|
6
|
+
<link rel="index" title="Index" href="genindex" /><link rel="search" title="Search" href="search" /><link rel="next" title="Requirements" href="platforms" />
|
|
7
7
|
|
|
8
|
-
<meta name="generator" content="sphinx-5.0.
|
|
8
|
+
<meta name="generator" content="sphinx-5.0.2, furo 2022.06.21"/>
|
|
9
9
|
<title>Koffi</title>
|
|
10
10
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
|
11
11
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=40978830699223671f4072448e654b5958f38b89" />
|
|
@@ -162,7 +162,7 @@
|
|
|
162
162
|
</form>
|
|
163
163
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
|
164
164
|
<ul>
|
|
165
|
-
<li class="toctree-l1"><a class="reference internal" href="platforms">
|
|
165
|
+
<li class="toctree-l1"><a class="reference internal" href="platforms">Requirements</a></li>
|
|
166
166
|
<li class="toctree-l1"><a class="reference internal" href="start">Quick start</a></li>
|
|
167
167
|
<li class="toctree-l1"><a class="reference internal" href="types">Data types</a></li>
|
|
168
168
|
<li class="toctree-l1"><a class="reference internal" href="functions">Function calls</a></li>
|
|
@@ -204,7 +204,7 @@
|
|
|
204
204
|
</div>
|
|
205
205
|
<article role="main">
|
|
206
206
|
<section id="koffi-version">
|
|
207
|
-
<h1>Koffi 1.3.
|
|
207
|
+
<h1>Koffi 1.3.8<a class="headerlink" href="#koffi-version" title="Permalink to this heading">#</a></h1>
|
|
208
208
|
<section id="overview">
|
|
209
209
|
<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this heading">#</a></h2>
|
|
210
210
|
<p>Koffi is a <strong>fast and easy-to-use C FFI module for Node.js</strong>, featuring:</p>
|
|
@@ -214,13 +214,19 @@
|
|
|
214
214
|
<li><p>Javascript functions can be used as C callbacks (since 1.2.0)</p></li>
|
|
215
215
|
<li><p>Well-tested code base for <a class="reference internal" href="platforms#supported-platforms"><span class="std std-ref">popular OS/architecture combinations</span></a></p></li>
|
|
216
216
|
</ul>
|
|
217
|
+
<p>Koffi requires a recent <a class="reference external" href="https://nodejs.org/">Node.js</a> version with N-API version 8 support, see <a class="reference internal" href="platforms#node-js"><span class="std std-ref">this page</span></a> for more information.</p>
|
|
217
218
|
</section>
|
|
218
219
|
<section id="table-of-contents">
|
|
219
220
|
<h2>Table of contents<a class="headerlink" href="#table-of-contents" title="Permalink to this heading">#</a></h2>
|
|
220
221
|
<div class="toctree-wrapper compound">
|
|
221
222
|
<ul>
|
|
222
|
-
<li class="toctree-l1"><a class="reference internal" href="platforms">
|
|
223
|
+
<li class="toctree-l1"><a class="reference internal" href="platforms">Requirements</a><ul>
|
|
224
|
+
<li class="toctree-l2"><a class="reference internal" href="platforms#node-js">Node.js</a></li>
|
|
225
|
+
<li class="toctree-l2"><a class="reference internal" href="platforms#supported-platforms">Supported platforms</a></li>
|
|
226
|
+
</ul>
|
|
227
|
+
</li>
|
|
223
228
|
<li class="toctree-l1"><a class="reference internal" href="start">Quick start</a><ul>
|
|
229
|
+
<li class="toctree-l2"><a class="reference internal" href="start#install-koffi">Install Koffi</a></li>
|
|
224
230
|
<li class="toctree-l2"><a class="reference internal" href="start#small-linux-example">Small Linux example</a></li>
|
|
225
231
|
<li class="toctree-l2"><a class="reference internal" href="start#small-windows-example">Small Windows example</a></li>
|
|
226
232
|
</ul>
|
|
@@ -249,9 +255,9 @@
|
|
|
249
255
|
</ul>
|
|
250
256
|
</li>
|
|
251
257
|
<li class="toctree-l1"><a class="reference internal" href="benchmarks">Benchmarks</a><ul>
|
|
252
|
-
<li class="toctree-l2"><a class="reference internal" href="benchmarks#
|
|
253
|
-
<li class="toctree-l2"><a class="reference internal" href="benchmarks#
|
|
254
|
-
<li class="toctree-l2"><a class="reference internal" href="benchmarks#
|
|
258
|
+
<li class="toctree-l2"><a class="reference internal" href="benchmarks#overview">Overview</a></li>
|
|
259
|
+
<li class="toctree-l2"><a class="reference internal" href="benchmarks#linux-x86-64">Linux x86_64</a></li>
|
|
260
|
+
<li class="toctree-l2"><a class="reference internal" href="benchmarks#windows-x86-64">Windows x86_64</a></li>
|
|
255
261
|
<li class="toctree-l2"><a class="reference internal" href="benchmarks#running-benchmarks">Running benchmarks</a></li>
|
|
256
262
|
</ul>
|
|
257
263
|
</li>
|
|
@@ -264,6 +270,9 @@
|
|
|
264
270
|
</ul>
|
|
265
271
|
</li>
|
|
266
272
|
<li class="toctree-l1"><a class="reference internal" href="changes">Changelog</a><ul>
|
|
273
|
+
<li class="toctree-l2"><a class="reference internal" href="changes#koffi-1-3-8">Koffi 1.3.8</a></li>
|
|
274
|
+
<li class="toctree-l2"><a class="reference internal" href="changes#koffi-1-3-7">Koffi 1.3.7</a></li>
|
|
275
|
+
<li class="toctree-l2"><a class="reference internal" href="changes#koffi-1-3-6">Koffi 1.3.6</a></li>
|
|
267
276
|
<li class="toctree-l2"><a class="reference internal" href="changes#koffi-1-3-5">Koffi 1.3.5</a></li>
|
|
268
277
|
<li class="toctree-l2"><a class="reference internal" href="changes#koffi-1-3-4">Koffi 1.3.4</a></li>
|
|
269
278
|
<li class="toctree-l2"><a class="reference internal" href="changes#koffi-1-3-3">Koffi 1.3.3</a></li>
|
|
@@ -295,7 +304,7 @@
|
|
|
295
304
|
<div class="context">
|
|
296
305
|
<span>Next</span>
|
|
297
306
|
</div>
|
|
298
|
-
<div class="title">
|
|
307
|
+
<div class="title">Requirements</div>
|
|
299
308
|
</div>
|
|
300
309
|
<svg><use href="#svg-arrow-right"></use></svg>
|
|
301
310
|
</a>
|
|
@@ -332,7 +341,7 @@
|
|
|
332
341
|
<div class="toc-tree-container">
|
|
333
342
|
<div class="toc-tree">
|
|
334
343
|
<ul>
|
|
335
|
-
<li><a class="reference internal" href="#">Koffi 1.3.
|
|
344
|
+
<li><a class="reference internal" href="#">Koffi 1.3.8</a><ul>
|
|
336
345
|
<li><a class="reference internal" href="#overview">Overview</a></li>
|
|
337
346
|
<li><a class="reference internal" href="#table-of-contents">Table of contents</a></li>
|
|
338
347
|
<li><a class="reference internal" href="#license">License</a></li>
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
|
|
6
6
|
<link rel="index" title="Index" href="genindex" /><link rel="search" title="Search" href="search" /><link rel="next" title="Benchmarks" href="benchmarks" /><link rel="prev" title="Function calls" href="functions" />
|
|
7
7
|
|
|
8
|
-
<meta name="generator" content="sphinx-5.0.
|
|
8
|
+
<meta name="generator" content="sphinx-5.0.2, furo 2022.06.21"/>
|
|
9
9
|
<title>Memory usage - Koffi</title>
|
|
10
10
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
|
11
11
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=40978830699223671f4072448e654b5958f38b89" />
|
|
@@ -162,7 +162,7 @@
|
|
|
162
162
|
</form>
|
|
163
163
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
|
164
164
|
<ul class="current">
|
|
165
|
-
<li class="toctree-l1"><a class="reference internal" href="platforms">
|
|
165
|
+
<li class="toctree-l1"><a class="reference internal" href="platforms">Requirements</a></li>
|
|
166
166
|
<li class="toctree-l1"><a class="reference internal" href="start">Quick start</a></li>
|
|
167
167
|
<li class="toctree-l1"><a class="reference internal" href="types">Data types</a></li>
|
|
168
168
|
<li class="toctree-l1"><a class="reference internal" href="functions">Function calls</a></li>
|
|
Binary file
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
<head><meta charset="utf-8"/>
|
|
4
4
|
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
|
5
5
|
<meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
|
|
6
|
-
<link rel="index" title="Index" href="genindex" /><link rel="search" title="Search" href="search" /><link rel="next" title="Quick start" href="start" /><link rel="prev" title="Koffi 1.3.
|
|
6
|
+
<link rel="index" title="Index" href="genindex" /><link rel="search" title="Search" href="search" /><link rel="next" title="Quick start" href="start" /><link rel="prev" title="Koffi 1.3.8" href="index" />
|
|
7
7
|
|
|
8
|
-
<meta name="generator" content="sphinx-5.0.
|
|
9
|
-
<title>
|
|
8
|
+
<meta name="generator" content="sphinx-5.0.2, furo 2022.06.21"/>
|
|
9
|
+
<title>Requirements - Koffi</title>
|
|
10
10
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
|
11
11
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=40978830699223671f4072448e654b5958f38b89" />
|
|
12
12
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
|
|
@@ -141,7 +141,7 @@
|
|
|
141
141
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
|
142
142
|
</button>
|
|
143
143
|
</div>
|
|
144
|
-
<label class="toc-overlay-icon toc-header-icon
|
|
144
|
+
<label class="toc-overlay-icon toc-header-icon" for="__toc">
|
|
145
145
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
|
146
146
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
|
147
147
|
</label>
|
|
@@ -162,7 +162,7 @@
|
|
|
162
162
|
</form>
|
|
163
163
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
|
164
164
|
<ul class="current">
|
|
165
|
-
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">
|
|
165
|
+
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Requirements</a></li>
|
|
166
166
|
<li class="toctree-l1"><a class="reference internal" href="start">Quick start</a></li>
|
|
167
167
|
<li class="toctree-l1"><a class="reference internal" href="types">Data types</a></li>
|
|
168
168
|
<li class="toctree-l1"><a class="reference internal" href="functions">Function calls</a></li>
|
|
@@ -197,14 +197,28 @@
|
|
|
197
197
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
|
198
198
|
</button>
|
|
199
199
|
</div>
|
|
200
|
-
<label class="toc-overlay-icon toc-content-icon
|
|
200
|
+
<label class="toc-overlay-icon toc-content-icon" for="__toc">
|
|
201
201
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
|
202
202
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
|
203
203
|
</label>
|
|
204
204
|
</div>
|
|
205
205
|
<article role="main">
|
|
206
|
-
<section id="
|
|
207
|
-
<h1>
|
|
206
|
+
<section id="requirements">
|
|
207
|
+
<h1>Requirements<a class="headerlink" href="#requirements" title="Permalink to this heading">#</a></h1>
|
|
208
|
+
<section id="node-js">
|
|
209
|
+
<h2>Node.js<a class="headerlink" href="#node-js" title="Permalink to this heading">#</a></h2>
|
|
210
|
+
<p>Koffi requires a recent <a class="reference external" href="https://nodejs.org/">Node.js</a> version with <a class="reference external" href="https://nodejs.org/api/n-api.html">N-API</a> version 8 support:</p>
|
|
211
|
+
<ul class="simple">
|
|
212
|
+
<li><p>Node < 12.22.0 is not supported</p></li>
|
|
213
|
+
<li><p><em>Node 12.x</em>: Node 12.22.0 or newer</p></li>
|
|
214
|
+
<li><p><em>Node 14.x</em>: Node 14.17.0 or newer</p></li>
|
|
215
|
+
<li><p><em>Node 15.x</em>: Node 15.12.0 or newer</p></li>
|
|
216
|
+
<li><p>Node 16.0.0 or later versions</p></li>
|
|
217
|
+
</ul>
|
|
218
|
+
<p>Use <a class="reference external" href="https://github.com/nvm-sh/nvm">NVM</a> to install more recent Node versions on older Linux distributions.</p>
|
|
219
|
+
</section>
|
|
220
|
+
<section id="supported-platforms">
|
|
221
|
+
<h2>Supported platforms<a class="headerlink" href="#supported-platforms" title="Permalink to this heading">#</a></h2>
|
|
208
222
|
<p>The following combinations of OS and architectures <strong>are officially supported and tested</strong> at the moment:</p>
|
|
209
223
|
<div class="table-wrapper colwidths-auto docutils container">
|
|
210
224
|
<table class="docutils align-default">
|
|
@@ -257,7 +271,6 @@
|
|
|
257
271
|
</table>
|
|
258
272
|
</div>
|
|
259
273
|
<p>For all fully supported platforms (green check marks), a prebuilt binary is included in the NPM package which means you can install Koffi without a C++ compiler.</p>
|
|
260
|
-
<p>Node 12 or later is required, earlier versions are not supported. Use <a class="reference external" href="https://github.com/nvm-sh/nvm">NVM</a> to install recent Node versions on older Linux distributions.</p>
|
|
261
274
|
<hr class="footnotes docutils" />
|
|
262
275
|
<aside class="footnote brackets" id="id4" role="note">
|
|
263
276
|
<span class="label"><span class="fn-bracket">[</span><a role="doc-backlink" href="#id1">1</a><span class="fn-bracket">]</span></span>
|
|
@@ -271,6 +284,7 @@
|
|
|
271
284
|
<span class="label"><span class="fn-bracket">[</span><a role="doc-backlink" href="#id3">3</a><span class="fn-bracket">]</span></span>
|
|
272
285
|
<p>The prebuilt binary uses the LP64D (double-precision float) ABI. The LP64 ABI is supported in theory if you build Koffi from source (untested), the LP64F ABI is not supported.</p>
|
|
273
286
|
</aside>
|
|
287
|
+
</section>
|
|
274
288
|
</section>
|
|
275
289
|
|
|
276
290
|
</article>
|
|
@@ -318,9 +332,29 @@
|
|
|
318
332
|
|
|
319
333
|
</footer>
|
|
320
334
|
</div>
|
|
321
|
-
<aside class="toc-drawer
|
|
335
|
+
<aside class="toc-drawer">
|
|
322
336
|
|
|
323
337
|
|
|
338
|
+
<div class="toc-sticky toc-scroll">
|
|
339
|
+
<div class="toc-title-container">
|
|
340
|
+
<span class="toc-title">
|
|
341
|
+
Contents
|
|
342
|
+
</span>
|
|
343
|
+
</div>
|
|
344
|
+
<div class="toc-tree-container">
|
|
345
|
+
<div class="toc-tree">
|
|
346
|
+
<ul>
|
|
347
|
+
<li><a class="reference internal" href="#">Requirements</a><ul>
|
|
348
|
+
<li><a class="reference internal" href="#node-js">Node.js</a></li>
|
|
349
|
+
<li><a class="reference internal" href="#supported-platforms">Supported platforms</a></li>
|
|
350
|
+
</ul>
|
|
351
|
+
</li>
|
|
352
|
+
</ul>
|
|
353
|
+
|
|
354
|
+
</div>
|
|
355
|
+
</div>
|
|
356
|
+
</div>
|
|
357
|
+
|
|
324
358
|
|
|
325
359
|
</aside>
|
|
326
360
|
</div>
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
|
5
5
|
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex" /><link rel="search" title="Search" href="#" />
|
|
6
6
|
|
|
7
|
-
<meta name="generator" content="sphinx-5.0.
|
|
7
|
+
<meta name="generator" content="sphinx-5.0.2, furo 2022.06.21"/><title>Search - Koffi</title><link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
|
8
8
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=40978830699223671f4072448e654b5958f38b89" />
|
|
9
9
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
|
|
10
10
|
<link rel="stylesheet" type="text/css" href="_static/custom.css" />
|
|
@@ -159,7 +159,7 @@
|
|
|
159
159
|
</form>
|
|
160
160
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
|
161
161
|
<ul>
|
|
162
|
-
<li class="toctree-l1"><a class="reference internal" href="platforms">
|
|
162
|
+
<li class="toctree-l1"><a class="reference internal" href="platforms">Requirements</a></li>
|
|
163
163
|
<li class="toctree-l1"><a class="reference internal" href="start">Quick start</a></li>
|
|
164
164
|
<li class="toctree-l1"><a class="reference internal" href="types">Data types</a></li>
|
|
165
165
|
<li class="toctree-l1"><a class="reference internal" href="functions">Function calls</a></li>
|