mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2026-01-31 13:20:55 -07:00
Move many third-party components' source codes from the src folder to a new folder called deps_src. The goal is to make the code structure clearer and easier to navigate.
119 lines
No EOL
3.3 KiB
Markdown
119 lines
No EOL
3.3 KiB
Markdown
# CMake Interfaces for deps_src Libraries
|
|
|
|
This document describes how to use the CMake interface libraries created for the subdirectories in `deps_src/`.
|
|
|
|
## Available Libraries
|
|
|
|
### 1. **semver** (Static Library)
|
|
- **Type**: Static library
|
|
- **Target**: `semver` or `semver::semver`
|
|
- **Headers**: `semver.h`
|
|
- **Usage**:
|
|
```cmake
|
|
target_link_libraries(your_target PRIVATE semver)
|
|
# or
|
|
target_link_libraries(your_target PRIVATE semver::semver)
|
|
```
|
|
|
|
### 2. **hints** (Interface Library)
|
|
- **Type**: Interface library (header-only)
|
|
- **Target**: `hints`
|
|
- **Utility**: `hintsToPot` executable
|
|
- **Usage**:
|
|
```cmake
|
|
target_link_libraries(your_target PRIVATE hints)
|
|
```
|
|
|
|
### 3. **spline** (Interface Library)
|
|
- **Type**: Interface library (header-only)
|
|
- **Target**: `spline` or `spline::spline`
|
|
- **Headers**: `spline.h`
|
|
- **Usage**:
|
|
```cmake
|
|
target_link_libraries(your_target PRIVATE spline)
|
|
# or
|
|
target_link_libraries(your_target PRIVATE spline::spline)
|
|
```
|
|
|
|
### 4. **stb_dxt** (Interface Library)
|
|
- **Type**: Interface library (header-only)
|
|
- **Target**: `stb_dxt` or `stb_dxt::stb_dxt`
|
|
- **Headers**: `stb_dxt.h`
|
|
- **Usage**:
|
|
```cmake
|
|
target_link_libraries(your_target PRIVATE stb_dxt)
|
|
# or
|
|
target_link_libraries(your_target PRIVATE stb_dxt::stb_dxt)
|
|
```
|
|
|
|
## How to Use in Your Project
|
|
|
|
### From within the OrcaSlicer src/ directory:
|
|
|
|
1. **In your CMakeLists.txt**, simply link the library:
|
|
```cmake
|
|
add_executable(my_app main.cpp)
|
|
target_link_libraries(my_app
|
|
PRIVATE
|
|
semver::semver # For version parsing
|
|
spline::spline # For spline interpolation
|
|
stb_dxt::stb_dxt # For DXT texture compression
|
|
hints # For hints functionality
|
|
)
|
|
```
|
|
|
|
2. **In your C++ code**, include the headers:
|
|
```cpp
|
|
// For semver
|
|
#include <semver.h>
|
|
|
|
// For spline
|
|
#include <spline.h>
|
|
|
|
// For stb_dxt
|
|
#include <stb_dxt.h>
|
|
|
|
// Use the libraries as documented in their respective headers
|
|
```
|
|
|
|
## Benefits of This Approach
|
|
|
|
1. **Modern CMake**: Uses target-based CMake with proper INTERFACE/PUBLIC/PRIVATE visibility
|
|
2. **Proper Include Paths**: Automatically sets up include directories
|
|
3. **Namespace Aliases**: Provides namespaced aliases (e.g., `spline::spline`) for clarity
|
|
4. **Position Independent Code**: Static libraries are built with `-fPIC` for compatibility
|
|
5. **Install Support**: Libraries can be installed and used by external projects
|
|
6. **Build/Install Interface**: Separates build-time and install-time include paths
|
|
|
|
## Example Integration
|
|
|
|
Here's a complete example of using these libraries in a new component:
|
|
|
|
```cmake
|
|
# In src/mycomponent/CMakeLists.txt
|
|
add_library(mycomponent STATIC
|
|
mycomponent.cpp
|
|
mycomponent.h
|
|
)
|
|
|
|
target_link_libraries(mycomponent
|
|
PUBLIC
|
|
semver::semver # Version handling is part of public API
|
|
PRIVATE
|
|
spline::spline # Used internally for interpolation
|
|
stb_dxt::stb_dxt # Used internally for texture compression
|
|
)
|
|
|
|
target_include_directories(mycomponent
|
|
PUBLIC
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
|
|
$<INSTALL_INTERFACE:include>
|
|
)
|
|
```
|
|
|
|
## Notes
|
|
|
|
- All header-only libraries use the INTERFACE library type, which means they don't produce any binaries
|
|
- The `semver` library produces a static library that will be linked into your target
|
|
- The `hints` project also produces a `hintsToPot` executable utility
|
|
- All libraries require at least C++11 (some require C++17) |