Files
scylladb/cmake/FindSeastar.cmake
Avi Kivity f3eade2f62 treewide: relicense to ScyllaDB-Source-Available-1.0
Drop the AGPL license in favor of a source-available license.
See the blog post [1] for details.

[1] https://www.scylladb.com/2024/12/18/why-were-moving-to-a-source-available-license/
2024-12-18 17:45:13 +02:00

116 lines
4.3 KiB
CMake

#
# Copyright 2024-present ScyllaDB
#
#
# SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0
#
find_package(PkgConfig QUIET REQUIRED)
set(saved_pkg_config_path "$ENV{PKG_CONFIG_PATH}")
foreach(config ${CMAKE_CONFIGURATION_TYPES})
# this path should be consistent with the path used by configure.py, which configures
# seastar's building system for each enabled build mode / configuration type
set(binary_dir "${CMAKE_BINARY_DIR}/${config}/seastar")
set(ENV{PKG_CONFIG_PATH} "${saved_pkg_config_path}:${CMAKE_BINARY_DIR}/${config}/seastar")
pkg_search_module(seastar-${config}
REQUIRED QUIET
NO_CMAKE_PATH
IMPORTED_TARGET GLOBAL
seastar)
find_path(seastar_INCLUDE_DIR
NAMES seastar/core/seastar.hh
HINTS
${seastar-${config}_INCLUDE_DIRS})
pkg_search_module(seastar_testing-${config}
REQUIRED QUIET
NO_CMAKE_PATH
IMPORTED_TARGET GLOBAL
seastar-testing)
find_path(seastar_testing_INCLUDE_DIR
NAMES seastar/testing/seastar_test.hh
HINTS
${seastar_testing-${config}_INCLUDE_DIRS})
mark_as_advanced(
seastar_INCLUDE_DIR
seastar_testing_INCLUDE_DIR)
endforeach(config ${CMAKE_CONFIGURATION_TYPES})
set(ENV{PKG_CONFIG_PATH} "${saved_pkg_config_path}")
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Seastar
REQUIRED_VARS
seastar_INCLUDE_DIR
seastar_testing_INCLUDE_DIR)
foreach(config ${CMAKE_CONFIGURATION_TYPES})
# this directory is created when building Seastar, but we create it manually.
# otherwise CMake would complain when configuring targets which link against the
# "Seastar::seastar" library. it is imported library. and CMake assures that
# all INTERFACE_INCLUDE_DIRECTORIES of an imported library should exist.
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/${config}/seastar/gen/include)
endforeach()
foreach(component "seastar" "seastar_testing" "seastar_perf_testing")
if(NOT TARGET Seastar::${component})
add_library(Seastar::${component} UNKNOWN IMPORTED)
foreach(config ${CMAKE_CONFIGURATION_TYPES})
set_property(TARGET Seastar::${component} APPEND
PROPERTY
IMPORTED_CONFIGURATIONS ${config})
string (TOUPPER ${config} CONFIG)
if(config MATCHES "Debug|Dev")
set_property(TARGET Seastar::${component}
PROPERTY
IMPORTED_LOCATION_${CONFIG} "${CMAKE_BINARY_DIR}/${config}/seastar/lib${component}.so")
set(prefix ${component}-${config})
else()
set_property(TARGET Seastar::${component}
PROPERTY
IMPORTED_LOCATION_${CONFIG} "${CMAKE_BINARY_DIR}/${config}/seastar/lib${component}.a")
set(prefix ${component}-${config}_STATIC)
endif()
# these two libraries provide .pc, so set the properties retrieved with
# pkg-config.
if(component MATCHES "^(seastar|seastar_testing)$")
set_property(TARGET Seastar::${component} APPEND
PROPERTY
INTERFACE_INCLUDE_DIRECTORIES $<$<CONFIG:${config}>:${${prefix}_INCLUDE_DIRS}>)
set_property(TARGET Seastar::${component} APPEND
PROPERTY
INTERFACE_LINK_LIBRARIES $<$<CONFIG:${config}>:${${prefix}_LINK_LIBRARIES}>)
set_property(TARGET Seastar::${component} APPEND
PROPERTY
INTERFACE_LINK_OPTIONS $<$<CONFIG:${config}>:${${prefix}_LDFLAGS}>)
set_property(TARGET Seastar::${component} APPEND
PROPERTY
INTERFACE_COMPILE_OPTIONS $<$<CONFIG:${config}>:${${prefix}_CFLAGS_OTHER}>)
endif()
endforeach()
# seastar_perf_testing does not provide its .pc, so let's just hardwire its
# properties
if(component STREQUAL "seastar_perf_testing")
set_target_properties(Seastar::seastar_perf_testing PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${Seastar_INCLUDE_DIR}"
INTERFACE_LINK_LIBRARIES Seastar::seastar)
endif()
endif()
endforeach()
if(NOT TARGET Seastar::iotune)
add_executable(Seastar::iotune IMPORTED)
foreach(config ${CMAKE_CONFIGURATION_TYPES})
set_property(TARGET Seastar::iotune APPEND
PROPERTY
IMPORTED_CONFIGURATIONS ${config})
string (TOUPPER ${config} CONFIG)
set_property(TARGET Seastar::iotune
PROPERTY
IMPORTED_LOCATION_${CONFIG} ${CMAKE_BINARY_DIR}/${config}/seastar/apps/iotune/iotune)
endforeach()
endif()