Skip to content

This XenoAtom.Interop project provides a set of C# libraries to interop with C/C++ libraries (musl, libgit2, sqlite, vulkan...)

License

Notifications You must be signed in to change notification settings

XenoAtom/XenoAtom.Interop

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

XenoAtom.Interop 🚀

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

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
This package provides the shared types FixedArray#<T> to interop between .NET and C/C++.

-
all Build Status
NuGet
XenoAtom.Interop.musl
musl libc is an implementation of the C standard library providing access to the Linux kernel syscalls.
musl
1.2.5
linux-x64, linux-arm64 Build Status
NuGet
XenoAtom.Interop.libgit2
libgit2 is a pure C implementation of the git core methods.
libgit2
1.7.2
all Build Status
NuGet
XenoAtom.Interop.sqlite
SQLite is a small and fast SQL database engine.
sqlite
3.45.3
all Build Status
NuGet
XenoAtom.Interop.zlib
zlib compression library.
zlib
1.3.1
all Build Status
NuGet
XenoAtom.Interop.vulkan
Vulkan is a low-overhead, cross-platform 3D graphics and compute API.
vulkan
1.3.261.1
all Build Status
NuGet
XenoAtom.Interop.libdrm
libdrm is a userspace library that provides a user-space API to the Direct Rendering Manager.
libdrm
2.4.120
linux Build Status
NuGet
XenoAtom.Interop.libgbm
libgbm is a userspace library that provides an abstraction for buffer management used by graphics drivers.
libgbm
24.0.9
linux Build Status
NuGet
XenoAtom.Interop.libshaderc
libshaderc is a library for compiling GLSL/HLSL to SPIR-V.
libshaderc
2024.0
all Build Status
NuGet
XenoAtom.Interop.libkmod
libkmod is a library for managing kernel modules.
libkmod
32
linux Build Status
NuGet
  • all: The library is available for all supported architectures.
  • For musl library, it will work if musl is installed on the system. Typically on Alpine Linux you don't need to install anything. So the targets linux-musl-x64 and linux-musl-arm64 are supported by default.

📜 User Guide

Coming soon! 🤞

🪪 License

This software is released under the BSD-2-Clause license.

🤗 Author

Alexandre Mutel aka xoofx.