mirror of
https://github.com/Xahau/xahaud.git
synced 2025-11-04 18:55:49 +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
|
name: Build and publish Doxygen documentation
|
||||||
# To test this workflow, push your changes to your fork's `develop` branch.
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
@@ -12,18 +11,12 @@ jobs:
|
|||||||
image: docker://rippleci/rippled-ci-builder:2944b78d22db
|
image: docker://rippleci/rippled-ci-builder:2944b78d22db
|
||||||
steps:
|
steps:
|
||||||
- name: checkout
|
- name: checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v2
|
||||||
- name: check environment
|
|
||||||
run: |
|
|
||||||
echo ${PATH} | tr ':' '\n'
|
|
||||||
cmake --version
|
|
||||||
doxygen --version
|
|
||||||
env
|
|
||||||
- name: build
|
- name: build
|
||||||
run: |
|
run: |
|
||||||
mkdir build
|
mkdir build
|
||||||
cd build
|
cd build
|
||||||
cmake -Donly_docs=TRUE ..
|
cmake -DBoost_NO_BOOST_CMAKE=ON ..
|
||||||
cmake --build . --target docs --parallel $(nproc)
|
cmake --build . --target docs --parallel $(nproc)
|
||||||
- name: publish
|
- name: publish
|
||||||
uses: peaceiris/actions-gh-pages@v3
|
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.
|
# Ignore object files.
|
||||||
*.o
|
*.o
|
||||||
|
build
|
||||||
.nih_c
|
.nih_c
|
||||||
tags
|
tags
|
||||||
TAGS
|
TAGS
|
||||||
@@ -69,7 +70,7 @@ docs/html_doc
|
|||||||
# Xcode user-specific project settings
|
# Xcode user-specific project settings
|
||||||
# Xcode
|
# Xcode
|
||||||
.DS_Store
|
.DS_Store
|
||||||
/build/
|
*/build/*
|
||||||
*.pbxuser
|
*.pbxuser
|
||||||
!default.pbxuser
|
!default.pbxuser
|
||||||
*.mode1v3
|
*.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)
|
set_target_properties(xrpl_core PROPERTIES UNITY_BUILD ON)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
add_library(libxrpl INTERFACE)
|
|
||||||
target_link_libraries(libxrpl INTERFACE xrpl_core)
|
|
||||||
add_library(xrpl::libxrpl ALIAS libxrpl)
|
|
||||||
|
|
||||||
|
|
||||||
#[===============================[
|
#[===============================[
|
||||||
beast/legacy FILES:
|
beast/legacy FILES:
|
||||||
@@ -141,8 +137,8 @@ target_link_libraries (xrpl_core
|
|||||||
Ripple::boost
|
Ripple::boost
|
||||||
NIH::WasmEdge
|
NIH::WasmEdge
|
||||||
Ripple::syslibs
|
Ripple::syslibs
|
||||||
secp256k1::secp256k1
|
NIH::secp256k1
|
||||||
ed25519::ed25519
|
NIH::ed25519-donna
|
||||||
date::date
|
date::date
|
||||||
Ripple::opts)
|
Ripple::opts)
|
||||||
#[=================================[
|
#[=================================[
|
||||||
|
|||||||
@@ -1,84 +1,79 @@
|
|||||||
#[===================================================================[
|
#[===================================================================[
|
||||||
docs target (optional)
|
docs target (optional)
|
||||||
#]===================================================================]
|
#]===================================================================]
|
||||||
|
if (tests)
|
||||||
option(with_docs "Include the docs target?" FALSE)
|
find_package (Doxygen)
|
||||||
|
if (NOT TARGET Doxygen::doxygen)
|
||||||
if(NOT (with_docs OR only_docs))
|
message (STATUS "doxygen executable not found -- skipping docs target")
|
||||||
return()
|
return ()
|
||||||
endif()
|
endif ()
|
||||||
|
|
||||||
find_package(Doxygen)
|
set (doxygen_output_directory "${CMAKE_BINARY_DIR}/docs")
|
||||||
if(NOT TARGET Doxygen::doxygen)
|
set (doxygen_include_path "${CMAKE_CURRENT_SOURCE_DIR}/src")
|
||||||
message(STATUS "doxygen executable not found -- skipping docs target")
|
set (doxygen_index_file "${doxygen_output_directory}/html/index.html")
|
||||||
return()
|
set (doxyfile "${CMAKE_CURRENT_SOURCE_DIR}/docs/Doxyfile")
|
||||||
endif()
|
|
||||||
|
file (GLOB_RECURSE doxygen_input
|
||||||
set(doxygen_output_directory "${CMAKE_BINARY_DIR}/docs")
|
docs/*.md
|
||||||
set(doxygen_include_path "${CMAKE_CURRENT_SOURCE_DIR}/src")
|
src/ripple/*.h
|
||||||
set(doxygen_index_file "${doxygen_output_directory}/html/index.html")
|
src/ripple/*.cpp
|
||||||
set(doxyfile "${CMAKE_CURRENT_SOURCE_DIR}/docs/Doxyfile")
|
src/ripple/*.md
|
||||||
|
src/test/*.h
|
||||||
file(GLOB_RECURSE doxygen_input
|
src/test/*.md
|
||||||
docs/*.md
|
Builds/*/README.md)
|
||||||
src/ripple/*.h
|
list (APPEND doxygen_input
|
||||||
src/ripple/*.cpp
|
README.md
|
||||||
src/ripple/*.md
|
RELEASENOTES.md
|
||||||
src/test/*.h
|
src/README.md)
|
||||||
src/test/*.md
|
set (dependencies "${doxygen_input}" "${doxyfile}")
|
||||||
Builds/*/README.md)
|
|
||||||
list(APPEND doxygen_input
|
function (verbose_find_path variable name)
|
||||||
README.md
|
# find_path sets a CACHE variable, so don't try using a "local" variable.
|
||||||
RELEASENOTES.md
|
find_path (${variable} "${name}" ${ARGN})
|
||||||
src/README.md)
|
if (NOT ${variable})
|
||||||
set(dependencies "${doxygen_input}" "${doxyfile}")
|
message (NOTICE "could not find ${name}")
|
||||||
|
else ()
|
||||||
function(verbose_find_path variable name)
|
message (STATUS "found ${name}: ${${variable}}/${name}")
|
||||||
# find_path sets a CACHE variable, so don't try using a "local" variable.
|
endif ()
|
||||||
find_path(${variable} "${name}" ${ARGN})
|
endfunction ()
|
||||||
if(NOT ${variable})
|
|
||||||
message(NOTICE "could not find ${name}")
|
verbose_find_path (doxygen_plantuml_jar_path plantuml.jar PATH_SUFFIXES share/plantuml)
|
||||||
else()
|
verbose_find_path (doxygen_dot_path dot)
|
||||||
message(STATUS "found ${name}: ${${variable}}/${name}")
|
|
||||||
endif()
|
# https://en.cppreference.com/w/Cppreference:Archives
|
||||||
endfunction()
|
# https://stackoverflow.com/questions/60822559/how-to-move-a-file-download-from-configure-step-to-build-step
|
||||||
|
set (download_script "${CMAKE_BINARY_DIR}/docs/download-cppreference.cmake")
|
||||||
verbose_find_path(doxygen_plantuml_jar_path plantuml.jar PATH_SUFFIXES share/plantuml)
|
file (WRITE
|
||||||
verbose_find_path(doxygen_dot_path dot)
|
"${download_script}"
|
||||||
|
"file (DOWNLOAD \
|
||||||
# https://en.cppreference.com/w/Cppreference:Archives
|
http://upload.cppreference.com/mwiki/images/b/b2/html_book_20190607.zip \
|
||||||
# https://stackoverflow.com/questions/60822559/how-to-move-a-file-download-from-configure-step-to-build-step
|
${CMAKE_BINARY_DIR}/docs/cppreference.zip \
|
||||||
set(download_script "${CMAKE_BINARY_DIR}/docs/download-cppreference.cmake")
|
EXPECTED_HASH MD5=82b3a612d7d35a83e3cb1195a63689ab \
|
||||||
file(WRITE
|
)\n \
|
||||||
"${download_script}"
|
execute_process ( \
|
||||||
"file(DOWNLOAD \
|
COMMAND \"${CMAKE_COMMAND}\" -E tar -xf cppreference.zip \
|
||||||
http://upload.cppreference.com/mwiki/images/b/b2/html_book_20190607.zip \
|
)\n"
|
||||||
${CMAKE_BINARY_DIR}/docs/cppreference.zip \
|
)
|
||||||
EXPECTED_HASH MD5=82b3a612d7d35a83e3cb1195a63689ab \
|
set (tagfile "${CMAKE_BINARY_DIR}/docs/cppreference-doxygen-web.tag.xml")
|
||||||
)\n \
|
add_custom_command (
|
||||||
execute_process( \
|
OUTPUT "${tagfile}"
|
||||||
COMMAND \"${CMAKE_COMMAND}\" -E tar -xf cppreference.zip \
|
COMMAND "${CMAKE_COMMAND}" -P "${download_script}"
|
||||||
)\n"
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/docs"
|
||||||
)
|
)
|
||||||
set(tagfile "${CMAKE_BINARY_DIR}/docs/cppreference-doxygen-web.tag.xml")
|
set (doxygen_tagfiles "${tagfile}=http://en.cppreference.com/w/")
|
||||||
add_custom_command(
|
|
||||||
OUTPUT "${tagfile}"
|
add_custom_command (
|
||||||
COMMAND "${CMAKE_COMMAND}" -P "${download_script}"
|
OUTPUT "${doxygen_index_file}"
|
||||||
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/docs"
|
COMMAND "${CMAKE_COMMAND}" -E env
|
||||||
)
|
"DOXYGEN_OUTPUT_DIRECTORY=${doxygen_output_directory}"
|
||||||
set(doxygen_tagfiles "${tagfile}=http://en.cppreference.com/w/")
|
"DOXYGEN_INCLUDE_PATH=${doxygen_include_path}"
|
||||||
|
"DOXYGEN_TAGFILES=${doxygen_tagfiles}"
|
||||||
add_custom_command(
|
"DOXYGEN_PLANTUML_JAR_PATH=${doxygen_plantuml_jar_path}"
|
||||||
OUTPUT "${doxygen_index_file}"
|
"DOXYGEN_DOT_PATH=${doxygen_dot_path}"
|
||||||
COMMAND "${CMAKE_COMMAND}" -E env
|
"${DOXYGEN_EXECUTABLE}" "${doxyfile}"
|
||||||
"DOXYGEN_OUTPUT_DIRECTORY=${doxygen_output_directory}"
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
"DOXYGEN_INCLUDE_PATH=${doxygen_include_path}"
|
DEPENDS "${dependencies}" "${tagfile}")
|
||||||
"DOXYGEN_TAGFILES=${doxygen_tagfiles}"
|
add_custom_target (docs
|
||||||
"DOXYGEN_PLANTUML_JAR_PATH=${doxygen_plantuml_jar_path}"
|
DEPENDS "${doxygen_index_file}"
|
||||||
"DOXYGEN_DOT_PATH=${doxygen_dot_path}"
|
SOURCES "${dependencies}")
|
||||||
"${DOXYGEN_EXECUTABLE}" "${doxyfile}"
|
endif ()
|
||||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
||||||
DEPENDS "${dependencies}" "${tagfile}")
|
|
||||||
add_custom_target(docs
|
|
||||||
DEPENDS "${doxygen_index_file}"
|
|
||||||
SOURCES "${dependencies}")
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
install (
|
install (
|
||||||
TARGETS
|
TARGETS
|
||||||
|
ed25519-donna
|
||||||
common
|
common
|
||||||
opts
|
opts
|
||||||
ripple_syslibs
|
ripple_syslibs
|
||||||
@@ -15,6 +16,17 @@ install (
|
|||||||
RUNTIME DESTINATION bin
|
RUNTIME DESTINATION bin
|
||||||
INCLUDES DESTINATION include)
|
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
|
install (EXPORT RippleExports
|
||||||
FILE RippleTargets.cmake
|
FILE RippleTargets.cmake
|
||||||
NAMESPACE Ripple::
|
NAMESPACE Ripple::
|
||||||
|
|||||||
@@ -35,10 +35,17 @@ target_link_libraries (opts
|
|||||||
$<$<BOOL:${profile}>:-pg>
|
$<$<BOOL:${profile}>:-pg>
|
||||||
$<$<AND:$<BOOL:${is_gcc}>,$<BOOL:${profile}>>:-p>)
|
$<$<AND:$<BOOL:${is_gcc}>,$<BOOL:${profile}>>:-p>)
|
||||||
|
|
||||||
if(jemalloc)
|
if (jemalloc)
|
||||||
find_package(jemalloc REQUIRED)
|
if (static)
|
||||||
target_compile_definitions(opts INTERFACE PROFILE_JEMALLOC)
|
set(JEMALLOC_USE_STATIC ON CACHE BOOL "" FORCE)
|
||||||
target_link_libraries(opts INTERFACE jemalloc::jemalloc)
|
endif ()
|
||||||
|
find_package (jemalloc REQUIRED)
|
||||||
|
target_compile_definitions (opts INTERFACE PROFILE_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 ()
|
endif ()
|
||||||
|
|
||||||
if (san)
|
if (san)
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ if (is_multiconfig)
|
|||||||
file(GLOB md_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} CONFIGURE_DEPENDS
|
file(GLOB md_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} CONFIGURE_DEPENDS
|
||||||
*.md)
|
*.md)
|
||||||
LIST(APPEND all_sources ${md_files})
|
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)
|
get_target_property (_type ${_target} TYPE)
|
||||||
if(_type STREQUAL "INTERFACE_LIBRARY")
|
if(_type STREQUAL "INTERFACE_LIBRARY")
|
||||||
continue()
|
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...")
|
message (STATUS "using [${container_label}] as build container tag...")
|
||||||
|
|
||||||
file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/packages)
|
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
|
rpm
|
||||||
#]===================================================================]
|
#]===================================================================]
|
||||||
@@ -47,6 +60,8 @@ if (is_root_project)
|
|||||||
exclude_from_default (rpm_container)
|
exclude_from_default (rpm_container)
|
||||||
add_custom_target (rpm
|
add_custom_target (rpm
|
||||||
docker run
|
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_SOURCE_DIR}:/opt/rippled_bld/pkg/rippled
|
||||||
-v ${CMAKE_CURRENT_BINARY_DIR}/packages:/opt/rippled_bld/pkg/out
|
-v ${CMAKE_CURRENT_BINARY_DIR}/packages:/opt/rippled_bld/pkg/out
|
||||||
-t rippleci/rippled-rpm-builder:${container_label}
|
-t rippleci/rippled-rpm-builder:${container_label}
|
||||||
@@ -117,6 +132,8 @@ if (is_root_project)
|
|||||||
exclude_from_default (dpkg_container)
|
exclude_from_default (dpkg_container)
|
||||||
add_custom_target (dpkg
|
add_custom_target (dpkg
|
||||||
docker run
|
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_SOURCE_DIR}:/opt/rippled_bld/pkg/rippled
|
||||||
-v ${CMAKE_CURRENT_BINARY_DIR}/packages:/opt/rippled_bld/pkg/out
|
-v ${CMAKE_CURRENT_BINARY_DIR}/packages:/opt/rippled_bld/pkg/out
|
||||||
-t rippled-dpkg-builder:${container_label}
|
-t rippled-dpkg-builder:${container_label}
|
||||||
|
|||||||
@@ -10,7 +10,12 @@ if (NOT ep_procs)
|
|||||||
message (STATUS "Using ${ep_procs} cores for ExternalProject builds.")
|
message (STATUS "Using ${ep_procs} cores for ExternalProject builds.")
|
||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
get_property(is_multiconfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
|
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)
|
set (CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "" FORCE)
|
||||||
if (NOT is_multiconfig)
|
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")
|
message (FATAL_ERROR "This project requires GCC 8 or later")
|
||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
|
if (CMAKE_GENERATOR STREQUAL "Xcode")
|
||||||
|
set (is_xcode TRUE)
|
||||||
|
endif ()
|
||||||
|
|
||||||
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||||
set (is_linux TRUE)
|
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
|
find_package(Boost 1.70 REQUIRED
|
||||||
COMPONENTS
|
COMPONENTS
|
||||||
chrono
|
chrono
|
||||||
@@ -9,12 +55,11 @@ find_package(Boost 1.70 REQUIRED
|
|||||||
program_options
|
program_options
|
||||||
regex
|
regex
|
||||||
system
|
system
|
||||||
thread
|
thread)
|
||||||
)
|
|
||||||
|
|
||||||
add_library(ripple_boost INTERFACE)
|
add_library(ripple_boost INTERFACE)
|
||||||
add_library(Ripple::boost ALIAS ripple_boost)
|
add_library(Ripple::boost ALIAS ripple_boost)
|
||||||
if(XCODE)
|
if(is_xcode)
|
||||||
target_include_directories(ripple_boost BEFORE INTERFACE ${Boost_INCLUDE_DIRS})
|
target_include_directories(ripple_boost BEFORE INTERFACE ${Boost_INCLUDE_DIRS})
|
||||||
target_compile_options(ripple_boost INTERFACE --system-header-prefix="boost/")
|
target_compile_options(ripple_boost INTERFACE --system-header-prefix="boost/")
|
||||||
else()
|
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 @@
|
|||||||
find_package(Protobuf 3.8)
|
#[===================================================================[
|
||||||
|
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.
|
||||||
|
#]===================================================================]
|
||||||
|
|
||||||
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/proto_gen)
|
if (static)
|
||||||
set(ccbd ${CMAKE_CURRENT_BINARY_DIR})
|
set (Protobuf_USE_STATIC_LIBS ON)
|
||||||
set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_BINARY_DIR}/proto_gen)
|
endif ()
|
||||||
protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS src/ripple/proto/ripple.proto)
|
find_package (Protobuf 3.8)
|
||||||
set(CMAKE_CURRENT_BINARY_DIR ${ccbd})
|
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)
|
||||||
|
|
||||||
add_library(pbufs STATIC ${PROTO_SRCS} ${PROTO_HDRS})
|
if (NOT TARGET protobuf::libprotobuf)
|
||||||
target_include_directories(pbufs SYSTEM PUBLIC
|
add_library (protobuf::libprotobuf STATIC IMPORTED GLOBAL)
|
||||||
${CMAKE_BINARY_DIR}/proto_gen
|
endif ()
|
||||||
${CMAKE_BINARY_DIR}/proto_gen/src/ripple/proto
|
file (MAKE_DIRECTORY ${BINARY_DIR}/_installed_/include)
|
||||||
)
|
set_target_properties (protobuf::libprotobuf PROPERTIES
|
||||||
target_link_libraries(pbufs protobuf::libprotobuf)
|
IMPORTED_LOCATION_DEBUG
|
||||||
target_compile_options(pbufs
|
${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 (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 ${save_CBD})
|
||||||
|
|
||||||
|
add_library (pbufs STATIC ${PROTO_SRCS} ${PROTO_HDRS})
|
||||||
|
|
||||||
|
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
|
PUBLIC
|
||||||
$<$<BOOL:${XCODE}>:
|
$<$<BOOL:${is_xcode}>:
|
||||||
--system-header-prefix="google/protobuf"
|
--system-header-prefix="google/protobuf"
|
||||||
-Wno-deprecated-dynamic-exception-spec
|
-Wno-deprecated-dynamic-exception-spec
|
||||||
>
|
>)
|
||||||
)
|
add_library (Ripple::pbufs ALIAS pbufs)
|
||||||
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,15 +1,319 @@
|
|||||||
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
|
generate protobuf sources for
|
||||||
grpc defs and bundle into a
|
grpc defs and bundle into a
|
||||||
static lib
|
static lib
|
||||||
#]=================================]
|
#]=================================]
|
||||||
set(GRPC_GEN_DIR "${CMAKE_BINARY_DIR}/proto_gen_grpc")
|
set (GRPC_GEN_DIR "${CMAKE_BINARY_DIR}/proto_gen_grpc")
|
||||||
file(MAKE_DIRECTORY ${GRPC_GEN_DIR})
|
file (MAKE_DIRECTORY ${GRPC_GEN_DIR})
|
||||||
set(GRPC_PROTO_SRCS)
|
set (GRPC_PROTO_SRCS)
|
||||||
set(GRPC_PROTO_HDRS)
|
set (GRPC_PROTO_HDRS)
|
||||||
set(GRPC_PROTO_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/src/ripple/proto/org")
|
set (GRPC_PROTO_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/src/ripple/proto/org")
|
||||||
file(GLOB_RECURSE GRPC_DEFINITION_FILES LIST_DIRECTORIES false "${GRPC_PROTO_ROOT}/*.proto")
|
file(GLOB_RECURSE GRPC_DEFINITION_FILES LIST_DIRECTORIES false "${GRPC_PROTO_ROOT}/*.proto")
|
||||||
foreach(file ${GRPC_DEFINITION_FILES})
|
foreach(file ${GRPC_DEFINITION_FILES})
|
||||||
get_filename_component(_abs_file ${file} ABSOLUTE)
|
get_filename_component(_abs_file ${file} ABSOLUTE)
|
||||||
@@ -20,10 +324,10 @@ foreach(file ${GRPC_DEFINITION_FILES})
|
|||||||
get_filename_component(_rel_root_dir ${_rel_root_file} DIRECTORY)
|
get_filename_component(_rel_root_dir ${_rel_root_file} DIRECTORY)
|
||||||
file(RELATIVE_PATH _rel_dir ${CMAKE_CURRENT_SOURCE_DIR} ${_abs_dir})
|
file(RELATIVE_PATH _rel_dir ${CMAKE_CURRENT_SOURCE_DIR} ${_abs_dir})
|
||||||
|
|
||||||
set(src_1 "${GRPC_GEN_DIR}/${_rel_root_dir}/${_basename}.grpc.pb.cc")
|
set (src_1 "${GRPC_GEN_DIR}/${_rel_root_dir}/${_basename}.grpc.pb.cc")
|
||||||
set(src_2 "${GRPC_GEN_DIR}/${_rel_root_dir}/${_basename}.pb.cc")
|
set (src_2 "${GRPC_GEN_DIR}/${_rel_root_dir}/${_basename}.pb.cc")
|
||||||
set(hdr_1 "${GRPC_GEN_DIR}/${_rel_root_dir}/${_basename}.grpc.pb.h")
|
set (hdr_1 "${GRPC_GEN_DIR}/${_rel_root_dir}/${_basename}.grpc.pb.h")
|
||||||
set(hdr_2 "${GRPC_GEN_DIR}/${_rel_root_dir}/${_basename}.pb.h")
|
set (hdr_2 "${GRPC_GEN_DIR}/${_rel_root_dir}/${_basename}.pb.h")
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT ${src_1} ${src_2} ${hdr_1} ${hdr_2}
|
OUTPUT ${src_1} ${src_2} ${hdr_1} ${hdr_2}
|
||||||
COMMAND protobuf::protoc
|
COMMAND protobuf::protoc
|
||||||
@@ -41,22 +345,20 @@ foreach(file ${GRPC_DEFINITION_FILES})
|
|||||||
list(APPEND GRPC_PROTO_HDRS ${hdr_1} ${hdr_2})
|
list(APPEND GRPC_PROTO_HDRS ${hdr_1} ${hdr_2})
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
add_library(grpc_pbufs STATIC ${GRPC_PROTO_SRCS} ${GRPC_PROTO_HDRS})
|
add_library (grpc_pbufs STATIC ${GRPC_PROTO_SRCS} ${GRPC_PROTO_HDRS})
|
||||||
#target_include_directories(grpc_pbufs PRIVATE src)
|
#target_include_directories (grpc_pbufs PRIVATE src)
|
||||||
target_include_directories(grpc_pbufs SYSTEM PUBLIC ${GRPC_GEN_DIR})
|
target_include_directories (grpc_pbufs SYSTEM PUBLIC ${GRPC_GEN_DIR})
|
||||||
target_link_libraries(grpc_pbufs
|
target_link_libraries (grpc_pbufs protobuf::libprotobuf "gRPC::grpc++${grpc_suffix}")
|
||||||
"gRPC::grpc++"
|
target_compile_options (grpc_pbufs
|
||||||
# libgrpc is missing references.
|
|
||||||
absl::random_random
|
|
||||||
)
|
|
||||||
target_compile_options(grpc_pbufs
|
|
||||||
PRIVATE
|
PRIVATE
|
||||||
$<$<BOOL:${MSVC}>:-wd4065>
|
$<$<BOOL:${MSVC}>:-wd4065>
|
||||||
$<$<NOT:$<BOOL:${MSVC}>>:-Wno-deprecated-declarations>
|
$<$<NOT:$<BOOL:${MSVC}>>:-Wno-deprecated-declarations>
|
||||||
PUBLIC
|
PUBLIC
|
||||||
$<$<BOOL:${MSVC}>:-wd4996>
|
$<$<BOOL:${MSVC}>:-wd4996>
|
||||||
$<$<BOOL:${XCODE}>:
|
$<$<BOOL:${is_xcode}>:
|
||||||
--system-header-prefix="google/protobuf"
|
--system-header-prefix="google/protobuf"
|
||||||
-Wno-deprecated-dynamic-exception-spec
|
-Wno-deprecated-dynamic-exception-spec
|
||||||
>)
|
>)
|
||||||
add_library(Ripple::grpc_pbufs ALIAS grpc_pbufs)
|
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)
|
||||||
@@ -1,17 +1,10 @@
|
|||||||
cmake_minimum_required(VERSION 3.16)
|
cmake_minimum_required (VERSION 3.16)
|
||||||
|
|
||||||
if(POLICY CMP0074)
|
if (POLICY CMP0074)
|
||||||
cmake_policy(SET CMP0074 NEW)
|
cmake_policy(SET CMP0074 NEW)
|
||||||
endif()
|
endif ()
|
||||||
if(POLICY CMP0077)
|
|
||||||
cmake_policy(SET CMP0077 NEW)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Fix "unrecognized escape" issues when passing CMAKE_MODULE_PATH on Windows.
|
project (rippled)
|
||||||
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)
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
set(CMAKE_CXX_STANDARD 20)
|
set(CMAKE_CXX_STANDARD 20)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
@@ -30,12 +23,15 @@ if(Git_FOUND)
|
|||||||
endif()
|
endif()
|
||||||
endif() #git
|
endif() #git
|
||||||
|
|
||||||
if(thread_safety_analysis)
|
if (thread_safety_analysis)
|
||||||
add_compile_options(-Wthread-safety -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS -DRIPPLE_ENABLE_THREAD_SAFETY_ANNOTATIONS)
|
add_compile_options(-Wthread-safety -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS -DRIPPLE_ENABLE_THREAD_SAFETY_ANNOTATIONS)
|
||||||
add_compile_options("-stdlib=libc++")
|
add_compile_options("-stdlib=libc++")
|
||||||
add_link_options("-stdlib=libc++")
|
add_link_options("-stdlib=libc++")
|
||||||
endif()
|
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 (CheckCXXCompilerFlag)
|
||||||
include (FetchContent)
|
include (FetchContent)
|
||||||
include (ExternalProject)
|
include (ExternalProject)
|
||||||
@@ -48,6 +44,7 @@ endif ()
|
|||||||
include(RippledSanity)
|
include(RippledSanity)
|
||||||
include(RippledVersion)
|
include(RippledVersion)
|
||||||
include(RippledSettings)
|
include(RippledSettings)
|
||||||
|
include(RippledNIH)
|
||||||
include(RippledRelease)
|
include(RippledRelease)
|
||||||
# this check has to remain in the top-level cmake
|
# this check has to remain in the top-level cmake
|
||||||
# because of the early return statement
|
# because of the early return statement
|
||||||
@@ -60,41 +57,20 @@ endif ()
|
|||||||
include(RippledCompiler)
|
include(RippledCompiler)
|
||||||
include(RippledInterface)
|
include(RippledInterface)
|
||||||
|
|
||||||
option(only_docs "Include only the docs target?" FALSE)
|
|
||||||
include(RippledDocs)
|
|
||||||
if(only_docs)
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
###
|
###
|
||||||
|
|
||||||
include(deps/Boost)
|
include(deps/Boost)
|
||||||
find_package(OpenSSL 1.1.1 REQUIRED)
|
include(deps/OpenSSL)
|
||||||
set_target_properties(OpenSSL::SSL PROPERTIES
|
include(deps/Secp256k1)
|
||||||
INTERFACE_COMPILE_DEFINITIONS OPENSSL_NO_SSL2
|
include(deps/Ed25519-donna)
|
||||||
)
|
include(deps/Lz4)
|
||||||
add_subdirectory(src/secp256k1)
|
include(deps/Libarchive)
|
||||||
add_subdirectory(src/ed25519-donna)
|
include(deps/Sqlite)
|
||||||
find_package(lz4 REQUIRED)
|
include(deps/Soci)
|
||||||
# Target names with :: are not allowed in a generator expression.
|
include(deps/Snappy)
|
||||||
# We need to pull the include directories and imported location properties
|
include(deps/Rocksdb)
|
||||||
# from separate targets.
|
include(deps/Nudb)
|
||||||
find_package(LibArchive REQUIRED)
|
include(deps/date)
|
||||||
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/Protobuf)
|
include(deps/Protobuf)
|
||||||
include(deps/gRPC)
|
include(deps/gRPC)
|
||||||
include(deps/cassandra)
|
include(deps/cassandra)
|
||||||
@@ -130,4 +106,5 @@ include(RippledCore)
|
|||||||
include(RippledInstall)
|
include(RippledInstall)
|
||||||
include(RippledCov)
|
include(RippledCov)
|
||||||
include(RippledMultiConfig)
|
include(RippledMultiConfig)
|
||||||
|
include(RippledDocs)
|
||||||
include(RippledValidatorKeys)
|
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
|
# 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
|
# Major Changes
|
||||||
on GitHub][1].
|
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.
|
||||||
This file includes only special instructions specific to this project.
|
To do this:
|
||||||
|
1. Go to [XLS Standards](https://github.com/XRPLF/XRPL-Standards/discussions).
|
||||||
|
2. Choose the next available standard number.
|
||||||
## Before you start
|
3. Open a discussion with the appropriate title to propose your draft standard.
|
||||||
|
4. Link your XLS in your PR.
|
||||||
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.
|
|
||||||
|
|
||||||
|
|
||||||
# Style guide
|
# 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
|
## Formatting
|
||||||
|
All code must conform to `clang-format` version 10, unless the result would be unreasonably difficult to read or maintain.
|
||||||
All code must conform to `clang-format` version 10,
|
To change your code to conform use `clang-format -i <your changed files>`.
|
||||||
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.
|
|
||||||
|
|
||||||
|
|
||||||
## Avoid
|
## Avoid
|
||||||
|
|
||||||
1. Proliferation of nearly identical code.
|
1. Proliferation of nearly identical code.
|
||||||
2. Proliferation of new files and classes.
|
2. Proliferation of new files and classes.
|
||||||
3. Complex inheritance and complex OOP patterns.
|
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.
|
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.
|
8. Importing new libraries unless there is a very good reason to do so.
|
||||||
|
|
||||||
|
|
||||||
## Seek to
|
## Seek to
|
||||||
|
|
||||||
9. Extend functionality of existing code rather than creating new code.
|
9. Extend functionality of existing code rather than creating new code.
|
||||||
10. Prefer readability over terseness where important logic is concerned.
|
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.
|
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.
|
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.
|
14. Provide as many comments as you feel that a competent programmer would need to understand what your code does.
|
||||||
|
|
||||||
|
|
||||||
# Maintainers
|
# 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.
|
## Code Review
|
||||||
They are able to push new code, make decisions on when a release should be
|
New contributors' PRs must be reviewed by at least two of the maintainers. Well established prior contributors can be reviewed by a single maintainer.
|
||||||
made, etc.
|
|
||||||
|
|
||||||
|
## 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
|
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.
|
||||||
|
|
||||||
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
|
||||||
* [JoelKatz](https://github.com/JoelKatz) (Ripple)
|
* [JoelKatz](https://github.com/JoelKatz) (Ripple)
|
||||||
* [manojsdoshi](https://github.com/manojsdoshi) (Ripple)
|
* [Manojsdoshi](https://github.com/manojsdoshi) (Ripple)
|
||||||
* [n3tc4t](https://github.com/n3tc4t) (XRPL Labs)
|
* [N3tc4t](https://github.com/n3tc4t) (XRPL Labs)
|
||||||
* [Nik Bougalis](https://github.com/nbougalis)
|
* [Nikolaos D Bougalis](https://github.com/nbougalis)
|
||||||
* [nixer89](https://github.com/nixer89) (XRP Ledger Foundation)
|
* [Nixer89](https://github.com/nixer89) (XRP Ledger Foundation)
|
||||||
* [RichardAH](https://github.com/RichardAH) (XRPL Labs + 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)
|
* [Silkjaer](https://github.com/Silkjaer) (XRP Ledger Foundation)
|
||||||
* [WietseWind](https://github.com/WietseWind) (XRPL Labs + XRP Ledger Foundation)
|
* [WietseWind](https://github.com/WietseWind) (XRPL Labs + XRP Ledger Foundation)
|
||||||
* [Ed Hennis](https://github.com/ximinez) (Ripple)
|
* [Ximinez](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
|
|
||||||
|
|||||||
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/digest.h>
|
||||||
#include <ripple/protocol/impl/secp256k1.h>
|
#include <ripple/protocol/impl/secp256k1.h>
|
||||||
#include <boost/multiprecision/cpp_int.hpp>
|
#include <boost/multiprecision/cpp_int.hpp>
|
||||||
#include <ed25519.h>
|
#include <ed25519-donna/ed25519.h>
|
||||||
#include <type_traits>
|
|
||||||
|
|
||||||
namespace ripple {
|
namespace ripple {
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
#include <ripple/protocol/digest.h>
|
#include <ripple/protocol/digest.h>
|
||||||
#include <ripple/protocol/impl/secp256k1.h>
|
#include <ripple/protocol/impl/secp256k1.h>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <ed25519.h>
|
#include <ed25519-donna/ed25519.h>
|
||||||
|
|
||||||
namespace ripple {
|
namespace ripple {
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
#include <ripple/rpc/handlers/WalletPropose.h>
|
#include <ripple/rpc/handlers/WalletPropose.h>
|
||||||
#include <ripple/rpc/impl/RPCHelpers.h>
|
#include <ripple/rpc/impl/RPCHelpers.h>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <ed25519.h>
|
#include <ed25519-donna/ed25519.h>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
namespace ripple {
|
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
|
// SOCI requires boost::optional (not std::optional) as
|
||||||
// parameters.
|
// parameters.
|
||||||
boost::optional<std::int32_t> ig;
|
boost::optional<std::int32_t> ig;
|
||||||
// Known bug: https://github.com/SOCI/soci/issues/926
|
boost::optional<std::uint32_t> uig;
|
||||||
// boost::optional<std::uint32_t> uig;
|
|
||||||
uint32_t uig = 0;
|
|
||||||
boost::optional<std::int64_t> big;
|
boost::optional<std::int64_t> big;
|
||||||
boost::optional<std::uint64_t> ubig;
|
boost::optional<std::uint64_t> ubig;
|
||||||
s << "SELECT I, UI, BI, UBI from STT;", soci::into(ig),
|
s << "SELECT I, UI, BI, UBI from STT;", soci::into(ig),
|
||||||
soci::into(uig), soci::into(big), soci::into(ubig);
|
soci::into(uig), soci::into(big), soci::into(ubig);
|
||||||
BEAST_EXPECT(
|
BEAST_EXPECT(
|
||||||
*ig == id[0] && uig == uid[0] && *big == bid[0] &&
|
*ig == id[0] && *uig == uid[0] && *big == bid[0] &&
|
||||||
*ubig == ubid[0]);
|
*ubig == ubid[0]);
|
||||||
}
|
}
|
||||||
catch (std::exception&)
|
catch (std::exception&)
|
||||||
@@ -359,13 +357,18 @@ public:
|
|||||||
bfs::remove(dbPath);
|
bfs::remove(dbPath);
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
run() override
|
testSQLite()
|
||||||
{
|
{
|
||||||
testSQLiteFileNames();
|
testSQLiteFileNames();
|
||||||
testSQLiteSession();
|
testSQLiteSession();
|
||||||
testSQLiteSelect();
|
testSQLiteSelect();
|
||||||
testSQLiteDeleteWithSubselect();
|
testSQLiteDeleteWithSubselect();
|
||||||
}
|
}
|
||||||
|
void
|
||||||
|
run() override
|
||||||
|
{
|
||||||
|
testSQLite();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
BEAST_DEFINE_TESTSUITE(SociDB, core, ripple);
|
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 test
|
||||||
} // namespace ripple
|
} // namespace ripple
|
||||||
|
|||||||
Reference in New Issue
Block a user