Awesome
XenoAtom.Interop 🚀
<img align="right" width="160px" height="160px" src="https://raw.githubusercontent.com/XenoAtom/XenoAtom.Interop/main/img/XenoAtom.Interop.png">This XenoAtom.Interop project provides a set of C# libraries to interop with C/C++ libraries.
✨ Features
- API generated automatically from C/C++ headers providing a near 100% API coverage.
- Low-level interop with C/C++ libraries
- The C/C++ API exposed is raw and will use pointers...etc.
- Pure Function Pointers generated for callbacks, no managed delegates.
- Similarly for
ReadOnlySpan<byte>
whenever possible.
- Modern interop using
[LibraryImport]
with P/Invoke source generation.- Some functions taking or returning strings try to offer a more user-friendly API by using
string
(but the raw function is still accessible!) - Fast UTF16 to UTF8 string marshalling with zero allocations (for small strings).
DllImportResolver
support for each library to customize loading the native library.
- Some functions taking or returning strings try to offer a more user-friendly API by using
- No native binaries are provided, only the P/Invoke bindings.
- But some 3rd party NuGet packages might provide compatible native libraries. See the list of available compatible packages in each library below.
- Simple API XML documentation is provided for each library whenever possible (extracted from the C/C++ headers).
- NativeAOT Compatible.
- Supports
net8.0
+
📦 Libraries
<!-- XENOATOM_INTEROP BEGIN - DO NOT EDIT: this section below is automatically generated --->The C/C++ header files from the Alpine Linux v3.20
were used to generated automatically the .NET P/Invoke bindings.
The following libraries are available:
Library | Native Version | Arch | NuGet |
---|---|---|---|
XenoAtom.Interop<br>This package provides the shared types FixedArray#<T> to interop between .NET and C/C++. | <br>- | all | <br> |
XenoAtom.Interop.musl<br>musl libc is an implementation of the C standard library providing access to the Linux kernel syscalls. | musl<br>1.2.5 | linux-x64 , linux-arm64 | <br> |
XenoAtom.Interop.libgit2<br>libgit2 is a pure C implementation of the git core methods. | libgit2<br>1.7.2 | all | <br> |
XenoAtom.Interop.sqlite<br>SQLite is a small and fast SQL database engine. | sqlite<br>3.45.3 | all | <br> |
XenoAtom.Interop.zlib<br>zlib compression library. | zlib<br>1.3.1 | all | <br> |
XenoAtom.Interop.vulkan<br>Vulkan is a low-overhead, cross-platform 3D graphics and compute API. | vulkan<br>1.3.261.1 | all | <br> |
XenoAtom.Interop.libdrm<br>libdrm is a userspace library that provides a user-space API to the Direct Rendering Manager. | libdrm<br>2.4.120 | linux | <br> |
XenoAtom.Interop.libgbm<br>libgbm is a userspace library that provides an abstraction for buffer management used by graphics drivers. | libgbm<br>24.0.9 | linux | <br> |
XenoAtom.Interop.libshaderc<br>libshaderc is a library for compiling GLSL/HLSL to SPIR-V. | libshaderc<br>2024.0 | all | <br> |
XenoAtom.Interop.libkmod<br>libkmod is a library for managing kernel modules. | libkmod<br>32 | linux | <br> |
all
: The library is available for all supported architectures.- For
musl
library, it will work ifmusl
is installed on the system. Typically on Alpine Linux you don't need to install anything. So the targetslinux-musl-x64
andlinux-musl-arm64
are supported by default.
📜 User Guide
Coming soon! 🤞
<!--For more details on how to use XenoAtom.Interop, please visit the [user guide](https://github.com/XenoAtom/XenoAtom.Interop/blob/main/doc/readme.md). -->🪪 License
This software is released under the BSD-2-Clause license.
🤗 Author
Alexandre Mutel aka xoofx.