mirror of
				https://github.com/Xahau/xahaud.git
				synced 2025-11-04 10:45:50 +00:00 
			
		
		
		
	Revert "Use the Conan package manager (#4367)"
This reverts commit c3a9f3dbf3.
			
			
This commit is contained in:
		
							
								
								
									
										11
									
								
								.github/workflows/doxygen.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								.github/workflows/doxygen.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,5 +1,4 @@
 | 
			
		||||
name: Build and publish Doxygen documentation
 | 
			
		||||
# To test this workflow, push your changes to your fork's `develop` branch.
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
@@ -12,18 +11,12 @@ jobs:
 | 
			
		||||
      image: docker://rippleci/rippled-ci-builder:2944b78d22db
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: checkout
 | 
			
		||||
        uses: actions/checkout@v3
 | 
			
		||||
      - name: check environment
 | 
			
		||||
        run: |
 | 
			
		||||
          echo ${PATH} | tr ':' '\n'
 | 
			
		||||
          cmake --version
 | 
			
		||||
          doxygen --version
 | 
			
		||||
          env
 | 
			
		||||
        uses: actions/checkout@v2
 | 
			
		||||
      - name: build
 | 
			
		||||
        run: |
 | 
			
		||||
          mkdir build
 | 
			
		||||
          cd build
 | 
			
		||||
          cmake -Donly_docs=TRUE ..
 | 
			
		||||
          cmake -DBoost_NO_BOOST_CMAKE=ON ..
 | 
			
		||||
          cmake --build . --target docs --parallel $(nproc)
 | 
			
		||||
      - name: publish
 | 
			
		||||
        uses: peaceiris/actions-gh-pages@v3
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										96
									
								
								.github/workflows/nix.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										96
									
								
								.github/workflows/nix.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,96 +0,0 @@
 | 
			
		||||
name: nix
 | 
			
		||||
on: [push, pull_request]
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
 | 
			
		||||
  test:
 | 
			
		||||
    strategy:
 | 
			
		||||
      fail-fast: false
 | 
			
		||||
      matrix:
 | 
			
		||||
        platform:
 | 
			
		||||
          - ubuntu-latest
 | 
			
		||||
          - macos-12
 | 
			
		||||
        generator:
 | 
			
		||||
          - Ninja
 | 
			
		||||
        configuration:
 | 
			
		||||
          - Release
 | 
			
		||||
    runs-on: ${{ matrix.platform }}
 | 
			
		||||
    env:
 | 
			
		||||
      build_dir: .build
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: checkout
 | 
			
		||||
        uses: actions/checkout@v3
 | 
			
		||||
      - name: install Ninja on Linux
 | 
			
		||||
        if: matrix.generator == 'Ninja' && runner.os == 'Linux'
 | 
			
		||||
        run: sudo apt install ninja-build
 | 
			
		||||
      - name: install Ninja on OSX
 | 
			
		||||
        if: matrix.generator == 'Ninja' && runner.os == 'macOS'
 | 
			
		||||
        run: brew install ninja
 | 
			
		||||
      - name: install nproc on OSX
 | 
			
		||||
        if: runner.os == 'macOS'
 | 
			
		||||
        run: brew install coreutils
 | 
			
		||||
      - name: choose Python
 | 
			
		||||
        uses: actions/setup-python@v3
 | 
			
		||||
        with:
 | 
			
		||||
          python-version: 3.9
 | 
			
		||||
      - name: learn Python cache directory
 | 
			
		||||
        id: pip-cache
 | 
			
		||||
        run: |
 | 
			
		||||
          sudo pip install --upgrade pip
 | 
			
		||||
          echo "::set-output name=dir::$(pip cache dir)"
 | 
			
		||||
      - name: restore Python cache directory
 | 
			
		||||
        uses: actions/cache@v2
 | 
			
		||||
        with:
 | 
			
		||||
            path: ${{ steps.pip-cache.outputs.dir }}
 | 
			
		||||
            key: ${{ runner.os }}-${{ hashFiles('.github/workflows/nix.yml') }}
 | 
			
		||||
      - name: install Conan
 | 
			
		||||
        run: pip install wheel 'conan~=1.52'
 | 
			
		||||
      - name: check environment
 | 
			
		||||
        run: |
 | 
			
		||||
          echo ${PATH} | tr ':' '\n'
 | 
			
		||||
          python --version
 | 
			
		||||
          conan --version
 | 
			
		||||
          cmake --version
 | 
			
		||||
          env
 | 
			
		||||
      - name: configure Conan
 | 
			
		||||
        run: |
 | 
			
		||||
          conan profile new default --detect
 | 
			
		||||
          conan profile update settings.compiler.cppstd=20 default
 | 
			
		||||
      - name: configure Conan on Linux
 | 
			
		||||
        if: runner.os == 'Linux'
 | 
			
		||||
        run: |
 | 
			
		||||
          conan profile update settings.compiler.libcxx=libstdc++11 default
 | 
			
		||||
      - name: learn Conan cache directory
 | 
			
		||||
        id: conan-cache
 | 
			
		||||
        run: |
 | 
			
		||||
          echo "::set-output name=dir::$(conan config get storage.path)"
 | 
			
		||||
      - name: restore Conan cache directory
 | 
			
		||||
        uses: actions/cache@v2
 | 
			
		||||
        with:
 | 
			
		||||
            path: ${{ steps.conan-cache.outputs.dir }}
 | 
			
		||||
            key: ${{ hashFiles('~/.conan/profiles/default', 'conanfile.py', 'external/rocksdb/*', '.github/workflows/nix.yml') }}
 | 
			
		||||
      - name: export Snappy
 | 
			
		||||
        run: conan export external/snappy snappy/1.1.9@
 | 
			
		||||
      - name: install dependencies
 | 
			
		||||
        run: |
 | 
			
		||||
          mkdir ${build_dir}
 | 
			
		||||
          cd ${build_dir}
 | 
			
		||||
          conan install .. --build missing --settings build_type=${{ matrix.configuration }}
 | 
			
		||||
      - name: configure
 | 
			
		||||
        run: |
 | 
			
		||||
          cd ${build_dir}
 | 
			
		||||
          cmake \
 | 
			
		||||
            -G ${{ matrix.generator }} \
 | 
			
		||||
            -DCMAKE_TOOLCHAIN_FILE:FILEPATH=build/generators/conan_toolchain.cmake \
 | 
			
		||||
            -DCMAKE_BUILD_TYPE=${{ matrix.configuration }} \
 | 
			
		||||
            -Dassert=ON \
 | 
			
		||||
            -Dcoverage=OFF \
 | 
			
		||||
            -Dreporting=OFF \
 | 
			
		||||
            -Dunity=OFF \
 | 
			
		||||
            ..
 | 
			
		||||
      - name: build
 | 
			
		||||
        run: |
 | 
			
		||||
          cmake --build ${build_dir} --target rippled --parallel $(nproc)
 | 
			
		||||
      - name: test
 | 
			
		||||
        run: |
 | 
			
		||||
          ${build_dir}/rippled --unittest --unittest-jobs $(nproc)
 | 
			
		||||
							
								
								
									
										97
									
								
								.github/workflows/windows.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										97
									
								
								.github/workflows/windows.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,97 +0,0 @@
 | 
			
		||||
name: windows
 | 
			
		||||
# We have disabled this workflow because it fails in our CI Windows
 | 
			
		||||
# environment, but we cannot replicate the failure in our personal Windows
 | 
			
		||||
# test environments, nor have we gone through the trouble of setting up an
 | 
			
		||||
# interactive CI Windows environment.
 | 
			
		||||
# We welcome contributions to diagnose or debug the problems on Windows. Until
 | 
			
		||||
# then, we leave this tombstone as a reminder that we have tried (but failed)
 | 
			
		||||
# to write a reliable test for Windows.
 | 
			
		||||
# on: [push, pull_request]
 | 
			
		||||
on:
 | 
			
		||||
  workflow_dispatch:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
      - 'action'
 | 
			
		||||
    paths:
 | 
			
		||||
      - '.github/workflow/windows.yml'
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
 | 
			
		||||
  test:
 | 
			
		||||
    strategy:
 | 
			
		||||
      fail-fast: false
 | 
			
		||||
      matrix:
 | 
			
		||||
        generator:
 | 
			
		||||
          - Visual Studio 16 2019
 | 
			
		||||
        configuration:
 | 
			
		||||
          - Release
 | 
			
		||||
    runs-on: windows-2019
 | 
			
		||||
    env:
 | 
			
		||||
      build_dir: .build
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: checkout
 | 
			
		||||
        uses: actions/checkout@v3
 | 
			
		||||
      - name: choose Python
 | 
			
		||||
        uses: actions/setup-python@v3
 | 
			
		||||
        with:
 | 
			
		||||
          python-version: 3.9
 | 
			
		||||
      - name: learn Python cache directory
 | 
			
		||||
        id: pip-cache
 | 
			
		||||
        run: |
 | 
			
		||||
          pip install --upgrade pip
 | 
			
		||||
          echo "::set-output name=dir::$(pip cache dir)"
 | 
			
		||||
      - name: restore Python cache directory
 | 
			
		||||
        uses: actions/cache@v2
 | 
			
		||||
        with:
 | 
			
		||||
            path: ${{ steps.pip-cache.outputs.dir }}
 | 
			
		||||
            key: ${{ runner.os }}-${{ hashFiles('.github/workflows/windows.yml') }}
 | 
			
		||||
      - name: install Conan
 | 
			
		||||
        run: pip install wheel 'conan~=1.52'
 | 
			
		||||
      - name: check environment
 | 
			
		||||
        run: |
 | 
			
		||||
          $env:PATH -split ';'
 | 
			
		||||
          python --version
 | 
			
		||||
          conan --version
 | 
			
		||||
          cmake --version
 | 
			
		||||
          dir env:
 | 
			
		||||
      - name: configure Conan
 | 
			
		||||
        run: |
 | 
			
		||||
          conan profile new default --detect
 | 
			
		||||
          conan profile update settings.compiler.cppstd=20 default
 | 
			
		||||
          conan profile update settings.compiler.runtime=MT default
 | 
			
		||||
          conan profile update settings.compiler.toolset=v141 default
 | 
			
		||||
      - name: learn Conan cache directory
 | 
			
		||||
        id: conan-cache
 | 
			
		||||
        run: |
 | 
			
		||||
          echo "::set-output name=dir::$(conan config get storage.path)"
 | 
			
		||||
      - name: restore Conan cache directory
 | 
			
		||||
        uses: actions/cache@v2
 | 
			
		||||
        with:
 | 
			
		||||
            path: ${{ steps.conan-cache.outputs.dir }}
 | 
			
		||||
            key: ${{ hashFiles('~/.conan/profiles/default', 'conanfile.py', 'external/rocksdb/*', '.github/workflows/windows.yml') }}
 | 
			
		||||
      - name: export Snappy
 | 
			
		||||
        run: conan export external/snappy snappy/1.1.9@
 | 
			
		||||
      - name: install dependencies
 | 
			
		||||
        run: |
 | 
			
		||||
          mkdir $env:build_dir
 | 
			
		||||
          cd $env:build_dir
 | 
			
		||||
          conan install .. --build missing --settings build_type=${{ matrix.configuration }}
 | 
			
		||||
      - name: configure
 | 
			
		||||
        run: |
 | 
			
		||||
          $env:build_dir
 | 
			
		||||
          cd $env:build_dir
 | 
			
		||||
          pwd
 | 
			
		||||
          ls
 | 
			
		||||
          cmake `
 | 
			
		||||
            -G "${{ matrix.generator }}" `
 | 
			
		||||
            -DCMAKE_TOOLCHAIN_FILE:FILEPATH=build/generators/conan_toolchain.cmake `
 | 
			
		||||
            -Dassert=ON `
 | 
			
		||||
            -Dreporting=OFF `
 | 
			
		||||
            -Dunity=OFF `
 | 
			
		||||
            ..
 | 
			
		||||
      - name: build
 | 
			
		||||
        run: |
 | 
			
		||||
          cmake --build $env:build_dir --target rippled --config ${{ matrix.configuration }} --parallel $env:NUMBER_OF_PROCESSORS
 | 
			
		||||
      - name: test
 | 
			
		||||
        run: |
 | 
			
		||||
          & "$env:build_dir\${{ matrix.configuration }}\rippled.exe" --unittest
 | 
			
		||||
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -26,6 +26,7 @@ build/docker
 | 
			
		||||
 | 
			
		||||
# Ignore object files.
 | 
			
		||||
*.o
 | 
			
		||||
build
 | 
			
		||||
.nih_c
 | 
			
		||||
tags
 | 
			
		||||
TAGS
 | 
			
		||||
@@ -69,7 +70,7 @@ docs/html_doc
 | 
			
		||||
# Xcode user-specific project settings
 | 
			
		||||
# Xcode
 | 
			
		||||
.DS_Store
 | 
			
		||||
/build/
 | 
			
		||||
*/build/*
 | 
			
		||||
*.pbxuser
 | 
			
		||||
!default.pbxuser
 | 
			
		||||
*.mode1v3
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										169
									
								
								.gitlab-ci.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										169
									
								
								.gitlab-ci.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,169 @@
 | 
			
		||||
# I don't know what the minimum size is, but we cannot build on t3.micro.
 | 
			
		||||
 | 
			
		||||
# TODO: Factor common builds between different tests.
 | 
			
		||||
 | 
			
		||||
# The parameters for our job matrix:
 | 
			
		||||
#
 | 
			
		||||
# 1. Generator (Make, Ninja, MSBuild)
 | 
			
		||||
# 2. Compiler (GCC, Clang, MSVC)
 | 
			
		||||
# 3. Build type (Debug, Release)
 | 
			
		||||
# 4. Definitions (-Dunity=OFF, -Dassert=ON, ...)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.job_linux_build_test:
 | 
			
		||||
  only:
 | 
			
		||||
    variables:
 | 
			
		||||
      - $CI_PROJECT_URL =~ /^https?:\/\/gitlab.com\//
 | 
			
		||||
  stage: build
 | 
			
		||||
  tags:
 | 
			
		||||
    - linux
 | 
			
		||||
    - c5.2xlarge
 | 
			
		||||
  image: thejohnfreeman/rippled-build-ubuntu:4b73694e07f0
 | 
			
		||||
  script:
 | 
			
		||||
    - bin/ci/build.sh
 | 
			
		||||
    - bin/ci/test.sh
 | 
			
		||||
  cache:
 | 
			
		||||
    # Use a different key for each unique combination of (generator, compiler,
 | 
			
		||||
    # build type). Caches are stored as `.zip` files; they are not merged.
 | 
			
		||||
    # Generate a new key whenever you want to bust the cache, e.g. when the
 | 
			
		||||
    # dependency versions have been bumped.
 | 
			
		||||
    # By default, jobs pull the cache. Only a few specially chosen jobs update
 | 
			
		||||
    # the cache (with policy `pull-push`); one for each unique combination of
 | 
			
		||||
    # (generator, compiler, build type).
 | 
			
		||||
    policy: pull
 | 
			
		||||
    paths:
 | 
			
		||||
      - .nih_c/
 | 
			
		||||
 | 
			
		||||
'build+test Make GCC Debug':
 | 
			
		||||
  extends: .job_linux_build_test
 | 
			
		||||
  variables:
 | 
			
		||||
    GENERATOR: Unix Makefiles
 | 
			
		||||
    COMPILER: gcc
 | 
			
		||||
    BUILD_TYPE: Debug
 | 
			
		||||
  cache:
 | 
			
		||||
    key: 62ada41c-fc9e-4949-9533-736d4d6512b6
 | 
			
		||||
    policy: pull-push
 | 
			
		||||
 | 
			
		||||
'build+test Ninja GCC Debug':
 | 
			
		||||
  extends: .job_linux_build_test
 | 
			
		||||
  variables:
 | 
			
		||||
    GENERATOR: Ninja
 | 
			
		||||
    COMPILER: gcc
 | 
			
		||||
    BUILD_TYPE: Debug
 | 
			
		||||
  cache:
 | 
			
		||||
    key: 1665d3eb-6233-4eef-9f57-172636899faa
 | 
			
		||||
    policy: pull-push
 | 
			
		||||
 | 
			
		||||
'build+test Ninja GCC Debug -Dstatic=OFF':
 | 
			
		||||
  extends: .job_linux_build_test
 | 
			
		||||
  variables:
 | 
			
		||||
    GENERATOR: Ninja
 | 
			
		||||
    COMPILER: gcc
 | 
			
		||||
    BUILD_TYPE: Debug
 | 
			
		||||
    CMAKE_ARGS: '-Dstatic=OFF'
 | 
			
		||||
  cache:
 | 
			
		||||
    key: 1665d3eb-6233-4eef-9f57-172636899faa
 | 
			
		||||
 | 
			
		||||
'build+test Ninja GCC Debug -Dstatic=OFF -DBUILD_SHARED_LIBS=ON':
 | 
			
		||||
  extends: .job_linux_build_test
 | 
			
		||||
  variables:
 | 
			
		||||
    GENERATOR: Ninja
 | 
			
		||||
    COMPILER: gcc
 | 
			
		||||
    BUILD_TYPE: Debug
 | 
			
		||||
    CMAKE_ARGS: '-Dstatic=OFF -DBUILD_SHARED_LIBS=ON'
 | 
			
		||||
  cache:
 | 
			
		||||
    key: 1665d3eb-6233-4eef-9f57-172636899faa
 | 
			
		||||
 | 
			
		||||
'build+test Ninja GCC Debug -Dunity=OFF':
 | 
			
		||||
  extends: .job_linux_build_test
 | 
			
		||||
  variables:
 | 
			
		||||
    GENERATOR: Ninja
 | 
			
		||||
    COMPILER: gcc
 | 
			
		||||
    BUILD_TYPE: Debug
 | 
			
		||||
    CMAKE_ARGS: '-Dunity=OFF'
 | 
			
		||||
  cache:
 | 
			
		||||
    key: 1665d3eb-6233-4eef-9f57-172636899faa
 | 
			
		||||
 | 
			
		||||
'build+test Ninja GCC Release -Dassert=ON':
 | 
			
		||||
  extends: .job_linux_build_test
 | 
			
		||||
  variables:
 | 
			
		||||
    GENERATOR: Ninja
 | 
			
		||||
    COMPILER: gcc
 | 
			
		||||
    BUILD_TYPE: Release
 | 
			
		||||
    CMAKE_ARGS: '-Dassert=ON'
 | 
			
		||||
  cache:
 | 
			
		||||
    key: c45ec125-9625-4c19-acf7-4e889d5f90bd
 | 
			
		||||
    policy: pull-push
 | 
			
		||||
 | 
			
		||||
'build+test(manual) Ninja GCC Release -Dassert=ON':
 | 
			
		||||
  extends: .job_linux_build_test
 | 
			
		||||
  variables:
 | 
			
		||||
    GENERATOR: Ninja
 | 
			
		||||
    COMPILER: gcc
 | 
			
		||||
    BUILD_TYPE: Release
 | 
			
		||||
    CMAKE_ARGS: '-Dassert=ON'
 | 
			
		||||
    MANUAL_TEST: 'true'
 | 
			
		||||
  cache:
 | 
			
		||||
    key: c45ec125-9625-4c19-acf7-4e889d5f90bd
 | 
			
		||||
 | 
			
		||||
'build+test Make clang Debug':
 | 
			
		||||
  extends: .job_linux_build_test
 | 
			
		||||
  variables:
 | 
			
		||||
    GENERATOR: Unix Makefiles
 | 
			
		||||
    COMPILER: clang
 | 
			
		||||
    BUILD_TYPE: Debug
 | 
			
		||||
  cache:
 | 
			
		||||
    key: bf578dc2-5277-4580-8de5-6b9523118b19
 | 
			
		||||
    policy: pull-push
 | 
			
		||||
 | 
			
		||||
'build+test Ninja clang Debug':
 | 
			
		||||
  extends: .job_linux_build_test
 | 
			
		||||
  variables:
 | 
			
		||||
    GENERATOR: Ninja
 | 
			
		||||
    COMPILER: clang
 | 
			
		||||
    BUILD_TYPE: Debug
 | 
			
		||||
  cache:
 | 
			
		||||
    key: 762514c5-3d4c-4c7c-8da2-2df9d8839cbe
 | 
			
		||||
    policy: pull-push
 | 
			
		||||
 | 
			
		||||
'build+test Ninja clang Debug -Dunity=OFF':
 | 
			
		||||
  extends: .job_linux_build_test
 | 
			
		||||
  variables:
 | 
			
		||||
    GENERATOR: Ninja
 | 
			
		||||
    COMPILER: clang
 | 
			
		||||
    BUILD_TYPE: Debug
 | 
			
		||||
    CMAKE_ARGS: '-Dunity=OFF'
 | 
			
		||||
  cache:
 | 
			
		||||
    key: 762514c5-3d4c-4c7c-8da2-2df9d8839cbe
 | 
			
		||||
 | 
			
		||||
'build+test Ninja clang Debug -Dunity=OFF -Dsan=address':
 | 
			
		||||
  extends: .job_linux_build_test
 | 
			
		||||
  variables:
 | 
			
		||||
    GENERATOR: Ninja
 | 
			
		||||
    COMPILER: clang
 | 
			
		||||
    BUILD_TYPE: Debug
 | 
			
		||||
    CMAKE_ARGS: '-Dunity=OFF -Dsan=address'
 | 
			
		||||
    CONCURRENT_TESTS: 1
 | 
			
		||||
  cache:
 | 
			
		||||
    key: 762514c5-3d4c-4c7c-8da2-2df9d8839cbe
 | 
			
		||||
 | 
			
		||||
'build+test Ninja clang Debug -Dunity=OFF -Dsan=undefined':
 | 
			
		||||
  extends: .job_linux_build_test
 | 
			
		||||
  variables:
 | 
			
		||||
    GENERATOR: Ninja
 | 
			
		||||
    COMPILER: clang
 | 
			
		||||
    BUILD_TYPE: Debug
 | 
			
		||||
    CMAKE_ARGS: '-Dunity=OFF -Dsan=undefined'
 | 
			
		||||
  cache:
 | 
			
		||||
    key: 762514c5-3d4c-4c7c-8da2-2df9d8839cbe
 | 
			
		||||
 | 
			
		||||
'build+test Ninja clang Release -Dassert=ON':
 | 
			
		||||
  extends: .job_linux_build_test
 | 
			
		||||
  variables:
 | 
			
		||||
    GENERATOR: Ninja
 | 
			
		||||
    COMPILER: clang
 | 
			
		||||
    BUILD_TYPE: Release
 | 
			
		||||
    CMAKE_ARGS: '-Dassert=ON'
 | 
			
		||||
  cache:
 | 
			
		||||
    key: 7751be37-2358-4f08-b1d0-7e72e0ad266d
 | 
			
		||||
    policy: pull-push
 | 
			
		||||
							
								
								
									
										460
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										460
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,460 @@
 | 
			
		||||
# There is a known issue where Travis will have trouble fetching the cache,
 | 
			
		||||
# particularly on non-linux builds. Try restarting the individual build
 | 
			
		||||
# (probably will not be necessary in the "windep" stages) if the end of the
 | 
			
		||||
# log looks like:
 | 
			
		||||
#
 | 
			
		||||
#---------------------------------------
 | 
			
		||||
# attempting to download cache archive
 | 
			
		||||
# fetching travisorder/cache--windows-1809-containers-f2bf1c76c7fb4095c897a4999bd7c9b3fb830414dfe91f33d665443b52416d39--compiler-gpp.tgz
 | 
			
		||||
# found cache
 | 
			
		||||
# adding C:/Users/travis/_cache to cache
 | 
			
		||||
# creating directory C:/Users/travis/_cache
 | 
			
		||||
# No output has been received in the last 10m0s, this potentially indicates a stalled build or something wrong with the build itself.
 | 
			
		||||
# Check the details on how to adjust your build configuration on: https://docs.travis-ci.com/user/common-build-problems/#build-times-out-because-no-output-was-received
 | 
			
		||||
# The build has been terminated
 | 
			
		||||
#---------------------------------------
 | 
			
		||||
 | 
			
		||||
language: cpp
 | 
			
		||||
dist: bionic
 | 
			
		||||
 | 
			
		||||
services:
 | 
			
		||||
  - docker
 | 
			
		||||
 | 
			
		||||
stages:
 | 
			
		||||
  - windep-vcpkg
 | 
			
		||||
  - windep-boost
 | 
			
		||||
  - build
 | 
			
		||||
 | 
			
		||||
env:
 | 
			
		||||
  global:
 | 
			
		||||
    - DOCKER_IMAGE="rippleci/rippled-ci-builder:2020-01-08"
 | 
			
		||||
    - CMAKE_EXTRA_ARGS="-Dwerr=ON -Dwextra=ON"
 | 
			
		||||
    - NINJA_BUILD=true
 | 
			
		||||
    # change this if we get more VM capacity
 | 
			
		||||
    - MAX_TIME_MIN=80
 | 
			
		||||
    - CACHE_DIR=${TRAVIS_HOME}/_cache
 | 
			
		||||
    - NIH_CACHE_ROOT=${CACHE_DIR}/nih_c
 | 
			
		||||
    - PARALLEL_TESTS=true
 | 
			
		||||
    # this is NOT used by linux container based builds (which already have boost installed)
 | 
			
		||||
    - BOOST_URL='https://boostorg.jfrog.io/artifactory/main/release/1.75.0/source/boost_1_75_0.tar.gz'
 | 
			
		||||
    # Alternate dowload location
 | 
			
		||||
    - BOOST_URL2='https://downloads.sourceforge.net/project/boost/boost/1.75.0/boost_1_75_0.tar.bz2?r=&ts=1594393912&use_mirror=newcontinuum'
 | 
			
		||||
    # Travis downloader doesn't seem to have updated certs. Using this option
 | 
			
		||||
    # introduces obvious security risks, but they're Travis's risks.
 | 
			
		||||
    # Note that this option is only used if the "normal" build fails.
 | 
			
		||||
    - BOOST_WGET_OPTIONS='--no-check-certificate'
 | 
			
		||||
    - VCPKG_DIR=${CACHE_DIR}/vcpkg
 | 
			
		||||
    - USE_CCACHE=true
 | 
			
		||||
    - CCACHE_BASEDIR=${TRAVIS_HOME}"
 | 
			
		||||
    - CCACHE_NOHASHDIR=true
 | 
			
		||||
    - CCACHE_DIR=${CACHE_DIR}/ccache
 | 
			
		||||
 | 
			
		||||
before_install:
 | 
			
		||||
  - export NUM_PROCESSORS=$(nproc)
 | 
			
		||||
  - echo "NUM PROC is ${NUM_PROCESSORS}"
 | 
			
		||||
  - if [ "$(uname)" = "Linux" ] ; then docker pull ${DOCKER_IMAGE}; fi
 | 
			
		||||
  - if [ "${MATRIX_EVAL}" != "" ] ; then eval "${MATRIX_EVAL}"; fi
 | 
			
		||||
  - if [ "${CMAKE_ADD}" != "" ] ; then export CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} ${CMAKE_ADD}"; fi
 | 
			
		||||
  - bin/ci/ubuntu/travis-cache-start.sh
 | 
			
		||||
 | 
			
		||||
matrix:
 | 
			
		||||
  fast_finish: true
 | 
			
		||||
  allow_failures:
 | 
			
		||||
    # TODO these need more investigation
 | 
			
		||||
    #
 | 
			
		||||
    # there are a number of UBs caught currently that need triage
 | 
			
		||||
    - name: ubsan, clang-8
 | 
			
		||||
    # this one often runs out of memory:
 | 
			
		||||
    - name: manual tests, gcc-8, release
 | 
			
		||||
    # The Windows build may fail if any of the dependencies fail, but
 | 
			
		||||
    # allow the rest of the builds to continue. They may succeed if the
 | 
			
		||||
    # dependency is already cached. These do not need to be retried if
 | 
			
		||||
    # _any_ of the Windows builds succeed.
 | 
			
		||||
    - stage: windep-vcpkg
 | 
			
		||||
    - stage: windep-boost
 | 
			
		||||
 | 
			
		||||
  # https://docs.travis-ci.com/user/build-config-yaml#usage-of-yaml-anchors-and-aliases
 | 
			
		||||
  include:
 | 
			
		||||
    # debug builds
 | 
			
		||||
    - &linux
 | 
			
		||||
      stage: build
 | 
			
		||||
      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/
 | 
			
		||||
      compiler: gcc-8
 | 
			
		||||
      name: gcc-8, debug
 | 
			
		||||
      env:
 | 
			
		||||
        - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8"
 | 
			
		||||
        - BUILD_TYPE=Debug
 | 
			
		||||
      script:
 | 
			
		||||
        - sudo chmod -R a+rw ${CACHE_DIR}
 | 
			
		||||
        - ccache -s
 | 
			
		||||
        - travis_wait ${MAX_TIME_MIN} bin/ci/ubuntu/build-in-docker.sh
 | 
			
		||||
        - ccache -s
 | 
			
		||||
    - <<: *linux
 | 
			
		||||
      compiler: clang-8
 | 
			
		||||
      name: clang-8, debug
 | 
			
		||||
      env:
 | 
			
		||||
        - MATRIX_EVAL="CC=clang-8 && CXX=clang++-8"
 | 
			
		||||
        - BUILD_TYPE=Debug
 | 
			
		||||
    - <<: *linux
 | 
			
		||||
      compiler: clang-8
 | 
			
		||||
      name: reporting, clang-8, debug
 | 
			
		||||
      env:
 | 
			
		||||
        - MATRIX_EVAL="CC=clang-8 && CXX=clang++-8"
 | 
			
		||||
        - BUILD_TYPE=Debug
 | 
			
		||||
        - CMAKE_ADD="-Dreporting=ON"
 | 
			
		||||
    # coverage builds
 | 
			
		||||
    - <<: *linux
 | 
			
		||||
      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_cov/
 | 
			
		||||
      compiler: gcc-8
 | 
			
		||||
      name: coverage, gcc-8
 | 
			
		||||
      env:
 | 
			
		||||
        - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8"
 | 
			
		||||
        - BUILD_TYPE=Debug
 | 
			
		||||
        - CMAKE_ADD="-Dcoverage=ON"
 | 
			
		||||
        - TARGET=coverage_report
 | 
			
		||||
        - SKIP_TESTS=true
 | 
			
		||||
    - <<: *linux
 | 
			
		||||
      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_cov/
 | 
			
		||||
      compiler: clang-8
 | 
			
		||||
      name: coverage, clang-8
 | 
			
		||||
      env:
 | 
			
		||||
        - MATRIX_EVAL="CC=clang-8 && CXX=clang++-8"
 | 
			
		||||
        - BUILD_TYPE=Debug
 | 
			
		||||
        - CMAKE_ADD="-Dcoverage=ON"
 | 
			
		||||
        - TARGET=coverage_report
 | 
			
		||||
        - SKIP_TESTS=true
 | 
			
		||||
    # test-free builds
 | 
			
		||||
    - <<: *linux
 | 
			
		||||
      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/
 | 
			
		||||
      compiler: gcc-8
 | 
			
		||||
      name: no-tests-unity, gcc-8
 | 
			
		||||
      env:
 | 
			
		||||
        - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8"
 | 
			
		||||
        - BUILD_TYPE=Debug
 | 
			
		||||
        - CMAKE_ADD="-Dtests=OFF"
 | 
			
		||||
        - SKIP_TESTS=true
 | 
			
		||||
    - <<: *linux
 | 
			
		||||
      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/
 | 
			
		||||
      compiler: clang-8
 | 
			
		||||
      name: no-tests-non-unity, clang-8
 | 
			
		||||
      env:
 | 
			
		||||
        - MATRIX_EVAL="CC=clang-8 && CXX=clang++-8"
 | 
			
		||||
        - BUILD_TYPE=Debug
 | 
			
		||||
        - CMAKE_ADD="-Dtests=OFF -Dunity=OFF"
 | 
			
		||||
        - SKIP_TESTS=true
 | 
			
		||||
    # nounity
 | 
			
		||||
    - <<: *linux
 | 
			
		||||
      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_nounity/
 | 
			
		||||
      compiler: gcc-8
 | 
			
		||||
      name: non-unity, gcc-8
 | 
			
		||||
      env:
 | 
			
		||||
        - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8"
 | 
			
		||||
        - BUILD_TYPE=Debug
 | 
			
		||||
        - CMAKE_ADD="-Dunity=OFF"
 | 
			
		||||
    - <<: *linux
 | 
			
		||||
      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_nounity/
 | 
			
		||||
      compiler: clang-8
 | 
			
		||||
      name: non-unity, clang-8
 | 
			
		||||
      env:
 | 
			
		||||
        - MATRIX_EVAL="CC=clang-8 && CXX=clang++-8"
 | 
			
		||||
        - BUILD_TYPE=Debug
 | 
			
		||||
        - CMAKE_ADD="-Dunity=OFF"
 | 
			
		||||
    # manual tests
 | 
			
		||||
    - <<: *linux
 | 
			
		||||
      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_man/
 | 
			
		||||
      compiler: gcc-8
 | 
			
		||||
      name: manual tests, gcc-8, debug
 | 
			
		||||
      env:
 | 
			
		||||
        - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8"
 | 
			
		||||
        - BUILD_TYPE=Debug
 | 
			
		||||
        - MANUAL_TESTS=true
 | 
			
		||||
    # manual tests
 | 
			
		||||
    - <<: *linux
 | 
			
		||||
      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_man/
 | 
			
		||||
      compiler: gcc-8
 | 
			
		||||
      name: manual tests, gcc-8, release
 | 
			
		||||
      env:
 | 
			
		||||
        - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8"
 | 
			
		||||
        - BUILD_TYPE=Release
 | 
			
		||||
        - CMAKE_ADD="-Dassert=ON -Dunity=OFF"
 | 
			
		||||
        - MANUAL_TESTS=true
 | 
			
		||||
    # release builds
 | 
			
		||||
    - <<: *linux
 | 
			
		||||
      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_release/
 | 
			
		||||
      compiler: gcc-8
 | 
			
		||||
      name: gcc-8, release
 | 
			
		||||
      env:
 | 
			
		||||
        - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8"
 | 
			
		||||
        - BUILD_TYPE=Release
 | 
			
		||||
        - CMAKE_ADD="-Dassert=ON -Dunity=OFF"
 | 
			
		||||
    - <<: *linux
 | 
			
		||||
      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_release/
 | 
			
		||||
      compiler: clang-8
 | 
			
		||||
      name: clang-8, release
 | 
			
		||||
      env:
 | 
			
		||||
        - MATRIX_EVAL="CC=clang-8 && CXX=clang++-8"
 | 
			
		||||
        - BUILD_TYPE=Release
 | 
			
		||||
        - CMAKE_ADD="-Dassert=ON"
 | 
			
		||||
    # asan
 | 
			
		||||
    - <<: *linux
 | 
			
		||||
      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_san/
 | 
			
		||||
      compiler: clang-8
 | 
			
		||||
      name: asan, clang-8
 | 
			
		||||
      env:
 | 
			
		||||
        - MATRIX_EVAL="CC=clang-8 && CXX=clang++-8"
 | 
			
		||||
        - BUILD_TYPE=Release
 | 
			
		||||
        - CMAKE_ADD="-Dsan=address"
 | 
			
		||||
        - ASAN_OPTIONS="print_stats=true:atexit=true"
 | 
			
		||||
        #- LSAN_OPTIONS="verbosity=1:log_threads=1"
 | 
			
		||||
        - PARALLEL_TESTS=false
 | 
			
		||||
    # ubsan
 | 
			
		||||
    - <<: *linux
 | 
			
		||||
      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_san/
 | 
			
		||||
      compiler: clang-8
 | 
			
		||||
      name: ubsan, clang-8
 | 
			
		||||
      env:
 | 
			
		||||
        - MATRIX_EVAL="CC=clang-8 && CXX=clang++-8"
 | 
			
		||||
        - BUILD_TYPE=Release
 | 
			
		||||
        - CMAKE_ADD="-Dsan=undefined"
 | 
			
		||||
        # once we can run clean under ubsan, add halt_on_error=1 to options below
 | 
			
		||||
        - UBSAN_OPTIONS="print_stacktrace=1:report_error_type=1"
 | 
			
		||||
        - PARALLEL_TESTS=false
 | 
			
		||||
    # tsan
 | 
			
		||||
    # current tsan failure *might* be related to:
 | 
			
		||||
    # https://github.com/google/sanitizers/issues/1104
 | 
			
		||||
    #  but we can't get it to run, so leave it disabled for now
 | 
			
		||||
    #    - <<: *linux
 | 
			
		||||
    #      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_san/
 | 
			
		||||
    #      compiler: clang-8
 | 
			
		||||
    #      name: tsan, clang-8
 | 
			
		||||
    #      env:
 | 
			
		||||
    #        - MATRIX_EVAL="CC=clang-8 && CXX=clang++-8"
 | 
			
		||||
    #        - BUILD_TYPE=Release
 | 
			
		||||
    #        - CMAKE_ADD="-Dsan=thread"
 | 
			
		||||
    #        - TSAN_OPTIONS="history_size=3 external_symbolizer_path=/usr/bin/llvm-symbolizer verbosity=1"
 | 
			
		||||
    #        - PARALLEL_TESTS=false
 | 
			
		||||
    # dynamic lib builds
 | 
			
		||||
    - <<: *linux
 | 
			
		||||
      compiler: gcc-8
 | 
			
		||||
      name: non-static, gcc-8
 | 
			
		||||
      env:
 | 
			
		||||
        - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8"
 | 
			
		||||
        - BUILD_TYPE=Debug
 | 
			
		||||
        - CMAKE_ADD="-Dstatic=OFF"
 | 
			
		||||
    - <<: *linux
 | 
			
		||||
      compiler: gcc-8
 | 
			
		||||
      name: non-static + BUILD_SHARED_LIBS, gcc-8
 | 
			
		||||
      env:
 | 
			
		||||
        - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8"
 | 
			
		||||
        - BUILD_TYPE=Debug
 | 
			
		||||
        - CMAKE_ADD="-Dstatic=OFF -DBUILD_SHARED_LIBS=ON"
 | 
			
		||||
    # makefile
 | 
			
		||||
    - <<: *linux
 | 
			
		||||
      compiler: gcc-8
 | 
			
		||||
      name: makefile generator, gcc-8
 | 
			
		||||
      env:
 | 
			
		||||
        - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8"
 | 
			
		||||
        - BUILD_TYPE=Debug
 | 
			
		||||
        - NINJA_BUILD=false
 | 
			
		||||
    # misc alternative compilers
 | 
			
		||||
    - <<: *linux
 | 
			
		||||
      compiler: gcc-9
 | 
			
		||||
      name: gcc-9
 | 
			
		||||
      env:
 | 
			
		||||
        - MATRIX_EVAL="CC=gcc-9 && CXX=g++-9"
 | 
			
		||||
        - BUILD_TYPE=Debug
 | 
			
		||||
    - <<: *linux
 | 
			
		||||
      compiler: clang-9
 | 
			
		||||
      name: clang-9, debug
 | 
			
		||||
      env:
 | 
			
		||||
        - MATRIX_EVAL="CC=clang-9 && CXX=clang++-9"
 | 
			
		||||
        - BUILD_TYPE=Debug
 | 
			
		||||
    - <<: *linux
 | 
			
		||||
      compiler: clang-9
 | 
			
		||||
      name: clang-9, release
 | 
			
		||||
      env:
 | 
			
		||||
        - MATRIX_EVAL="CC=clang-9 && CXX=clang++-9"
 | 
			
		||||
        - BUILD_TYPE=Release
 | 
			
		||||
    # verify build with min version of cmake
 | 
			
		||||
    - <<: *linux
 | 
			
		||||
      compiler: gcc-8
 | 
			
		||||
      name: min cmake version
 | 
			
		||||
      env:
 | 
			
		||||
        - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8"
 | 
			
		||||
        - BUILD_TYPE=Debug
 | 
			
		||||
        - CMAKE_EXE=/opt/local/cmake/bin/cmake
 | 
			
		||||
        - SKIP_TESTS=true
 | 
			
		||||
    # validator keys project as subproj of rippled
 | 
			
		||||
    - <<: *linux
 | 
			
		||||
      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_vkeys/
 | 
			
		||||
      compiler: gcc-8
 | 
			
		||||
      name: validator-keys
 | 
			
		||||
      env:
 | 
			
		||||
        - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8"
 | 
			
		||||
        - BUILD_TYPE=Debug
 | 
			
		||||
        - CMAKE_ADD="-Dvalidator_keys=ON"
 | 
			
		||||
        - TARGET=validator-keys
 | 
			
		||||
    # macos
 | 
			
		||||
    - &macos
 | 
			
		||||
      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_mac/
 | 
			
		||||
      stage: build
 | 
			
		||||
      os: osx
 | 
			
		||||
      osx_image: xcode13.1
 | 
			
		||||
      name: xcode13.1, debug
 | 
			
		||||
      env:
 | 
			
		||||
        # put NIH in non-cache location since it seems to
 | 
			
		||||
        # cause failures when homebrew updates
 | 
			
		||||
        - NIH_CACHE_ROOT=${TRAVIS_BUILD_DIR}/nih_c
 | 
			
		||||
        - BLD_CONFIG=Debug
 | 
			
		||||
        - TEST_EXTRA_ARGS=""
 | 
			
		||||
        - BOOST_ROOT=${CACHE_DIR}/boost_1_75_0
 | 
			
		||||
        - >-
 | 
			
		||||
          CMAKE_ADD="
 | 
			
		||||
          -DBOOST_ROOT=${BOOST_ROOT}/_INSTALLED_
 | 
			
		||||
          -DBoost_ARCHITECTURE=-x64
 | 
			
		||||
          -DBoost_NO_SYSTEM_PATHS=ON
 | 
			
		||||
          -DCMAKE_VERBOSE_MAKEFILE=ON"
 | 
			
		||||
      addons:
 | 
			
		||||
        homebrew:
 | 
			
		||||
          packages:
 | 
			
		||||
            - protobuf
 | 
			
		||||
            - grpc
 | 
			
		||||
            - pkg-config
 | 
			
		||||
            - bash
 | 
			
		||||
            - ninja
 | 
			
		||||
            - cmake
 | 
			
		||||
            - wget
 | 
			
		||||
            - zstd
 | 
			
		||||
            - libarchive
 | 
			
		||||
            - openssl@1.1
 | 
			
		||||
          update: true
 | 
			
		||||
      install:
 | 
			
		||||
        - export OPENSSL_ROOT=$(brew --prefix openssl@1.1)
 | 
			
		||||
        - travis_wait ${MAX_TIME_MIN} Builds/containers/shared/install_boost.sh
 | 
			
		||||
        - brew uninstall --ignore-dependencies boost
 | 
			
		||||
      script:
 | 
			
		||||
        - mkdir -p build.macos && cd build.macos
 | 
			
		||||
        - cmake -G Ninja ${CMAKE_EXTRA_ARGS} -DCMAKE_BUILD_TYPE=${BLD_CONFIG} ..
 | 
			
		||||
        - travis_wait ${MAX_TIME_MIN} cmake --build . --parallel --verbose
 | 
			
		||||
        - ./rippled --unittest --quiet --unittest-log --unittest-jobs ${NUM_PROCESSORS} ${TEST_EXTRA_ARGS}
 | 
			
		||||
    - <<: *macos
 | 
			
		||||
      name: xcode13.1, release
 | 
			
		||||
      before_script:
 | 
			
		||||
        - export BLD_CONFIG=Release
 | 
			
		||||
        - export CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} -Dassert=ON"
 | 
			
		||||
    - <<: *macos
 | 
			
		||||
      name: ipv6 (macos)
 | 
			
		||||
      before_script:
 | 
			
		||||
        - export TEST_EXTRA_ARGS="--unittest-ipv6"
 | 
			
		||||
    - <<: *macos
 | 
			
		||||
      osx_image: xcode13.1
 | 
			
		||||
      name: xcode13.1, debug
 | 
			
		||||
    # windows
 | 
			
		||||
    - &windows
 | 
			
		||||
      if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_win/
 | 
			
		||||
      os: windows
 | 
			
		||||
      env:
 | 
			
		||||
        # put NIH in a non-cached location until
 | 
			
		||||
        # we come up with a way to stabilize that
 | 
			
		||||
        # cache on windows (minimize incremental changes)
 | 
			
		||||
        - CACHE_NAME=win_01
 | 
			
		||||
        - NIH_CACHE_ROOT=${TRAVIS_BUILD_DIR}/nih_c
 | 
			
		||||
        - VCPKG_DEFAULT_TRIPLET="x64-windows-static"
 | 
			
		||||
        - MATRIX_EVAL="CC=cl.exe && CXX=cl.exe"
 | 
			
		||||
        - BOOST_ROOT=${CACHE_DIR}/boost_1_75
 | 
			
		||||
        - >-
 | 
			
		||||
          CMAKE_ADD="
 | 
			
		||||
          -DCMAKE_PREFIX_PATH=${BOOST_ROOT}/_INSTALLED_
 | 
			
		||||
          -DBOOST_ROOT=${BOOST_ROOT}/_INSTALLED_
 | 
			
		||||
          -DBoost_ROOT=${BOOST_ROOT}/_INSTALLED_
 | 
			
		||||
          -DBoost_DIR=${BOOST_ROOT}/_INSTALLED_/lib/cmake/Boost-1.75.0
 | 
			
		||||
          -DBoost_COMPILER=vc141
 | 
			
		||||
          -DCMAKE_VERBOSE_MAKEFILE=ON
 | 
			
		||||
          -DCMAKE_TOOLCHAIN_FILE=${VCPKG_DIR}/scripts/buildsystems/vcpkg.cmake
 | 
			
		||||
          -DVCPKG_TARGET_TRIPLET=x64-windows-static"
 | 
			
		||||
      stage: windep-vcpkg
 | 
			
		||||
      name: prereq-vcpkg
 | 
			
		||||
      install:
 | 
			
		||||
        - choco upgrade cmake.install
 | 
			
		||||
        - choco install ninja visualstudio2017-workload-vctools -y
 | 
			
		||||
      script:
 | 
			
		||||
        - df -h
 | 
			
		||||
        - env
 | 
			
		||||
        - travis_wait ${MAX_TIME_MIN} bin/sh/install-vcpkg.sh openssl
 | 
			
		||||
        - travis_wait ${MAX_TIME_MIN} bin/sh/install-vcpkg.sh grpc
 | 
			
		||||
        - travis_wait ${MAX_TIME_MIN} bin/sh/install-vcpkg.sh libarchive[lz4]
 | 
			
		||||
        # TBD consider rocksdb via vcpkg if/when we can build with the
 | 
			
		||||
        # vcpkg version
 | 
			
		||||
        # - travis_wait ${MAX_TIME_MIN} bin/sh/install-vcpkg.sh rocksdb[snappy,lz4,zlib]
 | 
			
		||||
    - <<: *windows
 | 
			
		||||
      stage: windep-boost
 | 
			
		||||
      name: prereq-keep-boost
 | 
			
		||||
      install:
 | 
			
		||||
        - choco upgrade cmake.install
 | 
			
		||||
        - choco install ninja visualstudio2017-workload-vctools -y
 | 
			
		||||
        - choco install visualstudio2019buildtools visualstudio2019community visualstudio2019-workload-vctools -y
 | 
			
		||||
      script:
 | 
			
		||||
        - export BOOST_TOOLSET=msvc-14.1
 | 
			
		||||
        - travis_wait ${MAX_TIME_MIN} Builds/containers/shared/install_boost.sh
 | 
			
		||||
    - &windows-bld
 | 
			
		||||
      <<: *windows
 | 
			
		||||
      stage: build
 | 
			
		||||
      name: windows, debug
 | 
			
		||||
      before_script:
 | 
			
		||||
        - export BLD_CONFIG=Debug
 | 
			
		||||
      script:
 | 
			
		||||
        - df -h
 | 
			
		||||
        - . ./bin/sh/setup-msvc.sh
 | 
			
		||||
        - mkdir -p build.ms && cd build.ms
 | 
			
		||||
        - cmake -G Ninja ${CMAKE_EXTRA_ARGS} -DCMAKE_BUILD_TYPE=${BLD_CONFIG} ..
 | 
			
		||||
        - travis_wait ${MAX_TIME_MIN} cmake --build . --parallel --verbose
 | 
			
		||||
        # override num procs to force fewer unit test jobs
 | 
			
		||||
        - export NUM_PROCESSORS=2
 | 
			
		||||
        - travis_wait ${MAX_TIME_MIN} ./rippled.exe --unittest --quiet --unittest-log --unittest-jobs ${NUM_PROCESSORS}
 | 
			
		||||
    - <<: *windows-bld
 | 
			
		||||
      name: windows, release
 | 
			
		||||
      before_script:
 | 
			
		||||
        - export BLD_CONFIG=Release
 | 
			
		||||
    - <<: *windows-bld
 | 
			
		||||
      name: windows, visual studio, debug
 | 
			
		||||
      script:
 | 
			
		||||
        - mkdir -p build.ms && cd build.ms
 | 
			
		||||
        - export CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} -DCMAKE_GENERATOR_TOOLSET=host=x64"
 | 
			
		||||
        - cmake -G "Visual Studio 15 2017 Win64" ${CMAKE_EXTRA_ARGS} ..
 | 
			
		||||
        - export DESTDIR=${PWD}/_installed_
 | 
			
		||||
        - travis_wait ${MAX_TIME_MIN} cmake --build . --parallel --verbose --config ${BLD_CONFIG} --target install
 | 
			
		||||
        # override num procs to force fewer unit test jobs
 | 
			
		||||
        - export NUM_PROCESSORS=2
 | 
			
		||||
        - >-
 | 
			
		||||
          travis_wait ${MAX_TIME_MIN} "./_installed_/Program Files/rippled/bin/rippled.exe" --unittest --quiet --unittest-log --unittest-jobs ${NUM_PROCESSORS}
 | 
			
		||||
    - <<: *windows-bld
 | 
			
		||||
      name: windows, vc2019
 | 
			
		||||
      install:
 | 
			
		||||
        - choco upgrade cmake.install
 | 
			
		||||
        - choco install ninja -y
 | 
			
		||||
        - choco install visualstudio2019buildtools visualstudio2019community visualstudio2019-workload-vctools -y
 | 
			
		||||
      before_script:
 | 
			
		||||
        - export BLD_CONFIG=Release
 | 
			
		||||
        # we want to use the boost build from cache, which was built using the
 | 
			
		||||
        # vs2017 compiler so we need to specify the Boost_COMPILER. BUT, we
 | 
			
		||||
        # can't use the cmake config files generated by boost b/c they are
 | 
			
		||||
        # broken for Boost_COMPILER override, so we need to specify both
 | 
			
		||||
        # Boost_NO_BOOST_CMAKE and a slightly different Boost_COMPILER string
 | 
			
		||||
        # to make the legacy find module work for us. If the cmake configs are
 | 
			
		||||
        # fixed in the future, it should be possible to remove these
 | 
			
		||||
        # workarounds.
 | 
			
		||||
        - export CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} -DBoost_NO_BOOST_CMAKE=ON -DBoost_COMPILER=-vc141"
 | 
			
		||||
 | 
			
		||||
before_cache:
 | 
			
		||||
  - if [ $(uname) = "Linux" ] ; then SUDO="sudo"; else SUDO=""; fi
 | 
			
		||||
  - cd ${TRAVIS_HOME}
 | 
			
		||||
  - if [ -f cache_ignore.tar ] ; then $SUDO tar xvf cache_ignore.tar; fi
 | 
			
		||||
  - cd ${TRAVIS_BUILD_DIR}
 | 
			
		||||
 | 
			
		||||
cache:
 | 
			
		||||
  timeout: 900
 | 
			
		||||
  directories:
 | 
			
		||||
    - $CACHE_DIR
 | 
			
		||||
 | 
			
		||||
notifications:
 | 
			
		||||
  email: false
 | 
			
		||||
							
								
								
									
										318
									
								
								BUILD.md
									
									
									
									
									
								
							
							
						
						
									
										318
									
								
								BUILD.md
									
									
									
									
									
								
							@@ -1,318 +0,0 @@
 | 
			
		||||
## Branches
 | 
			
		||||
 | 
			
		||||
For a stable release, choose the `master` branch or one of the [tagged
 | 
			
		||||
releases](https://github.com/ripple/rippled/releases).
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
git checkout master
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
For the latest release candidate, choose the `release` branch.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
git checkout release
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
If you are contributing or want the latest set of untested features,
 | 
			
		||||
then use the `develop` branch.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
git checkout develop
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Platforms
 | 
			
		||||
 | 
			
		||||
rippled is written in the C++20 dialect and includes the `<concepts>` header.
 | 
			
		||||
The [minimum compiler versions][2] that can compile this dialect are given
 | 
			
		||||
below:
 | 
			
		||||
 | 
			
		||||
| Compiler | Minimum Version
 | 
			
		||||
|---|---
 | 
			
		||||
| GCC         | 10
 | 
			
		||||
| Clang       | 13
 | 
			
		||||
| Apple Clang | 13.1.6
 | 
			
		||||
| MSVC        | 19.23
 | 
			
		||||
 | 
			
		||||
We do not recommend Windows for rippled production use at this time.
 | 
			
		||||
As of January 2023, the Ubuntu platform has received the highest level of
 | 
			
		||||
quality assurance, testing, and support.
 | 
			
		||||
Additionally, 32-bit Windows development is not supported.
 | 
			
		||||
 | 
			
		||||
Visual Studio 2022 is not yet supported.
 | 
			
		||||
This is because rippled is not compatible with [Boost][] versions 1.78 or 1.79,
 | 
			
		||||
but Conan cannot build Boost versions released earlier than them with VS 2022.
 | 
			
		||||
We expect that rippled will be compatible with Boost 1.80, which should be
 | 
			
		||||
released in August 2022.
 | 
			
		||||
Until then, we advise Windows developers to use Visual Studio 2019.
 | 
			
		||||
 | 
			
		||||
[Boost]: https://www.boost.org/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Prerequisites
 | 
			
		||||
 | 
			
		||||
> **Warning**
 | 
			
		||||
> These instructions assume you have a C++ development environment ready
 | 
			
		||||
> with Git, Python, Conan, CMake, and a C++ compiler.
 | 
			
		||||
> For help setting one up on Linux, macOS, or Windows,
 | 
			
		||||
> please see [our guide](./docs/build/environment.md).
 | 
			
		||||
>
 | 
			
		||||
> These instructions further assume a basic familiarity with Conan and CMake.
 | 
			
		||||
> If you are unfamiliar with Conan,
 | 
			
		||||
> then please read our [crash course](./docs/build/conan.md)
 | 
			
		||||
> or the official [Getting Started][3] walkthrough.
 | 
			
		||||
 | 
			
		||||
To build this package, you will need Python (>= 3.7),
 | 
			
		||||
[Conan][] (>= 1.55, < 2), and [CMake][] (>= 3.16).
 | 
			
		||||
 | 
			
		||||
[Conan]: https://conan.io/downloads.html
 | 
			
		||||
[CMake]: https://cmake.org/download/
 | 
			
		||||
 | 
			
		||||
You'll need at least one Conan profile:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
conan profile new default --detect
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
You'll need to compile in the C++20 dialect:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
conan profile update settings.compiler.cppstd=20 default
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Linux developers will commonly have a default Conan [profile][] that compiles
 | 
			
		||||
with GCC and links with libstdc++.
 | 
			
		||||
If you are linking with libstdc++ (see profile setting `compiler.libcxx`),
 | 
			
		||||
then you will need to choose the `libstdc++11` ABI:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
conan profile update settings.compiler.libcxx=libstdc++11 default
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
We find it necessary to use the x64 native build tools on Windows.
 | 
			
		||||
An easy way to do that is to run the shortcut "x64 Native Tools Command
 | 
			
		||||
Prompt" for the version of Visual Studio that you have installed.
 | 
			
		||||
 | 
			
		||||
Windows developers must build rippled and its dependencies for the x64
 | 
			
		||||
architecture:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
conan profile update settings.arch=x86_64 default
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
If you have multiple compilers installed on your platform,
 | 
			
		||||
then you'll need to make sure that Conan and CMake select the one you want to
 | 
			
		||||
use.
 | 
			
		||||
This setting will set the correct variables (`CMAKE_<LANG>_COMPILER`) in the
 | 
			
		||||
generated CMake toolchain file:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
conan profile update 'conf.tools.build:compiler_executables={"c": "<path>", "cpp": "<path>"}' default
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
It should choose the compiler for dependencies as well,
 | 
			
		||||
but not all of them have a Conan recipe that respects this setting (yet).
 | 
			
		||||
For the rest, you can set these environment variables:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
conan profile update env.CC=<path> default
 | 
			
		||||
conan profile update env.CXX=<path> default
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Export our [Conan recipe for Snappy](./external/snappy).
 | 
			
		||||
It does not explicitly link the C++ standard library,
 | 
			
		||||
which allows you to statically link it with GCC, if you want.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
conan export external/snappy snappy/1.1.9@
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## How to build and test
 | 
			
		||||
 | 
			
		||||
Let's start with a couple of examples of common workflows.
 | 
			
		||||
The first is for a single-configuration generator (e.g. Unix Makefiles) on
 | 
			
		||||
Linux or macOS:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
mkdir .build
 | 
			
		||||
cd .build
 | 
			
		||||
conan install .. --output-folder . --build missing --settings build_type=Release
 | 
			
		||||
cmake -DCMAKE_TOOLCHAIN_FILE:FILEPATH=build/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release ..
 | 
			
		||||
cmake --build .
 | 
			
		||||
./rippled --unittest
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The second is for a multi-configuration generator (e.g. Visual Studio) on
 | 
			
		||||
Windows:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
mkdir .build
 | 
			
		||||
cd .build
 | 
			
		||||
conan install .. --output-folder . --build missing --settings build_type=Release --settings compiler.runtime=MT
 | 
			
		||||
conan install .. --output-folder . --build missing --settings build_type=Debug --settings compiler.runtime=MTd
 | 
			
		||||
cmake -DCMAKE_TOOLCHAIN_FILE:FILEPATH=build/generators/conan_toolchain.cmake ..
 | 
			
		||||
cmake --build . --config Release
 | 
			
		||||
cmake --build . --config Debug
 | 
			
		||||
./Release/rippled --unittest
 | 
			
		||||
./Debug/rippled --unittest
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Now to explain the individual steps in each example:
 | 
			
		||||
 | 
			
		||||
1. Create a build directory (and move into it).
 | 
			
		||||
 | 
			
		||||
    You can choose any name you want.
 | 
			
		||||
 | 
			
		||||
    Conan will generate some files in what it calls the "install folder".
 | 
			
		||||
    These files are implementation details that you don't need to worry about.
 | 
			
		||||
    By default, the install folder is your current working directory.
 | 
			
		||||
    If you don't move into your build directory before calling Conan,
 | 
			
		||||
    then you may be annoyed to see it polluting your project root directory
 | 
			
		||||
    with these files.
 | 
			
		||||
    To make Conan put them in your build directory,
 | 
			
		||||
    you'll have to add the option
 | 
			
		||||
    `--install-folder` or `-if` to every `conan install` command.
 | 
			
		||||
 | 
			
		||||
1. Generate CMake files for every configuration you want to build.
 | 
			
		||||
 | 
			
		||||
    For a single-configuration generator, e.g. `Unix Makefiles` or `Ninja`,
 | 
			
		||||
    you only need to run this command once.
 | 
			
		||||
    For a multi-configuration generator, e.g. `Visual Studio`, you may want to
 | 
			
		||||
    run it more than once.
 | 
			
		||||
 | 
			
		||||
    Each of these commands should have a different `build_type` setting.
 | 
			
		||||
    A second command with the same `build_type` setting will just overwrite
 | 
			
		||||
    the files generated by the first.
 | 
			
		||||
    You can pass the build type on the command line with `--settings
 | 
			
		||||
    build_type=$BUILD_TYPE` or in the profile itself, under the section
 | 
			
		||||
    `[settings]`, with the key `build_type`.
 | 
			
		||||
 | 
			
		||||
    If you are using a Microsoft Visual C++ compiler, then you will need to
 | 
			
		||||
    ensure consistency between the `build_type` setting and the
 | 
			
		||||
    `compiler.runtime` setting.
 | 
			
		||||
    When `build_type` is `Release`, `compiler.runtime` should be `MT`.
 | 
			
		||||
    When `build_type` is `Debug`, `compiler.runtime` should be `MTd`.
 | 
			
		||||
 | 
			
		||||
1. Configure CMake once.
 | 
			
		||||
 | 
			
		||||
    For all choices of generator, pass the toolchain file generated by Conan.
 | 
			
		||||
    It will be located at
 | 
			
		||||
    `$OUTPUT_FOLDER/build/generators/conan_toolchain.cmake`.
 | 
			
		||||
    If you are using a single-configuration generator, then pass the CMake
 | 
			
		||||
    variable [`CMAKE_BUILD_TYPE`][build_type] and make sure it matches the
 | 
			
		||||
    `build_type` setting you chose in the previous step.
 | 
			
		||||
 | 
			
		||||
    This step is where you may pass build options for rippled.
 | 
			
		||||
 | 
			
		||||
1. Build rippled.
 | 
			
		||||
 | 
			
		||||
    For a multi-configuration generator, you must pass the option `--config`
 | 
			
		||||
    to select the build configuration.
 | 
			
		||||
    For a single-configuration generator, it will build whatever configuration
 | 
			
		||||
    you passed for `CMAKE_BUILD_TYPE`.
 | 
			
		||||
 | 
			
		||||
1. Test rippled.
 | 
			
		||||
 | 
			
		||||
    The exact location of rippled in your build directory
 | 
			
		||||
    depends on your choice of CMake generator.
 | 
			
		||||
    You can run unit tests by passing `--unittest`.
 | 
			
		||||
    Pass `--help` to see the rest of the command line options.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Options
 | 
			
		||||
 | 
			
		||||
The `unity` option allows you to select between [unity][5] and non-unity
 | 
			
		||||
builds.
 | 
			
		||||
Unity builds may be faster for the first build (at the cost of much
 | 
			
		||||
more memory) since they concatenate sources into fewer translation
 | 
			
		||||
units.
 | 
			
		||||
Non-unity builds may be faster for incremental builds, and can be helpful for
 | 
			
		||||
detecting `#include` omissions.
 | 
			
		||||
 | 
			
		||||
Below are the most commonly used options,
 | 
			
		||||
with their default values in parentheses.
 | 
			
		||||
 | 
			
		||||
- `assert` (OFF): Enable assertions.
 | 
			
		||||
- `reporting` (OFF): Build the reporting mode feature.
 | 
			
		||||
- `tests` (ON): Build tests.
 | 
			
		||||
- `unity` (ON): Configure a [unity build][5].
 | 
			
		||||
- `san` (): Enable a sanitizer with Clang. Choices are `thread` and `address`.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Troubleshooting
 | 
			
		||||
 | 
			
		||||
#### Conan
 | 
			
		||||
 | 
			
		||||
If you find trouble building dependencies after changing Conan settings,
 | 
			
		||||
then you should retry after removing the Conan cache:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
rm -rf ~/.conan/data
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#### no std::result_of
 | 
			
		||||
 | 
			
		||||
If your compiler version is recent enough to have removed `std::result_of` as
 | 
			
		||||
part of C++20, e.g. Apple Clang 15.0,
 | 
			
		||||
then you might need to add a preprocessor definition to your bulid:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
conan profile update 'env.CFLAGS="-DBOOST_ASIO_HAS_STD_INVOKE_RESULT"' default
 | 
			
		||||
conan profile update 'env.CXXFLAGS="-DBOOST_ASIO_HAS_STD_INVOKE_RESULT"' default
 | 
			
		||||
conan profile update 'tools.build:cflags+=["-DBOOST_ASIO_HAS_STD_INVOKE_RESULT"]' default
 | 
			
		||||
conan profile update 'tools.build:cxxflags+=["-DBOOST_ASIO_HAS_STD_INVOKE_RESULT"]' default
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#### recompile with -fPIC
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
/usr/bin/ld.gold: error: /home/username/.conan/data/boost/1.77.0/_/_/package/.../lib/libboost_container.a(alloc_lib.o):
 | 
			
		||||
  requires unsupported dynamic reloc 11; recompile with -fPIC
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
If you get a linker error like the one above suggesting that you recompile
 | 
			
		||||
Boost with position-independent code, the reason is most likely that Conan
 | 
			
		||||
downloaded a bad binary distribution of the dependency.
 | 
			
		||||
For now, this seems to be a [bug][1] in Conan just for Boost 1.77.0 compiled
 | 
			
		||||
with GCC for Linux.
 | 
			
		||||
The solution is to build the dependency locally by passing `--build boost`
 | 
			
		||||
when calling `conan install`:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
conan install --build boost ...
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## How to add a dependency
 | 
			
		||||
 | 
			
		||||
If you want to experiment with a new package, here are the steps to get it
 | 
			
		||||
working:
 | 
			
		||||
 | 
			
		||||
1. Search for the package on [Conan Center](https://conan.io/center/).
 | 
			
		||||
1. In [`conanfile.py`](./conanfile.py):
 | 
			
		||||
    1. Add a version of the package to the `requires` property.
 | 
			
		||||
    1. Change any default options for the package by adding them to the
 | 
			
		||||
    `default_options` property (with syntax `'$package:$option': $value`)
 | 
			
		||||
1. In [`CMakeLists.txt`](./CMakeLists.txt):
 | 
			
		||||
    1. Add a call to `find_package($package REQUIRED)`.
 | 
			
		||||
    1. Link a library from the package to the target `ripple_libs` (search for
 | 
			
		||||
    the existing call to `target_link_libraries(ripple_libs INTERFACE ...)`).
 | 
			
		||||
1. Start coding! Don't forget to include whatever headers you need from the
 | 
			
		||||
   package.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[1]: https://github.com/conan-io/conan-center-index/issues/13168
 | 
			
		||||
[2]: https://en.cppreference.com/w/cpp/compiler_support/20
 | 
			
		||||
[3]: https://docs.conan.io/en/latest/getting_started.html
 | 
			
		||||
[5]: https://en.wikipedia.org/wiki/Unity_build
 | 
			
		||||
[build_type]: https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html
 | 
			
		||||
[runtime]: https://cmake.org/cmake/help/latest/variable/CMAKE_MSVC_RUNTIME_LIBRARY.html
 | 
			
		||||
[toolchain]: https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html
 | 
			
		||||
[pcf]: https://cmake.org/cmake/help/latest/manual/cmake-packages.7.html#package-configuration-file
 | 
			
		||||
[pvf]: https://cmake.org/cmake/help/latest/manual/cmake-packages.7.html#package-version-file
 | 
			
		||||
[find_package]: https://cmake.org/cmake/help/latest/command/find_package.html
 | 
			
		||||
[search]: https://cmake.org/cmake/help/latest/command/find_package.html#search-procedure
 | 
			
		||||
[prefix_path]: https://cmake.org/cmake/help/latest/variable/CMAKE_PREFIX_PATH.html
 | 
			
		||||
[profile]: https://docs.conan.io/en/latest/reference/profiles.html
 | 
			
		||||
							
								
								
									
										62
									
								
								Builds/CMake/FindRocksDB.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								Builds/CMake/FindRocksDB.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,62 @@
 | 
			
		||||
set (RocksDB_DIR "" CACHE PATH "Root directory of RocksDB distribution")
 | 
			
		||||
 | 
			
		||||
find_path (RocksDB_INCLUDE_DIR
 | 
			
		||||
    rocksdb/db.h
 | 
			
		||||
    PATHS ${RocksDB_DIR})
 | 
			
		||||
 | 
			
		||||
set (RocksDB_VERSION "")
 | 
			
		||||
find_file (RocksDB_VERSION_FILE
 | 
			
		||||
    rocksdb/version.h
 | 
			
		||||
    PATHS ${RocksDB_DIR})
 | 
			
		||||
if (RocksDB_VERSION_FILE)
 | 
			
		||||
    file (READ ${RocksDB_VERSION_FILE} _verfile)
 | 
			
		||||
    if ("${_verfile}" MATCHES "#define[ \\t]+ROCKSDB_MAJOR[ \\t]+([0-9]+)")
 | 
			
		||||
        string (APPEND RocksDB_VERSION "${CMAKE_MATCH_1}")
 | 
			
		||||
    else ()
 | 
			
		||||
        string (APPEND RocksDB_VERSION "0")
 | 
			
		||||
    endif()
 | 
			
		||||
    if ("${_verfile}" MATCHES "#define[ \\t]+ROCKSDB_MINOR[ \\t]+([0-9]+)")
 | 
			
		||||
        string (APPEND RocksDB_VERSION ".${CMAKE_MATCH_1}")
 | 
			
		||||
    else ()
 | 
			
		||||
        string (APPEND RocksDB_VERSION ".0")
 | 
			
		||||
    endif()
 | 
			
		||||
    if ("${_verfile}" MATCHES "#define[ \\t]+ROCKSDB_PATCH[ \\t]+([0-9]+)")
 | 
			
		||||
        string (APPEND RocksDB_VERSION ".${CMAKE_MATCH_1}")
 | 
			
		||||
    else ()
 | 
			
		||||
        string (APPEND RocksDB_VERSION ".0")
 | 
			
		||||
    endif()
 | 
			
		||||
endif ()
 | 
			
		||||
 | 
			
		||||
if (RocksDB_USE_STATIC)
 | 
			
		||||
    list (APPEND RocksDB_NAMES
 | 
			
		||||
        "${CMAKE_STATIC_LIBRARY_PREFIX}rocksdb${CMAKE_STATIC_LIBRARY_SUFFIX}"
 | 
			
		||||
        "${CMAKE_STATIC_LIBRARY_PREFIX}rocksdblib${CMAKE_STATIC_LIBRARY_SUFFIX}")
 | 
			
		||||
endif ()
 | 
			
		||||
 | 
			
		||||
list (APPEND RocksDB_NAMES rocksdb)
 | 
			
		||||
 | 
			
		||||
find_library (RocksDB_LIBRARY NAMES ${RocksDB_NAMES}
 | 
			
		||||
    PATHS
 | 
			
		||||
    ${RocksDB_DIR}
 | 
			
		||||
    ${RocksDB_DIR}/bin/Release
 | 
			
		||||
    ${RocksDB_DIR}/bin64_vs2013/Release
 | 
			
		||||
    PATH_SUFFIXES lib lib64)
 | 
			
		||||
 | 
			
		||||
foreach (_n RocksDB_NAMES)
 | 
			
		||||
    list (APPEND RocksDB_NAMES_DBG "${_n}_d" "${_n}d")
 | 
			
		||||
endforeach ()
 | 
			
		||||
find_library (RocksDB_LIBRARY_DEBUG NAMES ${RocksDB_NAMES_DBG}
 | 
			
		||||
    PATHS
 | 
			
		||||
    ${RocksDB_DIR}
 | 
			
		||||
    ${RocksDB_DIR}/bin/Debug
 | 
			
		||||
    ${RocksDB_DIR}/bin64_vs2013/Debug
 | 
			
		||||
    PATH_SUFFIXES lib lib64)
 | 
			
		||||
 | 
			
		||||
include (FindPackageHandleStandardArgs)
 | 
			
		||||
find_package_handle_standard_args (RocksDB
 | 
			
		||||
    REQUIRED_VARS RocksDB_LIBRARY RocksDB_INCLUDE_DIR
 | 
			
		||||
    VERSION_VAR RocksDB_VERSION)
 | 
			
		||||
 | 
			
		||||
mark_as_advanced (RocksDB_INCLUDE_DIR RocksDB_LIBRARY)
 | 
			
		||||
set (RocksDB_INCLUDE_DIRS ${RocksDB_INCLUDE_DIR})
 | 
			
		||||
set (RocksDB_LIBRARIES ${RocksDB_LIBRARY})
 | 
			
		||||
							
								
								
									
										18
									
								
								Builds/CMake/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								Builds/CMake/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
 | 
			
		||||
These are modules and sources that support our CMake build.
 | 
			
		||||
 | 
			
		||||
== FindBoost.cmake ==
 | 
			
		||||
 | 
			
		||||
In order to facilitate updating to latest releases of boost, we've made a local
 | 
			
		||||
copy of the FindBoost cmake module in our repo. The latest official version can
 | 
			
		||||
generally be obtained
 | 
			
		||||
[here](https://github.com/Kitware/CMake/blob/master/Modules/FindBoost.cmake).
 | 
			
		||||
 | 
			
		||||
The latest version provided by Kitware can be tailored for use with the
 | 
			
		||||
version of CMake that it ships with (typically the next upcoming CMake
 | 
			
		||||
release). As such, the latest version from the repository might not work
 | 
			
		||||
perfectly with older versions of CMake - for instance, the latest version 
 | 
			
		||||
might use features or properties only available in the version of CMake that 
 | 
			
		||||
it ships with. Given this, it's best to test any updates to this module with a few 
 | 
			
		||||
different versions of cmake.
 | 
			
		||||
 | 
			
		||||
@@ -13,10 +13,6 @@ if (unity)
 | 
			
		||||
  set_target_properties(xrpl_core PROPERTIES UNITY_BUILD ON)
 | 
			
		||||
endif ()
 | 
			
		||||
 | 
			
		||||
add_library(libxrpl INTERFACE)
 | 
			
		||||
target_link_libraries(libxrpl INTERFACE xrpl_core)
 | 
			
		||||
add_library(xrpl::libxrpl ALIAS libxrpl)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#[===============================[
 | 
			
		||||
    beast/legacy FILES:
 | 
			
		||||
@@ -141,8 +137,8 @@ target_link_libraries (xrpl_core
 | 
			
		||||
    Ripple::boost
 | 
			
		||||
    NIH::WasmEdge
 | 
			
		||||
    Ripple::syslibs
 | 
			
		||||
    secp256k1::secp256k1
 | 
			
		||||
    ed25519::ed25519
 | 
			
		||||
    NIH::secp256k1
 | 
			
		||||
    NIH::ed25519-donna
 | 
			
		||||
    date::date
 | 
			
		||||
    Ripple::opts)
 | 
			
		||||
#[=================================[
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +1,7 @@
 | 
			
		||||
#[===================================================================[
 | 
			
		||||
   docs target (optional)
 | 
			
		||||
#]===================================================================]
 | 
			
		||||
 | 
			
		||||
option(with_docs "Include the docs target?" FALSE)
 | 
			
		||||
 | 
			
		||||
if(NOT (with_docs OR only_docs))
 | 
			
		||||
  return()
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
if (tests)
 | 
			
		||||
  find_package (Doxygen)
 | 
			
		||||
  if (NOT TARGET Doxygen::doxygen)
 | 
			
		||||
    message (STATUS "doxygen executable not found -- skipping docs target")
 | 
			
		||||
@@ -82,3 +76,4 @@ add_custom_command(
 | 
			
		||||
  add_custom_target (docs
 | 
			
		||||
    DEPENDS "${doxygen_index_file}"
 | 
			
		||||
    SOURCES "${dependencies}")
 | 
			
		||||
endif ()
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,7 @@
 | 
			
		||||
 | 
			
		||||
install (
 | 
			
		||||
  TARGETS
 | 
			
		||||
    ed25519-donna
 | 
			
		||||
    common
 | 
			
		||||
    opts
 | 
			
		||||
    ripple_syslibs
 | 
			
		||||
@@ -15,6 +16,17 @@ install (
 | 
			
		||||
  RUNTIME DESTINATION bin
 | 
			
		||||
  INCLUDES DESTINATION include)
 | 
			
		||||
 | 
			
		||||
if(${INSTALL_SECP256K1})
 | 
			
		||||
install (
 | 
			
		||||
  TARGETS
 | 
			
		||||
    secp256k1
 | 
			
		||||
  EXPORT RippleExports
 | 
			
		||||
  LIBRARY DESTINATION lib
 | 
			
		||||
  ARCHIVE DESTINATION lib
 | 
			
		||||
  RUNTIME DESTINATION bin
 | 
			
		||||
  INCLUDES DESTINATION include)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
install (EXPORT RippleExports
 | 
			
		||||
  FILE RippleTargets.cmake
 | 
			
		||||
  NAMESPACE Ripple::
 | 
			
		||||
 
 | 
			
		||||
@@ -36,9 +36,16 @@ target_link_libraries (opts
 | 
			
		||||
    $<$<AND:$<BOOL:${is_gcc}>,$<BOOL:${profile}>>:-p>)
 | 
			
		||||
 | 
			
		||||
if (jemalloc)
 | 
			
		||||
  if (static)
 | 
			
		||||
    set(JEMALLOC_USE_STATIC ON CACHE BOOL "" FORCE)
 | 
			
		||||
  endif ()
 | 
			
		||||
  find_package (jemalloc REQUIRED)
 | 
			
		||||
  target_compile_definitions (opts INTERFACE PROFILE_JEMALLOC)
 | 
			
		||||
  target_link_libraries(opts INTERFACE jemalloc::jemalloc)
 | 
			
		||||
  target_include_directories (opts SYSTEM INTERFACE ${JEMALLOC_INCLUDE_DIRS})
 | 
			
		||||
  target_link_libraries (opts INTERFACE ${JEMALLOC_LIBRARIES})
 | 
			
		||||
  get_filename_component (JEMALLOC_LIB_PATH ${JEMALLOC_LIBRARIES} DIRECTORY)
 | 
			
		||||
  ## TODO see if we can use the BUILD_RPATH target property (is it transitive?)
 | 
			
		||||
  set (CMAKE_BUILD_RPATH ${CMAKE_BUILD_RPATH} ${JEMALLOC_LIB_PATH})
 | 
			
		||||
endif ()
 | 
			
		||||
 | 
			
		||||
if (san)
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@ if (is_multiconfig)
 | 
			
		||||
  file(GLOB md_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} CONFIGURE_DEPENDS
 | 
			
		||||
    *.md)
 | 
			
		||||
  LIST(APPEND all_sources ${md_files})
 | 
			
		||||
  foreach (_target secp256k1::secp256k1 ed25519::ed25519 pbufs xrpl_core rippled)
 | 
			
		||||
  foreach (_target secp256k1 ed25519-donna pbufs xrpl_core rippled)
 | 
			
		||||
    get_target_property (_type ${_target} TYPE)
 | 
			
		||||
    if(_type STREQUAL "INTERFACE_LIBRARY")
 | 
			
		||||
      continue()
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										33
									
								
								Builds/CMake/RippledNIH.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								Builds/CMake/RippledNIH.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,33 @@
 | 
			
		||||
#[===================================================================[
 | 
			
		||||
   NIH prefix path..this is where we will download
 | 
			
		||||
   and build any ExternalProjects, and they will hopefully
 | 
			
		||||
   survive across build directory deletion (manual cleans)
 | 
			
		||||
#]===================================================================]
 | 
			
		||||
 | 
			
		||||
string (REGEX REPLACE "[ \\/%]+" "_" gen_for_path ${CMAKE_GENERATOR})
 | 
			
		||||
string (TOLOWER ${gen_for_path} gen_for_path)
 | 
			
		||||
# HACK: trying to shorten paths for windows CI (which hits 260 MAXPATH easily)
 | 
			
		||||
# @see:  https://issues.jenkins-ci.org/browse/JENKINS-38706?focusedCommentId=339847
 | 
			
		||||
string (REPLACE "visual_studio" "vs" gen_for_path ${gen_for_path})
 | 
			
		||||
if (NOT DEFINED NIH_CACHE_ROOT)
 | 
			
		||||
  if (DEFINED ENV{NIH_CACHE_ROOT})
 | 
			
		||||
    set (NIH_CACHE_ROOT $ENV{NIH_CACHE_ROOT})
 | 
			
		||||
  else ()
 | 
			
		||||
    set (NIH_CACHE_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/.nih_c")
 | 
			
		||||
  endif ()
 | 
			
		||||
endif ()
 | 
			
		||||
set (nih_cache_path
 | 
			
		||||
  "${NIH_CACHE_ROOT}/${gen_for_path}/${CMAKE_CXX_COMPILER_ID}_${CMAKE_CXX_COMPILER_VERSION}")
 | 
			
		||||
if (NOT is_multiconfig)
 | 
			
		||||
  set (nih_cache_path "${nih_cache_path}/${CMAKE_BUILD_TYPE}")
 | 
			
		||||
endif ()
 | 
			
		||||
file(TO_CMAKE_PATH "${nih_cache_path}" nih_cache_path)
 | 
			
		||||
message (STATUS "NIH-EP cache path: ${nih_cache_path}")
 | 
			
		||||
## two convenience variables:
 | 
			
		||||
set (ep_lib_prefix ${CMAKE_STATIC_LIBRARY_PREFIX})
 | 
			
		||||
set (ep_lib_suffix ${CMAKE_STATIC_LIBRARY_SUFFIX})
 | 
			
		||||
 | 
			
		||||
# this is a setting for FetchContent and needs to be
 | 
			
		||||
# a cache variable
 | 
			
		||||
# https://cmake.org/cmake/help/latest/module/FetchContent.html#populating-the-content
 | 
			
		||||
set (FETCHCONTENT_BASE_DIR ${nih_cache_path} CACHE STRING "" FORCE)
 | 
			
		||||
@@ -16,7 +16,20 @@ if (is_root_project)
 | 
			
		||||
    message (STATUS "using [${container_label}] as build container tag...")
 | 
			
		||||
 | 
			
		||||
    file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/packages)
 | 
			
		||||
 | 
			
		||||
    file (MAKE_DIRECTORY ${NIH_CACHE_ROOT}/pkgbuild)
 | 
			
		||||
    if (is_linux)
 | 
			
		||||
      execute_process (COMMAND id -u
 | 
			
		||||
        OUTPUT_VARIABLE DOCKER_USER_ID
 | 
			
		||||
        OUTPUT_STRIP_TRAILING_WHITESPACE)
 | 
			
		||||
      message (STATUS "docker local user id: ${DOCKER_USER_ID}")
 | 
			
		||||
      execute_process (COMMAND id -g
 | 
			
		||||
        OUTPUT_VARIABLE DOCKER_GROUP_ID
 | 
			
		||||
        OUTPUT_STRIP_TRAILING_WHITESPACE)
 | 
			
		||||
      message (STATUS "docker local group id: ${DOCKER_GROUP_ID}")
 | 
			
		||||
    endif ()
 | 
			
		||||
    if (DOCKER_USER_ID AND DOCKER_GROUP_ID)
 | 
			
		||||
      set(map_user TRUE)
 | 
			
		||||
    endif ()
 | 
			
		||||
    #[===================================================================[
 | 
			
		||||
        rpm
 | 
			
		||||
    #]===================================================================]
 | 
			
		||||
@@ -47,6 +60,8 @@ if (is_root_project)
 | 
			
		||||
    exclude_from_default (rpm_container)
 | 
			
		||||
    add_custom_target (rpm
 | 
			
		||||
      docker run
 | 
			
		||||
        -e NIH_CACHE_ROOT=/opt/rippled_bld/pkg/.nih_c
 | 
			
		||||
        -v ${NIH_CACHE_ROOT}/pkgbuild:/opt/rippled_bld/pkg/.nih_c
 | 
			
		||||
        -v ${CMAKE_CURRENT_SOURCE_DIR}:/opt/rippled_bld/pkg/rippled
 | 
			
		||||
        -v ${CMAKE_CURRENT_BINARY_DIR}/packages:/opt/rippled_bld/pkg/out
 | 
			
		||||
        -t rippleci/rippled-rpm-builder:${container_label}
 | 
			
		||||
@@ -117,6 +132,8 @@ if (is_root_project)
 | 
			
		||||
    exclude_from_default (dpkg_container)
 | 
			
		||||
    add_custom_target (dpkg
 | 
			
		||||
      docker run
 | 
			
		||||
        -e NIH_CACHE_ROOT=/opt/rippled_bld/pkg/.nih_c
 | 
			
		||||
        -v ${NIH_CACHE_ROOT}/pkgbuild:/opt/rippled_bld/pkg/.nih_c
 | 
			
		||||
        -v ${CMAKE_CURRENT_SOURCE_DIR}:/opt/rippled_bld/pkg/rippled
 | 
			
		||||
        -v ${CMAKE_CURRENT_BINARY_DIR}/packages:/opt/rippled_bld/pkg/out
 | 
			
		||||
        -t rippled-dpkg-builder:${container_label}
 | 
			
		||||
 
 | 
			
		||||
@@ -11,6 +11,11 @@ if (NOT ep_procs)
 | 
			
		||||
  endif ()
 | 
			
		||||
endif ()
 | 
			
		||||
get_property (is_multiconfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
 | 
			
		||||
if (is_multiconfig STREQUAL "NOTFOUND")
 | 
			
		||||
  if (${CMAKE_GENERATOR} STREQUAL "Xcode" OR ${CMAKE_GENERATOR} MATCHES "^Visual Studio")
 | 
			
		||||
    set (is_multiconfig TRUE)
 | 
			
		||||
  endif ()
 | 
			
		||||
endif ()
 | 
			
		||||
 | 
			
		||||
set (CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "" FORCE)
 | 
			
		||||
if (NOT is_multiconfig)
 | 
			
		||||
@@ -44,6 +49,9 @@ elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
 | 
			
		||||
    message (FATAL_ERROR "This project requires GCC 8 or later")
 | 
			
		||||
  endif ()
 | 
			
		||||
endif ()
 | 
			
		||||
if (CMAKE_GENERATOR STREQUAL "Xcode")
 | 
			
		||||
  set (is_xcode TRUE)
 | 
			
		||||
endif ()
 | 
			
		||||
 | 
			
		||||
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
 | 
			
		||||
  set (is_linux TRUE)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,49 @@
 | 
			
		||||
#[===================================================================[
 | 
			
		||||
   NIH dep: boost
 | 
			
		||||
#]===================================================================]
 | 
			
		||||
 | 
			
		||||
if((NOT DEFINED BOOST_ROOT) AND(DEFINED ENV{BOOST_ROOT}))
 | 
			
		||||
  set(BOOST_ROOT $ENV{BOOST_ROOT})
 | 
			
		||||
endif()
 | 
			
		||||
file(TO_CMAKE_PATH "${BOOST_ROOT}" BOOST_ROOT)
 | 
			
		||||
if(WIN32 OR CYGWIN)
 | 
			
		||||
  # Workaround for MSVC having two boost versions - x86 and x64 on same PC in stage folders
 | 
			
		||||
  if(DEFINED BOOST_ROOT)
 | 
			
		||||
    if(IS_DIRECTORY ${BOOST_ROOT}/stage64/lib)
 | 
			
		||||
      set(BOOST_LIBRARYDIR ${BOOST_ROOT}/stage64/lib)
 | 
			
		||||
    elseif(IS_DIRECTORY ${BOOST_ROOT}/stage/lib)
 | 
			
		||||
      set(BOOST_LIBRARYDIR ${BOOST_ROOT}/stage/lib)
 | 
			
		||||
    elseif(IS_DIRECTORY ${BOOST_ROOT}/lib)
 | 
			
		||||
      set(BOOST_LIBRARYDIR ${BOOST_ROOT}/lib)
 | 
			
		||||
    else()
 | 
			
		||||
      message(WARNING "Did not find expected boost library dir. "
 | 
			
		||||
        "Defaulting to ${BOOST_ROOT}")
 | 
			
		||||
      set(BOOST_LIBRARYDIR ${BOOST_ROOT})
 | 
			
		||||
    endif()
 | 
			
		||||
  endif()
 | 
			
		||||
endif()
 | 
			
		||||
message(STATUS "BOOST_ROOT: ${BOOST_ROOT}")
 | 
			
		||||
message(STATUS "BOOST_LIBRARYDIR: ${BOOST_LIBRARYDIR}")
 | 
			
		||||
 | 
			
		||||
# uncomment the following as needed to debug FindBoost issues:
 | 
			
		||||
#set(Boost_DEBUG ON)
 | 
			
		||||
 | 
			
		||||
#[=========================================================[
 | 
			
		||||
   boost dynamic libraries don't trivially support @rpath
 | 
			
		||||
   linking right now (cmake's default), so just force
 | 
			
		||||
   static linking for macos, or if requested on linux by flag
 | 
			
		||||
#]=========================================================]
 | 
			
		||||
if(static)
 | 
			
		||||
  set(Boost_USE_STATIC_LIBS ON)
 | 
			
		||||
endif()
 | 
			
		||||
set(Boost_USE_MULTITHREADED ON)
 | 
			
		||||
if(static AND NOT APPLE)
 | 
			
		||||
  set(Boost_USE_STATIC_RUNTIME ON)
 | 
			
		||||
else()
 | 
			
		||||
  set(Boost_USE_STATIC_RUNTIME OFF)
 | 
			
		||||
endif()
 | 
			
		||||
# TBD:
 | 
			
		||||
# Boost_USE_DEBUG_RUNTIME:  When ON, uses Boost libraries linked against the
 | 
			
		||||
find_package(Boost 1.70 REQUIRED
 | 
			
		||||
  COMPONENTS
 | 
			
		||||
    chrono
 | 
			
		||||
@@ -9,12 +55,11 @@ find_package(Boost 1.70 REQUIRED
 | 
			
		||||
    program_options
 | 
			
		||||
    regex
 | 
			
		||||
    system
 | 
			
		||||
    thread
 | 
			
		||||
)
 | 
			
		||||
    thread)
 | 
			
		||||
 | 
			
		||||
add_library(ripple_boost INTERFACE)
 | 
			
		||||
add_library(Ripple::boost ALIAS ripple_boost)
 | 
			
		||||
if(XCODE)
 | 
			
		||||
if(is_xcode)
 | 
			
		||||
  target_include_directories(ripple_boost BEFORE INTERFACE ${Boost_INCLUDE_DIRS})
 | 
			
		||||
  target_compile_options(ripple_boost INTERFACE --system-header-prefix="boost/")
 | 
			
		||||
else()
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										28
									
								
								Builds/CMake/deps/Ed25519-donna.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								Builds/CMake/deps/Ed25519-donna.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
#[===================================================================[
 | 
			
		||||
   NIH dep: ed25519-donna
 | 
			
		||||
#]===================================================================]
 | 
			
		||||
 | 
			
		||||
add_library (ed25519-donna STATIC
 | 
			
		||||
  src/ed25519-donna/ed25519.c)
 | 
			
		||||
target_include_directories (ed25519-donna
 | 
			
		||||
  PUBLIC
 | 
			
		||||
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
 | 
			
		||||
    $<INSTALL_INTERFACE:include>
 | 
			
		||||
  PRIVATE
 | 
			
		||||
    ${CMAKE_CURRENT_SOURCE_DIR}/src/ed25519-donna)
 | 
			
		||||
#[=========================================================[
 | 
			
		||||
   NOTE for macos:
 | 
			
		||||
   https://github.com/floodyberry/ed25519-donna/issues/29
 | 
			
		||||
   our source for ed25519-donna-portable.h has been
 | 
			
		||||
   patched to workaround this.
 | 
			
		||||
#]=========================================================]
 | 
			
		||||
target_link_libraries (ed25519-donna PUBLIC OpenSSL::SSL)
 | 
			
		||||
add_library (NIH::ed25519-donna ALIAS ed25519-donna)
 | 
			
		||||
target_link_libraries (ripple_libs INTERFACE NIH::ed25519-donna)
 | 
			
		||||
#[===========================[
 | 
			
		||||
   headers installation
 | 
			
		||||
#]===========================]
 | 
			
		||||
install (
 | 
			
		||||
  FILES
 | 
			
		||||
    src/ed25519-donna/ed25519.h
 | 
			
		||||
  DESTINATION include/ed25519-donna)
 | 
			
		||||
							
								
								
									
										2170
									
								
								Builds/CMake/deps/FindBoost.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2170
									
								
								Builds/CMake/deps/FindBoost.cmake
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										47
									
								
								Builds/CMake/deps/Findjemalloc.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								Builds/CMake/deps/Findjemalloc.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
			
		||||
# - Try to find jemalloc
 | 
			
		||||
# Once done this will define
 | 
			
		||||
#  JEMALLOC_FOUND - System has jemalloc
 | 
			
		||||
#  JEMALLOC_INCLUDE_DIRS - The jemalloc include directories
 | 
			
		||||
#  JEMALLOC_LIBRARIES - The libraries needed to use jemalloc
 | 
			
		||||
 | 
			
		||||
if(NOT USE_BUNDLED_JEMALLOC)
 | 
			
		||||
  find_package(PkgConfig)
 | 
			
		||||
  if (PKG_CONFIG_FOUND)
 | 
			
		||||
    pkg_check_modules(PC_JEMALLOC QUIET jemalloc)
 | 
			
		||||
  endif()
 | 
			
		||||
else()
 | 
			
		||||
  set(PC_JEMALLOC_INCLUDEDIR)
 | 
			
		||||
  set(PC_JEMALLOC_INCLUDE_DIRS)
 | 
			
		||||
  set(PC_JEMALLOC_LIBDIR)
 | 
			
		||||
  set(PC_JEMALLOC_LIBRARY_DIRS)
 | 
			
		||||
  set(LIMIT_SEARCH NO_DEFAULT_PATH)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
set(JEMALLOC_DEFINITIONS ${PC_JEMALLOC_CFLAGS_OTHER})
 | 
			
		||||
 | 
			
		||||
find_path(JEMALLOC_INCLUDE_DIR jemalloc/jemalloc.h
 | 
			
		||||
          PATHS ${PC_JEMALLOC_INCLUDEDIR} ${PC_JEMALLOC_INCLUDE_DIRS}
 | 
			
		||||
          ${LIMIT_SEARCH})
 | 
			
		||||
 | 
			
		||||
# If we're asked to use static linkage, add libjemalloc.a as a preferred library name.
 | 
			
		||||
if(JEMALLOC_USE_STATIC)
 | 
			
		||||
  list(APPEND JEMALLOC_NAMES
 | 
			
		||||
    "${CMAKE_STATIC_LIBRARY_PREFIX}jemalloc${CMAKE_STATIC_LIBRARY_SUFFIX}")
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
list(APPEND JEMALLOC_NAMES jemalloc)
 | 
			
		||||
 | 
			
		||||
find_library(JEMALLOC_LIBRARY NAMES ${JEMALLOC_NAMES}
 | 
			
		||||
  HINTS ${PC_JEMALLOC_LIBDIR} ${PC_JEMALLOC_LIBRARY_DIRS}
 | 
			
		||||
  ${LIMIT_SEARCH})
 | 
			
		||||
 | 
			
		||||
set(JEMALLOC_LIBRARIES ${JEMALLOC_LIBRARY})
 | 
			
		||||
set(JEMALLOC_INCLUDE_DIRS ${JEMALLOC_INCLUDE_DIR})
 | 
			
		||||
 | 
			
		||||
include(FindPackageHandleStandardArgs)
 | 
			
		||||
# handle the QUIETLY and REQUIRED arguments and set JEMALLOC_FOUND to TRUE
 | 
			
		||||
# if all listed variables are TRUE
 | 
			
		||||
find_package_handle_standard_args(JeMalloc DEFAULT_MSG
 | 
			
		||||
  JEMALLOC_LIBRARY JEMALLOC_INCLUDE_DIR)
 | 
			
		||||
 | 
			
		||||
mark_as_advanced(JEMALLOC_INCLUDE_DIR JEMALLOC_LIBRARY)
 | 
			
		||||
							
								
								
									
										22
									
								
								Builds/CMake/deps/Findlibarchive_pc.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								Builds/CMake/deps/Findlibarchive_pc.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
find_package (PkgConfig REQUIRED)
 | 
			
		||||
pkg_search_module (libarchive_PC QUIET libarchive>=3.4.3)
 | 
			
		||||
 | 
			
		||||
if(static)
 | 
			
		||||
  set(LIBARCHIVE_LIB libarchive.a)
 | 
			
		||||
else()
 | 
			
		||||
  set(LIBARCHIVE_LIB archive)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
find_library (archive
 | 
			
		||||
  NAMES ${LIBARCHIVE_LIB}
 | 
			
		||||
  HINTS
 | 
			
		||||
    ${libarchive_PC_LIBDIR}
 | 
			
		||||
    ${libarchive_PC_LIBRARY_DIRS}
 | 
			
		||||
  NO_DEFAULT_PATH)
 | 
			
		||||
 | 
			
		||||
find_path (LIBARCHIVE_INCLUDE_DIR
 | 
			
		||||
  NAMES archive.h
 | 
			
		||||
  HINTS
 | 
			
		||||
    ${libarchive_PC_INCLUDEDIR}
 | 
			
		||||
    ${libarchive_PC_INCLUDEDIRS}
 | 
			
		||||
  NO_DEFAULT_PATH)
 | 
			
		||||
							
								
								
									
										24
									
								
								Builds/CMake/deps/Findlz4.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								Builds/CMake/deps/Findlz4.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
find_package (PkgConfig)
 | 
			
		||||
if (PKG_CONFIG_FOUND)
 | 
			
		||||
  pkg_search_module (lz4_PC QUIET liblz4>=1.9)
 | 
			
		||||
endif ()
 | 
			
		||||
 | 
			
		||||
if(static)
 | 
			
		||||
  set(LZ4_LIB liblz4.a)
 | 
			
		||||
else()
 | 
			
		||||
  set(LZ4_LIB lz4.so)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
find_library (lz4
 | 
			
		||||
  NAMES ${LZ4_LIB}
 | 
			
		||||
  HINTS
 | 
			
		||||
    ${lz4_PC_LIBDIR}
 | 
			
		||||
    ${lz4_PC_LIBRARY_DIRS}
 | 
			
		||||
  NO_DEFAULT_PATH)
 | 
			
		||||
 | 
			
		||||
find_path (LZ4_INCLUDE_DIR
 | 
			
		||||
  NAMES lz4.h
 | 
			
		||||
  HINTS
 | 
			
		||||
    ${lz4_PC_INCLUDEDIR}
 | 
			
		||||
    ${lz4_PC_INCLUDEDIRS}
 | 
			
		||||
  NO_DEFAULT_PATH)
 | 
			
		||||
							
								
								
									
										24
									
								
								Builds/CMake/deps/Findsecp256k1.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								Builds/CMake/deps/Findsecp256k1.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
find_package (PkgConfig)
 | 
			
		||||
if (PKG_CONFIG_FOUND)
 | 
			
		||||
  pkg_search_module (secp256k1_PC QUIET libsecp256k1)
 | 
			
		||||
endif ()
 | 
			
		||||
 | 
			
		||||
if(static)
 | 
			
		||||
  set(SECP256K1_LIB libsecp256k1.a)
 | 
			
		||||
else()
 | 
			
		||||
  set(SECP256K1_LIB secp256k1)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
find_library(secp256k1
 | 
			
		||||
  NAMES ${SECP256K1_LIB}
 | 
			
		||||
  HINTS
 | 
			
		||||
    ${secp256k1_PC_LIBDIR}
 | 
			
		||||
    ${secp256k1_PC_LIBRARY_PATHS}
 | 
			
		||||
  NO_DEFAULT_PATH)
 | 
			
		||||
 | 
			
		||||
find_path (SECP256K1_INCLUDE_DIR
 | 
			
		||||
  NAMES secp256k1.h
 | 
			
		||||
  HINTS
 | 
			
		||||
    ${secp256k1_PC_INCLUDEDIR}
 | 
			
		||||
    ${secp256k1_PC_INCLUDEDIRS}
 | 
			
		||||
  NO_DEFAULT_PATH)
 | 
			
		||||
							
								
								
									
										24
									
								
								Builds/CMake/deps/Findsnappy.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								Builds/CMake/deps/Findsnappy.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
find_package (PkgConfig)
 | 
			
		||||
if (PKG_CONFIG_FOUND)
 | 
			
		||||
  pkg_search_module (snappy_PC QUIET snappy>=1.1.7)
 | 
			
		||||
endif ()
 | 
			
		||||
 | 
			
		||||
if(static)
 | 
			
		||||
  set(SNAPPY_LIB libsnappy.a)
 | 
			
		||||
else()
 | 
			
		||||
  set(SNAPPY_LIB libsnappy.so)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
find_library (snappy
 | 
			
		||||
  NAMES ${SNAPPY_LIB}
 | 
			
		||||
  HINTS
 | 
			
		||||
    ${snappy_PC_LIBDIR}
 | 
			
		||||
    ${snappy_PC_LIBRARY_DIRS}
 | 
			
		||||
  NO_DEFAULT_PATH)
 | 
			
		||||
 | 
			
		||||
find_path (SNAPPY_INCLUDE_DIR
 | 
			
		||||
  NAMES snappy.h
 | 
			
		||||
  HINTS
 | 
			
		||||
    ${snappy_PC_INCLUDEDIR}
 | 
			
		||||
    ${snappy_PC_INCLUDEDIRS}
 | 
			
		||||
  NO_DEFAULT_PATH)
 | 
			
		||||
							
								
								
									
										17
									
								
								Builds/CMake/deps/Findsoci.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								Builds/CMake/deps/Findsoci.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
find_package (PkgConfig)
 | 
			
		||||
if (PKG_CONFIG_FOUND)
 | 
			
		||||
  # TBD - currently no soci pkgconfig
 | 
			
		||||
  #pkg_search_module (soci_PC QUIET libsoci_core>=3.2)
 | 
			
		||||
endif ()
 | 
			
		||||
 | 
			
		||||
if(static)
 | 
			
		||||
  set(SOCI_LIB libsoci.a)
 | 
			
		||||
else()
 | 
			
		||||
  set(SOCI_LIB libsoci_core.so)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
find_library (soci
 | 
			
		||||
  NAMES ${SOCI_LIB})
 | 
			
		||||
 | 
			
		||||
find_path (SOCI_INCLUDE_DIR
 | 
			
		||||
  NAMES soci/soci.h)
 | 
			
		||||
							
								
								
									
										24
									
								
								Builds/CMake/deps/Findsqlite.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								Builds/CMake/deps/Findsqlite.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
find_package (PkgConfig)
 | 
			
		||||
if (PKG_CONFIG_FOUND)
 | 
			
		||||
  pkg_search_module (sqlite_PC QUIET sqlite3>=3.26.0)
 | 
			
		||||
endif ()
 | 
			
		||||
 | 
			
		||||
if(static)
 | 
			
		||||
  set(SQLITE_LIB libsqlite3.a)
 | 
			
		||||
else()
 | 
			
		||||
  set(SQLITE_LIB sqlite3.so)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
find_library (sqlite3
 | 
			
		||||
  NAMES ${SQLITE_LIB}
 | 
			
		||||
  HINTS
 | 
			
		||||
    ${sqlite_PC_LIBDIR}
 | 
			
		||||
    ${sqlite_PC_LIBRARY_DIRS}
 | 
			
		||||
  NO_DEFAULT_PATH)
 | 
			
		||||
 | 
			
		||||
find_path (SQLITE_INCLUDE_DIR
 | 
			
		||||
  NAMES sqlite3.h
 | 
			
		||||
  HINTS
 | 
			
		||||
    ${sqlite_PC_INCLUDEDIR}
 | 
			
		||||
    ${sqlite_PC_INCLUDEDIRS}
 | 
			
		||||
  NO_DEFAULT_PATH)
 | 
			
		||||
							
								
								
									
										163
									
								
								Builds/CMake/deps/Libarchive.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								Builds/CMake/deps/Libarchive.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,163 @@
 | 
			
		||||
#[===================================================================[
 | 
			
		||||
   NIH dep: libarchive
 | 
			
		||||
#]===================================================================]
 | 
			
		||||
 | 
			
		||||
option (local_libarchive "use local build of libarchive." OFF)
 | 
			
		||||
add_library (archive_lib UNKNOWN IMPORTED GLOBAL)
 | 
			
		||||
 | 
			
		||||
if (NOT local_libarchive)
 | 
			
		||||
  if (NOT WIN32)
 | 
			
		||||
    find_package(libarchive_pc REQUIRED)
 | 
			
		||||
  endif ()
 | 
			
		||||
  if (archive)
 | 
			
		||||
    message (STATUS "Found libarchive using pkg-config. Using ${archive}.")
 | 
			
		||||
    set_target_properties (archive_lib PROPERTIES
 | 
			
		||||
      IMPORTED_LOCATION_DEBUG
 | 
			
		||||
        ${archive}
 | 
			
		||||
      IMPORTED_LOCATION_RELEASE
 | 
			
		||||
        ${archive}
 | 
			
		||||
      INTERFACE_INCLUDE_DIRECTORIES
 | 
			
		||||
        ${LIBARCHIVE_INCLUDE_DIR})
 | 
			
		||||
      # pkg-config can return extra info for static lib linking
 | 
			
		||||
      # this is probably needed/useful generally, but apply
 | 
			
		||||
      # to APPLE for now (mostly for homebrew)
 | 
			
		||||
      if (APPLE AND static AND libarchive_PC_STATIC_LIBRARIES)
 | 
			
		||||
        message(STATUS "NOTE: libarchive static libs: ${libarchive_PC_STATIC_LIBRARIES}")
 | 
			
		||||
        # also, APPLE seems to need iconv...maybe linux does too (TBD)
 | 
			
		||||
        target_link_libraries (archive_lib
 | 
			
		||||
          INTERFACE iconv ${libarchive_PC_STATIC_LIBRARIES})
 | 
			
		||||
      endif ()
 | 
			
		||||
  else ()
 | 
			
		||||
    ## now try searching using the minimal find module that cmake provides
 | 
			
		||||
    find_package(LibArchive 3.4.3 QUIET)
 | 
			
		||||
    if (LibArchive_FOUND)
 | 
			
		||||
      if (static)
 | 
			
		||||
        # find module doesn't find static libs currently, so we re-search
 | 
			
		||||
        get_filename_component(_loc ${LibArchive_LIBRARY} DIRECTORY)
 | 
			
		||||
        find_library(_la_static
 | 
			
		||||
          NAMES libarchive.a archive_static.lib archive.lib
 | 
			
		||||
          PATHS ${_loc})
 | 
			
		||||
        if (_la_static)
 | 
			
		||||
          set (_la_lib ${_la_static})
 | 
			
		||||
        else ()
 | 
			
		||||
          message (WARNING "unable to find libarchive static lib - switching to local build")
 | 
			
		||||
          set (local_libarchive ON CACHE BOOL "" FORCE)
 | 
			
		||||
        endif ()
 | 
			
		||||
      else ()
 | 
			
		||||
        set (_la_lib ${LibArchive_LIBRARY})
 | 
			
		||||
      endif ()
 | 
			
		||||
      if (NOT local_libarchive)
 | 
			
		||||
        message (STATUS "Found libarchive using module/config. Using ${_la_lib}.")
 | 
			
		||||
        set_target_properties (archive_lib PROPERTIES
 | 
			
		||||
          IMPORTED_LOCATION_DEBUG
 | 
			
		||||
            ${_la_lib}
 | 
			
		||||
          IMPORTED_LOCATION_RELEASE
 | 
			
		||||
            ${_la_lib}
 | 
			
		||||
          INTERFACE_INCLUDE_DIRECTORIES
 | 
			
		||||
            ${LibArchive_INCLUDE_DIRS})
 | 
			
		||||
      endif ()
 | 
			
		||||
    else ()
 | 
			
		||||
      set (local_libarchive ON CACHE BOOL "" FORCE)
 | 
			
		||||
    endif ()
 | 
			
		||||
  endif ()
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
if (local_libarchive)
 | 
			
		||||
  set (lib_post "")
 | 
			
		||||
  if (MSVC)
 | 
			
		||||
    set (lib_post "_static")
 | 
			
		||||
  endif ()
 | 
			
		||||
  ExternalProject_Add (libarchive
 | 
			
		||||
    PREFIX ${nih_cache_path}
 | 
			
		||||
    GIT_REPOSITORY https://github.com/libarchive/libarchive.git
 | 
			
		||||
    GIT_TAG v3.4.3
 | 
			
		||||
    CMAKE_ARGS
 | 
			
		||||
      # passing the compiler seems to be needed for windows CI, sadly
 | 
			
		||||
      -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
 | 
			
		||||
      -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
 | 
			
		||||
      $<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:-DCMAKE_VERBOSE_MAKEFILE=ON>
 | 
			
		||||
      -DCMAKE_DEBUG_POSTFIX=_d
 | 
			
		||||
      $<$<NOT:$<BOOL:${is_multiconfig}>>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}>
 | 
			
		||||
      -DENABLE_LZ4=ON
 | 
			
		||||
      -ULZ4_*
 | 
			
		||||
      -DLZ4_INCLUDE_DIR=$<JOIN:$<TARGET_PROPERTY:lz4_lib,INTERFACE_INCLUDE_DIRECTORIES>,::>
 | 
			
		||||
      # because we are building a static lib, this lz4 library doesn't
 | 
			
		||||
      # actually matter since you can't generally link static libs to other static
 | 
			
		||||
      # libs. The include files are needed, but the library itself is not (until
 | 
			
		||||
      # we link our application, at which point we use the lz4 we built above).
 | 
			
		||||
      # nonetheless, we need to provide a library to libarchive else it will
 | 
			
		||||
      # NOT include lz4 support when configuring
 | 
			
		||||
      -DLZ4_LIBRARY=$<IF:$<CONFIG:Debug>,$<TARGET_PROPERTY:lz4_lib,IMPORTED_LOCATION_DEBUG>,$<TARGET_PROPERTY:lz4_lib,IMPORTED_LOCATION_RELEASE>>
 | 
			
		||||
      -DENABLE_WERROR=OFF
 | 
			
		||||
      -DENABLE_TAR=OFF
 | 
			
		||||
      -DENABLE_TAR_SHARED=OFF
 | 
			
		||||
      -DENABLE_INSTALL=ON
 | 
			
		||||
      -DENABLE_NETTLE=OFF
 | 
			
		||||
      -DENABLE_OPENSSL=OFF
 | 
			
		||||
      -DENABLE_LZO=OFF
 | 
			
		||||
      -DENABLE_LZMA=OFF
 | 
			
		||||
      -DENABLE_ZLIB=OFF
 | 
			
		||||
      -DENABLE_BZip2=OFF
 | 
			
		||||
      -DENABLE_LIBXML2=OFF
 | 
			
		||||
      -DENABLE_EXPAT=OFF
 | 
			
		||||
      -DENABLE_PCREPOSIX=OFF
 | 
			
		||||
      -DENABLE_LibGCC=OFF
 | 
			
		||||
      -DENABLE_CNG=OFF
 | 
			
		||||
      -DENABLE_CPIO=OFF
 | 
			
		||||
      -DENABLE_CPIO_SHARED=OFF
 | 
			
		||||
      -DENABLE_CAT=OFF
 | 
			
		||||
      -DENABLE_CAT_SHARED=OFF
 | 
			
		||||
      -DENABLE_XATTR=OFF
 | 
			
		||||
      -DENABLE_ACL=OFF
 | 
			
		||||
      -DENABLE_ICONV=OFF
 | 
			
		||||
      -DENABLE_TEST=OFF
 | 
			
		||||
      -DENABLE_COVERAGE=OFF
 | 
			
		||||
      $<$<BOOL:${MSVC}>:
 | 
			
		||||
        "-DCMAKE_C_FLAGS=-GR -Gd -fp:precise -FS -MP"
 | 
			
		||||
        "-DCMAKE_C_FLAGS_DEBUG=-MTd"
 | 
			
		||||
        "-DCMAKE_C_FLAGS_RELEASE=-MT"
 | 
			
		||||
      >
 | 
			
		||||
    LIST_SEPARATOR ::
 | 
			
		||||
    LOG_BUILD ON
 | 
			
		||||
    LOG_CONFIGURE ON
 | 
			
		||||
    BUILD_COMMAND
 | 
			
		||||
      ${CMAKE_COMMAND}
 | 
			
		||||
      --build .
 | 
			
		||||
      --config $<CONFIG>
 | 
			
		||||
      --target archive_static
 | 
			
		||||
      --parallel ${ep_procs}
 | 
			
		||||
      $<$<BOOL:${is_multiconfig}>:
 | 
			
		||||
        COMMAND
 | 
			
		||||
          ${CMAKE_COMMAND} -E copy
 | 
			
		||||
            <BINARY_DIR>/libarchive/$<CONFIG>/${ep_lib_prefix}archive${lib_post}$<$<CONFIG:Debug>:_d>${ep_lib_suffix}
 | 
			
		||||
            <BINARY_DIR>/libarchive
 | 
			
		||||
        >
 | 
			
		||||
    TEST_COMMAND ""
 | 
			
		||||
    INSTALL_COMMAND ""
 | 
			
		||||
    DEPENDS lz4_lib
 | 
			
		||||
    BUILD_BYPRODUCTS
 | 
			
		||||
      <BINARY_DIR>/libarchive/${ep_lib_prefix}archive${lib_post}${ep_lib_suffix}
 | 
			
		||||
      <BINARY_DIR>/libarchive/${ep_lib_prefix}archive${lib_post}_d${ep_lib_suffix}
 | 
			
		||||
  )
 | 
			
		||||
  ExternalProject_Get_Property (libarchive BINARY_DIR)
 | 
			
		||||
  ExternalProject_Get_Property (libarchive SOURCE_DIR)
 | 
			
		||||
  if (CMAKE_VERBOSE_MAKEFILE)
 | 
			
		||||
    print_ep_logs (libarchive)
 | 
			
		||||
  endif ()
 | 
			
		||||
  file (MAKE_DIRECTORY ${SOURCE_DIR}/libarchive)
 | 
			
		||||
  set_target_properties (archive_lib PROPERTIES
 | 
			
		||||
    IMPORTED_LOCATION_DEBUG
 | 
			
		||||
      ${BINARY_DIR}/libarchive/${ep_lib_prefix}archive${lib_post}_d${ep_lib_suffix}
 | 
			
		||||
    IMPORTED_LOCATION_RELEASE
 | 
			
		||||
      ${BINARY_DIR}/libarchive/${ep_lib_prefix}archive${lib_post}${ep_lib_suffix}
 | 
			
		||||
    INTERFACE_INCLUDE_DIRECTORIES
 | 
			
		||||
      ${SOURCE_DIR}/libarchive
 | 
			
		||||
    INTERFACE_COMPILE_DEFINITIONS
 | 
			
		||||
      LIBARCHIVE_STATIC)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
add_dependencies (archive_lib libarchive)
 | 
			
		||||
target_link_libraries (archive_lib INTERFACE lz4_lib)
 | 
			
		||||
target_link_libraries (ripple_libs INTERFACE archive_lib)
 | 
			
		||||
exclude_if_included (libarchive)
 | 
			
		||||
exclude_if_included (archive_lib)
 | 
			
		||||
							
								
								
									
										79
									
								
								Builds/CMake/deps/Lz4.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								Builds/CMake/deps/Lz4.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,79 @@
 | 
			
		||||
#[===================================================================[
 | 
			
		||||
   NIH dep: lz4
 | 
			
		||||
#]===================================================================]
 | 
			
		||||
 | 
			
		||||
add_library (lz4_lib STATIC IMPORTED GLOBAL)
 | 
			
		||||
 | 
			
		||||
if (NOT WIN32)
 | 
			
		||||
  find_package(lz4)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
if(lz4)
 | 
			
		||||
  set_target_properties (lz4_lib PROPERTIES
 | 
			
		||||
    IMPORTED_LOCATION_DEBUG
 | 
			
		||||
      ${lz4}
 | 
			
		||||
    IMPORTED_LOCATION_RELEASE
 | 
			
		||||
      ${lz4}
 | 
			
		||||
    INTERFACE_INCLUDE_DIRECTORIES
 | 
			
		||||
      ${LZ4_INCLUDE_DIR})
 | 
			
		||||
 | 
			
		||||
else()
 | 
			
		||||
  ExternalProject_Add (lz4
 | 
			
		||||
    PREFIX ${nih_cache_path}
 | 
			
		||||
    GIT_REPOSITORY https://github.com/lz4/lz4.git
 | 
			
		||||
    GIT_TAG v1.9.2
 | 
			
		||||
    SOURCE_SUBDIR contrib/cmake_unofficial
 | 
			
		||||
    CMAKE_ARGS
 | 
			
		||||
      -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
 | 
			
		||||
      -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
 | 
			
		||||
      $<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:-DCMAKE_VERBOSE_MAKEFILE=ON>
 | 
			
		||||
      -DCMAKE_DEBUG_POSTFIX=_d
 | 
			
		||||
      $<$<NOT:$<BOOL:${is_multiconfig}>>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}>
 | 
			
		||||
      -DBUILD_STATIC_LIBS=ON
 | 
			
		||||
      -DBUILD_SHARED_LIBS=OFF
 | 
			
		||||
      $<$<BOOL:${MSVC}>:
 | 
			
		||||
        "-DCMAKE_C_FLAGS=-GR -Gd -fp:precise -FS -MP"
 | 
			
		||||
        "-DCMAKE_C_FLAGS_DEBUG=-MTd"
 | 
			
		||||
        "-DCMAKE_C_FLAGS_RELEASE=-MT"
 | 
			
		||||
      >
 | 
			
		||||
    LOG_BUILD ON
 | 
			
		||||
    LOG_CONFIGURE ON
 | 
			
		||||
    BUILD_COMMAND
 | 
			
		||||
      ${CMAKE_COMMAND}
 | 
			
		||||
      --build .
 | 
			
		||||
      --config $<CONFIG>
 | 
			
		||||
      --target lz4_static
 | 
			
		||||
      --parallel ${ep_procs}
 | 
			
		||||
      $<$<BOOL:${is_multiconfig}>:
 | 
			
		||||
        COMMAND
 | 
			
		||||
          ${CMAKE_COMMAND} -E copy
 | 
			
		||||
          <BINARY_DIR>/$<CONFIG>/${ep_lib_prefix}lz4$<$<CONFIG:Debug>:_d>${ep_lib_suffix}
 | 
			
		||||
          <BINARY_DIR>
 | 
			
		||||
        >
 | 
			
		||||
    TEST_COMMAND ""
 | 
			
		||||
    INSTALL_COMMAND ""
 | 
			
		||||
    BUILD_BYPRODUCTS
 | 
			
		||||
      <BINARY_DIR>/${ep_lib_prefix}lz4${ep_lib_suffix}
 | 
			
		||||
      <BINARY_DIR>/${ep_lib_prefix}lz4_d${ep_lib_suffix}
 | 
			
		||||
  )
 | 
			
		||||
  ExternalProject_Get_Property (lz4 BINARY_DIR)
 | 
			
		||||
  ExternalProject_Get_Property (lz4 SOURCE_DIR)
 | 
			
		||||
 | 
			
		||||
  file (MAKE_DIRECTORY ${SOURCE_DIR}/lz4)
 | 
			
		||||
  set_target_properties (lz4_lib PROPERTIES
 | 
			
		||||
    IMPORTED_LOCATION_DEBUG
 | 
			
		||||
      ${BINARY_DIR}/${ep_lib_prefix}lz4_d${ep_lib_suffix}
 | 
			
		||||
    IMPORTED_LOCATION_RELEASE
 | 
			
		||||
      ${BINARY_DIR}/${ep_lib_prefix}lz4${ep_lib_suffix}
 | 
			
		||||
    INTERFACE_INCLUDE_DIRECTORIES
 | 
			
		||||
      ${SOURCE_DIR}/lib)
 | 
			
		||||
 | 
			
		||||
  if (CMAKE_VERBOSE_MAKEFILE)
 | 
			
		||||
    print_ep_logs (lz4)
 | 
			
		||||
  endif ()
 | 
			
		||||
  add_dependencies (lz4_lib lz4)
 | 
			
		||||
  target_link_libraries (ripple_libs INTERFACE lz4_lib)
 | 
			
		||||
  exclude_if_included (lz4)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
exclude_if_included (lz4_lib)
 | 
			
		||||
							
								
								
									
										31
									
								
								Builds/CMake/deps/Nudb.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								Builds/CMake/deps/Nudb.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
#[===================================================================[
 | 
			
		||||
   NIH dep: nudb
 | 
			
		||||
 | 
			
		||||
   NuDB is header-only, thus is an INTERFACE lib in CMake.
 | 
			
		||||
   TODO: move the library definition into NuDB repo and add
 | 
			
		||||
   proper targets and export/install
 | 
			
		||||
#]===================================================================]
 | 
			
		||||
 | 
			
		||||
if (is_root_project) # NuDB not needed in the case of xrpl_core inclusion build
 | 
			
		||||
  add_library (nudb INTERFACE)
 | 
			
		||||
  FetchContent_Declare(
 | 
			
		||||
    nudb_src
 | 
			
		||||
    GIT_REPOSITORY https://github.com/CPPAlliance/NuDB.git
 | 
			
		||||
    GIT_TAG        2.0.5
 | 
			
		||||
  )
 | 
			
		||||
  FetchContent_GetProperties(nudb_src)
 | 
			
		||||
  if(NOT nudb_src_POPULATED)
 | 
			
		||||
    message (STATUS "Pausing to download NuDB...")
 | 
			
		||||
    FetchContent_Populate(nudb_src)
 | 
			
		||||
  endif()
 | 
			
		||||
 | 
			
		||||
  file(TO_CMAKE_PATH "${nudb_src_SOURCE_DIR}" nudb_src_SOURCE_DIR)
 | 
			
		||||
  # specify as system includes so as to avoid warnings
 | 
			
		||||
  target_include_directories (nudb SYSTEM INTERFACE ${nudb_src_SOURCE_DIR}/include)
 | 
			
		||||
  target_link_libraries (nudb
 | 
			
		||||
    INTERFACE
 | 
			
		||||
      Boost::thread
 | 
			
		||||
      Boost::system)
 | 
			
		||||
  add_library (NIH::nudb ALIAS nudb)
 | 
			
		||||
  target_link_libraries (ripple_libs INTERFACE NIH::nudb)
 | 
			
		||||
endif ()
 | 
			
		||||
							
								
								
									
										48
									
								
								Builds/CMake/deps/OpenSSL.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								Builds/CMake/deps/OpenSSL.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
#[===================================================================[
 | 
			
		||||
   NIH dep: openssl
 | 
			
		||||
#]===================================================================]
 | 
			
		||||
 | 
			
		||||
#[===============================================[
 | 
			
		||||
  OPENSSL_ROOT_DIR is the only variable that
 | 
			
		||||
  FindOpenSSL honors for locating, so convert any
 | 
			
		||||
  OPENSSL_ROOT vars to this
 | 
			
		||||
#]===============================================]
 | 
			
		||||
if (NOT DEFINED OPENSSL_ROOT_DIR)
 | 
			
		||||
  if (DEFINED ENV{OPENSSL_ROOT})
 | 
			
		||||
    set (OPENSSL_ROOT_DIR $ENV{OPENSSL_ROOT})
 | 
			
		||||
  elseif (HOMEBREW)
 | 
			
		||||
    execute_process (COMMAND ${HOMEBREW} --prefix openssl
 | 
			
		||||
      OUTPUT_VARIABLE OPENSSL_ROOT_DIR
 | 
			
		||||
      OUTPUT_STRIP_TRAILING_WHITESPACE)
 | 
			
		||||
  endif ()
 | 
			
		||||
  file (TO_CMAKE_PATH "${OPENSSL_ROOT_DIR}" OPENSSL_ROOT_DIR)
 | 
			
		||||
endif ()
 | 
			
		||||
 | 
			
		||||
if (static)
 | 
			
		||||
  set (OPENSSL_USE_STATIC_LIBS ON)
 | 
			
		||||
endif ()
 | 
			
		||||
set (OPENSSL_MSVC_STATIC_RT ON)
 | 
			
		||||
find_package (OpenSSL 1.1.1 REQUIRED)
 | 
			
		||||
target_link_libraries (ripple_libs
 | 
			
		||||
  INTERFACE
 | 
			
		||||
    OpenSSL::SSL
 | 
			
		||||
    OpenSSL::Crypto)
 | 
			
		||||
# disable SSLv2...this can also be done when building/configuring OpenSSL
 | 
			
		||||
set_target_properties(OpenSSL::SSL PROPERTIES
 | 
			
		||||
    INTERFACE_COMPILE_DEFINITIONS OPENSSL_NO_SSL2)
 | 
			
		||||
#[=========================================================[
 | 
			
		||||
   https://gitlab.kitware.com/cmake/cmake/issues/16885
 | 
			
		||||
   depending on how openssl is built, it might depend
 | 
			
		||||
   on zlib. In fact, the openssl find package should
 | 
			
		||||
   figure this out for us, but it does not currently...
 | 
			
		||||
   so let's add zlib ourselves to the lib list
 | 
			
		||||
   TODO: investigate linking to static zlib for static
 | 
			
		||||
   build option
 | 
			
		||||
#]=========================================================]
 | 
			
		||||
find_package (ZLIB)
 | 
			
		||||
set (has_zlib FALSE)
 | 
			
		||||
if (TARGET ZLIB::ZLIB)
 | 
			
		||||
  set_target_properties(OpenSSL::Crypto PROPERTIES
 | 
			
		||||
    INTERFACE_LINK_LIBRARIES ZLIB::ZLIB)
 | 
			
		||||
  set (has_zlib TRUE)
 | 
			
		||||
endif ()
 | 
			
		||||
							
								
								
									
										70
									
								
								Builds/CMake/deps/Postgres.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								Builds/CMake/deps/Postgres.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,70 @@
 | 
			
		||||
if(reporting)
 | 
			
		||||
    find_package(PostgreSQL)
 | 
			
		||||
    if(NOT PostgreSQL_FOUND)
 | 
			
		||||
        message("find_package did not find postgres")
 | 
			
		||||
        find_library(postgres NAMES pq libpq libpq-dev pq-dev postgresql-devel)
 | 
			
		||||
        find_path(libpq-fe NAMES libpq-fe.h PATH_SUFFIXES postgresql pgsql include)
 | 
			
		||||
 | 
			
		||||
        if(NOT libpq-fe_FOUND OR NOT postgres_FOUND)
 | 
			
		||||
            message("No system installed Postgres found. Will build")
 | 
			
		||||
            add_library(postgres SHARED IMPORTED GLOBAL)
 | 
			
		||||
            add_library(pgport SHARED IMPORTED GLOBAL)
 | 
			
		||||
            add_library(pgcommon SHARED IMPORTED GLOBAL)
 | 
			
		||||
            ExternalProject_Add(postgres_src
 | 
			
		||||
                PREFIX ${nih_cache_path}
 | 
			
		||||
                GIT_REPOSITORY https://github.com/postgres/postgres.git
 | 
			
		||||
                GIT_TAG REL_14_5
 | 
			
		||||
                CONFIGURE_COMMAND ./configure --without-readline > /dev/null
 | 
			
		||||
                BUILD_COMMAND ${CMAKE_COMMAND} -E env --unset=MAKELEVEL make
 | 
			
		||||
                UPDATE_COMMAND ""
 | 
			
		||||
                BUILD_IN_SOURCE 1
 | 
			
		||||
                INSTALL_COMMAND ""
 | 
			
		||||
                BUILD_BYPRODUCTS
 | 
			
		||||
                    <BINARY_DIR>/src/interfaces/libpq/${ep_lib_prefix}pq.a
 | 
			
		||||
                    <BINARY_DIR>/src/common/${ep_lib_prefix}pgcommon.a
 | 
			
		||||
                    <BINARY_DIR>/src/port/${ep_lib_prefix}pgport.a
 | 
			
		||||
                LOG_BUILD TRUE
 | 
			
		||||
                )
 | 
			
		||||
            ExternalProject_Get_Property (postgres_src SOURCE_DIR)
 | 
			
		||||
            ExternalProject_Get_Property (postgres_src BINARY_DIR)
 | 
			
		||||
 | 
			
		||||
            set (postgres_src_SOURCE_DIR "${SOURCE_DIR}")
 | 
			
		||||
            file (MAKE_DIRECTORY ${postgres_src_SOURCE_DIR})
 | 
			
		||||
            list(APPEND INCLUDE_DIRS
 | 
			
		||||
                ${SOURCE_DIR}/src/include
 | 
			
		||||
                ${SOURCE_DIR}/src/interfaces/libpq
 | 
			
		||||
                )
 | 
			
		||||
            set_target_properties(postgres PROPERTIES
 | 
			
		||||
                IMPORTED_LOCATION
 | 
			
		||||
                    ${BINARY_DIR}/src/interfaces/libpq/${ep_lib_prefix}pq.a
 | 
			
		||||
                INTERFACE_INCLUDE_DIRECTORIES
 | 
			
		||||
                    "${INCLUDE_DIRS}"
 | 
			
		||||
                )
 | 
			
		||||
            set_target_properties(pgcommon PROPERTIES
 | 
			
		||||
                IMPORTED_LOCATION
 | 
			
		||||
                    ${BINARY_DIR}/src/common/${ep_lib_prefix}pgcommon.a
 | 
			
		||||
                INTERFACE_INCLUDE_DIRECTORIES
 | 
			
		||||
                    "${INCLUDE_DIRS}"
 | 
			
		||||
                )
 | 
			
		||||
            set_target_properties(pgport PROPERTIES
 | 
			
		||||
                IMPORTED_LOCATION
 | 
			
		||||
                    ${BINARY_DIR}/src/port/${ep_lib_prefix}pgport.a
 | 
			
		||||
                INTERFACE_INCLUDE_DIRECTORIES
 | 
			
		||||
                    "${INCLUDE_DIRS}"
 | 
			
		||||
                )
 | 
			
		||||
            add_dependencies(postgres postgres_src)
 | 
			
		||||
            add_dependencies(pgcommon postgres_src)
 | 
			
		||||
            add_dependencies(pgport postgres_src)
 | 
			
		||||
            file(TO_CMAKE_PATH "${postgres_src_SOURCE_DIR}" postgres_src_SOURCE_DIR)
 | 
			
		||||
            target_link_libraries(ripple_libs INTERFACE postgres pgcommon pgport)
 | 
			
		||||
        else()
 | 
			
		||||
            message("Found system installed Postgres via find_libary")
 | 
			
		||||
            target_include_directories(ripple_libs INTERFACE ${libpq-fe})
 | 
			
		||||
            target_link_libraries(ripple_libs INTERFACE ${postgres})
 | 
			
		||||
        endif()
 | 
			
		||||
    else()
 | 
			
		||||
        message("Found system installed Postgres via find_package")
 | 
			
		||||
        target_include_directories(ripple_libs INTERFACE ${PostgreSQL_INCLUDE_DIRS})
 | 
			
		||||
        target_link_libraries(ripple_libs INTERFACE ${PostgreSQL_LIBRARIES})
 | 
			
		||||
    endif()
 | 
			
		||||
endif()
 | 
			
		||||
@@ -1,22 +1,155 @@
 | 
			
		||||
#[===================================================================[
 | 
			
		||||
   import protobuf (lib and compiler) and create a lib
 | 
			
		||||
   from our proto message definitions. If the system protobuf
 | 
			
		||||
   is not found, fallback on EP to download and build a version
 | 
			
		||||
   from official source.
 | 
			
		||||
#]===================================================================]
 | 
			
		||||
 | 
			
		||||
if (static)
 | 
			
		||||
  set (Protobuf_USE_STATIC_LIBS ON)
 | 
			
		||||
endif ()
 | 
			
		||||
find_package (Protobuf 3.8)
 | 
			
		||||
if (is_multiconfig)
 | 
			
		||||
    set(protobuf_protoc_lib ${Protobuf_PROTOC_LIBRARIES})
 | 
			
		||||
else ()
 | 
			
		||||
    string(TOUPPER ${CMAKE_BUILD_TYPE} upper_cmake_build_type)
 | 
			
		||||
    set(protobuf_protoc_lib ${Protobuf_PROTOC_LIBRARY_${upper_cmake_build_type}})
 | 
			
		||||
endif ()
 | 
			
		||||
if (local_protobuf OR NOT (Protobuf_FOUND AND Protobuf_PROTOC_EXECUTABLE AND protobuf_protoc_lib))
 | 
			
		||||
  include (GNUInstallDirs)
 | 
			
		||||
  message (STATUS "using local protobuf build.")
 | 
			
		||||
  set(protobuf_reqs Protobuf_PROTOC_EXECUTABLE protobuf_protoc_lib)
 | 
			
		||||
  foreach(lib ${protobuf_reqs})
 | 
			
		||||
    if(NOT ${lib})
 | 
			
		||||
      message(STATUS "Couldn't find ${lib}")
 | 
			
		||||
    endif()
 | 
			
		||||
  endforeach()
 | 
			
		||||
  if (WIN32)
 | 
			
		||||
    # protobuf prepends lib even on windows
 | 
			
		||||
    set (pbuf_lib_pre "lib")
 | 
			
		||||
  else ()
 | 
			
		||||
    set (pbuf_lib_pre ${ep_lib_prefix})
 | 
			
		||||
  endif ()
 | 
			
		||||
  # for the external project build of protobuf, we currently ignore the
 | 
			
		||||
  # static option and always build static libs here. This is consistent
 | 
			
		||||
  # with our other EP builds. Dynamic libs in an EP would add complexity
 | 
			
		||||
  # because we'd need to get them into the runtime path, and probably
 | 
			
		||||
  # install them.
 | 
			
		||||
  ExternalProject_Add (protobuf_src
 | 
			
		||||
    PREFIX ${nih_cache_path}
 | 
			
		||||
    GIT_REPOSITORY https://github.com/protocolbuffers/protobuf.git
 | 
			
		||||
    GIT_TAG v3.8.0
 | 
			
		||||
    SOURCE_SUBDIR cmake
 | 
			
		||||
    CMAKE_ARGS
 | 
			
		||||
      -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
 | 
			
		||||
      -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
 | 
			
		||||
      -DCMAKE_INSTALL_PREFIX=<BINARY_DIR>/_installed_
 | 
			
		||||
      -Dprotobuf_BUILD_TESTS=OFF
 | 
			
		||||
      -Dprotobuf_BUILD_EXAMPLES=OFF
 | 
			
		||||
      -Dprotobuf_BUILD_PROTOC_BINARIES=ON
 | 
			
		||||
      -Dprotobuf_MSVC_STATIC_RUNTIME=ON
 | 
			
		||||
      -DBUILD_SHARED_LIBS=OFF
 | 
			
		||||
      -Dprotobuf_BUILD_SHARED_LIBS=OFF
 | 
			
		||||
      -DCMAKE_DEBUG_POSTFIX=_d
 | 
			
		||||
      -Dprotobuf_DEBUG_POSTFIX=_d
 | 
			
		||||
      -Dprotobuf_WITH_ZLIB=$<IF:$<BOOL:${has_zlib}>,ON,OFF>
 | 
			
		||||
      $<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:-DCMAKE_VERBOSE_MAKEFILE=ON>
 | 
			
		||||
      $<$<BOOL:${unity}>:-DCMAKE_UNITY_BUILD=ON}>
 | 
			
		||||
      $<$<NOT:$<BOOL:${is_multiconfig}>>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}>
 | 
			
		||||
      $<$<BOOL:${MSVC}>:
 | 
			
		||||
	"-DCMAKE_CXX_FLAGS=-GR -Gd -fp:precise -FS -EHa -MP"
 | 
			
		||||
      >
 | 
			
		||||
    LOG_BUILD ON
 | 
			
		||||
    LOG_CONFIGURE ON
 | 
			
		||||
    BUILD_COMMAND
 | 
			
		||||
      ${CMAKE_COMMAND}
 | 
			
		||||
      --build .
 | 
			
		||||
      --config $<CONFIG>
 | 
			
		||||
      --parallel ${ep_procs}
 | 
			
		||||
    TEST_COMMAND ""
 | 
			
		||||
    INSTALL_COMMAND
 | 
			
		||||
      ${CMAKE_COMMAND} -E env --unset=DESTDIR ${CMAKE_COMMAND} --build . --config $<CONFIG> --target install
 | 
			
		||||
    BUILD_BYPRODUCTS
 | 
			
		||||
      <BINARY_DIR>/_installed_/${CMAKE_INSTALL_LIBDIR}/${pbuf_lib_pre}protobuf${ep_lib_suffix}
 | 
			
		||||
      <BINARY_DIR>/_installed_/${CMAKE_INSTALL_LIBDIR}/${pbuf_lib_pre}protobuf_d${ep_lib_suffix}
 | 
			
		||||
      <BINARY_DIR>/_installed_/${CMAKE_INSTALL_LIBDIR}/${pbuf_lib_pre}protoc${ep_lib_suffix}
 | 
			
		||||
      <BINARY_DIR>/_installed_/${CMAKE_INSTALL_LIBDIR}/${pbuf_lib_pre}protoc_d${ep_lib_suffix}
 | 
			
		||||
      <BINARY_DIR>/_installed_/bin/protoc${CMAKE_EXECUTABLE_SUFFIX}
 | 
			
		||||
  )
 | 
			
		||||
  ExternalProject_Get_Property (protobuf_src BINARY_DIR)
 | 
			
		||||
  ExternalProject_Get_Property (protobuf_src SOURCE_DIR)
 | 
			
		||||
  if (CMAKE_VERBOSE_MAKEFILE)
 | 
			
		||||
    print_ep_logs (protobuf_src)
 | 
			
		||||
  endif ()
 | 
			
		||||
  exclude_if_included (protobuf_src)
 | 
			
		||||
 | 
			
		||||
  if (NOT TARGET protobuf::libprotobuf)
 | 
			
		||||
    add_library (protobuf::libprotobuf STATIC IMPORTED GLOBAL)
 | 
			
		||||
  endif ()
 | 
			
		||||
  file (MAKE_DIRECTORY ${BINARY_DIR}/_installed_/include)
 | 
			
		||||
  set_target_properties (protobuf::libprotobuf PROPERTIES
 | 
			
		||||
    IMPORTED_LOCATION_DEBUG
 | 
			
		||||
      ${BINARY_DIR}/_installed_/${CMAKE_INSTALL_LIBDIR}/${pbuf_lib_pre}protobuf_d${ep_lib_suffix}
 | 
			
		||||
    IMPORTED_LOCATION_RELEASE
 | 
			
		||||
      ${BINARY_DIR}/_installed_/${CMAKE_INSTALL_LIBDIR}/${pbuf_lib_pre}protobuf${ep_lib_suffix}
 | 
			
		||||
    INTERFACE_INCLUDE_DIRECTORIES
 | 
			
		||||
      ${BINARY_DIR}/_installed_/include)
 | 
			
		||||
  add_dependencies (protobuf::libprotobuf protobuf_src)
 | 
			
		||||
  exclude_if_included (protobuf::libprotobuf)
 | 
			
		||||
 | 
			
		||||
  if (NOT TARGET protobuf::libprotoc)
 | 
			
		||||
    add_library (protobuf::libprotoc STATIC IMPORTED GLOBAL)
 | 
			
		||||
  endif ()
 | 
			
		||||
  set_target_properties (protobuf::libprotoc PROPERTIES
 | 
			
		||||
    IMPORTED_LOCATION_DEBUG
 | 
			
		||||
      ${BINARY_DIR}/_installed_/${CMAKE_INSTALL_LIBDIR}/${pbuf_lib_pre}protoc_d${ep_lib_suffix}
 | 
			
		||||
    IMPORTED_LOCATION_RELEASE
 | 
			
		||||
      ${BINARY_DIR}/_installed_/${CMAKE_INSTALL_LIBDIR}/${pbuf_lib_pre}protoc${ep_lib_suffix}
 | 
			
		||||
    INTERFACE_INCLUDE_DIRECTORIES
 | 
			
		||||
      ${BINARY_DIR}/_installed_/include)
 | 
			
		||||
  add_dependencies (protobuf::libprotoc protobuf_src)
 | 
			
		||||
  exclude_if_included (protobuf::libprotoc)
 | 
			
		||||
 | 
			
		||||
  if (NOT TARGET protobuf::protoc)
 | 
			
		||||
    add_executable (protobuf::protoc IMPORTED)
 | 
			
		||||
    exclude_if_included (protobuf::protoc)
 | 
			
		||||
  endif ()
 | 
			
		||||
  set_target_properties (protobuf::protoc PROPERTIES
 | 
			
		||||
    IMPORTED_LOCATION "${BINARY_DIR}/_installed_/bin/protoc${CMAKE_EXECUTABLE_SUFFIX}")
 | 
			
		||||
  add_dependencies (protobuf::protoc protobuf_src)
 | 
			
		||||
else ()
 | 
			
		||||
  if (NOT TARGET protobuf::protoc)
 | 
			
		||||
    if (EXISTS "${Protobuf_PROTOC_EXECUTABLE}")
 | 
			
		||||
      add_executable (protobuf::protoc IMPORTED)
 | 
			
		||||
      set_target_properties (protobuf::protoc PROPERTIES
 | 
			
		||||
        IMPORTED_LOCATION "${Protobuf_PROTOC_EXECUTABLE}")
 | 
			
		||||
    else ()
 | 
			
		||||
      message (FATAL_ERROR "Protobuf import failed")
 | 
			
		||||
    endif ()
 | 
			
		||||
  endif ()
 | 
			
		||||
endif ()
 | 
			
		||||
 | 
			
		||||
file (MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/proto_gen)
 | 
			
		||||
set(ccbd ${CMAKE_CURRENT_BINARY_DIR})
 | 
			
		||||
set (save_CBD ${CMAKE_CURRENT_BINARY_DIR})
 | 
			
		||||
set (CMAKE_CURRENT_BINARY_DIR ${CMAKE_BINARY_DIR}/proto_gen)
 | 
			
		||||
protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS src/ripple/proto/ripple.proto)
 | 
			
		||||
set(CMAKE_CURRENT_BINARY_DIR ${ccbd})
 | 
			
		||||
protobuf_generate_cpp (
 | 
			
		||||
  PROTO_SRCS
 | 
			
		||||
  PROTO_HDRS
 | 
			
		||||
  src/ripple/proto/ripple.proto)
 | 
			
		||||
set (CMAKE_CURRENT_BINARY_DIR ${save_CBD})
 | 
			
		||||
 | 
			
		||||
add_library (pbufs STATIC ${PROTO_SRCS} ${PROTO_HDRS})
 | 
			
		||||
target_include_directories(pbufs SYSTEM PUBLIC
 | 
			
		||||
  ${CMAKE_BINARY_DIR}/proto_gen
 | 
			
		||||
  ${CMAKE_BINARY_DIR}/proto_gen/src/ripple/proto
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
target_include_directories (pbufs PRIVATE src)
 | 
			
		||||
target_include_directories (pbufs
 | 
			
		||||
  SYSTEM PUBLIC ${CMAKE_BINARY_DIR}/proto_gen)
 | 
			
		||||
target_link_libraries (pbufs protobuf::libprotobuf)
 | 
			
		||||
target_compile_options (pbufs
 | 
			
		||||
  PUBLIC
 | 
			
		||||
    $<$<BOOL:${XCODE}>:
 | 
			
		||||
    $<$<BOOL:${is_xcode}>:
 | 
			
		||||
      --system-header-prefix="google/protobuf"
 | 
			
		||||
      -Wno-deprecated-dynamic-exception-spec
 | 
			
		||||
    >
 | 
			
		||||
)
 | 
			
		||||
    >)
 | 
			
		||||
add_library (Ripple::pbufs ALIAS pbufs)
 | 
			
		||||
target_link_libraries (ripple_libs INTERFACE Ripple::pbufs)
 | 
			
		||||
exclude_if_included (pbufs)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										177
									
								
								Builds/CMake/deps/Rocksdb.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										177
									
								
								Builds/CMake/deps/Rocksdb.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,177 @@
 | 
			
		||||
#[===================================================================[
 | 
			
		||||
   NIH dep: rocksdb
 | 
			
		||||
#]===================================================================]
 | 
			
		||||
 | 
			
		||||
add_library (rocksdb_lib UNKNOWN IMPORTED GLOBAL)
 | 
			
		||||
set_target_properties (rocksdb_lib
 | 
			
		||||
  PROPERTIES INTERFACE_COMPILE_DEFINITIONS RIPPLE_ROCKSDB_AVAILABLE=1)
 | 
			
		||||
 | 
			
		||||
option (local_rocksdb "use local build of rocksdb." OFF)
 | 
			
		||||
if (NOT local_rocksdb)
 | 
			
		||||
  find_package (RocksDB 6.27 QUIET CONFIG)
 | 
			
		||||
  if (TARGET RocksDB::rocksdb)
 | 
			
		||||
    message (STATUS "Found RocksDB using config.")
 | 
			
		||||
    get_target_property (_rockslib_l RocksDB::rocksdb IMPORTED_LOCATION_DEBUG)
 | 
			
		||||
    if (_rockslib_l)
 | 
			
		||||
      set_target_properties (rocksdb_lib PROPERTIES IMPORTED_LOCATION_DEBUG ${_rockslib_l})
 | 
			
		||||
    endif ()
 | 
			
		||||
    get_target_property (_rockslib_l RocksDB::rocksdb IMPORTED_LOCATION_RELEASE)
 | 
			
		||||
    if (_rockslib_l)
 | 
			
		||||
      set_target_properties (rocksdb_lib PROPERTIES IMPORTED_LOCATION_RELEASE ${_rockslib_l})
 | 
			
		||||
    endif ()
 | 
			
		||||
    get_target_property (_rockslib_l RocksDB::rocksdb IMPORTED_LOCATION)
 | 
			
		||||
    if (_rockslib_l)
 | 
			
		||||
      set_target_properties (rocksdb_lib PROPERTIES IMPORTED_LOCATION ${_rockslib_l})
 | 
			
		||||
    endif ()
 | 
			
		||||
    get_target_property (_rockslib_i RocksDB::rocksdb INTERFACE_INCLUDE_DIRECTORIES)
 | 
			
		||||
    if (_rockslib_i)
 | 
			
		||||
      set_target_properties (rocksdb_lib PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${_rockslib_i})
 | 
			
		||||
    endif ()
 | 
			
		||||
    target_link_libraries (ripple_libs INTERFACE RocksDB::rocksdb)
 | 
			
		||||
  else ()
 | 
			
		||||
    # using a find module with rocksdb is difficult because
 | 
			
		||||
    # you have no idea how it was configured (transitive dependencies).
 | 
			
		||||
    # the code below will generally find rocksdb using the module, but
 | 
			
		||||
    # will then result in linker errors for static linkage since the
 | 
			
		||||
    # transitive dependencies are unknown. force local build here for now, but leave the code as
 | 
			
		||||
    # a placeholder for future investigation.
 | 
			
		||||
    if (static)
 | 
			
		||||
      set (local_rocksdb ON CACHE BOOL "" FORCE)
 | 
			
		||||
      # TBD if there is some way to extract transitive deps..then:
 | 
			
		||||
      #set (RocksDB_USE_STATIC ON)
 | 
			
		||||
    else ()
 | 
			
		||||
      find_package (RocksDB 6.27 MODULE)
 | 
			
		||||
      if (ROCKSDB_FOUND)
 | 
			
		||||
        if (RocksDB_LIBRARY_DEBUG)
 | 
			
		||||
          set_target_properties (rocksdb_lib PROPERTIES IMPORTED_LOCATION_DEBUG ${RocksDB_LIBRARY_DEBUG})
 | 
			
		||||
        endif ()
 | 
			
		||||
        set_target_properties (rocksdb_lib PROPERTIES IMPORTED_LOCATION_RELEASE ${RocksDB_LIBRARIES})
 | 
			
		||||
        set_target_properties (rocksdb_lib PROPERTIES IMPORTED_LOCATION ${RocksDB_LIBRARIES})
 | 
			
		||||
        set_target_properties (rocksdb_lib PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${RocksDB_INCLUDE_DIRS})
 | 
			
		||||
      else ()
 | 
			
		||||
        set (local_rocksdb ON CACHE BOOL "" FORCE)
 | 
			
		||||
      endif ()
 | 
			
		||||
    endif ()
 | 
			
		||||
  endif ()
 | 
			
		||||
endif ()
 | 
			
		||||
 | 
			
		||||
if (local_rocksdb)
 | 
			
		||||
  message (STATUS "Using local build of RocksDB.")
 | 
			
		||||
  ExternalProject_Add (rocksdb
 | 
			
		||||
    PREFIX ${nih_cache_path}
 | 
			
		||||
    GIT_REPOSITORY https://github.com/facebook/rocksdb.git
 | 
			
		||||
    GIT_TAG v6.27.3
 | 
			
		||||
    PATCH_COMMAND
 | 
			
		||||
      # only used by windows build
 | 
			
		||||
      ${CMAKE_COMMAND} -E copy_if_different
 | 
			
		||||
      ${CMAKE_CURRENT_SOURCE_DIR}/Builds/CMake/rocks_thirdparty.inc
 | 
			
		||||
      <SOURCE_DIR>/thirdparty.inc
 | 
			
		||||
    COMMAND
 | 
			
		||||
      # fixup their build version file to keep the values
 | 
			
		||||
      # from changing always
 | 
			
		||||
      ${CMAKE_COMMAND} -E copy_if_different
 | 
			
		||||
      ${CMAKE_CURRENT_SOURCE_DIR}/Builds/CMake/rocksdb_build_version.cc.in
 | 
			
		||||
      <SOURCE_DIR>/util/build_version.cc.in
 | 
			
		||||
    CMAKE_ARGS
 | 
			
		||||
      -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
 | 
			
		||||
      -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
 | 
			
		||||
      $<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:-DCMAKE_VERBOSE_MAKEFILE=ON>
 | 
			
		||||
      $<$<BOOL:${unity}>:-DCMAKE_UNITY_BUILD=ON}>
 | 
			
		||||
      -DCMAKE_DEBUG_POSTFIX=_d
 | 
			
		||||
      $<$<NOT:$<BOOL:${is_multiconfig}>>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}>
 | 
			
		||||
      -DBUILD_SHARED_LIBS=OFF
 | 
			
		||||
      -DCMAKE_POSITION_INDEPENDENT_CODE=ON
 | 
			
		||||
      -DWITH_JEMALLOC=$<IF:$<BOOL:${jemalloc}>,ON,OFF>
 | 
			
		||||
      -DWITH_SNAPPY=ON
 | 
			
		||||
      -DWITH_LZ4=ON
 | 
			
		||||
      -DWITH_ZLIB=OFF
 | 
			
		||||
      -DUSE_RTTI=ON
 | 
			
		||||
      -DWITH_ZSTD=OFF
 | 
			
		||||
      -DWITH_GFLAGS=OFF
 | 
			
		||||
      -DWITH_BZ2=OFF
 | 
			
		||||
      -ULZ4_*
 | 
			
		||||
      -Ulz4_*
 | 
			
		||||
      -Dlz4_INCLUDE_DIRS=$<JOIN:$<TARGET_PROPERTY:lz4_lib,INTERFACE_INCLUDE_DIRECTORIES>,::>
 | 
			
		||||
      -Dlz4_LIBRARIES=$<IF:$<CONFIG:Debug>,$<TARGET_PROPERTY:lz4_lib,IMPORTED_LOCATION_DEBUG>,$<TARGET_PROPERTY:lz4_lib,IMPORTED_LOCATION_RELEASE>>
 | 
			
		||||
      -Dlz4_FOUND=ON
 | 
			
		||||
      -USNAPPY_*
 | 
			
		||||
      -Usnappy_*
 | 
			
		||||
      -USnappy_*
 | 
			
		||||
      -Dsnappy_INCLUDE_DIRS=$<JOIN:$<TARGET_PROPERTY:snappy_lib,INTERFACE_INCLUDE_DIRECTORIES>,::>
 | 
			
		||||
      -Dsnappy_LIBRARIES=$<IF:$<CONFIG:Debug>,$<TARGET_PROPERTY:snappy_lib,IMPORTED_LOCATION_DEBUG>,$<TARGET_PROPERTY:snappy_lib,IMPORTED_LOCATION_RELEASE>>
 | 
			
		||||
      -Dsnappy_FOUND=ON
 | 
			
		||||
      -DSnappy_INCLUDE_DIRS=$<JOIN:$<TARGET_PROPERTY:snappy_lib,INTERFACE_INCLUDE_DIRECTORIES>,::>
 | 
			
		||||
      -DSnappy_LIBRARIES=$<IF:$<CONFIG:Debug>,$<TARGET_PROPERTY:snappy_lib,IMPORTED_LOCATION_DEBUG>,$<TARGET_PROPERTY:snappy_lib,IMPORTED_LOCATION_RELEASE>>
 | 
			
		||||
      -DSnappy_FOUND=ON
 | 
			
		||||
      -DWITH_MD_LIBRARY=OFF
 | 
			
		||||
      -DWITH_RUNTIME_DEBUG=$<IF:$<CONFIG:Debug>,ON,OFF>
 | 
			
		||||
      -DFAIL_ON_WARNINGS=OFF
 | 
			
		||||
      -DWITH_ASAN=OFF
 | 
			
		||||
      -DWITH_TSAN=OFF
 | 
			
		||||
      -DWITH_UBSAN=OFF
 | 
			
		||||
      -DWITH_NUMA=OFF
 | 
			
		||||
      -DWITH_TBB=OFF
 | 
			
		||||
      -DWITH_WINDOWS_UTF8_FILENAMES=OFF
 | 
			
		||||
      -DWITH_XPRESS=OFF
 | 
			
		||||
      -DPORTABLE=ON
 | 
			
		||||
      -DFORCE_SSE42=OFF
 | 
			
		||||
      -DDISABLE_STALL_NOTIF=OFF
 | 
			
		||||
      -DOPTDBG=ON
 | 
			
		||||
      -DROCKSDB_LITE=OFF
 | 
			
		||||
      -DWITH_FALLOCATE=ON
 | 
			
		||||
      -DWITH_LIBRADOS=OFF
 | 
			
		||||
      -DWITH_JNI=OFF
 | 
			
		||||
      -DROCKSDB_INSTALL_ON_WINDOWS=OFF
 | 
			
		||||
      -DWITH_TESTS=OFF
 | 
			
		||||
      -DWITH_TOOLS=OFF
 | 
			
		||||
      $<$<BOOL:${MSVC}>:
 | 
			
		||||
        "-DCMAKE_CXX_FLAGS=-GR -Gd -fp:precise -FS -MP /DNDEBUG"
 | 
			
		||||
      >
 | 
			
		||||
      $<$<NOT:$<BOOL:${MSVC}>>:
 | 
			
		||||
        "-DCMAKE_CXX_FLAGS=-DNDEBUG"
 | 
			
		||||
      >
 | 
			
		||||
    LOG_BUILD ON
 | 
			
		||||
    LOG_CONFIGURE ON
 | 
			
		||||
    BUILD_COMMAND
 | 
			
		||||
      ${CMAKE_COMMAND}
 | 
			
		||||
      --build .
 | 
			
		||||
      --config $<CONFIG>
 | 
			
		||||
      --parallel ${ep_procs}
 | 
			
		||||
      $<$<BOOL:${is_multiconfig}>:
 | 
			
		||||
        COMMAND
 | 
			
		||||
          ${CMAKE_COMMAND} -E copy
 | 
			
		||||
          <BINARY_DIR>/$<CONFIG>/${ep_lib_prefix}rocksdb$<$<CONFIG:Debug>:_d>${ep_lib_suffix}
 | 
			
		||||
          <BINARY_DIR>
 | 
			
		||||
        >
 | 
			
		||||
    LIST_SEPARATOR ::
 | 
			
		||||
    TEST_COMMAND ""
 | 
			
		||||
    INSTALL_COMMAND ""
 | 
			
		||||
    DEPENDS snappy_lib lz4_lib
 | 
			
		||||
    BUILD_BYPRODUCTS
 | 
			
		||||
      <BINARY_DIR>/${ep_lib_prefix}rocksdb${ep_lib_suffix}
 | 
			
		||||
      <BINARY_DIR>/${ep_lib_prefix}rocksdb_d${ep_lib_suffix}
 | 
			
		||||
  )
 | 
			
		||||
  ExternalProject_Get_Property (rocksdb BINARY_DIR)
 | 
			
		||||
  ExternalProject_Get_Property (rocksdb SOURCE_DIR)
 | 
			
		||||
  if (CMAKE_VERBOSE_MAKEFILE)
 | 
			
		||||
    print_ep_logs (rocksdb)
 | 
			
		||||
  endif ()
 | 
			
		||||
  file (MAKE_DIRECTORY ${SOURCE_DIR}/include)
 | 
			
		||||
  set_target_properties (rocksdb_lib PROPERTIES
 | 
			
		||||
    IMPORTED_LOCATION_DEBUG
 | 
			
		||||
      ${BINARY_DIR}/${ep_lib_prefix}rocksdb_d${ep_lib_suffix}
 | 
			
		||||
    IMPORTED_LOCATION_RELEASE
 | 
			
		||||
      ${BINARY_DIR}/${ep_lib_prefix}rocksdb${ep_lib_suffix}
 | 
			
		||||
    INTERFACE_INCLUDE_DIRECTORIES
 | 
			
		||||
      ${SOURCE_DIR}/include)
 | 
			
		||||
  add_dependencies (rocksdb_lib rocksdb)
 | 
			
		||||
  exclude_if_included (rocksdb)
 | 
			
		||||
endif ()
 | 
			
		||||
 | 
			
		||||
target_link_libraries (rocksdb_lib
 | 
			
		||||
  INTERFACE
 | 
			
		||||
    snappy_lib
 | 
			
		||||
    lz4_lib
 | 
			
		||||
    $<$<BOOL:${MSVC}>:rpcrt4>)
 | 
			
		||||
exclude_if_included (rocksdb_lib)
 | 
			
		||||
target_link_libraries (ripple_libs INTERFACE rocksdb_lib)
 | 
			
		||||
							
								
								
									
										58
									
								
								Builds/CMake/deps/Secp256k1.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								Builds/CMake/deps/Secp256k1.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
#[===================================================================[
 | 
			
		||||
   NIH dep: secp256k1
 | 
			
		||||
#]===================================================================]
 | 
			
		||||
 | 
			
		||||
add_library (secp256k1_lib STATIC IMPORTED GLOBAL)
 | 
			
		||||
 | 
			
		||||
if (NOT WIN32)
 | 
			
		||||
  find_package(secp256k1)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
if(secp256k1)
 | 
			
		||||
  set_target_properties (secp256k1_lib PROPERTIES
 | 
			
		||||
    IMPORTED_LOCATION_DEBUG
 | 
			
		||||
      ${secp256k1}
 | 
			
		||||
    IMPORTED_LOCATION_RELEASE
 | 
			
		||||
      ${secp256k1}
 | 
			
		||||
    INTERFACE_INCLUDE_DIRECTORIES
 | 
			
		||||
      ${SECP256K1_INCLUDE_DIR})
 | 
			
		||||
 | 
			
		||||
  add_library (secp256k1 ALIAS secp256k1_lib)
 | 
			
		||||
  add_library (NIH::secp256k1 ALIAS secp256k1_lib)
 | 
			
		||||
 | 
			
		||||
else()
 | 
			
		||||
  set(INSTALL_SECP256K1 true)
 | 
			
		||||
 | 
			
		||||
  add_library (secp256k1 STATIC
 | 
			
		||||
    src/secp256k1/src/secp256k1.c)
 | 
			
		||||
  target_compile_definitions (secp256k1
 | 
			
		||||
    PRIVATE
 | 
			
		||||
      USE_NUM_NONE
 | 
			
		||||
      USE_FIELD_10X26
 | 
			
		||||
      USE_FIELD_INV_BUILTIN
 | 
			
		||||
      USE_SCALAR_8X32
 | 
			
		||||
      USE_SCALAR_INV_BUILTIN)
 | 
			
		||||
  target_include_directories (secp256k1
 | 
			
		||||
    PUBLIC
 | 
			
		||||
      $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
 | 
			
		||||
      $<INSTALL_INTERFACE:include>
 | 
			
		||||
    PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/secp256k1)
 | 
			
		||||
  target_compile_options (secp256k1
 | 
			
		||||
    PRIVATE
 | 
			
		||||
      $<$<BOOL:${MSVC}>:-wd4319>
 | 
			
		||||
      $<$<NOT:$<BOOL:${MSVC}>>:
 | 
			
		||||
        -Wno-deprecated-declarations
 | 
			
		||||
        -Wno-unused-function
 | 
			
		||||
      >
 | 
			
		||||
      $<$<BOOL:${is_gcc}>:-Wno-nonnull-compare>)
 | 
			
		||||
  target_link_libraries (ripple_libs INTERFACE NIH::secp256k1)
 | 
			
		||||
#[===========================[
 | 
			
		||||
     headers installation
 | 
			
		||||
#]===========================]
 | 
			
		||||
  install (
 | 
			
		||||
    FILES
 | 
			
		||||
      src/secp256k1/include/secp256k1.h
 | 
			
		||||
  DESTINATION include/secp256k1/include)
 | 
			
		||||
 | 
			
		||||
  add_library (NIH::secp256k1 ALIAS secp256k1)
 | 
			
		||||
endif()
 | 
			
		||||
							
								
								
									
										77
									
								
								Builds/CMake/deps/Snappy.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								Builds/CMake/deps/Snappy.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,77 @@
 | 
			
		||||
#[===================================================================[
 | 
			
		||||
   NIH dep: snappy
 | 
			
		||||
#]===================================================================]
 | 
			
		||||
 | 
			
		||||
add_library (snappy_lib STATIC IMPORTED GLOBAL)
 | 
			
		||||
 | 
			
		||||
if (NOT WIN32)
 | 
			
		||||
  find_package(snappy)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
if(snappy)
 | 
			
		||||
  set_target_properties (snappy_lib PROPERTIES
 | 
			
		||||
    IMPORTED_LOCATION_DEBUG
 | 
			
		||||
      ${snappy}
 | 
			
		||||
    IMPORTED_LOCATION_RELEASE
 | 
			
		||||
      ${snappy}
 | 
			
		||||
    INTERFACE_INCLUDE_DIRECTORIES
 | 
			
		||||
    ${SNAPPY_INCLUDE_DIR})
 | 
			
		||||
 | 
			
		||||
else()
 | 
			
		||||
  ExternalProject_Add (snappy
 | 
			
		||||
    PREFIX ${nih_cache_path}
 | 
			
		||||
    GIT_REPOSITORY https://github.com/google/snappy.git
 | 
			
		||||
    GIT_TAG 1.1.7
 | 
			
		||||
    CMAKE_ARGS
 | 
			
		||||
      -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
 | 
			
		||||
      -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
 | 
			
		||||
      $<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:-DCMAKE_VERBOSE_MAKEFILE=ON>
 | 
			
		||||
      -DCMAKE_DEBUG_POSTFIX=_d
 | 
			
		||||
      $<$<NOT:$<BOOL:${is_multiconfig}>>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}>
 | 
			
		||||
      -DBUILD_SHARED_LIBS=OFF
 | 
			
		||||
      -DCMAKE_POSITION_INDEPENDENT_CODE=ON
 | 
			
		||||
      -DSNAPPY_BUILD_TESTS=OFF
 | 
			
		||||
      $<$<BOOL:${MSVC}>:
 | 
			
		||||
        "-DCMAKE_CXX_FLAGS=-GR -Gd -fp:precise -FS -EHa -MP"
 | 
			
		||||
        "-DCMAKE_CXX_FLAGS_DEBUG=-MTd"
 | 
			
		||||
        "-DCMAKE_CXX_FLAGS_RELEASE=-MT"
 | 
			
		||||
      >
 | 
			
		||||
    LOG_BUILD ON
 | 
			
		||||
    LOG_CONFIGURE ON
 | 
			
		||||
    BUILD_COMMAND
 | 
			
		||||
      ${CMAKE_COMMAND}
 | 
			
		||||
      --build .
 | 
			
		||||
      --config $<CONFIG>
 | 
			
		||||
      --parallel ${ep_procs}
 | 
			
		||||
      $<$<BOOL:${is_multiconfig}>:
 | 
			
		||||
        COMMAND
 | 
			
		||||
          ${CMAKE_COMMAND} -E copy
 | 
			
		||||
          <BINARY_DIR>/$<CONFIG>/${ep_lib_prefix}snappy$<$<CONFIG:Debug>:_d>${ep_lib_suffix}
 | 
			
		||||
          <BINARY_DIR>
 | 
			
		||||
        >
 | 
			
		||||
    TEST_COMMAND ""
 | 
			
		||||
    INSTALL_COMMAND
 | 
			
		||||
      ${CMAKE_COMMAND} -E copy_if_different <BINARY_DIR>/config.h <BINARY_DIR>/snappy-stubs-public.h <SOURCE_DIR>
 | 
			
		||||
    BUILD_BYPRODUCTS
 | 
			
		||||
      <BINARY_DIR>/${ep_lib_prefix}snappy${ep_lib_suffix}
 | 
			
		||||
      <BINARY_DIR>/${ep_lib_prefix}snappy_d${ep_lib_suffix}
 | 
			
		||||
  )
 | 
			
		||||
  ExternalProject_Get_Property (snappy BINARY_DIR)
 | 
			
		||||
  ExternalProject_Get_Property (snappy SOURCE_DIR)
 | 
			
		||||
  if (CMAKE_VERBOSE_MAKEFILE)
 | 
			
		||||
    print_ep_logs (snappy)
 | 
			
		||||
  endif ()
 | 
			
		||||
  file (MAKE_DIRECTORY ${SOURCE_DIR}/snappy)
 | 
			
		||||
  set_target_properties (snappy_lib PROPERTIES
 | 
			
		||||
    IMPORTED_LOCATION_DEBUG
 | 
			
		||||
      ${BINARY_DIR}/${ep_lib_prefix}snappy_d${ep_lib_suffix}
 | 
			
		||||
    IMPORTED_LOCATION_RELEASE
 | 
			
		||||
      ${BINARY_DIR}/${ep_lib_prefix}snappy${ep_lib_suffix}
 | 
			
		||||
    INTERFACE_INCLUDE_DIRECTORIES
 | 
			
		||||
      ${SOURCE_DIR})
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
add_dependencies (snappy_lib snappy)
 | 
			
		||||
target_link_libraries (ripple_libs INTERFACE snappy_lib)
 | 
			
		||||
exclude_if_included (snappy)
 | 
			
		||||
exclude_if_included (snappy_lib)
 | 
			
		||||
							
								
								
									
										165
									
								
								Builds/CMake/deps/Soci.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										165
									
								
								Builds/CMake/deps/Soci.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,165 @@
 | 
			
		||||
#[===================================================================[
 | 
			
		||||
   NIH dep: soci
 | 
			
		||||
#]===================================================================]
 | 
			
		||||
 | 
			
		||||
foreach (_comp core empty sqlite3)
 | 
			
		||||
  add_library ("soci_${_comp}" STATIC IMPORTED GLOBAL)
 | 
			
		||||
endforeach ()
 | 
			
		||||
 | 
			
		||||
if (NOT WIN32)
 | 
			
		||||
  find_package(soci)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
if (soci)
 | 
			
		||||
  foreach (_comp core empty sqlite3)
 | 
			
		||||
    set_target_properties ("soci_${_comp}" PROPERTIES
 | 
			
		||||
      IMPORTED_LOCATION_DEBUG
 | 
			
		||||
        ${soci}
 | 
			
		||||
      IMPORTED_LOCATION_RELEASE
 | 
			
		||||
        ${soci}
 | 
			
		||||
      INTERFACE_INCLUDE_DIRECTORIES
 | 
			
		||||
        ${SOCI_INCLUDE_DIR})
 | 
			
		||||
  endforeach ()
 | 
			
		||||
 | 
			
		||||
else()
 | 
			
		||||
  set (soci_lib_pre ${ep_lib_prefix})
 | 
			
		||||
  set (soci_lib_post "")
 | 
			
		||||
  if (WIN32)
 | 
			
		||||
    # for some reason soci on windows still prepends lib (non-standard)
 | 
			
		||||
    set (soci_lib_pre lib)
 | 
			
		||||
    # this version in the name might change if/when we change versions of soci
 | 
			
		||||
    set (soci_lib_post "_4_0")
 | 
			
		||||
  endif ()
 | 
			
		||||
  get_target_property (_boost_incs Boost::date_time INTERFACE_INCLUDE_DIRECTORIES)
 | 
			
		||||
  get_target_property (_boost_dt Boost::date_time IMPORTED_LOCATION)
 | 
			
		||||
  if (NOT _boost_dt)
 | 
			
		||||
    get_target_property (_boost_dt Boost::date_time IMPORTED_LOCATION_RELEASE)
 | 
			
		||||
  endif ()
 | 
			
		||||
  if (NOT _boost_dt)
 | 
			
		||||
    get_target_property (_boost_dt Boost::date_time IMPORTED_LOCATION_DEBUG)
 | 
			
		||||
  endif ()
 | 
			
		||||
 | 
			
		||||
  ExternalProject_Add (soci
 | 
			
		||||
    PREFIX ${nih_cache_path}
 | 
			
		||||
    GIT_REPOSITORY https://github.com/SOCI/soci.git
 | 
			
		||||
    GIT_TAG 04e1870294918d20761736743bb6136314c42dd5
 | 
			
		||||
    # We had an issue with soci integer range checking for boost::optional
 | 
			
		||||
    # and needed to remove the exception that SOCI throws in this case.
 | 
			
		||||
    # This is *probably* a bug in SOCI, but has never been investigated more
 | 
			
		||||
    # nor reported to the maintainers.
 | 
			
		||||
    # This cmake script comments out the lines in question.
 | 
			
		||||
    # This patch process is likely fragile and should be reviewed carefully
 | 
			
		||||
    # whenever we update the GIT_TAG above.
 | 
			
		||||
    PATCH_COMMAND
 | 
			
		||||
      ${CMAKE_COMMAND} -D RIPPLED_SOURCE=${CMAKE_CURRENT_SOURCE_DIR}
 | 
			
		||||
        -P ${CMAKE_CURRENT_SOURCE_DIR}/Builds/CMake/soci_patch.cmake
 | 
			
		||||
    CMAKE_ARGS
 | 
			
		||||
      -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
 | 
			
		||||
      -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
 | 
			
		||||
      $<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:-DCMAKE_VERBOSE_MAKEFILE=ON>
 | 
			
		||||
      $<$<BOOL:${CMAKE_TOOLCHAIN_FILE}>:-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}>
 | 
			
		||||
      $<$<BOOL:${VCPKG_TARGET_TRIPLET}>:-DVCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET}>
 | 
			
		||||
      $<$<BOOL:${unity}>:-DCMAKE_UNITY_BUILD=ON}>
 | 
			
		||||
      -DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/sqlite3
 | 
			
		||||
      -DCMAKE_MODULE_PATH=${CMAKE_CURRENT_SOURCE_DIR}/Builds/CMake
 | 
			
		||||
      -DCMAKE_INCLUDE_PATH=$<JOIN:$<TARGET_PROPERTY:sqlite,INTERFACE_INCLUDE_DIRECTORIES>,::>
 | 
			
		||||
      -DCMAKE_LIBRARY_PATH=${sqlite_BINARY_DIR}
 | 
			
		||||
      -DCMAKE_DEBUG_POSTFIX=_d
 | 
			
		||||
      $<$<NOT:$<BOOL:${is_multiconfig}>>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}>
 | 
			
		||||
      -DSOCI_CXX_C11=ON
 | 
			
		||||
      -DSOCI_STATIC=ON
 | 
			
		||||
      -DSOCI_LIBDIR=lib
 | 
			
		||||
      -DSOCI_SHARED=OFF
 | 
			
		||||
      -DSOCI_TESTS=OFF
 | 
			
		||||
      # hacks to workaround the fact that soci doesn't currently use
 | 
			
		||||
      # boost imported targets in its cmake. If they switch to
 | 
			
		||||
      # proper imported targets, this next line can be removed
 | 
			
		||||
      # (as well as the get_property above that sets _boost_incs)
 | 
			
		||||
      -DBoost_INCLUDE_DIRS=$<JOIN:${_boost_incs},::>
 | 
			
		||||
      -DBoost_INCLUDE_DIR=$<JOIN:${_boost_incs},::>
 | 
			
		||||
      -DBOOST_ROOT=${BOOST_ROOT}
 | 
			
		||||
      -DWITH_BOOST=ON
 | 
			
		||||
      -DBoost_FOUND=ON
 | 
			
		||||
      -DBoost_NO_BOOST_CMAKE=ON
 | 
			
		||||
      -DBoost_DATE_TIME_FOUND=ON
 | 
			
		||||
      -DSOCI_HAVE_BOOST=ON
 | 
			
		||||
      -DSOCI_HAVE_BOOST_DATE_TIME=ON
 | 
			
		||||
      -DBoost_DATE_TIME_LIBRARY=${_boost_dt}
 | 
			
		||||
      -DSOCI_DB2=OFF
 | 
			
		||||
      -DSOCI_FIREBIRD=OFF
 | 
			
		||||
      -DSOCI_MYSQL=OFF
 | 
			
		||||
      -DSOCI_ODBC=OFF
 | 
			
		||||
      -DSOCI_ORACLE=OFF
 | 
			
		||||
      -DSOCI_POSTGRESQL=OFF
 | 
			
		||||
      -DSOCI_SQLITE3=ON
 | 
			
		||||
      -DSQLITE3_INCLUDE_DIR=$<JOIN:$<TARGET_PROPERTY:sqlite,INTERFACE_INCLUDE_DIRECTORIES>,::>
 | 
			
		||||
      -DSQLITE3_LIBRARY=$<IF:$<CONFIG:Debug>,$<TARGET_PROPERTY:sqlite,IMPORTED_LOCATION_DEBUG>,$<TARGET_PROPERTY:sqlite,IMPORTED_LOCATION_RELEASE>>
 | 
			
		||||
      $<$<BOOL:${APPLE}>:-DCMAKE_FIND_FRAMEWORK=LAST>
 | 
			
		||||
      $<$<BOOL:${MSVC}>:
 | 
			
		||||
        "-DCMAKE_CXX_FLAGS=-GR -Gd -fp:precise -FS -EHa -MP"
 | 
			
		||||
        "-DCMAKE_CXX_FLAGS_DEBUG=-MTd"
 | 
			
		||||
        "-DCMAKE_CXX_FLAGS_RELEASE=-MT"
 | 
			
		||||
      >
 | 
			
		||||
      $<$<NOT:$<BOOL:${MSVC}>>:
 | 
			
		||||
        "-DCMAKE_CXX_FLAGS=-Wno-deprecated-declarations"
 | 
			
		||||
      >
 | 
			
		||||
      # SEE: https://github.com/SOCI/soci/issues/640
 | 
			
		||||
      $<$<AND:$<BOOL:${is_gcc}>,$<VERSION_GREATER_EQUAL:${CMAKE_CXX_COMPILER_VERSION},8>>:
 | 
			
		||||
        "-DCMAKE_CXX_FLAGS=-Wno-deprecated-declarations -Wno-error=format-overflow -Wno-format-overflow -Wno-error=format-truncation"
 | 
			
		||||
      >
 | 
			
		||||
    LIST_SEPARATOR ::
 | 
			
		||||
    LOG_BUILD ON
 | 
			
		||||
    LOG_CONFIGURE ON
 | 
			
		||||
    BUILD_COMMAND
 | 
			
		||||
      ${CMAKE_COMMAND}
 | 
			
		||||
      --build .
 | 
			
		||||
      --config $<CONFIG>
 | 
			
		||||
      --parallel ${ep_procs}
 | 
			
		||||
      $<$<BOOL:${is_multiconfig}>:
 | 
			
		||||
        COMMAND
 | 
			
		||||
          ${CMAKE_COMMAND} -E copy
 | 
			
		||||
          <BINARY_DIR>/lib/$<CONFIG>/${soci_lib_pre}soci_core${soci_lib_post}$<$<CONFIG:Debug>:_d>${ep_lib_suffix}
 | 
			
		||||
          <BINARY_DIR>/lib/$<CONFIG>/${soci_lib_pre}soci_empty${soci_lib_post}$<$<CONFIG:Debug>:_d>${ep_lib_suffix}
 | 
			
		||||
          <BINARY_DIR>/lib/$<CONFIG>/${soci_lib_pre}soci_sqlite3${soci_lib_post}$<$<CONFIG:Debug>:_d>${ep_lib_suffix}
 | 
			
		||||
          <BINARY_DIR>/lib
 | 
			
		||||
        >
 | 
			
		||||
    TEST_COMMAND ""
 | 
			
		||||
    INSTALL_COMMAND ""
 | 
			
		||||
    DEPENDS sqlite
 | 
			
		||||
    BUILD_BYPRODUCTS
 | 
			
		||||
      <BINARY_DIR>/lib/${soci_lib_pre}soci_core${soci_lib_post}${ep_lib_suffix}
 | 
			
		||||
      <BINARY_DIR>/lib/${soci_lib_pre}soci_core${soci_lib_post}_d${ep_lib_suffix}
 | 
			
		||||
      <BINARY_DIR>/lib/${soci_lib_pre}soci_empty${soci_lib_post}${ep_lib_suffix}
 | 
			
		||||
      <BINARY_DIR>/lib/${soci_lib_pre}soci_empty${soci_lib_post}_d${ep_lib_suffix}
 | 
			
		||||
      <BINARY_DIR>/lib/${soci_lib_pre}soci_sqlite3${soci_lib_post}${ep_lib_suffix}
 | 
			
		||||
      <BINARY_DIR>/lib/${soci_lib_pre}soci_sqlite3${soci_lib_post}_d${ep_lib_suffix}
 | 
			
		||||
  )
 | 
			
		||||
  ExternalProject_Get_Property (soci BINARY_DIR)
 | 
			
		||||
  ExternalProject_Get_Property (soci SOURCE_DIR)
 | 
			
		||||
  if (CMAKE_VERBOSE_MAKEFILE)
 | 
			
		||||
    print_ep_logs (soci)
 | 
			
		||||
  endif ()
 | 
			
		||||
  file (MAKE_DIRECTORY ${SOURCE_DIR}/include)
 | 
			
		||||
  file (MAKE_DIRECTORY ${BINARY_DIR}/include)
 | 
			
		||||
  foreach (_comp core empty sqlite3)
 | 
			
		||||
    set_target_properties ("soci_${_comp}" PROPERTIES
 | 
			
		||||
      IMPORTED_LOCATION_DEBUG
 | 
			
		||||
        ${BINARY_DIR}/lib/${soci_lib_pre}soci_${_comp}${soci_lib_post}_d${ep_lib_suffix}
 | 
			
		||||
      IMPORTED_LOCATION_RELEASE
 | 
			
		||||
        ${BINARY_DIR}/lib/${soci_lib_pre}soci_${_comp}${soci_lib_post}${ep_lib_suffix}
 | 
			
		||||
      INTERFACE_INCLUDE_DIRECTORIES
 | 
			
		||||
        "${SOURCE_DIR}/include;${BINARY_DIR}/include")
 | 
			
		||||
    add_dependencies ("soci_${_comp}" soci) # something has to depend on the ExternalProject to trigger it
 | 
			
		||||
    target_link_libraries (ripple_libs INTERFACE "soci_${_comp}")
 | 
			
		||||
    if (NOT _comp STREQUAL "core")
 | 
			
		||||
      target_link_libraries ("soci_${_comp}" INTERFACE soci_core)
 | 
			
		||||
    endif ()
 | 
			
		||||
  endforeach ()
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
foreach (_comp core empty sqlite3)
 | 
			
		||||
  exclude_if_included ("soci_${_comp}")
 | 
			
		||||
endforeach ()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
exclude_if_included (soci)
 | 
			
		||||
							
								
								
									
										93
									
								
								Builds/CMake/deps/Sqlite.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								Builds/CMake/deps/Sqlite.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,93 @@
 | 
			
		||||
#[===================================================================[
 | 
			
		||||
   NIH dep: sqlite
 | 
			
		||||
#]===================================================================]
 | 
			
		||||
 | 
			
		||||
add_library (sqlite STATIC IMPORTED GLOBAL)
 | 
			
		||||
 | 
			
		||||
if (NOT WIN32)
 | 
			
		||||
  find_package(sqlite)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if(sqlite3)
 | 
			
		||||
  set_target_properties (sqlite PROPERTIES
 | 
			
		||||
    IMPORTED_LOCATION_DEBUG
 | 
			
		||||
      ${sqlite3}
 | 
			
		||||
    IMPORTED_LOCATION_RELEASE
 | 
			
		||||
      ${sqlite3}
 | 
			
		||||
    INTERFACE_INCLUDE_DIRECTORIES
 | 
			
		||||
    ${SQLITE_INCLUDE_DIR})
 | 
			
		||||
 | 
			
		||||
else()
 | 
			
		||||
  ExternalProject_Add (sqlite3
 | 
			
		||||
    PREFIX ${nih_cache_path}
 | 
			
		||||
    # sqlite doesn't use git, but it provides versioned tarballs
 | 
			
		||||
    URL https://www.sqlite.org/2018/sqlite-amalgamation-3260000.zip
 | 
			
		||||
      http://www.sqlite.org/2018/sqlite-amalgamation-3260000.zip
 | 
			
		||||
      https://www2.sqlite.org/2018/sqlite-amalgamation-3260000.zip
 | 
			
		||||
      http://www2.sqlite.org/2018/sqlite-amalgamation-3260000.zip
 | 
			
		||||
    # ^^^ version is apparent in the URL:  3260000 => 3.26.0
 | 
			
		||||
    URL_HASH SHA256=de5dcab133aa339a4cf9e97c40aa6062570086d6085d8f9ad7bc6ddf8a52096e
 | 
			
		||||
    # Don't need to worry about MITM attacks too much because the download
 | 
			
		||||
    # is checked against a strong hash
 | 
			
		||||
    TLS_VERIFY false
 | 
			
		||||
    # we wrote a very simple CMake file to build sqlite
 | 
			
		||||
    # so that's what we copy here so that we can build with
 | 
			
		||||
    # CMake. sqlite doesn't generally provided a build system
 | 
			
		||||
    # for the single amalgamation source file.
 | 
			
		||||
    PATCH_COMMAND
 | 
			
		||||
      ${CMAKE_COMMAND} -E copy_if_different
 | 
			
		||||
      ${CMAKE_CURRENT_SOURCE_DIR}/Builds/CMake/CMake_sqlite3.txt
 | 
			
		||||
      <SOURCE_DIR>/CMakeLists.txt
 | 
			
		||||
    CMAKE_ARGS
 | 
			
		||||
      -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
 | 
			
		||||
      -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
 | 
			
		||||
      $<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:-DCMAKE_VERBOSE_MAKEFILE=ON>
 | 
			
		||||
      -DCMAKE_DEBUG_POSTFIX=_d
 | 
			
		||||
      $<$<NOT:$<BOOL:${is_multiconfig}>>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}>
 | 
			
		||||
      $<$<BOOL:${MSVC}>:
 | 
			
		||||
        "-DCMAKE_C_FLAGS=-GR -Gd -fp:precise -FS -MP"
 | 
			
		||||
        "-DCMAKE_C_FLAGS_DEBUG=-MTd"
 | 
			
		||||
        "-DCMAKE_C_FLAGS_RELEASE=-MT"
 | 
			
		||||
      >
 | 
			
		||||
    LOG_BUILD ON
 | 
			
		||||
    LOG_CONFIGURE ON
 | 
			
		||||
    BUILD_COMMAND
 | 
			
		||||
      ${CMAKE_COMMAND}
 | 
			
		||||
      --build .
 | 
			
		||||
      --config $<CONFIG>
 | 
			
		||||
      --parallel ${ep_procs}
 | 
			
		||||
      $<$<BOOL:${is_multiconfig}>:
 | 
			
		||||
        COMMAND
 | 
			
		||||
          ${CMAKE_COMMAND} -E copy
 | 
			
		||||
            <BINARY_DIR>/$<CONFIG>/${ep_lib_prefix}sqlite3$<$<CONFIG:Debug>:_d>${ep_lib_suffix}
 | 
			
		||||
            <BINARY_DIR>
 | 
			
		||||
        >
 | 
			
		||||
    TEST_COMMAND ""
 | 
			
		||||
    INSTALL_COMMAND ""
 | 
			
		||||
    BUILD_BYPRODUCTS
 | 
			
		||||
      <BINARY_DIR>/${ep_lib_prefix}sqlite3${ep_lib_suffix}
 | 
			
		||||
      <BINARY_DIR>/${ep_lib_prefix}sqlite3_d${ep_lib_suffix}
 | 
			
		||||
  )
 | 
			
		||||
  ExternalProject_Get_Property (sqlite3 BINARY_DIR)
 | 
			
		||||
  ExternalProject_Get_Property (sqlite3 SOURCE_DIR)
 | 
			
		||||
  if (CMAKE_VERBOSE_MAKEFILE)
 | 
			
		||||
    print_ep_logs (sqlite3)
 | 
			
		||||
  endif ()
 | 
			
		||||
 | 
			
		||||
  set_target_properties (sqlite PROPERTIES
 | 
			
		||||
    IMPORTED_LOCATION_DEBUG
 | 
			
		||||
      ${BINARY_DIR}/${ep_lib_prefix}sqlite3_d${ep_lib_suffix}
 | 
			
		||||
    IMPORTED_LOCATION_RELEASE
 | 
			
		||||
      ${BINARY_DIR}/${ep_lib_prefix}sqlite3${ep_lib_suffix}
 | 
			
		||||
    INTERFACE_INCLUDE_DIRECTORIES
 | 
			
		||||
      ${SOURCE_DIR})
 | 
			
		||||
 | 
			
		||||
  add_dependencies (sqlite sqlite3)
 | 
			
		||||
  exclude_if_included (sqlite3)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
target_link_libraries (sqlite INTERFACE $<$<NOT:$<BOOL:${MSVC}>>:dl>)
 | 
			
		||||
target_link_libraries (ripple_libs INTERFACE sqlite)
 | 
			
		||||
exclude_if_included (sqlite)
 | 
			
		||||
set(sqlite_BINARY_DIR ${BINARY_DIR})
 | 
			
		||||
							
								
								
									
										167
									
								
								Builds/CMake/deps/cassandra.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										167
									
								
								Builds/CMake/deps/cassandra.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,167 @@
 | 
			
		||||
if(reporting)
 | 
			
		||||
    find_library(cassandra NAMES cassandra)
 | 
			
		||||
    if(NOT cassandra)
 | 
			
		||||
 | 
			
		||||
        message("System installed Cassandra cpp driver not found. Will build")
 | 
			
		||||
 | 
			
		||||
        find_library(zlib NAMES zlib1g-dev zlib-devel zlib z)
 | 
			
		||||
        if(NOT zlib)
 | 
			
		||||
            message("zlib not found. will build")
 | 
			
		||||
            add_library(zlib STATIC IMPORTED GLOBAL)
 | 
			
		||||
            ExternalProject_Add(zlib_src
 | 
			
		||||
                PREFIX ${nih_cache_path}
 | 
			
		||||
                GIT_REPOSITORY https://github.com/madler/zlib.git
 | 
			
		||||
                GIT_TAG v1.2.12
 | 
			
		||||
                INSTALL_COMMAND ""
 | 
			
		||||
                BUILD_BYPRODUCTS <BINARY_DIR>/${ep_lib_prefix}z.a
 | 
			
		||||
                LOG_BUILD TRUE
 | 
			
		||||
                LOG_CONFIGURE TRUE
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            ExternalProject_Get_Property (zlib_src SOURCE_DIR)
 | 
			
		||||
            ExternalProject_Get_Property (zlib_src BINARY_DIR)
 | 
			
		||||
            set (zlib_src_SOURCE_DIR "${SOURCE_DIR}")
 | 
			
		||||
            file (MAKE_DIRECTORY ${zlib_src_SOURCE_DIR}/include)
 | 
			
		||||
 | 
			
		||||
            set_target_properties (zlib PROPERTIES
 | 
			
		||||
                IMPORTED_LOCATION
 | 
			
		||||
                ${BINARY_DIR}/${ep_lib_prefix}z.a
 | 
			
		||||
                INTERFACE_INCLUDE_DIRECTORIES
 | 
			
		||||
                ${SOURCE_DIR}/include)
 | 
			
		||||
            add_dependencies(zlib zlib_src)
 | 
			
		||||
 | 
			
		||||
            file(TO_CMAKE_PATH "${zlib_src_SOURCE_DIR}" zlib_src_SOURCE_DIR)
 | 
			
		||||
        endif()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        find_library(krb5 NAMES krb5-dev libkrb5-dev)
 | 
			
		||||
 | 
			
		||||
        if(NOT krb5)
 | 
			
		||||
            message("krb5 not found. will build")
 | 
			
		||||
            add_library(krb5 STATIC IMPORTED GLOBAL)
 | 
			
		||||
            ExternalProject_Add(krb5_src
 | 
			
		||||
                PREFIX ${nih_cache_path}
 | 
			
		||||
                GIT_REPOSITORY https://github.com/krb5/krb5.git
 | 
			
		||||
                GIT_TAG krb5-1.20-final
 | 
			
		||||
                UPDATE_COMMAND ""
 | 
			
		||||
                CONFIGURE_COMMAND autoreconf src && CFLAGS=-fcommon ./src/configure --enable-static --disable-shared > /dev/null
 | 
			
		||||
                BUILD_IN_SOURCE 1
 | 
			
		||||
                BUILD_COMMAND make
 | 
			
		||||
                INSTALL_COMMAND ""
 | 
			
		||||
                BUILD_BYPRODUCTS <SOURCE_DIR>/lib/${ep_lib_prefix}krb5.a
 | 
			
		||||
                LOG_BUILD TRUE
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
            ExternalProject_Get_Property (krb5_src SOURCE_DIR)
 | 
			
		||||
            ExternalProject_Get_Property (krb5_src BINARY_DIR)
 | 
			
		||||
            set (krb5_src_SOURCE_DIR "${SOURCE_DIR}")
 | 
			
		||||
            file (MAKE_DIRECTORY ${krb5_src_SOURCE_DIR}/include)
 | 
			
		||||
 | 
			
		||||
            set_target_properties (krb5 PROPERTIES
 | 
			
		||||
                IMPORTED_LOCATION
 | 
			
		||||
                ${BINARY_DIR}/lib/${ep_lib_prefix}krb5.a
 | 
			
		||||
                INTERFACE_INCLUDE_DIRECTORIES
 | 
			
		||||
                ${SOURCE_DIR}/include)
 | 
			
		||||
            add_dependencies(krb5 krb5_src)
 | 
			
		||||
 | 
			
		||||
            file(TO_CMAKE_PATH "${krb5_src_SOURCE_DIR}" krb5_src_SOURCE_DIR)
 | 
			
		||||
        endif()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        find_library(libuv1 NAMES uv1 libuv1 liubuv1-dev libuv1:amd64)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        if(NOT libuv1)
 | 
			
		||||
            message("libuv1 not found, will build")
 | 
			
		||||
            add_library(libuv1 STATIC IMPORTED GLOBAL)
 | 
			
		||||
            ExternalProject_Add(libuv_src
 | 
			
		||||
                PREFIX ${nih_cache_path}
 | 
			
		||||
                GIT_REPOSITORY https://github.com/libuv/libuv.git
 | 
			
		||||
                GIT_TAG v1.44.2
 | 
			
		||||
                INSTALL_COMMAND ""
 | 
			
		||||
                BUILD_BYPRODUCTS <BINARY_DIR>/${ep_lib_prefix}uv_a.a
 | 
			
		||||
                LOG_BUILD TRUE
 | 
			
		||||
                LOG_CONFIGURE TRUE
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
            ExternalProject_Get_Property (libuv_src SOURCE_DIR)
 | 
			
		||||
            ExternalProject_Get_Property (libuv_src BINARY_DIR)
 | 
			
		||||
            set (libuv_src_SOURCE_DIR "${SOURCE_DIR}")
 | 
			
		||||
            file (MAKE_DIRECTORY ${libuv_src_SOURCE_DIR}/include)
 | 
			
		||||
 | 
			
		||||
            set_target_properties (libuv1 PROPERTIES
 | 
			
		||||
                IMPORTED_LOCATION
 | 
			
		||||
                ${BINARY_DIR}/${ep_lib_prefix}uv_a.a
 | 
			
		||||
                INTERFACE_INCLUDE_DIRECTORIES
 | 
			
		||||
                ${SOURCE_DIR}/include)
 | 
			
		||||
            add_dependencies(libuv1 libuv_src)
 | 
			
		||||
 | 
			
		||||
            file(TO_CMAKE_PATH "${libuv_src_SOURCE_DIR}" libuv_src_SOURCE_DIR)
 | 
			
		||||
        endif()
 | 
			
		||||
 | 
			
		||||
        add_library (cassandra STATIC IMPORTED GLOBAL)
 | 
			
		||||
        ExternalProject_Add(cassandra_src
 | 
			
		||||
            PREFIX ${nih_cache_path}
 | 
			
		||||
            GIT_REPOSITORY https://github.com/datastax/cpp-driver.git
 | 
			
		||||
            GIT_TAG 2.16.2
 | 
			
		||||
            CMAKE_ARGS
 | 
			
		||||
            -DLIBUV_ROOT_DIR=${BINARY_DIR}
 | 
			
		||||
            -DLIBUV_LIBARY=${BINARY_DIR}/libuv_a.a
 | 
			
		||||
            -DLIBUV_INCLUDE_DIR=${SOURCE_DIR}/include
 | 
			
		||||
            -DCASS_BUILD_STATIC=ON
 | 
			
		||||
            -DCASS_BUILD_SHARED=OFF
 | 
			
		||||
            -DOPENSSL_ROOT_DIR=/opt/local/openssl
 | 
			
		||||
            INSTALL_COMMAND ""
 | 
			
		||||
            BUILD_BYPRODUCTS <BINARY_DIR>/${ep_lib_prefix}cassandra_static.a
 | 
			
		||||
            LOG_BUILD TRUE
 | 
			
		||||
            LOG_CONFIGURE TRUE
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
        ExternalProject_Get_Property (cassandra_src SOURCE_DIR)
 | 
			
		||||
        ExternalProject_Get_Property (cassandra_src BINARY_DIR)
 | 
			
		||||
        set (cassandra_src_SOURCE_DIR "${SOURCE_DIR}")
 | 
			
		||||
        file (MAKE_DIRECTORY ${cassandra_src_SOURCE_DIR}/include)
 | 
			
		||||
 | 
			
		||||
        set_target_properties (cassandra PROPERTIES
 | 
			
		||||
            IMPORTED_LOCATION
 | 
			
		||||
            ${BINARY_DIR}/${ep_lib_prefix}cassandra_static.a
 | 
			
		||||
            INTERFACE_INCLUDE_DIRECTORIES
 | 
			
		||||
            ${SOURCE_DIR}/include)
 | 
			
		||||
        add_dependencies(cassandra cassandra_src)
 | 
			
		||||
 | 
			
		||||
        if(NOT libuv1)
 | 
			
		||||
            ExternalProject_Add_StepDependencies(cassandra_src build libuv1)
 | 
			
		||||
            target_link_libraries(cassandra INTERFACE libuv1)
 | 
			
		||||
        else()
 | 
			
		||||
            target_link_libraries(cassandra INTERFACE ${libuv1})
 | 
			
		||||
        endif()
 | 
			
		||||
        if(NOT krb5)
 | 
			
		||||
 | 
			
		||||
            ExternalProject_Add_StepDependencies(cassandra_src build krb5)
 | 
			
		||||
            target_link_libraries(cassandra INTERFACE krb5)
 | 
			
		||||
        else()
 | 
			
		||||
            target_link_libraries(cassandra INTERFACE ${krb5})
 | 
			
		||||
        endif()
 | 
			
		||||
 | 
			
		||||
        if(NOT zlib)
 | 
			
		||||
            ExternalProject_Add_StepDependencies(cassandra_src build zlib)
 | 
			
		||||
            target_link_libraries(cassandra INTERFACE zlib)
 | 
			
		||||
        else()
 | 
			
		||||
            target_link_libraries(cassandra INTERFACE ${zlib})
 | 
			
		||||
        endif()
 | 
			
		||||
 | 
			
		||||
        file(TO_CMAKE_PATH "${cassandra_src_SOURCE_DIR}" cassandra_src_SOURCE_DIR)
 | 
			
		||||
        target_link_libraries(ripple_libs INTERFACE cassandra)
 | 
			
		||||
    else()
 | 
			
		||||
        message("Found system installed cassandra cpp driver")
 | 
			
		||||
 | 
			
		||||
        find_path(cassandra_includes NAMES cassandra.h REQUIRED)
 | 
			
		||||
        target_link_libraries (ripple_libs INTERFACE ${cassandra})
 | 
			
		||||
        target_include_directories(ripple_libs INTERFACE ${cassandra_includes})
 | 
			
		||||
    endif()
 | 
			
		||||
 | 
			
		||||
    exclude_if_included (cassandra)
 | 
			
		||||
endif()
 | 
			
		||||
							
								
								
									
										18
									
								
								Builds/CMake/deps/date.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								Builds/CMake/deps/date.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
#[===================================================================[
 | 
			
		||||
   NIH dep: date
 | 
			
		||||
 | 
			
		||||
   the main library is header-only, thus is an INTERFACE lib in CMake.
 | 
			
		||||
 | 
			
		||||
   NOTE: this has been accepted into c++20 so can likely be replaced
 | 
			
		||||
   when we update to that standard
 | 
			
		||||
#]===================================================================]
 | 
			
		||||
 | 
			
		||||
find_package (date QUIET)
 | 
			
		||||
if (NOT TARGET date::date)
 | 
			
		||||
  FetchContent_Declare(
 | 
			
		||||
    hh_date_src
 | 
			
		||||
    GIT_REPOSITORY https://github.com/HowardHinnant/date.git
 | 
			
		||||
    GIT_TAG        fc4cf092f9674f2670fb9177edcdee870399b829
 | 
			
		||||
  )
 | 
			
		||||
  FetchContent_MakeAvailable(hh_date_src)
 | 
			
		||||
endif ()
 | 
			
		||||
@@ -1,4 +1,308 @@
 | 
			
		||||
find_package(gRPC 1.23)
 | 
			
		||||
 | 
			
		||||
# currently linking to unsecure versions...if we switch, we'll
 | 
			
		||||
# need to add ssl as a link dependency to the grpc targets
 | 
			
		||||
option (use_secure_grpc "use TLS version of grpc libs." OFF)
 | 
			
		||||
if (use_secure_grpc)
 | 
			
		||||
  set (grpc_suffix "")
 | 
			
		||||
else ()
 | 
			
		||||
  set (grpc_suffix "_unsecure")
 | 
			
		||||
endif ()
 | 
			
		||||
 | 
			
		||||
find_package (gRPC 1.23 CONFIG QUIET)
 | 
			
		||||
if (TARGET gRPC::gpr AND NOT local_grpc)
 | 
			
		||||
  get_target_property (_grpc_l gRPC::gpr IMPORTED_LOCATION_DEBUG)
 | 
			
		||||
  if (NOT _grpc_l)
 | 
			
		||||
    get_target_property (_grpc_l gRPC::gpr IMPORTED_LOCATION_RELEASE)
 | 
			
		||||
  endif ()
 | 
			
		||||
  if (NOT _grpc_l)
 | 
			
		||||
    get_target_property (_grpc_l gRPC::gpr IMPORTED_LOCATION)
 | 
			
		||||
  endif ()
 | 
			
		||||
  message (STATUS "Found cmake config for gRPC. Using ${_grpc_l}.")
 | 
			
		||||
else ()
 | 
			
		||||
  find_package (PkgConfig QUIET)
 | 
			
		||||
  if (PKG_CONFIG_FOUND)
 | 
			
		||||
    pkg_check_modules (grpc QUIET "grpc${grpc_suffix}>=1.25" "grpc++${grpc_suffix}" gpr)
 | 
			
		||||
  endif ()
 | 
			
		||||
 | 
			
		||||
  if (grpc_FOUND)
 | 
			
		||||
    message (STATUS "Found gRPC using pkg-config. Using ${grpc_gpr_PREFIX}.")
 | 
			
		||||
  endif ()
 | 
			
		||||
 | 
			
		||||
  add_executable (gRPC::grpc_cpp_plugin IMPORTED)
 | 
			
		||||
  exclude_if_included (gRPC::grpc_cpp_plugin)
 | 
			
		||||
 | 
			
		||||
  if (grpc_FOUND AND NOT local_grpc)
 | 
			
		||||
    # use installed grpc (via pkg-config)
 | 
			
		||||
    macro (add_imported_grpc libname_)
 | 
			
		||||
      if (static)
 | 
			
		||||
        set (_search "${CMAKE_STATIC_LIBRARY_PREFIX}${libname_}${CMAKE_STATIC_LIBRARY_SUFFIX}")
 | 
			
		||||
      else ()
 | 
			
		||||
        set (_search "${CMAKE_SHARED_LIBRARY_PREFIX}${libname_}${CMAKE_SHARED_LIBRARY_SUFFIX}")
 | 
			
		||||
      endif()
 | 
			
		||||
      find_library(_found_${libname_}
 | 
			
		||||
        NAMES ${_search}
 | 
			
		||||
        HINTS ${grpc_LIBRARY_DIRS})
 | 
			
		||||
      if (_found_${libname_})
 | 
			
		||||
        message (STATUS "importing ${libname_} as ${_found_${libname_}}")
 | 
			
		||||
      else ()
 | 
			
		||||
        message (FATAL_ERROR "using pkg-config for grpc, can't find ${_search}")
 | 
			
		||||
      endif ()
 | 
			
		||||
      add_library ("gRPC::${libname_}" STATIC IMPORTED GLOBAL)
 | 
			
		||||
      set_target_properties ("gRPC::${libname_}" PROPERTIES IMPORTED_LOCATION ${_found_${libname_}})
 | 
			
		||||
      if (grpc_INCLUDE_DIRS)
 | 
			
		||||
        set_target_properties ("gRPC::${libname_}" PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${grpc_INCLUDE_DIRS})
 | 
			
		||||
      endif ()
 | 
			
		||||
      target_link_libraries (ripple_libs INTERFACE "gRPC::${libname_}")
 | 
			
		||||
      exclude_if_included ("gRPC::${libname_}")
 | 
			
		||||
    endmacro ()
 | 
			
		||||
 | 
			
		||||
    set_target_properties (gRPC::grpc_cpp_plugin PROPERTIES
 | 
			
		||||
        IMPORTED_LOCATION "${grpc_gpr_PREFIX}/bin/grpc_cpp_plugin${CMAKE_EXECUTABLE_SUFFIX}")
 | 
			
		||||
 | 
			
		||||
    pkg_check_modules (cares QUIET libcares)
 | 
			
		||||
    if (cares_FOUND)
 | 
			
		||||
      if (static)
 | 
			
		||||
        set (_search "${CMAKE_STATIC_LIBRARY_PREFIX}cares${CMAKE_STATIC_LIBRARY_SUFFIX}")
 | 
			
		||||
        set (_prefix cares_STATIC)
 | 
			
		||||
        set (_static STATIC)
 | 
			
		||||
      else ()
 | 
			
		||||
        set (_search "${CMAKE_SHARED_LIBRARY_PREFIX}cares${CMAKE_SHARED_LIBRARY_SUFFIX}")
 | 
			
		||||
        set (_prefix cares)
 | 
			
		||||
        set (_static)
 | 
			
		||||
      endif()
 | 
			
		||||
      find_library(_location NAMES ${_search} HINTS ${cares_LIBRARY_DIRS})
 | 
			
		||||
      if (NOT _location)
 | 
			
		||||
        message (FATAL_ERROR "using pkg-config for grpc, can't find c-ares")
 | 
			
		||||
      endif ()
 | 
			
		||||
      add_library (c-ares::cares ${_static} IMPORTED GLOBAL)
 | 
			
		||||
      set_target_properties (c-ares::cares PROPERTIES
 | 
			
		||||
        IMPORTED_LOCATION ${_location}
 | 
			
		||||
        INTERFACE_INCLUDE_DIRECTORIES "${${_prefix}_INCLUDE_DIRS}"
 | 
			
		||||
        INTERFACE_LINK_OPTIONS "${${_prefix}_LDFLAGS}"
 | 
			
		||||
      )
 | 
			
		||||
      exclude_if_included (c-ares::cares)
 | 
			
		||||
    else ()
 | 
			
		||||
      message (FATAL_ERROR "using pkg-config for grpc, can't find c-ares")
 | 
			
		||||
    endif ()
 | 
			
		||||
  else ()
 | 
			
		||||
    #[===========================[
 | 
			
		||||
       c-ares (grpc requires)
 | 
			
		||||
    #]===========================]
 | 
			
		||||
    ExternalProject_Add (c-ares_src
 | 
			
		||||
      PREFIX ${nih_cache_path}
 | 
			
		||||
      GIT_REPOSITORY https://github.com/c-ares/c-ares.git
 | 
			
		||||
      GIT_TAG cares-1_15_0
 | 
			
		||||
      CMAKE_ARGS
 | 
			
		||||
        -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
 | 
			
		||||
        $<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:-DCMAKE_VERBOSE_MAKEFILE=ON>
 | 
			
		||||
        -DCMAKE_DEBUG_POSTFIX=_d
 | 
			
		||||
        $<$<NOT:$<BOOL:${is_multiconfig}>>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}>
 | 
			
		||||
        -DCMAKE_INSTALL_PREFIX=<BINARY_DIR>/_installed_
 | 
			
		||||
        -DCARES_SHARED=OFF
 | 
			
		||||
        -DCARES_STATIC=ON
 | 
			
		||||
        -DCARES_STATIC_PIC=ON
 | 
			
		||||
        -DCARES_INSTALL=ON
 | 
			
		||||
        -DCARES_MSVC_STATIC_RUNTIME=ON
 | 
			
		||||
        $<$<BOOL:${MSVC}>:
 | 
			
		||||
          "-DCMAKE_C_FLAGS=-GR -Gd -fp:precise -FS -MP"
 | 
			
		||||
        >
 | 
			
		||||
      LOG_BUILD ON
 | 
			
		||||
      LOG_CONFIGURE ON
 | 
			
		||||
      BUILD_COMMAND
 | 
			
		||||
        ${CMAKE_COMMAND}
 | 
			
		||||
          --build .
 | 
			
		||||
          --config $<CONFIG>
 | 
			
		||||
          --parallel ${ep_procs}
 | 
			
		||||
      TEST_COMMAND ""
 | 
			
		||||
      INSTALL_COMMAND
 | 
			
		||||
        ${CMAKE_COMMAND} -E env --unset=DESTDIR ${CMAKE_COMMAND} --build . --config $<CONFIG> --target install
 | 
			
		||||
      BUILD_BYPRODUCTS
 | 
			
		||||
        <BINARY_DIR>/_installed_/lib/${ep_lib_prefix}cares${ep_lib_suffix}
 | 
			
		||||
        <BINARY_DIR>/_installed_/lib/${ep_lib_prefix}cares_d${ep_lib_suffix}
 | 
			
		||||
    )
 | 
			
		||||
    exclude_if_included (c-ares_src)
 | 
			
		||||
    ExternalProject_Get_Property (c-ares_src BINARY_DIR)
 | 
			
		||||
    set (cares_binary_dir "${BINARY_DIR}")
 | 
			
		||||
 | 
			
		||||
    add_library (c-ares::cares STATIC IMPORTED GLOBAL)
 | 
			
		||||
    file (MAKE_DIRECTORY ${BINARY_DIR}/_installed_/include)
 | 
			
		||||
    set_target_properties (c-ares::cares PROPERTIES
 | 
			
		||||
      IMPORTED_LOCATION_DEBUG
 | 
			
		||||
        ${BINARY_DIR}/_installed_/lib/${ep_lib_prefix}cares_d${ep_lib_suffix}
 | 
			
		||||
      IMPORTED_LOCATION_RELEASE
 | 
			
		||||
        ${BINARY_DIR}/_installed_/lib/${ep_lib_prefix}cares${ep_lib_suffix}
 | 
			
		||||
      INTERFACE_INCLUDE_DIRECTORIES
 | 
			
		||||
        ${BINARY_DIR}/_installed_/include)
 | 
			
		||||
    add_dependencies (c-ares::cares c-ares_src)
 | 
			
		||||
    exclude_if_included (c-ares::cares)
 | 
			
		||||
 | 
			
		||||
    if (NOT has_zlib)
 | 
			
		||||
      #[===========================[
 | 
			
		||||
         zlib (grpc requires)
 | 
			
		||||
      #]===========================]
 | 
			
		||||
      if (MSVC)
 | 
			
		||||
        set (zlib_debug_postfix "d") # zlib cmake sets this internally for MSVC, so we really don't have a choice
 | 
			
		||||
        set (zlib_base "zlibstatic")
 | 
			
		||||
      else ()
 | 
			
		||||
        set (zlib_debug_postfix "_d")
 | 
			
		||||
        set (zlib_base "z")
 | 
			
		||||
      endif ()
 | 
			
		||||
      ExternalProject_Add (zlib_src
 | 
			
		||||
        PREFIX ${nih_cache_path}
 | 
			
		||||
        GIT_REPOSITORY https://github.com/madler/zlib.git
 | 
			
		||||
        GIT_TAG v1.2.11
 | 
			
		||||
        CMAKE_ARGS
 | 
			
		||||
          -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
 | 
			
		||||
          $<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:-DCMAKE_VERBOSE_MAKEFILE=ON>
 | 
			
		||||
          -DCMAKE_DEBUG_POSTFIX=${zlib_debug_postfix}
 | 
			
		||||
          $<$<NOT:$<BOOL:${is_multiconfig}>>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}>
 | 
			
		||||
          -DCMAKE_INSTALL_PREFIX=<BINARY_DIR>/_installed_
 | 
			
		||||
          -DBUILD_SHARED_LIBS=OFF
 | 
			
		||||
          $<$<BOOL:${MSVC}>:
 | 
			
		||||
            "-DCMAKE_C_FLAGS=-GR -Gd -fp:precise -FS -MP"
 | 
			
		||||
            "-DCMAKE_C_FLAGS_DEBUG=-MTd"
 | 
			
		||||
            "-DCMAKE_C_FLAGS_RELEASE=-MT"
 | 
			
		||||
          >
 | 
			
		||||
        LOG_BUILD ON
 | 
			
		||||
        LOG_CONFIGURE ON
 | 
			
		||||
        BUILD_COMMAND
 | 
			
		||||
          ${CMAKE_COMMAND}
 | 
			
		||||
            --build .
 | 
			
		||||
            --config $<CONFIG>
 | 
			
		||||
            --parallel ${ep_procs}
 | 
			
		||||
        TEST_COMMAND ""
 | 
			
		||||
        INSTALL_COMMAND
 | 
			
		||||
          ${CMAKE_COMMAND} -E env --unset=DESTDIR ${CMAKE_COMMAND} --build . --config $<CONFIG> --target install
 | 
			
		||||
        BUILD_BYPRODUCTS
 | 
			
		||||
          <BINARY_DIR>/_installed_/lib/${ep_lib_prefix}${zlib_base}${ep_lib_suffix}
 | 
			
		||||
          <BINARY_DIR>/_installed_/lib/${ep_lib_prefix}${zlib_base}${zlib_debug_postfix}${ep_lib_suffix}
 | 
			
		||||
      )
 | 
			
		||||
      exclude_if_included (zlib_src)
 | 
			
		||||
      ExternalProject_Get_Property (zlib_src BINARY_DIR)
 | 
			
		||||
      set (zlib_binary_dir "${BINARY_DIR}")
 | 
			
		||||
 | 
			
		||||
      add_library (ZLIB::ZLIB STATIC IMPORTED GLOBAL)
 | 
			
		||||
      file (MAKE_DIRECTORY ${BINARY_DIR}/_installed_/include)
 | 
			
		||||
      set_target_properties (ZLIB::ZLIB PROPERTIES
 | 
			
		||||
        IMPORTED_LOCATION_DEBUG
 | 
			
		||||
          ${BINARY_DIR}/_installed_/lib/${ep_lib_prefix}${zlib_base}${zlib_debug_postfix}${ep_lib_suffix}
 | 
			
		||||
        IMPORTED_LOCATION_RELEASE
 | 
			
		||||
          ${BINARY_DIR}/_installed_/lib/${ep_lib_prefix}${zlib_base}${ep_lib_suffix}
 | 
			
		||||
        INTERFACE_INCLUDE_DIRECTORIES
 | 
			
		||||
          ${BINARY_DIR}/_installed_/include)
 | 
			
		||||
      add_dependencies (ZLIB::ZLIB zlib_src)
 | 
			
		||||
      exclude_if_included (ZLIB::ZLIB)
 | 
			
		||||
    endif ()
 | 
			
		||||
 | 
			
		||||
    #[===========================[
 | 
			
		||||
       grpc
 | 
			
		||||
    #]===========================]
 | 
			
		||||
    ExternalProject_Add (grpc_src
 | 
			
		||||
      PREFIX ${nih_cache_path}
 | 
			
		||||
      GIT_REPOSITORY https://github.com/grpc/grpc.git
 | 
			
		||||
      GIT_TAG v1.25.0
 | 
			
		||||
      CMAKE_ARGS
 | 
			
		||||
        -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
 | 
			
		||||
        -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
 | 
			
		||||
        $<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:-DCMAKE_VERBOSE_MAKEFILE=ON>
 | 
			
		||||
        $<$<BOOL:${CMAKE_TOOLCHAIN_FILE}>:-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}>
 | 
			
		||||
        $<$<BOOL:${VCPKG_TARGET_TRIPLET}>:-DVCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET}>
 | 
			
		||||
        $<$<BOOL:${unity}>:-DCMAKE_UNITY_BUILD=ON}>
 | 
			
		||||
        -DCMAKE_DEBUG_POSTFIX=_d
 | 
			
		||||
        $<$<NOT:$<BOOL:${is_multiconfig}>>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}>
 | 
			
		||||
        -DgRPC_BUILD_TESTS=OFF
 | 
			
		||||
        -DgRPC_BENCHMARK_PROVIDER=""
 | 
			
		||||
        -DgRPC_BUILD_CSHARP_EXT=OFF
 | 
			
		||||
        -DgRPC_MSVC_STATIC_RUNTIME=ON
 | 
			
		||||
        -DgRPC_INSTALL=OFF
 | 
			
		||||
        -DgRPC_CARES_PROVIDER=package
 | 
			
		||||
        -Dc-ares_DIR=${cares_binary_dir}/_installed_/lib/cmake/c-ares
 | 
			
		||||
        -DgRPC_SSL_PROVIDER=package
 | 
			
		||||
        -DOPENSSL_ROOT_DIR=${OPENSSL_ROOT_DIR}
 | 
			
		||||
        -DgRPC_PROTOBUF_PROVIDER=package
 | 
			
		||||
        -DProtobuf_USE_STATIC_LIBS=$<IF:$<AND:$<BOOL:${Protobuf_FOUND}>,$<NOT:$<BOOL:${static}>>>,OFF,ON>
 | 
			
		||||
        -DProtobuf_INCLUDE_DIR=$<JOIN:$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_INCLUDE_DIRECTORIES>,:_:>
 | 
			
		||||
        -DProtobuf_LIBRARY=$<IF:$<CONFIG:Debug>,$<TARGET_PROPERTY:protobuf::libprotobuf,IMPORTED_LOCATION_DEBUG>,$<TARGET_PROPERTY:protobuf::libprotobuf,IMPORTED_LOCATION_RELEASE>>
 | 
			
		||||
        -DProtobuf_PROTOC_LIBRARY=$<IF:$<CONFIG:Debug>,$<TARGET_PROPERTY:protobuf::libprotoc,IMPORTED_LOCATION_DEBUG>,$<TARGET_PROPERTY:protobuf::libprotoc,IMPORTED_LOCATION_RELEASE>>
 | 
			
		||||
        -DProtobuf_PROTOC_EXECUTABLE=$<TARGET_PROPERTY:protobuf::protoc,IMPORTED_LOCATION>
 | 
			
		||||
        -DgRPC_ZLIB_PROVIDER=package
 | 
			
		||||
        $<$<NOT:$<BOOL:${has_zlib}>>:-DZLIB_ROOT=${zlib_binary_dir}/_installed_>
 | 
			
		||||
        $<$<BOOL:${MSVC}>:
 | 
			
		||||
          "-DCMAKE_CXX_FLAGS=-GR -Gd -fp:precise -FS -EHa -MP"
 | 
			
		||||
          "-DCMAKE_C_FLAGS=-GR -Gd -fp:precise -FS -MP"
 | 
			
		||||
        >
 | 
			
		||||
      LOG_BUILD ON
 | 
			
		||||
      LOG_CONFIGURE ON
 | 
			
		||||
      BUILD_COMMAND
 | 
			
		||||
        ${CMAKE_COMMAND}
 | 
			
		||||
        --build .
 | 
			
		||||
        --config $<CONFIG>
 | 
			
		||||
        --parallel ${ep_procs}
 | 
			
		||||
        $<$<BOOL:${is_multiconfig}>:
 | 
			
		||||
          COMMAND
 | 
			
		||||
            ${CMAKE_COMMAND} -E copy
 | 
			
		||||
            <BINARY_DIR>/$<CONFIG>/${ep_lib_prefix}grpc${grpc_suffix}$<$<CONFIG:Debug>:_d>${ep_lib_suffix}
 | 
			
		||||
            <BINARY_DIR>/$<CONFIG>/${ep_lib_prefix}grpc++${grpc_suffix}$<$<CONFIG:Debug>:_d>${ep_lib_suffix}
 | 
			
		||||
            <BINARY_DIR>/$<CONFIG>/${ep_lib_prefix}address_sorting$<$<CONFIG:Debug>:_d>${ep_lib_suffix}
 | 
			
		||||
            <BINARY_DIR>/$<CONFIG>/${ep_lib_prefix}gpr$<$<CONFIG:Debug>:_d>${ep_lib_suffix}
 | 
			
		||||
            <BINARY_DIR>/$<CONFIG>/grpc_cpp_plugin${CMAKE_EXECUTABLE_SUFFIX}
 | 
			
		||||
            <BINARY_DIR>
 | 
			
		||||
          >
 | 
			
		||||
      LIST_SEPARATOR :_:
 | 
			
		||||
      TEST_COMMAND ""
 | 
			
		||||
      INSTALL_COMMAND ""
 | 
			
		||||
      DEPENDS c-ares_src
 | 
			
		||||
      BUILD_BYPRODUCTS
 | 
			
		||||
        <BINARY_DIR>/${ep_lib_prefix}grpc${grpc_suffix}${ep_lib_suffix}
 | 
			
		||||
        <BINARY_DIR>/${ep_lib_prefix}grpc${grpc_suffix}_d${ep_lib_suffix}
 | 
			
		||||
        <BINARY_DIR>/${ep_lib_prefix}grpc++${grpc_suffix}${ep_lib_suffix}
 | 
			
		||||
        <BINARY_DIR>/${ep_lib_prefix}grpc++${grpc_suffix}_d${ep_lib_suffix}
 | 
			
		||||
        <BINARY_DIR>/${ep_lib_prefix}address_sorting${ep_lib_suffix}
 | 
			
		||||
        <BINARY_DIR>/${ep_lib_prefix}address_sorting_d${ep_lib_suffix}
 | 
			
		||||
        <BINARY_DIR>/${ep_lib_prefix}gpr${ep_lib_suffix}
 | 
			
		||||
        <BINARY_DIR>/${ep_lib_prefix}gpr_d${ep_lib_suffix}
 | 
			
		||||
        <BINARY_DIR>/grpc_cpp_plugin${CMAKE_EXECUTABLE_SUFFIX}
 | 
			
		||||
    )
 | 
			
		||||
    if (TARGET protobuf_src)
 | 
			
		||||
      ExternalProject_Add_StepDependencies(grpc_src build protobuf_src)
 | 
			
		||||
    endif ()
 | 
			
		||||
    exclude_if_included (grpc_src)
 | 
			
		||||
    ExternalProject_Get_Property (grpc_src BINARY_DIR)
 | 
			
		||||
    ExternalProject_Get_Property (grpc_src SOURCE_DIR)
 | 
			
		||||
    set (grpc_binary_dir "${BINARY_DIR}")
 | 
			
		||||
    set (grpc_source_dir "${SOURCE_DIR}")
 | 
			
		||||
    if (CMAKE_VERBOSE_MAKEFILE)
 | 
			
		||||
      print_ep_logs (grpc_src)
 | 
			
		||||
    endif ()
 | 
			
		||||
    file (MAKE_DIRECTORY ${SOURCE_DIR}/include)
 | 
			
		||||
 | 
			
		||||
    macro (add_imported_grpc libname_)
 | 
			
		||||
      add_library ("gRPC::${libname_}" STATIC IMPORTED GLOBAL)
 | 
			
		||||
      set_target_properties ("gRPC::${libname_}" PROPERTIES
 | 
			
		||||
        IMPORTED_LOCATION_DEBUG
 | 
			
		||||
          ${grpc_binary_dir}/${ep_lib_prefix}${libname_}_d${ep_lib_suffix}
 | 
			
		||||
        IMPORTED_LOCATION_RELEASE
 | 
			
		||||
          ${grpc_binary_dir}/${ep_lib_prefix}${libname_}${ep_lib_suffix}
 | 
			
		||||
        INTERFACE_INCLUDE_DIRECTORIES
 | 
			
		||||
          ${grpc_source_dir}/include)
 | 
			
		||||
      add_dependencies ("gRPC::${libname_}" grpc_src)
 | 
			
		||||
      target_link_libraries (ripple_libs INTERFACE "gRPC::${libname_}")
 | 
			
		||||
      exclude_if_included ("gRPC::${libname_}")
 | 
			
		||||
    endmacro ()
 | 
			
		||||
 | 
			
		||||
    set_target_properties (gRPC::grpc_cpp_plugin PROPERTIES
 | 
			
		||||
        IMPORTED_LOCATION "${grpc_binary_dir}/grpc_cpp_plugin${CMAKE_EXECUTABLE_SUFFIX}")
 | 
			
		||||
    add_dependencies (gRPC::grpc_cpp_plugin grpc_src)
 | 
			
		||||
  endif ()
 | 
			
		||||
 | 
			
		||||
  add_imported_grpc (gpr)
 | 
			
		||||
  add_imported_grpc ("grpc${grpc_suffix}")
 | 
			
		||||
  add_imported_grpc ("grpc++${grpc_suffix}")
 | 
			
		||||
  add_imported_grpc (address_sorting)
 | 
			
		||||
 | 
			
		||||
  target_link_libraries ("gRPC::grpc${grpc_suffix}" INTERFACE c-ares::cares gRPC::gpr gRPC::address_sorting ZLIB::ZLIB)
 | 
			
		||||
  target_link_libraries ("gRPC::grpc++${grpc_suffix}" INTERFACE "gRPC::grpc${grpc_suffix}" gRPC::gpr)
 | 
			
		||||
endif ()
 | 
			
		||||
 | 
			
		||||
#[=================================[
 | 
			
		||||
   generate protobuf sources for
 | 
			
		||||
@@ -44,19 +348,17 @@ endforeach()
 | 
			
		||||
add_library (grpc_pbufs STATIC ${GRPC_PROTO_SRCS} ${GRPC_PROTO_HDRS})
 | 
			
		||||
#target_include_directories (grpc_pbufs PRIVATE src)
 | 
			
		||||
target_include_directories (grpc_pbufs SYSTEM PUBLIC ${GRPC_GEN_DIR})
 | 
			
		||||
target_link_libraries(grpc_pbufs
 | 
			
		||||
  "gRPC::grpc++"
 | 
			
		||||
  # libgrpc is missing references.
 | 
			
		||||
  absl::random_random
 | 
			
		||||
)
 | 
			
		||||
target_link_libraries (grpc_pbufs protobuf::libprotobuf "gRPC::grpc++${grpc_suffix}")
 | 
			
		||||
target_compile_options (grpc_pbufs
 | 
			
		||||
  PRIVATE
 | 
			
		||||
    $<$<BOOL:${MSVC}>:-wd4065>
 | 
			
		||||
    $<$<NOT:$<BOOL:${MSVC}>>:-Wno-deprecated-declarations>
 | 
			
		||||
  PUBLIC
 | 
			
		||||
    $<$<BOOL:${MSVC}>:-wd4996>
 | 
			
		||||
    $<$<BOOL:${XCODE}>:
 | 
			
		||||
    $<$<BOOL:${is_xcode}>:
 | 
			
		||||
      --system-header-prefix="google/protobuf"
 | 
			
		||||
      -Wno-deprecated-dynamic-exception-spec
 | 
			
		||||
    >)
 | 
			
		||||
add_library (Ripple::grpc_pbufs ALIAS grpc_pbufs)
 | 
			
		||||
target_link_libraries (ripple_libs INTERFACE Ripple::grpc_pbufs)
 | 
			
		||||
exclude_if_included (grpc_pbufs)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										15
									
								
								Builds/CMake/rocks_thirdparty.inc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								Builds/CMake/rocks_thirdparty.inc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
set (THIRDPARTY_LIBS "")
 | 
			
		||||
 | 
			
		||||
if(WITH_SNAPPY)
 | 
			
		||||
  add_definitions(-DSNAPPY)
 | 
			
		||||
  include_directories(${snappy_INCLUDE_DIRS})
 | 
			
		||||
  set (THIRDPARTY_LIBS ${THIRDPARTY_LIBS} ${snappy_LIBRARIES})
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
if(WITH_LZ4)
 | 
			
		||||
  add_definitions(-DLZ4)
 | 
			
		||||
  include_directories(${lz4_INCLUDE_DIRS})
 | 
			
		||||
  set (THIRDPARTY_LIBS ${THIRDPARTY_LIBS} ${lz4_LIBRARIES})
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										71
									
								
								Builds/CMake/rocksdb_build_version.cc.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								Builds/CMake/rocksdb_build_version.cc.in
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,71 @@
 | 
			
		||||
// Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
 | 
			
		||||
 | 
			
		||||
#include <memory>
 | 
			
		||||
 | 
			
		||||
#include "rocksdb/version.h"
 | 
			
		||||
#include "util/string_util.h"
 | 
			
		||||
 | 
			
		||||
// The build script may replace these values with real values based
 | 
			
		||||
// on whether or not GIT is available and the platform settings
 | 
			
		||||
static const std::string rocksdb_build_git_sha  = "rocksdb_build_git_sha:@GIT_SHA@";
 | 
			
		||||
static const std::string rocksdb_build_git_tag = "rocksdb_build_git_tag:@GIT_TAG@";
 | 
			
		||||
#define HAS_GIT_CHANGES @GIT_MOD@
 | 
			
		||||
#if HAS_GIT_CHANGES == 0
 | 
			
		||||
// If HAS_GIT_CHANGES is 0, the GIT date is used.
 | 
			
		||||
// Use the time the branch/tag was last modified
 | 
			
		||||
static const std::string rocksdb_build_date = "rocksdb_build_date:@GIT_DATE@";
 | 
			
		||||
#else
 | 
			
		||||
// If HAS_GIT_CHANGES is > 0, the branch/tag has modifications.
 | 
			
		||||
// Use the time the build was created.
 | 
			
		||||
static const std::string rocksdb_build_date = "rocksdb_build_date:@BUILD_DATE@";
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
namespace ROCKSDB_NAMESPACE {
 | 
			
		||||
static void AddProperty(std::unordered_map<std::string, std::string> *props, const std::string& name) {
 | 
			
		||||
  size_t colon = name.find(":");
 | 
			
		||||
  if (colon != std::string::npos && colon > 0 && colon < name.length() - 1) {
 | 
			
		||||
    // If we found a "@:", then this property was a build-time substitution that failed.  Skip it
 | 
			
		||||
    size_t at = name.find("@", colon);
 | 
			
		||||
    if (at != colon + 1) {
 | 
			
		||||
      // Everything before the colon is the name, after is the value
 | 
			
		||||
      (*props)[name.substr(0, colon)] = name.substr(colon + 1);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
  
 | 
			
		||||
static std::unordered_map<std::string, std::string>* LoadPropertiesSet() {
 | 
			
		||||
  auto * properties = new std::unordered_map<std::string, std::string>();
 | 
			
		||||
  AddProperty(properties, rocksdb_build_git_sha);
 | 
			
		||||
  AddProperty(properties, rocksdb_build_git_tag);
 | 
			
		||||
  AddProperty(properties, rocksdb_build_date);
 | 
			
		||||
  return properties;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const std::unordered_map<std::string, std::string>& GetRocksBuildProperties() {
 | 
			
		||||
  static std::unique_ptr<std::unordered_map<std::string, std::string>> props(LoadPropertiesSet());
 | 
			
		||||
  return *props;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
std::string GetRocksVersionAsString(bool with_patch) {
 | 
			
		||||
  std::string version = ToString(ROCKSDB_MAJOR) + "." + ToString(ROCKSDB_MINOR);
 | 
			
		||||
  if (with_patch) {
 | 
			
		||||
    return version + "." + ToString(ROCKSDB_PATCH);
 | 
			
		||||
  } else {
 | 
			
		||||
    return version;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
  
 | 
			
		||||
std::string GetRocksBuildInfoAsString(const std::string& program, bool verbose) {
 | 
			
		||||
  std::string info = program + " (RocksDB) " + GetRocksVersionAsString(true);
 | 
			
		||||
  if (verbose) {
 | 
			
		||||
    for (const auto& it : GetRocksBuildProperties()) {
 | 
			
		||||
      info.append("\n    ");
 | 
			
		||||
      info.append(it.first);
 | 
			
		||||
      info.append(": ");
 | 
			
		||||
      info.append(it.second);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return info;
 | 
			
		||||
}
 | 
			
		||||
} // namespace ROCKSDB_NAMESPACE
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										49
									
								
								Builds/CMake/soci_patch.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								Builds/CMake/soci_patch.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
# This patches unsigned-types.h in the soci official sources
 | 
			
		||||
# so as to remove type range check exceptions that cause
 | 
			
		||||
# us trouble when using boost::optional to select int values
 | 
			
		||||
 | 
			
		||||
# Soci's CMake setup leaves flags in place that will cause warnings to
 | 
			
		||||
# be treated as errors, but some compiler versions throw "new" warnings
 | 
			
		||||
# that then cause the build to fail. Simplify that until soci fixes
 | 
			
		||||
# those warnings.
 | 
			
		||||
if (RIPPLED_SOURCE)
 | 
			
		||||
  execute_process( COMMAND ${CMAKE_COMMAND} -E copy_if_different
 | 
			
		||||
      ${RIPPLED_SOURCE}/Builds/CMake/SociConfig.cmake.patched
 | 
			
		||||
      cmake/SociConfig.cmake )
 | 
			
		||||
endif ()
 | 
			
		||||
 | 
			
		||||
# Some versions of CMake erroneously patch external projects on every build.
 | 
			
		||||
# If the patch makes no changes, skip it. This workaround can be
 | 
			
		||||
# removed once we stop supporting vulnerable versions of CMake.
 | 
			
		||||
# https://gitlab.kitware.com/cmake/cmake/-/issues/21086
 | 
			
		||||
file (STRINGS include/soci/unsigned-types.h sourcecode)
 | 
			
		||||
# Delete the .patched file if it exists, so it doesn't end up duplicated.
 | 
			
		||||
# Trying to remove a file that does not exist is not a problem.
 | 
			
		||||
file (REMOVE include/soci/unsigned-types.h.patched)
 | 
			
		||||
foreach (line_ ${sourcecode})
 | 
			
		||||
  if (line_ MATCHES "^[ \\t]+throw[ ]+soci_error[ ]*\\([ ]*\"Value outside of allowed.+$")
 | 
			
		||||
    set (line_ "//${CMAKE_MATCH_0}")
 | 
			
		||||
  endif ()
 | 
			
		||||
  file (APPEND include/soci/unsigned-types.h.patched "${line_}\n")
 | 
			
		||||
endforeach ()
 | 
			
		||||
execute_process( COMMAND ${CMAKE_COMMAND} -E compare_files
 | 
			
		||||
                 include/soci/unsigned-types.h include/soci/unsigned-types.h.patched
 | 
			
		||||
                 RESULT_VARIABLE compare_result
 | 
			
		||||
)
 | 
			
		||||
if( compare_result EQUAL 0)
 | 
			
		||||
  message(DEBUG "The soci source and patch files are identical. Make no changes.")
 | 
			
		||||
  file (REMOVE include/soci/unsigned-types.h.patched)
 | 
			
		||||
  return()
 | 
			
		||||
endif()
 | 
			
		||||
file (RENAME include/soci/unsigned-types.h include/soci/unsigned-types.h.orig)
 | 
			
		||||
file (RENAME include/soci/unsigned-types.h.patched include/soci/unsigned-types.h)
 | 
			
		||||
# also fix Boost.cmake so that it just returns when we override the Boost_FOUND var
 | 
			
		||||
file (APPEND cmake/dependencies/Boost.cmake.patched "if (Boost_FOUND)\n")
 | 
			
		||||
file (APPEND cmake/dependencies/Boost.cmake.patched "  return ()\n")
 | 
			
		||||
file (APPEND cmake/dependencies/Boost.cmake.patched "endif ()\n")
 | 
			
		||||
file (STRINGS cmake/dependencies/Boost.cmake sourcecode)
 | 
			
		||||
foreach (line_ ${sourcecode})
 | 
			
		||||
  file (APPEND cmake/dependencies/Boost.cmake.patched "${line_}\n")
 | 
			
		||||
endforeach ()
 | 
			
		||||
file (RENAME cmake/dependencies/Boost.cmake.patched cmake/dependencies/Boost.cmake)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1
									
								
								Builds/VisualStudio2017/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								Builds/VisualStudio2017/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
[Build instructions are currently located in `BUILD.md`](../../BUILD.md)
 | 
			
		||||
							
								
								
									
										45
									
								
								Builds/VisualStudio2019/CMakeSettings-example.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								Builds/VisualStudio2019/CMakeSettings-example.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
			
		||||
{
 | 
			
		||||
  // See https://go.microsoft.com//fwlink//?linkid=834763 for more information about this file.
 | 
			
		||||
  "configurations": [
 | 
			
		||||
    {
 | 
			
		||||
      "name": "x64-Debug",
 | 
			
		||||
      "generator": "Visual Studio 16 2019",
 | 
			
		||||
      "configurationType": "Debug",
 | 
			
		||||
      "inheritEnvironments": [ "msvc_x64_x64" ],
 | 
			
		||||
      "buildRoot": "${thisFileDir}\\build\\${name}",
 | 
			
		||||
      "cmakeCommandArgs": "",
 | 
			
		||||
      "buildCommandArgs": "-v:minimal",
 | 
			
		||||
      "ctestCommandArgs": "",
 | 
			
		||||
      "variables": [
 | 
			
		||||
        {
 | 
			
		||||
          "name": "BOOST_ROOT",
 | 
			
		||||
          "value": "C:\\lib\\boost"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "name": "OPENSSL_ROOT",
 | 
			
		||||
          "value": "C:\\lib\\OpenSSL-Win64"
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "name": "x64-Release",
 | 
			
		||||
      "generator": "Visual Studio 16 2019",
 | 
			
		||||
      "configurationType": "Release",
 | 
			
		||||
      "inheritEnvironments": [ "msvc_x64_x64" ],
 | 
			
		||||
      "buildRoot": "${thisFileDir}\\build\\${name}",
 | 
			
		||||
      "cmakeCommandArgs": "",
 | 
			
		||||
      "buildCommandArgs": "-v:minimal",
 | 
			
		||||
      "ctestCommandArgs": "",
 | 
			
		||||
      "variables": [
 | 
			
		||||
        {
 | 
			
		||||
          "name": "BOOST_ROOT",
 | 
			
		||||
          "value": "C:\\lib\\boost"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "name": "OPENSSL_ROOT",
 | 
			
		||||
          "value": "C:\\lib\\OpenSSL-Win64"
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										263
									
								
								Builds/VisualStudio2019/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										263
									
								
								Builds/VisualStudio2019/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,263 @@
 | 
			
		||||
# Visual Studio 2019 Build Instructions
 | 
			
		||||
 | 
			
		||||
## Important
 | 
			
		||||
 | 
			
		||||
We do not recommend Windows for rippled production use at this time. Currently,
 | 
			
		||||
the Ubuntu platform has received the highest level of quality assurance,
 | 
			
		||||
testing, and support. Additionally, 32-bit Windows versions are not supported.
 | 
			
		||||
 | 
			
		||||
## Prerequisites
 | 
			
		||||
 | 
			
		||||
To clone the source code repository, create branches for inspection or
 | 
			
		||||
modification, build rippled under Visual Studio, and run the unit tests you will
 | 
			
		||||
need these software components
 | 
			
		||||
 | 
			
		||||
| Component | Minimum Recommended Version |
 | 
			
		||||
|-----------|-----------------------|
 | 
			
		||||
| [Visual Studio 2019](README.md#install-visual-studio-2019)| 15.5.4 |
 | 
			
		||||
| [Git for Windows](README.md#install-git-for-windows)| 2.16.1 |
 | 
			
		||||
| [OpenSSL Library](README.md#install-openssl) | 1.1.1L |
 | 
			
		||||
| [Boost library](README.md#build-boost) | 1.70.0 |
 | 
			
		||||
| [CMake for Windows](README.md#optional-install-cmake-for-windows)* | 3.12 |
 | 
			
		||||
 | 
			
		||||
\* Only needed if not using the integrated CMake in VS 2019 and prefer generating dedicated project/solution files.
 | 
			
		||||
 | 
			
		||||
## Install Software
 | 
			
		||||
 | 
			
		||||
### Install Visual Studio 2019
 | 
			
		||||
 | 
			
		||||
If not already installed on your system, download your choice of installer from
 | 
			
		||||
the [Visual Studio 2019
 | 
			
		||||
Download](https://www.visualstudio.com/downloads/download-visual-studio-vs)
 | 
			
		||||
page, run the installer, and follow the directions. **You may need to choose the
 | 
			
		||||
`Desktop development with C++` workload to install all necessary C++ features.**
 | 
			
		||||
 | 
			
		||||
Any version of Visual Studio 2019 may be used to build rippled. The **Visual
 | 
			
		||||
Studio 2019 Community** edition is available free of charge (see [the product
 | 
			
		||||
page](https://www.visualstudio.com/products/visual-studio-community-vs) for
 | 
			
		||||
licensing details), while paid editions may be used for an initial free-trial
 | 
			
		||||
period.
 | 
			
		||||
 | 
			
		||||
### Install Git for Windows
 | 
			
		||||
 | 
			
		||||
Git is a distributed revision control system. The Windows version also provides
 | 
			
		||||
the bash shell and many Windows versions of Unix commands. While there are other
 | 
			
		||||
varieties of Git (such as TortoiseGit, which has a native Windows interface and
 | 
			
		||||
integrates with the Explorer shell), we recommend installing [Git for
 | 
			
		||||
Windows](https://git-scm.com/) since it provides a Unix-like command line
 | 
			
		||||
environment useful for running shell scripts. Use of the bash shell under
 | 
			
		||||
Windows is mandatory for running the unit tests.
 | 
			
		||||
 | 
			
		||||
### Install OpenSSL
 | 
			
		||||
 | 
			
		||||
[Download the latest version of
 | 
			
		||||
OpenSSL.](http://slproweb.com/products/Win32OpenSSL.html) There will
 | 
			
		||||
several `Win64` bit variants available, you want the non-light
 | 
			
		||||
`v1.1` line. As of this writing, you **should** select
 | 
			
		||||
 | 
			
		||||
* Win64 OpenSSL v1.1.1q
 | 
			
		||||
 | 
			
		||||
and should **not** select
 | 
			
		||||
 | 
			
		||||
* Anything with "Win32" in the name
 | 
			
		||||
* Anything with "light" in the name
 | 
			
		||||
* Anything with "EXPERIMENTAL" in the name
 | 
			
		||||
* Anything in the 3.0 line - rippled won't currently build with this version.
 | 
			
		||||
 | 
			
		||||
Run the installer, and choose an appropriate location for your OpenSSL
 | 
			
		||||
installation. In this guide we use `C:\lib\OpenSSL-Win64` as the destination
 | 
			
		||||
location.
 | 
			
		||||
 | 
			
		||||
You may be informed on running the installer that "Visual C++ 2008
 | 
			
		||||
Redistributables" must first be installed first. If so, download it from the
 | 
			
		||||
[same page](http://slproweb.com/products/Win32OpenSSL.html), again making sure
 | 
			
		||||
to get the correct 32-/64-bit variant.
 | 
			
		||||
 | 
			
		||||
* NOTE: Since rippled links statically to OpenSSL, it does not matter where the
 | 
			
		||||
  OpenSSL .DLL files are placed, or what version they are. rippled does not use
 | 
			
		||||
  or require any external .DLL files to run other than the standard operating
 | 
			
		||||
  system ones.
 | 
			
		||||
 | 
			
		||||
### Build Boost
 | 
			
		||||
 | 
			
		||||
Boost 1.70 or later is required.
 | 
			
		||||
 | 
			
		||||
[Download boost](http://www.boost.org/users/download/) and unpack it
 | 
			
		||||
to `c:\lib`. As of this writing, the most recent version of boost is 1.80.0,
 | 
			
		||||
which will unpack into a directory named `boost_1_80_0`. We recommended either
 | 
			
		||||
renaming this directory to `boost`, or creating a junction link `mklink /J boost
 | 
			
		||||
boost_1_80_0`, so that you can more easily switch between versions.
 | 
			
		||||
 | 
			
		||||
Next, open **Developer Command Prompt** and type the following commands
 | 
			
		||||
 | 
			
		||||
```powershell
 | 
			
		||||
cd C:\lib\boost
 | 
			
		||||
bootstrap
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The rippled application is linked statically to the standard runtimes and
 | 
			
		||||
external dependencies on Windows, to ensure that the behavior of the executable
 | 
			
		||||
is not affected by changes in outside files. Therefore, it is necessary to build
 | 
			
		||||
the required boost static libraries using this command:
 | 
			
		||||
 | 
			
		||||
```powershell
 | 
			
		||||
b2 -j<Num Parallel> --toolset=msvc-14.2 address-model=64 architecture=x86 link=static threading=multi runtime-link=shared,static stage
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
where you should replace `<Num Parallel>` with the number of parallel
 | 
			
		||||
invocations to use build, e.g. `bjam -j8 ...` would use up to 8 concurrent build
 | 
			
		||||
shell commands for the build.
 | 
			
		||||
 | 
			
		||||
Building the boost libraries may take considerable time. When the build process
 | 
			
		||||
is completed, take note of both the reported compiler include paths and linker
 | 
			
		||||
library paths as they will be required later.
 | 
			
		||||
 | 
			
		||||
### (Optional) Install CMake for Windows
 | 
			
		||||
 | 
			
		||||
[CMake](http://cmake.org) is a cross platform build system generator. Visual
 | 
			
		||||
Studio 2019 includes an integrated version of CMake that avoids having to
 | 
			
		||||
manually run CMake, but it is undergoing continuous improvement. Users that
 | 
			
		||||
prefer to use standard Visual Studio project and solution files need to install
 | 
			
		||||
a dedicated version of CMake to generate them.  The latest version can be found
 | 
			
		||||
at the [CMake download site](https://cmake.org/download/). It is recommended you
 | 
			
		||||
select the install option to add CMake to your path.
 | 
			
		||||
 | 
			
		||||
## Clone the rippled repository
 | 
			
		||||
 | 
			
		||||
If you are familiar with cloning github repositories, just follow your normal
 | 
			
		||||
process and clone `git@github.com:ripple/rippled.git`. Otherwise follow this
 | 
			
		||||
section for instructions.
 | 
			
		||||
 | 
			
		||||
1. If you don't have a github account, sign up for one at
 | 
			
		||||
   [github.com](https://github.com/).
 | 
			
		||||
2. Make sure you have Github ssh keys. For help see
 | 
			
		||||
   [generating-ssh-keys](https://help.github.com/articles/generating-ssh-keys).
 | 
			
		||||
 | 
			
		||||
Open the "Git Bash" shell that was installed with "Git for Windows" in the step
 | 
			
		||||
above. Navigate to the directory where you want to clone rippled (git bash uses
 | 
			
		||||
`/c` for windows's `C:` and forward slash where windows uses backslash, so
 | 
			
		||||
`C:\Users\joe\projs` would be `/c/Users/joe/projs` in git bash). Now clone the
 | 
			
		||||
repository and optionally switch to the *master* branch. Type the following at
 | 
			
		||||
the bash prompt:
 | 
			
		||||
 | 
			
		||||
```powershell
 | 
			
		||||
git clone git@github.com:XRPLF/rippled.git
 | 
			
		||||
cd rippled
 | 
			
		||||
```
 | 
			
		||||
If you receive an error about not having the "correct access rights" make sure
 | 
			
		||||
you have Github ssh keys, as described above.
 | 
			
		||||
 | 
			
		||||
For a stable release, choose the `master` branch or one of the tagged releases
 | 
			
		||||
listed on [rippled's GitHub page](https://github.com/ripple/rippled/releases).
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
git checkout master
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
To test the latest release candidate, choose the `release` branch.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
git checkout release
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
If you are doing development work and want the latest set of beta features,
 | 
			
		||||
you can consider using the `develop` branch instead.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
git checkout develop
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
# Build using Visual Studio integrated CMake
 | 
			
		||||
 | 
			
		||||
In Visual Studio 2017, Microsoft added [integrated IDE support for
 | 
			
		||||
cmake](https://blogs.msdn.microsoft.com/vcblog/2016/10/05/cmake-support-in-visual-studio/).
 | 
			
		||||
To begin, simply:
 | 
			
		||||
 | 
			
		||||
1. Launch Visual Studio and choose **File | Open | Folder**, navigating to the
 | 
			
		||||
   cloned rippled folder.
 | 
			
		||||
2. Right-click on `CMakeLists.txt` in the **Solution Explorer - Folder View** to
 | 
			
		||||
   generate a `CMakeSettings.json` file. A sample settings file is provided
 | 
			
		||||
   [here](/Builds/VisualStudio2019/CMakeSettings-example.json). Customize the
 | 
			
		||||
   settings for `BOOST_ROOT`, `OPENSSL_ROOT` to match the install paths if they
 | 
			
		||||
   differ from those in the file.
 | 
			
		||||
4. Select either the `x64-Release` or `x64-Debug` configuration from the
 | 
			
		||||
   **Project Settings** drop-down. This should invoke the built-in CMake project
 | 
			
		||||
   generator. If not, you can right-click on the `CMakeLists.txt` file and
 | 
			
		||||
   choose **Configure rippled**.
 | 
			
		||||
5. Select the `rippled.exe`
 | 
			
		||||
   option in the **Select Startup Item** drop-down. This will be the target
 | 
			
		||||
   built when you press F7. Alternatively, you can choose a target to build from
 | 
			
		||||
   the top-level **CMake | Build** menu. Note that at this time, there are other
 | 
			
		||||
   targets listed that come from third party visual studio files embedded in the
 | 
			
		||||
   rippled repo, e.g. `datagen.vcxproj`. Please ignore them.
 | 
			
		||||
 | 
			
		||||
For details on configuring debugging sessions or further customization of CMake,
 | 
			
		||||
please refer to the [CMake tools for VS
 | 
			
		||||
documentation](https://docs.microsoft.com/en-us/cpp/ide/cmake-tools-for-visual-cpp).
 | 
			
		||||
 | 
			
		||||
If using the provided `CMakeSettings.json` file, the executable will be in
 | 
			
		||||
```
 | 
			
		||||
.\build\x64-Release\Release\rippled.exe
 | 
			
		||||
```
 | 
			
		||||
or
 | 
			
		||||
```
 | 
			
		||||
.\build\x64-Debug\Debug\rippled.exe
 | 
			
		||||
```
 | 
			
		||||
These paths are relative to your cloned git repository.
 | 
			
		||||
 | 
			
		||||
# Build using stand-alone CMake
 | 
			
		||||
 | 
			
		||||
This requires having installed [CMake for
 | 
			
		||||
Windows](README.md#optional-install-cmake-for-windows). We do not recommend
 | 
			
		||||
mixing this method with the integrated CMake method for the same repository
 | 
			
		||||
clone. Assuming you included the cmake executable folder in your path,
 | 
			
		||||
execute the following commands within your `rippled` cloned repository:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
mkdir build\cmake
 | 
			
		||||
cd build\cmake
 | 
			
		||||
cmake ..\.. -G"Visual Studio 16 2019" -Ax64 -DBOOST_ROOT="C:\lib\boost" -DOPENSSL_ROOT="C:\lib\OpenSSL-Win64" -DCMAKE_GENERATOR_TOOLSET=host=x64
 | 
			
		||||
```
 | 
			
		||||
Now launch Visual Studio 2019 and select **File | Open | Project/Solution**.
 | 
			
		||||
Navigate to the `build\cmake` folder created above and select the `rippled.sln`
 | 
			
		||||
file. You can then choose whether to build the `Debug` or `Release` solution
 | 
			
		||||
configuration.
 | 
			
		||||
 | 
			
		||||
The executable will be in
 | 
			
		||||
```
 | 
			
		||||
.\build\cmake\Release\rippled.exe
 | 
			
		||||
```
 | 
			
		||||
or
 | 
			
		||||
```
 | 
			
		||||
.\build\cmake\Debug\rippled.exe
 | 
			
		||||
```
 | 
			
		||||
These paths are relative to your cloned git repository.
 | 
			
		||||
 | 
			
		||||
# Unity/No-Unity Builds
 | 
			
		||||
 | 
			
		||||
The rippled build system defaults to using
 | 
			
		||||
[unity source files](http://onqtam.com/programming/2018-07-07-unity-builds/)
 | 
			
		||||
to improve build times. In some cases it might be desirable to disable the
 | 
			
		||||
unity build and compile individual translation units. Here is how you can
 | 
			
		||||
switch to a "no-unity" build configuration:
 | 
			
		||||
 | 
			
		||||
## Visual Studio Integrated CMake
 | 
			
		||||
 | 
			
		||||
Edit your `CmakeSettings.json` (described above) by adding `-Dunity=OFF`
 | 
			
		||||
to the `cmakeCommandArgs` entry for each build configuration.
 | 
			
		||||
 | 
			
		||||
## Standalone CMake Builds
 | 
			
		||||
 | 
			
		||||
When running cmake to generate the Visual Studio project files, add
 | 
			
		||||
`-Dunity=OFF` to the command line options passed to cmake.
 | 
			
		||||
 | 
			
		||||
**Note:** you will need to re-run the cmake configuration step anytime you
 | 
			
		||||
want to switch between unity/no-unity builds.
 | 
			
		||||
 | 
			
		||||
# Unit Test (Recommended)
 | 
			
		||||
 | 
			
		||||
`rippled` builds a set of unit tests into the server executable. To run these
 | 
			
		||||
unit tests after building, pass the `--unittest` option to the compiled
 | 
			
		||||
`rippled` executable. The executable will exit with summary info after running
 | 
			
		||||
the unit tests.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1
									
								
								Builds/linux/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								Builds/linux/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
[Build instructions are currently located in `BUILD.md`](../../BUILD.md)
 | 
			
		||||
							
								
								
									
										1
									
								
								Builds/macos/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								Builds/macos/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
[Build instructions are currently located in `BUILD.md`](../../BUILD.md)
 | 
			
		||||
@@ -3,13 +3,6 @@ cmake_minimum_required(VERSION 3.16)
 | 
			
		||||
if (POLICY CMP0074)
 | 
			
		||||
  cmake_policy(SET CMP0074 NEW)
 | 
			
		||||
endif ()
 | 
			
		||||
if(POLICY CMP0077)
 | 
			
		||||
  cmake_policy(SET CMP0077 NEW)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
# Fix "unrecognized escape" issues when passing CMAKE_MODULE_PATH on Windows.
 | 
			
		||||
file(TO_CMAKE_PATH "${CMAKE_MODULE_PATH}" CMAKE_MODULE_PATH)
 | 
			
		||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/Builds/CMake")
 | 
			
		||||
 | 
			
		||||
project (rippled)
 | 
			
		||||
set(CMAKE_CXX_EXTENSIONS OFF)
 | 
			
		||||
@@ -36,6 +29,9 @@ if(thread_safety_analysis)
 | 
			
		||||
  add_link_options("-stdlib=libc++")
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/Builds/CMake")
 | 
			
		||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/Builds/CMake/deps")
 | 
			
		||||
 | 
			
		||||
include (CheckCXXCompilerFlag)
 | 
			
		||||
include (FetchContent)
 | 
			
		||||
include (ExternalProject)
 | 
			
		||||
@@ -48,6 +44,7 @@ endif ()
 | 
			
		||||
include(RippledSanity)
 | 
			
		||||
include(RippledVersion)
 | 
			
		||||
include(RippledSettings)
 | 
			
		||||
include(RippledNIH)
 | 
			
		||||
include(RippledRelease)
 | 
			
		||||
# this check has to remain in the top-level cmake
 | 
			
		||||
# because of the early return statement
 | 
			
		||||
@@ -60,41 +57,20 @@ endif ()
 | 
			
		||||
include(RippledCompiler)
 | 
			
		||||
include(RippledInterface)
 | 
			
		||||
 | 
			
		||||
option(only_docs "Include only the docs target?" FALSE)
 | 
			
		||||
include(RippledDocs)
 | 
			
		||||
if(only_docs)
 | 
			
		||||
  return()
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
###
 | 
			
		||||
 | 
			
		||||
include(deps/Boost)
 | 
			
		||||
find_package(OpenSSL 1.1.1 REQUIRED)
 | 
			
		||||
set_target_properties(OpenSSL::SSL PROPERTIES
 | 
			
		||||
  INTERFACE_COMPILE_DEFINITIONS OPENSSL_NO_SSL2
 | 
			
		||||
)
 | 
			
		||||
add_subdirectory(src/secp256k1)
 | 
			
		||||
add_subdirectory(src/ed25519-donna)
 | 
			
		||||
find_package(lz4 REQUIRED)
 | 
			
		||||
# Target names with :: are not allowed in a generator expression.
 | 
			
		||||
# We need to pull the include directories and imported location properties
 | 
			
		||||
# from separate targets.
 | 
			
		||||
find_package(LibArchive REQUIRED)
 | 
			
		||||
find_package(SOCI REQUIRED)
 | 
			
		||||
find_package(SQLite3 REQUIRED)
 | 
			
		||||
find_package(Snappy REQUIRED)
 | 
			
		||||
 | 
			
		||||
option(rocksdb "Enable RocksDB" ON)
 | 
			
		||||
if(rocksdb)
 | 
			
		||||
  find_package(RocksDB REQUIRED)
 | 
			
		||||
  set_target_properties(RocksDB::rocksdb PROPERTIES
 | 
			
		||||
    INTERFACE_COMPILE_DEFINITIONS RIPPLE_ROCKSDB_AVAILABLE=1
 | 
			
		||||
  )
 | 
			
		||||
  target_link_libraries(ripple_libs INTERFACE RocksDB::rocksdb)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
find_package(nudb REQUIRED)
 | 
			
		||||
find_package(date REQUIRED)
 | 
			
		||||
include(deps/OpenSSL)
 | 
			
		||||
include(deps/Secp256k1)
 | 
			
		||||
include(deps/Ed25519-donna)
 | 
			
		||||
include(deps/Lz4)
 | 
			
		||||
include(deps/Libarchive)
 | 
			
		||||
include(deps/Sqlite)
 | 
			
		||||
include(deps/Soci)
 | 
			
		||||
include(deps/Snappy)
 | 
			
		||||
include(deps/Rocksdb)
 | 
			
		||||
include(deps/Nudb)
 | 
			
		||||
include(deps/date)
 | 
			
		||||
include(deps/Protobuf)
 | 
			
		||||
include(deps/gRPC)
 | 
			
		||||
include(deps/cassandra)
 | 
			
		||||
@@ -130,4 +106,5 @@ include(RippledCore)
 | 
			
		||||
include(RippledInstall)
 | 
			
		||||
include(RippledCov)
 | 
			
		||||
include(RippledMultiConfig)
 | 
			
		||||
include(RippledDocs)
 | 
			
		||||
include(RippledValidatorKeys)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										183
									
								
								CONTRIBUTING.md
									
									
									
									
									
								
							
							
						
						
									
										183
									
								
								CONTRIBUTING.md
									
									
									
									
									
								
							@@ -1,129 +1,31 @@
 | 
			
		||||
The XRP Ledger has many and diverse stakeholders, and everyone deserves
 | 
			
		||||
a chance to contribute meaningful changes to the code that runs the XRPL.
 | 
			
		||||
 | 
			
		||||
# Contributing
 | 
			
		||||
The XRP Ledger has many and diverse stakeholders, and everyone deserves a chance to contribute meaningful changes to the code that runs the XRPL.
 | 
			
		||||
To contribute, please:
 | 
			
		||||
1. Fork the repository under your own user.
 | 
			
		||||
2. Create a new branch on which to write your changes. Please note that changes which alter transaction processing must be composed via and guarded using [Amendments](https://xrpl.org/amendments.html). Changes which are _read only_ i.e. RPC, or changes which are only refactors and maintain the existing behaviour do not need to be made through an Amendment.
 | 
			
		||||
3. Write and test your code.
 | 
			
		||||
4. Ensure that your code compiles with the provided build engine and update the provided build engine as part of your PR where needed and where appropriate.
 | 
			
		||||
5. Write test cases for your code and include those in `src/test` such that they are runnable from the command line using `./rippled -u`. (Some changes will not be able to be tested this way.)
 | 
			
		||||
6. Ensure your code passes automated checks (e.g. clang-format and levelization.)
 | 
			
		||||
7. Squash your commits (i.e. rebase) into as few commits as is reasonable to describe your changes at a high level (typically a single commit for a small change.)
 | 
			
		||||
8. Open a PR to the main repository onto the _develop_ branch, and follow the provided template.
 | 
			
		||||
 | 
			
		||||
We assume you are familiar with the general practice of [making contributions
 | 
			
		||||
on GitHub][1].
 | 
			
		||||
This file includes only special instructions specific to this project.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Before you start
 | 
			
		||||
 | 
			
		||||
All of your contributions must be developed in your personal
 | 
			
		||||
[fork](https://github.com/XRPLF/rippled/fork).
 | 
			
		||||
No personal branches may ever be pushed to the [main project][rippled].
 | 
			
		||||
These are the only branches that may ever exist in the main project:
 | 
			
		||||
 | 
			
		||||
- `develop`: The latest set of unreleased features, and the most common
 | 
			
		||||
    starting point for contributions.
 | 
			
		||||
- `release`: The latest release candidate.
 | 
			
		||||
- `master`: The latest stable release.
 | 
			
		||||
- `gh-pages`: The documentation for this project, built by Doxygen.
 | 
			
		||||
 | 
			
		||||
The tip of each branch must be signed.
 | 
			
		||||
In order for GitHub to sign a squashed commit that it builds from your pull
 | 
			
		||||
request,
 | 
			
		||||
all of your commits must be signed,
 | 
			
		||||
and GitHub must know your verifying key.
 | 
			
		||||
Please walk through the excellent documentation from GitHub to set
 | 
			
		||||
up [signature verification][signing].
 | 
			
		||||
 | 
			
		||||
[rippled]: https://github.com/XRPLF/rippled
 | 
			
		||||
[signing]: https://docs.github.com/en/authentication/managing-commit-signature-verification/about-commit-signature-verification
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Major contributions
 | 
			
		||||
 | 
			
		||||
If your contribution is a major feature or breaking change,
 | 
			
		||||
then you must first write an XRP Ledger Standard (XLS) describing it.
 | 
			
		||||
Go to [XRPL-Standards](https://github.com/XRPLF/XRPL-Standards/discussions),
 | 
			
		||||
choose the next available standard number, and
 | 
			
		||||
open a discussion with an appropriate title to propose your draft standard.
 | 
			
		||||
 | 
			
		||||
When you submit a pull request, please link the corresponding XLS in the
 | 
			
		||||
description.
 | 
			
		||||
An XLS still in draft status is considered a work-in-progress and open for
 | 
			
		||||
discussion.
 | 
			
		||||
Please do not submit a pull request before allowing due time for questions,
 | 
			
		||||
suggestions, and changes to the XLS draft.
 | 
			
		||||
It is the responsibility of the XLS author to update the draft to match the
 | 
			
		||||
final implementation when its corresponding pull request is merged.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Before making a pull request
 | 
			
		||||
 | 
			
		||||
Changes that alter transaction processing must be guarded by an
 | 
			
		||||
[Amendment](https://xrpl.org/amendments.html).
 | 
			
		||||
All other changes that maintain the existing behavior do not need an
 | 
			
		||||
Amendment.
 | 
			
		||||
 | 
			
		||||
Ensure that your code compiles according to the build instructions in
 | 
			
		||||
[`BUILD.md`](./BUILD.md).
 | 
			
		||||
If you create new source files, they must go under `src/ripple`.
 | 
			
		||||
You will need to add them to one of the
 | 
			
		||||
[source lists](./Builds/CMake/RippledCore.cmake) in CMake.
 | 
			
		||||
 | 
			
		||||
Please write tests for your code.
 | 
			
		||||
If you create new test source files, they must go under `src/test`.
 | 
			
		||||
You will need to add them to one of the
 | 
			
		||||
[source lists](./Builds/CMake/RippledCore.cmake) in CMake.
 | 
			
		||||
If your test can be run offline, in under 60 seconds, then it can be an
 | 
			
		||||
automatic test run by `rippled --unittest`.
 | 
			
		||||
Otherwise, it must be a manual test.
 | 
			
		||||
 | 
			
		||||
The source must be formatted according to the style guide below.
 | 
			
		||||
 | 
			
		||||
Header includes must be [levelized](./Builds/levelization).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Pull requests
 | 
			
		||||
 | 
			
		||||
Pull requests must target the `develop` branch.[^1]
 | 
			
		||||
 | 
			
		||||
[^1]: There are exceptions to this policy for hotfixes, but no one consulting
 | 
			
		||||
  this document will be in that situation.
 | 
			
		||||
 | 
			
		||||
Changes to pull requests must be added as new commits.
 | 
			
		||||
You may **never force push a branch in a pull request** (e.g. after a rebase).
 | 
			
		||||
This preserves the ability for reviewers to filter changes since their last
 | 
			
		||||
review.
 | 
			
		||||
 | 
			
		||||
A pull request must obtain **approvals from at least two reviewers** before it
 | 
			
		||||
can be considered for merge by a Maintainer.
 | 
			
		||||
Maintainers retain discretion to require more approvals if they feel the
 | 
			
		||||
credibility of the existing approvals is insufficient.
 | 
			
		||||
 | 
			
		||||
Pull requests must be merged by [squash-and-merge][2]
 | 
			
		||||
to preserve a linear history for the `develop` branch.
 | 
			
		||||
 | 
			
		||||
# Major Changes
 | 
			
		||||
If your code change is a major feature, a breaking change or in some other way makes a significant alteration to the way the XRPL will operate, then you must first write an XLS document (XRP Ledger Standard) describing your change.
 | 
			
		||||
To do this:
 | 
			
		||||
1. Go to [XLS Standards](https://github.com/XRPLF/XRPL-Standards/discussions).
 | 
			
		||||
2. Choose the next available standard number.
 | 
			
		||||
3. Open a discussion with the appropriate title to propose your draft standard.
 | 
			
		||||
4. Link your XLS in your PR.
 | 
			
		||||
 | 
			
		||||
# Style guide
 | 
			
		||||
 | 
			
		||||
This is a non-exhaustive list of recommended style guidelines.
 | 
			
		||||
These are not always strictly enforced and serve as a way to keep the codebase coherent rather than a set of _thou shalt not_ commandments.
 | 
			
		||||
 | 
			
		||||
This is a non-exhaustive list of recommended style guidelines. These are not always strictly enforced and serve as a way to keep the codebase coherent rather than a set of _thou shalt not_ commandments.
 | 
			
		||||
 | 
			
		||||
## Formatting
 | 
			
		||||
 | 
			
		||||
All code must conform to `clang-format` version 10,
 | 
			
		||||
according to the settings in [`.clang-format`](./.clang-format),
 | 
			
		||||
unless the result would be unreasonably difficult to read or maintain.
 | 
			
		||||
To demarcate lines that should be left as-is, surround them with comments like
 | 
			
		||||
this:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
// clang-format off
 | 
			
		||||
...
 | 
			
		||||
// clang-format on
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
You can format individual files in place by running `clang-format -i <file>...`
 | 
			
		||||
from any directory within this project.
 | 
			
		||||
 | 
			
		||||
All code must conform to `clang-format` version 10, unless the result would be unreasonably difficult to read or maintain.
 | 
			
		||||
To change your code to conform use `clang-format -i <your changed files>`.
 | 
			
		||||
 | 
			
		||||
## Avoid
 | 
			
		||||
 | 
			
		||||
1. Proliferation of nearly identical code.
 | 
			
		||||
2. Proliferation of new files and classes.
 | 
			
		||||
3. Complex inheritance and complex OOP patterns.
 | 
			
		||||
@@ -133,9 +35,7 @@ from any directory within this project.
 | 
			
		||||
7. CPU or architecture-specific code unless there is a good reason to include it, and where it is used guard it with macros and provide explanatory comments.
 | 
			
		||||
8. Importing new libraries unless there is a very good reason to do so.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Seek to
 | 
			
		||||
 | 
			
		||||
9. Extend functionality of existing code rather than creating new code.
 | 
			
		||||
10. Prefer readability over terseness where important logic is concerned.
 | 
			
		||||
11. Inline functions that are not used or are not likely to be used elsewhere in the codebase.
 | 
			
		||||
@@ -143,42 +43,25 @@ from any directory within this project.
 | 
			
		||||
13. Use TitleCase for classes, structs and filenames, camelCase for function and variable names, lower case for namespaces and folders.
 | 
			
		||||
14. Provide as many comments as you feel that a competent programmer would need to understand what your code does.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Maintainers
 | 
			
		||||
Maintainers are ecosystem participants with elevated access to the repository. They are able to push new code, make decisions on when a release should be made, etc.
 | 
			
		||||
 | 
			
		||||
Maintainers are ecosystem participants with elevated access to the repository.
 | 
			
		||||
They are able to push new code, make decisions on when a release should be
 | 
			
		||||
made, etc.
 | 
			
		||||
## Code Review
 | 
			
		||||
New contributors' PRs must be reviewed by at least two of the maintainers. Well established prior contributors can be reviewed by a single maintainer.
 | 
			
		||||
 | 
			
		||||
## Adding and Removing
 | 
			
		||||
New maintainers can be proposed by two existing maintainers, subject to a vote by a quorum of the existing maintainers. A minimum of 50% support and a 50% participation is required. In the event of a tie vote, the addition of the new maintainer will be rejected.
 | 
			
		||||
 | 
			
		||||
## Adding and removing
 | 
			
		||||
 | 
			
		||||
New maintainers can be proposed by two existing maintainers, subject to a vote
 | 
			
		||||
by a quorum of the existing maintainers.
 | 
			
		||||
A minimum of 50% support and a 50% participation is required.
 | 
			
		||||
In the event of a tie vote, the addition of the new maintainer will be
 | 
			
		||||
rejected.
 | 
			
		||||
 | 
			
		||||
Existing maintainers can resign, or be subject to a vote for removal at the
 | 
			
		||||
behest of two existing maintainers.
 | 
			
		||||
A minimum of 60% agreement and 50% participation are required.
 | 
			
		||||
The XRP Ledger Foundation will have the ability, for cause, to remove an
 | 
			
		||||
existing maintainer without a vote.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Current Maintainers
 | 
			
		||||
Existing maintainers can resign, or be subject to a vote for removal at the behest of two existing maintainers. A minimum of 60% agreement and 50% participation are required. The XRP Ledger Foundation will have the ability, for cause, to remove an existing maintainer without a vote.
 | 
			
		||||
 | 
			
		||||
## Existing Maintainers
 | 
			
		||||
* [JoelKatz](https://github.com/JoelKatz) (Ripple)
 | 
			
		||||
* [manojsdoshi](https://github.com/manojsdoshi) (Ripple)
 | 
			
		||||
* [n3tc4t](https://github.com/n3tc4t) (XRPL Labs)
 | 
			
		||||
* [Nik Bougalis](https://github.com/nbougalis)
 | 
			
		||||
* [nixer89](https://github.com/nixer89) (XRP Ledger Foundation)
 | 
			
		||||
* [Manojsdoshi](https://github.com/manojsdoshi) (Ripple)
 | 
			
		||||
* [N3tc4t](https://github.com/n3tc4t) (XRPL Labs)
 | 
			
		||||
* [Nikolaos D Bougalis](https://github.com/nbougalis)
 | 
			
		||||
* [Nixer89](https://github.com/nixer89) (XRP Ledger Foundation)
 | 
			
		||||
* [RichardAH](https://github.com/RichardAH) (XRPL Labs + XRP Ledger Foundation)
 | 
			
		||||
* [seelabs](https://github.com/seelabs) (Ripple)
 | 
			
		||||
* [Seelabs](https://github.com/seelabs) (Ripple)
 | 
			
		||||
* [Silkjaer](https://github.com/Silkjaer) (XRP Ledger Foundation)
 | 
			
		||||
* [WietseWind](https://github.com/WietseWind) (XRPL Labs + XRP Ledger Foundation)
 | 
			
		||||
* [Ed Hennis](https://github.com/ximinez) (Ripple)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[1]: https://docs.github.com/en/get-started/quickstart/contributing-to-projects
 | 
			
		||||
[2]: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/about-pull-request-merges#squash-and-merge-your-commits
 | 
			
		||||
* [Ximinez](https://github.com/ximinez) (Ripple)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										154
									
								
								conanfile.py
									
									
									
									
									
								
							
							
						
						
									
										154
									
								
								conanfile.py
									
									
									
									
									
								
							@@ -1,154 +0,0 @@
 | 
			
		||||
from conan import ConanFile
 | 
			
		||||
from conan.tools.cmake import CMake, CMakeToolchain, cmake_layout
 | 
			
		||||
import re
 | 
			
		||||
 | 
			
		||||
class Xrpl(ConanFile):
 | 
			
		||||
    name = 'xrpl'
 | 
			
		||||
 | 
			
		||||
    license = 'ISC'
 | 
			
		||||
    author = 'John Freeman <jfreeman@ripple.com>'
 | 
			
		||||
    url = 'https://github.com/xrplf/rippled'
 | 
			
		||||
    description = 'The XRP Ledger'
 | 
			
		||||
    settings = 'os', 'compiler', 'build_type', 'arch'
 | 
			
		||||
    options = {
 | 
			
		||||
        'assertions': [True, False],
 | 
			
		||||
        'coverage': [True, False],
 | 
			
		||||
        'fPIC': [True, False],
 | 
			
		||||
        'jemalloc': [True, False],
 | 
			
		||||
        'reporting': [True, False],
 | 
			
		||||
        'rocksdb': [True, False],
 | 
			
		||||
        'shared': [True, False],
 | 
			
		||||
        'static': [True, False],
 | 
			
		||||
        'tests': [True, False],
 | 
			
		||||
        'unity': [True, False],
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    requires = [
 | 
			
		||||
        'boost/1.77.0',
 | 
			
		||||
        'date/3.0.1',
 | 
			
		||||
        'libarchive/3.6.0',
 | 
			
		||||
        'lz4/1.9.3',
 | 
			
		||||
        'grpc/1.50.1',
 | 
			
		||||
        'nudb/2.0.8',
 | 
			
		||||
        'openssl/1.1.1m',
 | 
			
		||||
        'protobuf/3.21.4',
 | 
			
		||||
        'snappy/1.1.9',
 | 
			
		||||
        'soci/4.0.3',
 | 
			
		||||
        'sqlite3/3.38.0',
 | 
			
		||||
        'zlib/1.2.12',
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    default_options = {
 | 
			
		||||
        'assertions': False,
 | 
			
		||||
        'coverage': False,
 | 
			
		||||
        'fPIC': True,
 | 
			
		||||
        'jemalloc': False,
 | 
			
		||||
        'reporting': False,
 | 
			
		||||
        'rocksdb': True,
 | 
			
		||||
        'shared': False,
 | 
			
		||||
        'static': True,
 | 
			
		||||
        'tests': True,
 | 
			
		||||
        'unity': False,
 | 
			
		||||
 | 
			
		||||
        'cassandra-cpp-driver:shared': False,
 | 
			
		||||
        'date:header_only': True,
 | 
			
		||||
        'grpc:shared': False,
 | 
			
		||||
        'grpc:secure': True,
 | 
			
		||||
        'libarchive:shared': False,
 | 
			
		||||
        'libarchive:with_acl': False,
 | 
			
		||||
        'libarchive:with_bzip2': False,
 | 
			
		||||
        'libarchive:with_cng': False,
 | 
			
		||||
        'libarchive:with_expat': False,
 | 
			
		||||
        'libarchive:with_iconv': False,
 | 
			
		||||
        'libarchive:with_libxml2': False,
 | 
			
		||||
        'libarchive:with_lz4': True,
 | 
			
		||||
        'libarchive:with_lzma': False,
 | 
			
		||||
        'libarchive:with_lzo': False,
 | 
			
		||||
        'libarchive:with_nettle': False,
 | 
			
		||||
        'libarchive:with_openssl': False,
 | 
			
		||||
        'libarchive:with_pcreposix': False,
 | 
			
		||||
        'libarchive:with_xattr': False,
 | 
			
		||||
        'libarchive:with_zlib': False,
 | 
			
		||||
        'libpq:shared': False,
 | 
			
		||||
        'lz4:shared': False,
 | 
			
		||||
        'openssl:shared': False,
 | 
			
		||||
        'protobuf:shared': False,
 | 
			
		||||
        'protobuf:with_zlib': True,
 | 
			
		||||
        'rocksdb:enable_sse': False,
 | 
			
		||||
        'rocksdb:lite': False,
 | 
			
		||||
        'rocksdb:shared': False,
 | 
			
		||||
        'rocksdb:use_rtti': True,
 | 
			
		||||
        'rocksdb:with_jemalloc': False,
 | 
			
		||||
        'rocksdb:with_lz4': True,
 | 
			
		||||
        'rocksdb:with_snappy': True,
 | 
			
		||||
        'snappy:shared': False,
 | 
			
		||||
        'soci:shared': False,
 | 
			
		||||
        'soci:with_sqlite3': True,
 | 
			
		||||
        'soci:with_boost': True,
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    def set_version(self):
 | 
			
		||||
        path = f'{self.recipe_folder}/src/ripple/protocol/impl/BuildInfo.cpp'
 | 
			
		||||
        regex = r'versionString\s?=\s?\"(.*)\"'
 | 
			
		||||
        with open(path, 'r') as file:
 | 
			
		||||
            matches = (re.search(regex, line) for line in file)
 | 
			
		||||
            match = next(m for m in matches if m)
 | 
			
		||||
            self.version = match.group(1)
 | 
			
		||||
 | 
			
		||||
    def configure(self):
 | 
			
		||||
        if self.settings.compiler == 'apple-clang':
 | 
			
		||||
            self.options['boost'].visibility = 'global'
 | 
			
		||||
 | 
			
		||||
    def requirements(self):
 | 
			
		||||
        if self.options.jemalloc:
 | 
			
		||||
            self.requires('jemalloc/5.2.1')
 | 
			
		||||
        if self.options.reporting:
 | 
			
		||||
            self.requires('cassandra-cpp-driver/2.15.3')
 | 
			
		||||
            self.requires('libpq/13.6')
 | 
			
		||||
        if self.options.rocksdb:
 | 
			
		||||
            self.requires('rocksdb/6.27.3')
 | 
			
		||||
 | 
			
		||||
    exports_sources = (
 | 
			
		||||
        'CMakeLists.txt', 'Builds/*', 'bin/getRippledInfo', 'src/*', 'cfg/*'
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    def layout(self):
 | 
			
		||||
        cmake_layout(self)
 | 
			
		||||
        # Fix this setting to follow the default introduced in Conan 1.48
 | 
			
		||||
        # to align with our build instructions.
 | 
			
		||||
        self.folders.generators = 'build/generators'
 | 
			
		||||
 | 
			
		||||
    generators = 'CMakeDeps'
 | 
			
		||||
    def generate(self):
 | 
			
		||||
        tc = CMakeToolchain(self)
 | 
			
		||||
        tc.variables['tests'] = self.options.tests
 | 
			
		||||
        tc.variables['assert'] = self.options.assertions
 | 
			
		||||
        tc.variables['coverage'] = self.options.coverage
 | 
			
		||||
        tc.variables['jemalloc'] = self.options.jemalloc
 | 
			
		||||
        tc.variables['reporting'] = self.options.reporting
 | 
			
		||||
        tc.variables['rocksdb'] = self.options.rocksdb
 | 
			
		||||
        tc.variables['BUILD_SHARED_LIBS'] = self.options.shared
 | 
			
		||||
        tc.variables['static'] = self.options.static
 | 
			
		||||
        tc.variables['unity'] = self.options.unity
 | 
			
		||||
        tc.generate()
 | 
			
		||||
 | 
			
		||||
    def build(self):
 | 
			
		||||
        cmake = CMake(self)
 | 
			
		||||
        cmake.verbose = True
 | 
			
		||||
        cmake.configure()
 | 
			
		||||
        cmake.build()
 | 
			
		||||
 | 
			
		||||
    def package(self):
 | 
			
		||||
        cmake = CMake(self)
 | 
			
		||||
        cmake.verbose = True
 | 
			
		||||
        cmake.install()
 | 
			
		||||
 | 
			
		||||
    def package_info(self):
 | 
			
		||||
        libxrpl = self.cpp_info.components['libxrpl']
 | 
			
		||||
        libxrpl.libs = [
 | 
			
		||||
            'libxrpl_core.a',
 | 
			
		||||
            'libed25519.a',
 | 
			
		||||
            'libsecp256k1.a',
 | 
			
		||||
        ]
 | 
			
		||||
        libxrpl.includedirs = ['include']
 | 
			
		||||
        libxrpl.requires = ['boost::boost']
 | 
			
		||||
							
								
								
									
										114
									
								
								docs/build/conan.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										114
									
								
								docs/build/conan.md
									
									
									
									
										vendored
									
									
								
							@@ -1,114 +0,0 @@
 | 
			
		||||
## A crash course in CMake and Conan
 | 
			
		||||
 | 
			
		||||
To better understand how to use Conan,
 | 
			
		||||
we should first understand _why_ we use Conan,
 | 
			
		||||
and to understand that,
 | 
			
		||||
we need to understand how we use CMake.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### CMake
 | 
			
		||||
 | 
			
		||||
Technically, you don't need CMake to build this project.
 | 
			
		||||
You could manually compile every translation unit into an object file,
 | 
			
		||||
using the right compiler options,
 | 
			
		||||
and then manually link all those objects together,
 | 
			
		||||
using the right linker options.
 | 
			
		||||
However, that is very tedious and error-prone,
 | 
			
		||||
which is why we lean on tools like CMake.
 | 
			
		||||
 | 
			
		||||
We have written CMake configuration files
 | 
			
		||||
([`CMakeLists.txt`](./CMakeLists.txt) and friends)
 | 
			
		||||
for this project so that CMake can be used to correctly compile and link
 | 
			
		||||
all of the translation units in it.
 | 
			
		||||
Or rather, CMake will generate files for a separate build system
 | 
			
		||||
(e.g. Make, Ninja, Visual Studio, Xcode, etc.)
 | 
			
		||||
that compile and link all of the translation units.
 | 
			
		||||
Even then, CMake has parameters, some of which are platform-specific.
 | 
			
		||||
In CMake's parlance, parameters are specially-named **variables** like
 | 
			
		||||
[`CMAKE_BUILD_TYPE`][build_type] or
 | 
			
		||||
[`CMAKE_MSVC_RUNTIME_LIBRARY`][runtime].
 | 
			
		||||
Parameters include:
 | 
			
		||||
 | 
			
		||||
- what build system to generate files for
 | 
			
		||||
- where to find the compiler and linker
 | 
			
		||||
- where to find dependencies, e.g. libraries and headers
 | 
			
		||||
- how to link dependencies, e.g. any special compiler or linker flags that
 | 
			
		||||
    need to be used with them, including preprocessor definitions
 | 
			
		||||
- how to compile translation units, e.g. with optimizations, debug symbols,
 | 
			
		||||
    position-independent code, etc.
 | 
			
		||||
- on Windows, which runtime library to link with
 | 
			
		||||
 | 
			
		||||
For some of these parameters, like the build system and compiler,
 | 
			
		||||
CMake goes through a complicated search process to choose default values.
 | 
			
		||||
For others, like the dependencies,
 | 
			
		||||
_we_ had written in the CMake configuration files of this project
 | 
			
		||||
our own complicated process to choose defaults.
 | 
			
		||||
For most developers, things "just worked"... until they didn't, and then
 | 
			
		||||
you were left trying to debug one of these complicated processes, instead of
 | 
			
		||||
choosing and manually passing the parameter values yourself.
 | 
			
		||||
 | 
			
		||||
You can pass every parameter to CMake on the command line,
 | 
			
		||||
but writing out these parameters every time we want to configure CMake is
 | 
			
		||||
a pain.
 | 
			
		||||
Most humans prefer to put them into a configuration file, once, that
 | 
			
		||||
CMake can read every time it is configured.
 | 
			
		||||
For CMake, that file is a [toolchain file][toolchain].
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Conan
 | 
			
		||||
 | 
			
		||||
These next few paragraphs on Conan are going to read much like the ones above
 | 
			
		||||
for CMake.
 | 
			
		||||
 | 
			
		||||
Technically, you don't need Conan to build this project.
 | 
			
		||||
You could manually download, configure, build, and install all of the
 | 
			
		||||
dependencies yourself, and then pass all of the parameters necessary for
 | 
			
		||||
CMake to link to those dependencies.
 | 
			
		||||
To guarantee ABI compatibility, you must be sure to use the same set of
 | 
			
		||||
compiler and linker options for all dependencies _and_ this project.
 | 
			
		||||
However, that is very tedious and error-prone, which is why we lean on tools
 | 
			
		||||
like Conan.
 | 
			
		||||
 | 
			
		||||
We have written a Conan configuration file ([`conanfile.py`](./conanfile.py))
 | 
			
		||||
so that Conan can be used to correctly download, configure, build, and install
 | 
			
		||||
all of the dependencies for this project,
 | 
			
		||||
using a single set of compiler and linker options for all of them.
 | 
			
		||||
It generates files that contain almost all of the parameters that CMake
 | 
			
		||||
expects.
 | 
			
		||||
Those files include:
 | 
			
		||||
 | 
			
		||||
- A single toolchain file.
 | 
			
		||||
- For every dependency, a CMake [package configuration file][pcf],
 | 
			
		||||
    [package version file][pvf], and for every build type, a package
 | 
			
		||||
    targets file.
 | 
			
		||||
    Together, these files implement version checking and define `IMPORTED`
 | 
			
		||||
    targets for the dependencies.
 | 
			
		||||
 | 
			
		||||
The toolchain file itself amends the search path
 | 
			
		||||
([`CMAKE_PREFIX_PATH`][prefix_path]) so that [`find_package()`][find_package]
 | 
			
		||||
will [discover][search] the generated package configuration files.
 | 
			
		||||
 | 
			
		||||
**Nearly all we must do to properly configure CMake is pass the toolchain
 | 
			
		||||
file.**
 | 
			
		||||
What CMake parameters are left out?
 | 
			
		||||
You'll still need to pick a build system generator,
 | 
			
		||||
and if you choose a single-configuration generator,
 | 
			
		||||
you'll need to pass the `CMAKE_BUILD_TYPE`,
 | 
			
		||||
which should match the `build_type` setting you gave to Conan.
 | 
			
		||||
 | 
			
		||||
Even then, Conan has parameters, some of which are platform-specific.
 | 
			
		||||
In Conan's parlance, parameters are either settings or options.
 | 
			
		||||
**Settings** are shared by all packages, e.g. the build type.
 | 
			
		||||
**Options** are specific to a given package, e.g. whether to build and link
 | 
			
		||||
OpenSSL as a shared library.
 | 
			
		||||
 | 
			
		||||
For settings, Conan goes through a complicated search process to choose
 | 
			
		||||
defaults.
 | 
			
		||||
For options, each package recipe defines its own defaults.
 | 
			
		||||
 | 
			
		||||
You can pass every parameter to Conan on the command line,
 | 
			
		||||
but it is more convenient to put them in a configuration file, once, that
 | 
			
		||||
Conan can read every time it is configured.
 | 
			
		||||
For Conan, that file is a [profile][profile].
 | 
			
		||||
**All we must do to properly configure Conan is edit and pass the profile.**
 | 
			
		||||
By default, Conan will use the profile named "default".
 | 
			
		||||
							
								
								
									
										98
									
								
								docs/build/depend.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										98
									
								
								docs/build/depend.md
									
									
									
									
										vendored
									
									
								
							@@ -1,98 +0,0 @@
 | 
			
		||||
We recommend two different methods to depend on libxrpl in your own [CMake][]
 | 
			
		||||
project.
 | 
			
		||||
Both methods add a CMake library target named `xrpl::libxrpl`.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Conan requirement 
 | 
			
		||||
 | 
			
		||||
The first method adds libxrpl as a [Conan][] requirement.
 | 
			
		||||
With this method, there is no need for a Git [submodule][].
 | 
			
		||||
It is good for when you just need a dependency on libxrpl as-is.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
# This conanfile.txt is just an example.
 | 
			
		||||
[requires]
 | 
			
		||||
xrpl/1.10.0
 | 
			
		||||
 | 
			
		||||
[generators]
 | 
			
		||||
CMakeDeps
 | 
			
		||||
CMakeToolchain
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
# If you want to depend on a version of libxrpl that is not in ConanCenter,
 | 
			
		||||
# then you can export the recipe from the rippled project.
 | 
			
		||||
conan export <path>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```cmake
 | 
			
		||||
# Find and link the library in your CMake project.
 | 
			
		||||
find_package(xrpl)
 | 
			
		||||
target_link_libraries(<target> PUBLIC xrpl::libxrpl)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
# Download, build, and connect dependencies with Conan.
 | 
			
		||||
mkdir .build
 | 
			
		||||
cd .build
 | 
			
		||||
mkdir -p build/generators
 | 
			
		||||
conan install \
 | 
			
		||||
  --install-folder build/generators \
 | 
			
		||||
  --build missing \
 | 
			
		||||
  --settings build_type=Release \
 | 
			
		||||
  ..
 | 
			
		||||
cmake \
 | 
			
		||||
  -DCMAKE_TOOLCHAIN_FILE=build/generators/conan_toolchain.cmake \
 | 
			
		||||
  -DCMAKE_BUILD_TYPE=Release \
 | 
			
		||||
  ..
 | 
			
		||||
cmake --build . --parallel
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## CMake subdirectory
 | 
			
		||||
 | 
			
		||||
The second method adds the [rippled][] project as a CMake
 | 
			
		||||
[subdirectory][add_subdirectory].
 | 
			
		||||
This method works well when you keep the rippled project as a Git
 | 
			
		||||
[submodule][].
 | 
			
		||||
It's good for when you want to make changes to libxrpl as part of your own
 | 
			
		||||
project.
 | 
			
		||||
Be careful, though.
 | 
			
		||||
Your project will inherit all of the same CMake options,
 | 
			
		||||
so watch out for name collisions.
 | 
			
		||||
We still recommend using [Conan][] to download, build, and connect dependencies.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
# Add the project as a Git submodule.
 | 
			
		||||
mkdir submodules
 | 
			
		||||
git submodule add https://github.com/XRPLF/rippled.git submodules/rippled
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```cmake
 | 
			
		||||
# Add and link the library in your CMake project.
 | 
			
		||||
add_subdirectory(submodules/rippled)
 | 
			
		||||
target_link_libraries(<target> PUBLIC xrpl::libxrpl)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
# Download, build, and connect dependencies with Conan.
 | 
			
		||||
mkdir .build
 | 
			
		||||
cd .build
 | 
			
		||||
conan install \
 | 
			
		||||
  --output-folder . \
 | 
			
		||||
  --build missing \
 | 
			
		||||
  --settings build_type=Release \
 | 
			
		||||
  ../submodules/rippled
 | 
			
		||||
cmake \
 | 
			
		||||
  -DCMAKE_TOOLCHAIN_FILE=build/generators/conan_toolchain.cmake \
 | 
			
		||||
  -DCMAKE_BUILD_TYPE=Release \
 | 
			
		||||
  ..
 | 
			
		||||
cmake --build . --parallel
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[add_subdirectory]: https://cmake.org/cmake/help/latest/command/add_subdirectory.html
 | 
			
		||||
[submodule]: https://git-scm.com/book/en/v2/Git-Tools-Submodules
 | 
			
		||||
[rippled]: https://github.com/ripple/rippled
 | 
			
		||||
[Conan]: https://docs.conan.io/
 | 
			
		||||
[CMake]: https://cmake.org/cmake/help/latest/
 | 
			
		||||
							
								
								
									
										83
									
								
								docs/build/environment.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										83
									
								
								docs/build/environment.md
									
									
									
									
										vendored
									
									
								
							@@ -1,83 +0,0 @@
 | 
			
		||||
Our [build instructions][BUILD.md] assume you have a C++ development
 | 
			
		||||
environment complete with Git, Python, Conan, CMake, and a C++ compiler.
 | 
			
		||||
This document exists to help readers set one up on any of the Big Three
 | 
			
		||||
platforms: Linux, macOS, or Windows.
 | 
			
		||||
 | 
			
		||||
[BUILD.md]: ../../BUILD.md
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Linux
 | 
			
		||||
 | 
			
		||||
Package ecosystems vary across Linux distributions,
 | 
			
		||||
so there is no one set of instructions that will work for every Linux user.
 | 
			
		||||
These instructions are written for Ubuntu 22.04.
 | 
			
		||||
They are largely copied from the [script][1] used to configure our Docker
 | 
			
		||||
container for continuous integration.
 | 
			
		||||
That script handles many more responsibilities.
 | 
			
		||||
These instructions are just the bare minimum to build one configuration of
 | 
			
		||||
rippled.
 | 
			
		||||
You can check that codebase for other Linux distributions and versions.
 | 
			
		||||
If you cannot find yours there,
 | 
			
		||||
then we hope that these instructions can at least guide you in the right
 | 
			
		||||
direction.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
apt update
 | 
			
		||||
apt install --yes curl git libssl-dev python3.10-dev python3-pip make g++-11
 | 
			
		||||
 | 
			
		||||
curl --location --remote-name \
 | 
			
		||||
  "https://github.com/Kitware/CMake/releases/download/v3.25.1/cmake-3.25.1.tar.gz"
 | 
			
		||||
tar -xzf cmake-3.25.1.tar.gz
 | 
			
		||||
rm cmake-3.25.1.tar.gz
 | 
			
		||||
cd cmake-3.25.1
 | 
			
		||||
./bootstrap --parallel=$(nproc)
 | 
			
		||||
make --jobs $(nproc)
 | 
			
		||||
make install
 | 
			
		||||
cd ..
 | 
			
		||||
 | 
			
		||||
pip3 install 'conan<2'
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
[1]: https://github.com/thejohnfreeman/rippled-docker/blob/master/ubuntu-22.04/install.sh
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## macOS
 | 
			
		||||
 | 
			
		||||
Open a Terminal and enter the below command to bring up a dialog to install
 | 
			
		||||
the command line developer tools.
 | 
			
		||||
Once it is finished, this command should return a version greater than the
 | 
			
		||||
minimum required (see [BUILD.md][]).
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
clang --version
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The command line developer tools should include Git too:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
git --version
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Install [Homebrew][],
 | 
			
		||||
use it to install [pyenv][],
 | 
			
		||||
use it to install Python,
 | 
			
		||||
and use it to install Conan:
 | 
			
		||||
 | 
			
		||||
[Homebrew]: https://brew.sh/
 | 
			
		||||
[pyenv]: https://github.com/pyenv/pyenv
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
 | 
			
		||||
brew update
 | 
			
		||||
brew install pyenv
 | 
			
		||||
pyenv install 3.10-dev
 | 
			
		||||
pyenv global 3.10-dev
 | 
			
		||||
eval "$(pyenv init -)"
 | 
			
		||||
pip install 'conan<2'
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Install CMake with Homebrew too:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
brew install cmake
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										13
									
								
								docs/build/install.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								docs/build/install.md
									
									
									
									
										vendored
									
									
								
							@@ -1,13 +0,0 @@
 | 
			
		||||
## From source
 | 
			
		||||
 | 
			
		||||
From a source build, you can install rippled and libxrpl using CMake's
 | 
			
		||||
`--install` mode:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
cmake --install . --prefix /opt/local
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The default [prefix][1] is typically `/usr/local` on Linux and macOS and
 | 
			
		||||
`C:/Program Files/rippled` on Windows.
 | 
			
		||||
 | 
			
		||||
[1]: https://cmake.org/cmake/help/latest/variable/CMAKE_INSTALL_PREFIX.html
 | 
			
		||||
@@ -1,48 +0,0 @@
 | 
			
		||||
cmake_minimum_required(VERSION 3.11)
 | 
			
		||||
 | 
			
		||||
project(ed25519
 | 
			
		||||
  LANGUAGES C
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
if(PROJECT_NAME STREQUAL CMAKE_PROJECT_NAME)
 | 
			
		||||
  set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/output/$<CONFIG>/lib")
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
if(NOT TARGET OpenSSL::SSL)
 | 
			
		||||
  find_package(OpenSSL)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
add_library(ed25519 STATIC
 | 
			
		||||
  ed25519.c
 | 
			
		||||
)
 | 
			
		||||
add_library(ed25519::ed25519 ALIAS ed25519)
 | 
			
		||||
target_link_libraries(ed25519 PUBLIC OpenSSL::SSL)
 | 
			
		||||
 | 
			
		||||
include(GNUInstallDirs)
 | 
			
		||||
 | 
			
		||||
#[=========================================================[
 | 
			
		||||
   NOTE for macos:
 | 
			
		||||
   https://github.com/floodyberry/ed25519-donna/issues/29
 | 
			
		||||
   our source for ed25519-donna-portable.h has been
 | 
			
		||||
   patched to workaround this.
 | 
			
		||||
#]=========================================================]
 | 
			
		||||
target_include_directories(ed25519 PUBLIC
 | 
			
		||||
  $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
 | 
			
		||||
  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
install(
 | 
			
		||||
  TARGETS ed25519
 | 
			
		||||
  EXPORT ${PROJECT_NAME}-exports
 | 
			
		||||
  ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
 | 
			
		||||
)
 | 
			
		||||
install(
 | 
			
		||||
  EXPORT ${PROJECT_NAME}-exports
 | 
			
		||||
  DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
 | 
			
		||||
  FILE ${PROJECT_NAME}-targets.cmake
 | 
			
		||||
  NAMESPACE ${PROJECT_NAME}::
 | 
			
		||||
)
 | 
			
		||||
install(
 | 
			
		||||
  FILES ed25519.h
 | 
			
		||||
  DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
 | 
			
		||||
)
 | 
			
		||||
@@ -23,8 +23,7 @@
 | 
			
		||||
#include <ripple/protocol/digest.h>
 | 
			
		||||
#include <ripple/protocol/impl/secp256k1.h>
 | 
			
		||||
#include <boost/multiprecision/cpp_int.hpp>
 | 
			
		||||
#include <ed25519.h>
 | 
			
		||||
#include <type_traits>
 | 
			
		||||
#include <ed25519-donna/ed25519.h>
 | 
			
		||||
 | 
			
		||||
namespace ripple {
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,7 @@
 | 
			
		||||
#include <ripple/protocol/digest.h>
 | 
			
		||||
#include <ripple/protocol/impl/secp256k1.h>
 | 
			
		||||
#include <cstring>
 | 
			
		||||
#include <ed25519.h>
 | 
			
		||||
#include <ed25519-donna/ed25519.h>
 | 
			
		||||
 | 
			
		||||
namespace ripple {
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@
 | 
			
		||||
#include <ripple/rpc/handlers/WalletPropose.h>
 | 
			
		||||
#include <ripple/rpc/impl/RPCHelpers.h>
 | 
			
		||||
#include <cmath>
 | 
			
		||||
#include <ed25519.h>
 | 
			
		||||
#include <ed25519-donna/ed25519.h>
 | 
			
		||||
#include <map>
 | 
			
		||||
 | 
			
		||||
namespace ripple {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,52 +0,0 @@
 | 
			
		||||
cmake_minimum_required(VERSION 3.11)
 | 
			
		||||
 | 
			
		||||
project(secp256k1
 | 
			
		||||
  LANGUAGES C
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
if(PROJECT_NAME STREQUAL CMAKE_PROJECT_NAME)
 | 
			
		||||
  set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/output/$<CONFIG>/lib")
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
add_library(secp256k1 STATIC
 | 
			
		||||
  src/secp256k1.c
 | 
			
		||||
)
 | 
			
		||||
add_library(secp256k1::secp256k1 ALIAS secp256k1)
 | 
			
		||||
 | 
			
		||||
include(GNUInstallDirs)
 | 
			
		||||
 | 
			
		||||
target_compile_definitions(secp256k1 PRIVATE
 | 
			
		||||
  USE_NUM_NONE
 | 
			
		||||
  USE_FIELD_10X26
 | 
			
		||||
  USE_FIELD_INV_BUILTIN
 | 
			
		||||
  USE_SCALAR_8X32
 | 
			
		||||
  USE_SCALAR_INV_BUILTIN
 | 
			
		||||
)
 | 
			
		||||
target_include_directories(secp256k1
 | 
			
		||||
  PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
 | 
			
		||||
  PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
 | 
			
		||||
)
 | 
			
		||||
target_compile_options(secp256k1 PRIVATE
 | 
			
		||||
  $<$<C_COMPILER_ID:MSVC>:-wd4319>
 | 
			
		||||
  $<$<NOT:$<C_COMPILER_ID:MSVC>>:
 | 
			
		||||
  -Wno-deprecated-declarations
 | 
			
		||||
  -Wno-unused-function
 | 
			
		||||
  >
 | 
			
		||||
  $<$<C_COMPILER_ID:GNU>:-Wno-nonnull-compare>
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
install(
 | 
			
		||||
  TARGETS secp256k1
 | 
			
		||||
  EXPORT ${PROJECT_NAME}-exports
 | 
			
		||||
  ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
 | 
			
		||||
)
 | 
			
		||||
install(
 | 
			
		||||
  EXPORT ${PROJECT_NAME}-exports
 | 
			
		||||
  DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
 | 
			
		||||
  FILE ${PROJECT_NAME}-targets.cmake
 | 
			
		||||
  NAMESPACE ${PROJECT_NAME}::
 | 
			
		||||
)
 | 
			
		||||
install(
 | 
			
		||||
  FILES include/secp256k1.h
 | 
			
		||||
  DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
 | 
			
		||||
)
 | 
			
		||||
@@ -226,15 +226,13 @@ public:
 | 
			
		||||
                // SOCI requires boost::optional (not std::optional) as
 | 
			
		||||
                // parameters.
 | 
			
		||||
                boost::optional<std::int32_t> ig;
 | 
			
		||||
                // Known bug: https://github.com/SOCI/soci/issues/926
 | 
			
		||||
                // boost::optional<std::uint32_t> uig;
 | 
			
		||||
                uint32_t uig = 0;
 | 
			
		||||
                boost::optional<std::uint32_t> uig;
 | 
			
		||||
                boost::optional<std::int64_t> big;
 | 
			
		||||
                boost::optional<std::uint64_t> ubig;
 | 
			
		||||
                s << "SELECT I, UI, BI, UBI from STT;", soci::into(ig),
 | 
			
		||||
                    soci::into(uig), soci::into(big), soci::into(ubig);
 | 
			
		||||
                BEAST_EXPECT(
 | 
			
		||||
                    *ig == id[0] && uig == uid[0] && *big == bid[0] &&
 | 
			
		||||
                    *ig == id[0] && *uig == uid[0] && *big == bid[0] &&
 | 
			
		||||
                    *ubig == ubid[0]);
 | 
			
		||||
            }
 | 
			
		||||
            catch (std::exception&)
 | 
			
		||||
@@ -359,13 +357,18 @@ public:
 | 
			
		||||
            bfs::remove(dbPath);
 | 
			
		||||
    }
 | 
			
		||||
    void
 | 
			
		||||
    run() override
 | 
			
		||||
    testSQLite()
 | 
			
		||||
    {
 | 
			
		||||
        testSQLiteFileNames();
 | 
			
		||||
        testSQLiteSession();
 | 
			
		||||
        testSQLiteSelect();
 | 
			
		||||
        testSQLiteDeleteWithSubselect();
 | 
			
		||||
    }
 | 
			
		||||
    void
 | 
			
		||||
    run() override
 | 
			
		||||
    {
 | 
			
		||||
        testSQLite();
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
BEAST_DEFINE_TESTSUITE(SociDB, core, ripple);
 | 
			
		||||
 
 | 
			
		||||
@@ -409,6 +409,6 @@ public:
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
BEAST_DEFINE_TESTSUITE_MANUAL(NodeToShardRPC, rpc, ripple);
 | 
			
		||||
BEAST_DEFINE_TESTSUITE(NodeToShardRPC, rpc, ripple);
 | 
			
		||||
}  // namespace test
 | 
			
		||||
}  // namespace ripple
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user