mirror of
				https://github.com/XRPLF/clio.git
				synced 2025-11-04 11:55:51 +00:00 
			
		
		
		
	feat: Add init_conan script (#2242)
This should make life of a developer so much easier
This commit is contained in:
		
							
								
								
									
										39
									
								
								.github/actions/setup_conan_macos/action.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										39
									
								
								.github/actions/setup_conan_macos/action.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,39 +0,0 @@
 | 
			
		||||
name: Setup conan
 | 
			
		||||
description: Setup conan profiles and artifactory on macOS runner
 | 
			
		||||
 | 
			
		||||
inputs:
 | 
			
		||||
  conan_files_dir:
 | 
			
		||||
    description: Directory with conan files
 | 
			
		||||
    required: true
 | 
			
		||||
 | 
			
		||||
runs:
 | 
			
		||||
  using: composite
 | 
			
		||||
  steps:
 | 
			
		||||
    - name: Fail on non-macOS
 | 
			
		||||
      if: runner.os != 'macOS'
 | 
			
		||||
      shell: bash
 | 
			
		||||
      run: exit 1
 | 
			
		||||
 | 
			
		||||
    - name: Copy global.conf
 | 
			
		||||
      shell: bash
 | 
			
		||||
      run: |
 | 
			
		||||
        cp "${{ inputs.conan_files_dir }}/global.conf" "${{ env.CONAN_HOME }}/global.conf"
 | 
			
		||||
 | 
			
		||||
    - name: Create apple-clang conan profile
 | 
			
		||||
      shell: bash
 | 
			
		||||
      run: |
 | 
			
		||||
        mkdir -p "${{ env.CONAN_HOME }}/profiles"
 | 
			
		||||
        cp .github/actions/setup_conan_macos/apple-clang.profile "${{ env.CONAN_HOME }}/profiles/apple-clang"
 | 
			
		||||
 | 
			
		||||
    - name: Create conan profiles for sanitizers
 | 
			
		||||
      shell: bash
 | 
			
		||||
      working-directory: ${{ inputs.conan_files_dir }}
 | 
			
		||||
      run: |
 | 
			
		||||
        cp ./sanitizer_template.profile "${{ env.CONAN_HOME }}/profiles/apple-clang.asan"
 | 
			
		||||
        cp ./sanitizer_template.profile "${{ env.CONAN_HOME }}/profiles/apple-clang.tsan"
 | 
			
		||||
        cp ./sanitizer_template.profile "${{ env.CONAN_HOME }}/profiles/apple-clang.ubsan"
 | 
			
		||||
 | 
			
		||||
    - name: Add artifactory remote
 | 
			
		||||
      shell: bash
 | 
			
		||||
      run: |
 | 
			
		||||
        conan remote add --index 0 ripple http://18.143.149.228:8081/artifactory/api/conan/dev
 | 
			
		||||
							
								
								
									
										13
									
								
								.github/dependabot.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								.github/dependabot.yml
									
									
									
									
										vendored
									
									
								
							@@ -142,16 +142,3 @@ updates:
 | 
			
		||||
    commit-message:
 | 
			
		||||
      prefix: "ci: [DEPENDABOT] "
 | 
			
		||||
    target-branch: develop
 | 
			
		||||
 | 
			
		||||
  - package-ecosystem: github-actions
 | 
			
		||||
    directory: .github/actions/setup_conan_macos/
 | 
			
		||||
    schedule:
 | 
			
		||||
      interval: weekly
 | 
			
		||||
      day: monday
 | 
			
		||||
      time: "04:00"
 | 
			
		||||
      timezone: Etc/GMT
 | 
			
		||||
    reviewers:
 | 
			
		||||
      - XRPLF/clio-dev-team
 | 
			
		||||
    commit-message:
 | 
			
		||||
      prefix: "ci: [DEPENDABOT] "
 | 
			
		||||
    target-branch: develop
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										43
									
								
								.github/scripts/conan/init.sh
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										43
									
								
								.github/scripts/conan/init.sh
									
									
									
									
										vendored
									
									
										Executable file
									
								
							@@ -0,0 +1,43 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -ex
 | 
			
		||||
 | 
			
		||||
CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)"
 | 
			
		||||
REPO_DIR="$(cd "$CURRENT_DIR/../../../" && pwd)"
 | 
			
		||||
 | 
			
		||||
CONAN_DIR="${CONAN_HOME:-$HOME/.conan2}"
 | 
			
		||||
PROFILES_DIR="$CONAN_DIR/profiles"
 | 
			
		||||
 | 
			
		||||
APPLE_CLANG_PROFILE="$CURRENT_DIR/apple-clang.profile"
 | 
			
		||||
 | 
			
		||||
GCC_PROFILE="$REPO_DIR/docker/ci/conan/gcc.profile"
 | 
			
		||||
CLANG_PROFILE="$REPO_DIR/docker/ci/conan/clang.profile"
 | 
			
		||||
 | 
			
		||||
SANITIZER_TEMPLATE_FILE="$REPO_DIR/docker/ci/conan/sanitizer_template.profile"
 | 
			
		||||
 | 
			
		||||
rm -rf "$CONAN_DIR"
 | 
			
		||||
 | 
			
		||||
conan remote add --index 0 ripple http://18.143.149.228:8081/artifactory/api/conan/dev
 | 
			
		||||
 | 
			
		||||
cp "$REPO_DIR/docker/ci/conan/global.conf" "$CONAN_DIR/global.conf"
 | 
			
		||||
 | 
			
		||||
create_profile_with_sanitizers() {
 | 
			
		||||
    profile_name="$1"
 | 
			
		||||
    profile_source="$2"
 | 
			
		||||
 | 
			
		||||
    cp "$profile_source" "$PROFILES_DIR/$profile_name"
 | 
			
		||||
    cp "$SANITIZER_TEMPLATE_FILE" "$PROFILES_DIR/$profile_name.asan"
 | 
			
		||||
    cp "$SANITIZER_TEMPLATE_FILE" "$PROFILES_DIR/$profile_name.tsan"
 | 
			
		||||
    cp "$SANITIZER_TEMPLATE_FILE" "$PROFILES_DIR/$profile_name.ubsan"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
mkdir -p "$PROFILES_DIR"
 | 
			
		||||
 | 
			
		||||
if [[ "$(uname)" == "Darwin" ]]; then
 | 
			
		||||
    create_profile_with_sanitizers "apple-clang" "$APPLE_CLANG_PROFILE"
 | 
			
		||||
    echo "include(apple-clang)" > "$PROFILES_DIR/default"
 | 
			
		||||
else
 | 
			
		||||
    create_profile_with_sanitizers "clang" "$CLANG_PROFILE"
 | 
			
		||||
    create_profile_with_sanitizers "gcc" "$GCC_PROFILE"
 | 
			
		||||
    echo "include(gcc)" > "$PROFILES_DIR/default"
 | 
			
		||||
fi
 | 
			
		||||
							
								
								
									
										7
									
								
								.github/workflows/build_impl.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.github/workflows/build_impl.yml
									
									
									
									
										vendored
									
									
								
							@@ -77,11 +77,10 @@ jobs:
 | 
			
		||||
        with:
 | 
			
		||||
          disable_ccache: ${{ inputs.disable_cache }}
 | 
			
		||||
 | 
			
		||||
      - name: Setup conan
 | 
			
		||||
      - name: Setup conan on macOS
 | 
			
		||||
        if: runner.os == 'macOS'
 | 
			
		||||
        uses: ./.github/actions/setup_conan_macos
 | 
			
		||||
        with:
 | 
			
		||||
          conan_files_dir: docker/ci/conan/
 | 
			
		||||
        shell: bash
 | 
			
		||||
        run: ./.github/scripts/conan/init.sh
 | 
			
		||||
 | 
			
		||||
      - name: Restore cache
 | 
			
		||||
        if: ${{ !inputs.disable_cache }}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										23
									
								
								.github/workflows/upload_conan_deps.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										23
									
								
								.github/workflows/upload_conan_deps.yml
									
									
									
									
										vendored
									
									
								
							@@ -15,7 +15,12 @@ on:
 | 
			
		||||
      - develop
 | 
			
		||||
    paths:
 | 
			
		||||
      - .github/workflows/upload_conan_deps.yml
 | 
			
		||||
      - .github/scripts/generate_conan_matrix.py
 | 
			
		||||
 | 
			
		||||
      - .github/actions/generate/action.yml
 | 
			
		||||
      - .github/actions/prepare_runner/action.yml
 | 
			
		||||
      - .github/scripts/conan/generate_matrix.py
 | 
			
		||||
      - .github/scripts/conan/init.sh
 | 
			
		||||
 | 
			
		||||
      - conanfile.py
 | 
			
		||||
      - conan.lock
 | 
			
		||||
  push:
 | 
			
		||||
@@ -23,7 +28,12 @@ on:
 | 
			
		||||
      - develop
 | 
			
		||||
    paths:
 | 
			
		||||
      - .github/workflows/upload_conan_deps.yml
 | 
			
		||||
      - .github/scripts/generate_conan_matrix.py
 | 
			
		||||
 | 
			
		||||
      - .github/actions/generate/action.yml
 | 
			
		||||
      - .github/actions/prepare_runner/action.yml
 | 
			
		||||
      - .github/scripts/conan/generate_matrix.py
 | 
			
		||||
      - .github/scripts/conan/init.sh
 | 
			
		||||
 | 
			
		||||
      - conanfile.py
 | 
			
		||||
      - conan.lock
 | 
			
		||||
 | 
			
		||||
@@ -41,7 +51,7 @@ jobs:
 | 
			
		||||
 | 
			
		||||
      - name: Calculate conan matrix
 | 
			
		||||
        id: set-matrix
 | 
			
		||||
        run: .github/scripts/generate_conan_matrix.py >> "${GITHUB_OUTPUT}"
 | 
			
		||||
        run: .github/scripts/conan/generate_matrix.py >> "${GITHUB_OUTPUT}"
 | 
			
		||||
 | 
			
		||||
  upload-conan-deps:
 | 
			
		||||
    name: Build ${{ matrix.compiler }}${{ matrix.sanitizer_ext }} ${{ matrix.build_type }}
 | 
			
		||||
@@ -66,11 +76,10 @@ jobs:
 | 
			
		||||
        with:
 | 
			
		||||
          disable_ccache: true
 | 
			
		||||
 | 
			
		||||
      - name: Setup conan
 | 
			
		||||
      - name: Setup conan on macOS
 | 
			
		||||
        if: runner.os == 'macOS'
 | 
			
		||||
        uses: ./.github/actions/setup_conan_macos
 | 
			
		||||
        with:
 | 
			
		||||
          conan_files_dir: docker/ci/conan/
 | 
			
		||||
        shell: bash
 | 
			
		||||
        run: ./.github/scripts/conan/init.sh
 | 
			
		||||
 | 
			
		||||
      - name: Show conan profile
 | 
			
		||||
        run: conan profile show --profile:all ${{ env.CONAN_PROFILE }}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
## Minimum Requirements
 | 
			
		||||
 | 
			
		||||
- [Python 3.7](https://www.python.org/downloads/)
 | 
			
		||||
- [Conan 1.55, <2.0](https://conan.io/downloads.html)
 | 
			
		||||
- [Conan 2.17.0](https://conan.io/downloads.html)
 | 
			
		||||
- [CMake 3.20, <4.0](https://cmake.org/download/)
 | 
			
		||||
- [**Optional**] [GCovr](https://gcc.gnu.org/onlinedocs/gcc/Gcov.html): needed for code coverage generation
 | 
			
		||||
- [**Optional**] [CCache](https://ccache.dev/): speeds up compilation if you are going to compile Clio often
 | 
			
		||||
@@ -19,10 +19,21 @@
 | 
			
		||||
 | 
			
		||||
### Conan Configuration
 | 
			
		||||
 | 
			
		||||
Clio requires `compiler.cppstd=20` in your Conan profile (`~/.conan2/profiles/default`).
 | 
			
		||||
By default, Conan uses `~/.conan2` as it's home folder.
 | 
			
		||||
You can change it by using `$CONAN_HOME` env variable.
 | 
			
		||||
[More info about Conan home](https://docs.conan.io/2/reference/environment.html#conan-home).
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> Although Clio is built using C++23, it's required to set `compiler.cppstd=20` for the time being as some of Clio's dependencies are not yet capable of building under C++23.
 | 
			
		||||
> [!TIP]
 | 
			
		||||
> To setup Conan automatically, you can run `.github/scripts/conan/init.sh`.
 | 
			
		||||
> This will delete Conan home directory (if it exists), set up profiles and add Artifactory remote.
 | 
			
		||||
 | 
			
		||||
The instruction below assumes that `$CONAN_HOME` is not set.
 | 
			
		||||
 | 
			
		||||
#### Profiles
 | 
			
		||||
 | 
			
		||||
The default profile is the file in `~/.conan2/profiles/default`.
 | 
			
		||||
 | 
			
		||||
Here are some examples of possible profiles:
 | 
			
		||||
 | 
			
		||||
**Mac apple-clang 16 example**:
 | 
			
		||||
 | 
			
		||||
@@ -56,9 +67,16 @@ os=Linux
 | 
			
		||||
tools.build:compiler_executables={'c': '/usr/bin/gcc-12', 'cpp': '/usr/bin/g++-12'}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> Although Clio is built using C++23, it's required to set `compiler.cppstd=20` in your profile for the time being as some of Clio's dependencies are not yet capable of building under C++23.
 | 
			
		||||
 | 
			
		||||
#### global.conf file
 | 
			
		||||
 | 
			
		||||
Add the following to the `~/.conan2/global.conf` file:
 | 
			
		||||
 | 
			
		||||
```text
 | 
			
		||||
core.download:parallel={{os.cpu_count()}}
 | 
			
		||||
core.upload:parallel={{os.cpu_count()}}
 | 
			
		||||
tools.info.package_id:confs = ["tools.build:cflags", "tools.build:cxxflags", "tools.build:exelinkflags", "tools.build:sharedlinkflags"]
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
@@ -70,16 +88,7 @@ Make sure artifactory is setup with Conan.
 | 
			
		||||
conan remote add --index 0 ripple http://18.143.149.228:8081/artifactory/api/conan/dev
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Now you should be able to download the prebuilt `xrpl` package on some platforms.
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> You may need to edit the `~/.conan2/remotes.json` file to ensure that this newly added artifactory is listed last. Otherwise, you could see compilation errors when building the project with gcc version 13 (or newer).
 | 
			
		||||
 | 
			
		||||
Remove old packages you may have cached interactively.
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
conan remove xrpl
 | 
			
		||||
```
 | 
			
		||||
Now you should be able to download the prebuilt dependencies (including `xrpl` package) on supported platforms.
 | 
			
		||||
 | 
			
		||||
#### Conan lockfile
 | 
			
		||||
 | 
			
		||||
@@ -102,6 +111,7 @@ Navigate to Clio's root directory and run:
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
mkdir build && cd build
 | 
			
		||||
# You can also specify profile explicitly by adding `--profile:all <PROFILE_NAME>`
 | 
			
		||||
conan install .. --output-folder . --build missing --settings build_type=Release -o '&:tests=True'
 | 
			
		||||
# You can also add -GNinja to use Ninja build system instead of Make
 | 
			
		||||
cmake -DCMAKE_TOOLCHAIN_FILE:FILEPATH=build/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release ..
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user