mirror of
https://github.com/loot/libloot.git
synced 2026-07-27 14:16:01 -07:00
90 lines
3.3 KiB
Markdown
90 lines
3.3 KiB
Markdown
# libloot C++ wrapper
|
|
|
|
This is a wrapper around libloot that provides a C++ interface that's ABI-compatible with libloot v0.27.0.
|
|
|
|
The wrapper has two layers:
|
|
|
|
- a static library built using Cargo, which provides a C++ interface
|
|
- a shared library built using CMake, which wraps that C++ interface to provide another that is more idiomatic.
|
|
|
|
## Build
|
|
|
|
The prerequisites for building libloot and its C++ wrapper are [CMake](https://cmake.org/), the [Rust](https://www.rust-lang.org/) toolchain and a C++ toolchain. The CI builds currently use a recent version of CMake, the latest version of Rust, MSVC 2022 on Windows and GCC 13 on Linux, so alternatives such as other versions, Mingw-w64 or Clang may not work without modifications.
|
|
|
|
To build a release build with debug info on Windows:
|
|
|
|
```
|
|
cmake -B build .
|
|
cmake --build build --parallel --config RelWithDebInfo
|
|
```
|
|
|
|
To do the same on Linux:
|
|
|
|
```
|
|
cmake -B build . -DCMAKE_BUILD_TYPE=RelWithDebInfo
|
|
cmake --build build --parallel
|
|
```
|
|
|
|
To cross-compile on Linux for Windows:
|
|
|
|
```
|
|
cmake -B build . -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-mingw64.cmake
|
|
cmake --build build --parallel
|
|
```
|
|
|
|
To build a debug build, pass `Debug` instead of `RelWithDebInfo`.
|
|
|
|
The following CMake variables can be used to configure the build:
|
|
|
|
| Parameter | Values | Default | Description |
|
|
|------------------------|-------------|---------|----------------------------------------------------------------------------------------------------------|
|
|
| `LIBLOOT_BUILD_SHARED` | `ON`, `OFF` | `ON` | Whether or not to build a shared libloot binary. |
|
|
| `LIBLOOT_BUILD_TESTS` | `ON`, `OFF` | `ON` | Whether or not to build libloot's tests. |
|
|
| `LIBLOOT_INSTALL_DOCS` | `ON`, `OFF` | `ON` | Whether or not to install libloot's docs (which need to be built separately). |
|
|
| `RUN_CLANG_TIDY` | `ON`, `OFF` | `OFF` | Whether or not to run clang-tidy during build. Has no effect when using CMake's Visual Studio generator. |
|
|
|
|
An example of using libloot with CMake's FetchContent:
|
|
|
|
```cmake
|
|
set(LIBLOOT_BUILD_TESTS OFF)
|
|
set(LIBLOOT_INSTALL_DOCS OFF)
|
|
|
|
FetchContent_Declare(libloot
|
|
GIT_REPOSITORY "https://github.com/loot/libloot.git"
|
|
GIT_TAG "master" # Better to use a specific commit hash.
|
|
SOURCE_SUBDIR "cpp")
|
|
|
|
FetchContent_MakeAvailable(libloot)
|
|
|
|
add_executable(myapp ${MYAPP_SOURCES})
|
|
target_link_libraries(myapp PRIVATE libloot::loot)
|
|
```
|
|
|
|
### Documentation
|
|
|
|
Install [Doxygen](https://www.doxygen.nl/), [Python](https://www.python.org/) and [uv](https://docs.astral.sh/uv/getting-started/installation/) and make sure they're accessible from your `PATH`, then run:
|
|
|
|
```
|
|
uv run --directory ../docs -- sphinx-build -b html . build/html
|
|
```
|
|
|
|
## Tests
|
|
|
|
If the tests are built they can be run using:
|
|
|
|
```
|
|
ctest --test-dir build --output-on-failure --parallel -V
|
|
```
|
|
|
|
## Packaging
|
|
|
|
To package the build:
|
|
|
|
```
|
|
cpack --config build/CPackConfig.cmake -C RelWithDebInfo
|
|
```
|
|
|
|
## Minimum supported Rust version
|
|
|
|
The minimum supported Rust version is `1.89`. This may change at any time, but there is a CI job to check that it does not change unexpectedly.
|