- CMakePresets.json: add 'fast' preset (clang+lld+ccache) - .gitignore: generalize build/ to build*/, add CMakeUserPresets.json - CMakeUserPresets.json: untrack (conan-generated, now gitignored) - src/Core/Archives.h: remove redundant 'using basic_xml_iarchive::load_override' in xml_iarchive; caused ambiguous overload with clang (diamond inheritance) - src/Core/Object.cpp: remove invalid explicit instantiations of non-template virtual Object::serialize (GCC extension, clang rejects) - README.md, CLAUDE.md: document GCC and LLVM/clang build workflows Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
97 lines
2.5 KiB
Markdown
97 lines
2.5 KiB
Markdown
# uLib
|
|
|
|
[](https://zenodo.org/badge/latestdoi/36926725)
|
|
|
|
base toolkit library
|
|
|
|
CMT Cosmic Muon Tomography reconstruction, analysis and imaging software
|
|
Developed by University of Padova and INFN Sezione di Padova Italy
|
|
|
|
## Build Instructions
|
|
|
|
This project relies on `conan` (v2) for dependency management (Eigen3, Boost) and `cmake` for configuration. VTK is provided through the micromamba/conda-forge environment.
|
|
|
|
### Prerequisites
|
|
|
|
This project requires a `conda` or `micromamba` environment containing the necessary global tools like **ROOT**, **VTK**, and **Conan** (v2). We provide a `condaenv.yml` file to quickly build this environment.
|
|
|
|
#### Installing Micromamba (Optional)
|
|
|
|
If you do not have `conda` installed, `micromamba` is a fast and lightweight alternative. You can install it on Linux via:
|
|
|
|
```bash
|
|
"${SHELL}" <(curl -L micro.mamba.pm/install.sh)
|
|
```
|
|
|
|
#### Creating the Environment
|
|
|
|
You can create and activate the environment using either `micromamba` or `conda`.
|
|
|
|
**Using Micromamba:**
|
|
```bash
|
|
micromamba env create -f condaenv.yml
|
|
micromamba activate mutom
|
|
```
|
|
|
|
**Using Conda:**
|
|
```bash
|
|
conda env create -f condaenv.yml
|
|
conda activate mutom
|
|
```
|
|
|
|
### Configure and Build
|
|
|
|
#### Standard build (GCC + Ninja + ccache)
|
|
|
|
The default conan profile uses **Ninja** as the generator and **ccache** for compiler caching, dramatically speeding up incremental rebuilds.
|
|
|
|
1. **Configure Conan profile (first time only):**
|
|
```bash
|
|
conan profile detect
|
|
```
|
|
|
|
2. **Install Conan dependencies:**
|
|
```bash
|
|
conan install . --output-folder=build --build=missing
|
|
```
|
|
|
|
3. **Configure with CMake:**
|
|
```bash
|
|
cmake --preset conan-release
|
|
```
|
|
|
|
4. **Build:**
|
|
```bash
|
|
cmake --build build -j$(nproc)
|
|
```
|
|
|
|
#### LLVM/Clang build (clang + lld + ccache — fastest)
|
|
|
|
A `fast` conan profile is provided that uses **clang**, **lld** (LLVM linker), and **ccache**. Install them into your environment first:
|
|
|
|
```bash
|
|
micromamba install -n mutom -y clang clangxx lld -c conda-forge
|
|
```
|
|
|
|
Then build using the `fast` profile:
|
|
|
|
```bash
|
|
conan install . --output-folder=build --build=missing --profile=fast
|
|
cmake -B build -G Ninja \
|
|
-DCMAKE_TOOLCHAIN_FILE=build/conan_toolchain.cmake \
|
|
-DCMAKE_BUILD_TYPE=Release
|
|
cmake --build build -j$(nproc)
|
|
```
|
|
|
|
The `fast` profile is defined at `~/.conan2/profiles/fast` and sets:
|
|
- `CMAKE_C_COMPILER=clang` / `CMAKE_CXX_COMPILER=clang++`
|
|
- `CMAKE_EXE_LINKER_FLAGS=-fuse-ld=lld`
|
|
- `CMAKE_CXX_COMPILER_LAUNCHER=ccache`
|
|
|
|
### Make python package
|
|
|
|
```bash
|
|
micromamba run -n mutom env USE_CUDA=ON poetry install
|
|
```
|
|
|