--- gitea: none include_toc: true --- # Conan 2.0 Profiles, Remotes and Global-Configuration and Usage ## 1. Overview This directory contains Conan 2.0 profile files used to define the build configuration for our projects. They cover multiple architectures (`x64`, `armv8`) and GCC compiler versions (`9`, `13`, `14`). ## Quick-Start To apply these configurations to your local Conan environment, use the `conan config install` command pointing to this repository. Installs global.conf, remotes.json, and profiles automatically: > ⚠️ **Warning:** This command will **overwrite** your existing [remotes.json](remotes.json) file. Any custom remotes you have configured will be replaced by the ones defined in this repository. > > **Please back up your existing remotes if needed!** ```bash conan config install https://package-cloud.dns.army/ros2/conan2-config.git --type git # or a specific branch/tag conan config install https://package-cloud.dns.army/ros2/conan2-config.git --type git --args="--branch main" ``` For authenticated access (development), use: ```bash export CONAN_USR= export CONAN_PSW= conan remote login package-cloud-ros2-conan2 $CONAN_USR -p $CONAN_PSW # for development/nightly builds conan remote login package-cloud-ros2-dev-conan2 $CONAN_USR -p $CONAN_PSW # is disabled by default, enable it with: conan remote enable package-cloud-ros2-dev-conan2 ``` ## 7. Requirements - **Conan Client**: Version 2.0+ is required. ## 2. Naming Convention The filenames follow a strict pattern to identify the target environment: `{arch}_{os}_{compiler}_{version}[_{variant}]` - **{arch}**: Target architecture (`x64`, `armv8`) - **{os}**: Target operating system (`linux`) - **{compiler}**: Compiler used (`gcc`) - **{version}**: Major compiler version (`9`, `13`, `14`) - **{variant}**: Optional suffix for specific cross-compilation toolchains (e.g., `croco` for ARMv8 Cross-Compilation toolchain) ## 3. Profile Types ### A. Base Profiles *(e.g., `x64_linux_gcc_13`, `armv8_linux_gcc_14`)* - Define the standard settings: `os`, `arch`, `compiler`, `build_type`, `cppstd`. - Use the system-installed compiler or the default environment. - **Content format example:** ```ini [settings] arch=x86_64 compiler=gcc ... ``` ### B. Variant Profiles *(e.g., `armv8_linux_gcc_13_croco`)* - **EXTEND** base profiles using the `include()` directive. - **INJECT** specific build tools via `[tool_requires]`. - **"croco" variants** inject the `armv8-croco-toolchain` package for cross-compilation. ## 4. Usage To use a profile, pass the filename to the Conan install or create command using the `-pr` (profile) argument. **Example 1: Build for standard x64 Linux with GCC 14** ```bash conan install . -pr x64_linux_gcc_14 --build=missing ``` **Example 2: Cross-compile for ARMv8 "Croco" target with GCC 9** ```bash conan install . -pr armv8_linux_gcc_9_croco --build=missing ``` ## 5. File List & Details | Profile Filename | Arch | GCC Ver | Std | Description | |:---------------------------|:-------|:--------|:------|:-----------------------------------------------| | `x64_linux_gcc_9` | x86_64 | 9 | gnu14 | Legacy x64 build for ubuntu-focal-20.04 | | `x64_linux_gcc_13` | x86_64 | 13 | gnu17 | Modern x64 build for ubuntu-jammy-22.04 | | `x64_linux_gcc_14` | x86_64 | 14 | gnu17 | Bleeding edge x64 for ubuntu-noble-24.04 | | `armv8_linux_gcc_9` | armv8 | 9 | gnu14 | Base ARMv8 GCC 9 for ubuntu-focal-20.04 | | `armv8_linux_gcc_13` | armv8 | 13 | gnu17 | Base ARMv8 GCC 13 for ubuntu-jammy-22.04 | | `armv8_linux_gcc_14` | armv8 | 14 | gnu17 | Base ARMv8 GCC 14 for ubuntu-noble-24.04 | | `armv8_linux_gcc_9_croco` | armv8 | 9 | gnu14 | Croco Toolchain (v9.3) for ubuntu-focal-20.04 | | `armv8_linux_gcc_13_croco` | armv8 | 13 | gnu17 | Croco Toolchain (v13.3) for ubuntu-jammy-22.04 | | `armv8_linux_gcc_14_croco` | armv8 | 14 | gnu17 | Croco Toolchain (v14.3) for ubuntu-noble-24.04 | ## 6. Global Configuration & Remotes In addition to profiles, this repository provides standard configuration for the Conan client (`global.conf`) and package repositories (`remotes.json`). ### A. Global Configuration (`global.conf`) This file defines core client behavior, optimizing for build performance and system integration. - **Networking:** - `core.net.http:timeout`: Set to **6000** seconds to handle large downloads over VPN. - `core.download:parallel` / `core.upload:parallel`: Dynamically uses all available CPU cores (`{{os.cpu_count()}}`) for faster transfers. - **System Integration:** - `tools.system.package_manager:mode`: Set to `install` (automatically installs system dependencies like apt packages). - `tools.system.package_manager:sudo`: Enabled (`True`) to allow sudo for system package installs. ### B. Remotes (`remotes.json`) This file defines the upstream sources for packages. The order is critical for security and precedence. | Order | Remote Name | URL | Usage | |:------|:--------------------------------|:----------------------------------|:-----------------------------------------------------| | **1** | `package-cloud-ros2-conan2` | `.../api/packages/ros2/conan` | **Primary** source for stable production packages. | | **2** | `package-cloud-ros2-dev-conan2` | `.../api/packages/ros2-dev/conan` | **Secondary** source for development/nightly builds. | **Important Note:** These remotes are hosted on `package-cloud.dns.army`. Ensure you have the necessary network access and credentials. ### C. Installation To apply these configurations to your local Conan environment, use the `conan config install` command pointing to this repository: > ⚠️ **Warning:** This command will **overwrite** your existing [remotes.json](remotes.json) file. Any custom remotes you have configured will be replaced by the ones defined in this repository. > > **Please back up your existing remotes if needed!** ```bash conan config install https://package-cloud.dns.army/ros2/conan2-config.git --type git # or a specific branch/tag conan config install https://package-cloud.dns.army/ros2/conan2-config.git --type git --args="--branch main" ``` For authenticated access (development), use: ```bash export CONAN_USR= export CONAN_PSW= conan remote login package-cloud-ros2-conan2 $CONAN_USR -p $CONAN_PSW # for development/nightly builds conan remote login package-cloud-ros2-dev-conan2 $CONAN_USR -p $CONAN_PSW # is disabled by default, enable it with: conan remote enable package-cloud-ros2-dev-conan2 ```