summaryrefslogtreecommitdiffstats
path: root/src/seastar/cmake/SeastarDependencies.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'src/seastar/cmake/SeastarDependencies.cmake')
-rw-r--r--src/seastar/cmake/SeastarDependencies.cmake148
1 files changed, 148 insertions, 0 deletions
diff --git a/src/seastar/cmake/SeastarDependencies.cmake b/src/seastar/cmake/SeastarDependencies.cmake
new file mode 100644
index 000000000..fbd5a8e1d
--- /dev/null
+++ b/src/seastar/cmake/SeastarDependencies.cmake
@@ -0,0 +1,148 @@
+#
+# This file is open source software, licensed to you under the terms
+# of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+# distributed with this work for additional information regarding copyright
+# ownership. You may not use this file except in compliance with the License.
+#
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+#
+# Copyright (C) 2019 Scylladb, Ltd.
+#
+
+include(CMakeParseArguments)
+
+#
+# CMake bundles `FindBoost.cmake`, which is coupled to the Boost version. If
+# we're on a system without a recent enough version of `FindBoost.cmake`, then
+# we need to use the one bundled with Seastar.
+#
+# The "real" FIND_PACKAGE invocation for Boost is inside SEASTAR_FIND_DEPENDENCIES.
+#
+
+# Be consistent in results from FindBoost.cmake.
+# This is required because cmake-boost may return to Boost_{component}_LIBRARY:
+# - /usr/lib64/libboost_foo.so
+# - Boost::foo
+set (Boost_NO_BOOST_CMAKE ON)
+
+if (CMAKE_CXX_STANDARD LESS 20)
+ set (_seastar_boost_version 1.64.0)
+else ()
+ # for including the fix of https://github.com/boostorg/test/pull/252
+ set (_seastar_boost_version 1.73.0)
+endif ()
+
+# This is the minimum version of Boost we need the CMake-bundled `FindBoost.cmake` to know about.
+find_package (Boost ${_seastar_boost_version} MODULE)
+
+# - set _seastar_dep_args_<package> for additional args for find_package().
+# add REQUIRED if the corresponding option is explicitly enabled, so
+# find_package() can stop the cmake generation.
+# - set _seastar_dep_skip_<package> if the option is explicitly disabled
+macro (seastar_set_dep_args package)
+ cmake_parse_arguments(args "REQUIRED" "VERSION;OPTION" "COMPONENTS" ${ARGN})
+ if (DEFINED args_VERSION)
+ list (APPEND _seastar_dep_args_${package} ${args_VERSION})
+ endif ()
+ if (args_REQUIRED)
+ list (APPEND _seastar_dep_args_${package} REQUIRED)
+ elseif (DEFINED args_OPTION)
+ if (args_OPTION)
+ list (APPEND _seastar_dep_args_${package} REQUIRED)
+ else ()
+ set (_seastar_dep_skip_${package} TRUE)
+ endif ()
+ endif ()
+ if (args_COMPONENTS)
+ list (APPEND _seastar_dep_args_${package} COMPONENTS
+ ${args_COMPONENTS})
+ endif ()
+endmacro ()
+
+#
+# Iterate through the dependency list defined below and execute `find_package`
+# with the corresponding configuration for each 3rd-party dependency.
+#
+macro (seastar_find_dependencies)
+ #
+ # List of Seastar dependencies that is meant to be used
+ # both in Seastar configuration and by clients which
+ # consume Seastar via SeastarConfig.cmake.
+ #
+ set (_seastar_all_dependencies
+ # Public dependencies.
+ Boost
+ c-ares
+ cryptopp
+ dpdk # No version information published.
+ fmt
+ lz4
+ # Private and private/public dependencies.
+ GnuTLS
+ LibUring
+ LinuxMembarrier
+ Sanitizers
+ SourceLocation
+ StdAtomic
+ hwloc
+ lksctp-tools # No version information published.
+ numactl # No version information published.
+ rt
+ yaml-cpp)
+
+ # Arguments to `find_package` for each 3rd-party dependency.
+ # Note that the version specification is a "minimal" version requirement.
+
+ # `unit_test_framework` is not required in the case we are building Seastar
+ # without the testing library, however the component is always specified as required
+ # to keep the CMake code minimalistic and easy-to-use.
+ seastar_set_dep_args (Boost REQUIRED
+ VERSION ${_seastar_boost_version}
+ COMPONENTS
+ filesystem
+ program_options
+ thread
+ unit_test_framework)
+ seastar_set_dep_args (c-ares REQUIRED
+ VERSION 1.13)
+ seastar_set_dep_args (cryptopp REQUIRED
+ VERSION 5.6.5)
+ seastar_set_dep_args (dpdk
+ OPTION ${Seastar_DPDK})
+ seastar_set_dep_args (fmt REQUIRED
+ VERSION 5.0.0)
+ seastar_set_dep_args (lz4 REQUIRED
+ VERSION 1.7.3)
+ seastar_set_dep_args (GnuTLS REQUIRED
+ VERSION 3.3.26)
+ seastar_set_dep_args (LibUring
+ VERSION 2.0
+ OPTION ${Seastar_IO_URING})
+ seastar_set_dep_args (StdAtomic REQUIRED)
+ seastar_set_dep_args (hwloc
+ VERSION 1.11.2
+ OPTION ${Seastar_HWLOC})
+ seastar_set_dep_args (lksctp-tools REQUIRED)
+ seastar_set_dep_args (rt REQUIRED)
+ seastar_set_dep_args (numactl
+ OPTION ${Seastar_NUMA})
+ seastar_set_dep_args (yaml-cpp REQUIRED
+ VERSION 0.5.1)
+
+ foreach (third_party ${_seastar_all_dependencies})
+ if (NOT _seastar_dep_skip_${third_party})
+ find_package ("${third_party}" ${_seastar_dep_args_${third_party}})
+ endif ()
+ endforeach ()
+endmacro ()