diff --git a/components/core/CMakeLists.txt b/components/core/CMakeLists.txt index 69987b0ef4..7d6edb6ef3 100644 --- a/components/core/CMakeLists.txt +++ b/components/core/CMakeLists.txt @@ -11,8 +11,10 @@ validate_compiler_versions() # Include options for CLP build include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/Options/options.cmake") -validate_and_setup_all_clp_dependency_flags() -convert_clp_dependency_properties_to_variables() +validate_all_clp_dependency_flags() + +# Include utilities to find and configure dependencies +include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/find_utils.cmake") if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set(default_build_type "Release") @@ -136,197 +138,8 @@ if(PROJECT_IS_TOP_LEVEL) endif() endif() -if(CLP_NEED_ABSL) - find_package(absl REQUIRED) - if (absl_FOUND) - message(STATUS "Found absl ${absl_VERSION}") - endif() -endif() - -# Find and setup ANTLR Library -if(CLP_NEED_ANTLR) - find_package(antlr4-runtime REQUIRED) - if (antlr4-runtime_FOUND) - message(STATUS "Found antlr4-runtime ${antlr4-runtime_VERSION}") - endif() -endif() - -# Find and setup Boost Library -if(CLP_NEED_BOOST) - if(CLP_USE_STATIC_LIBS) - set(Boost_USE_STATIC_LIBS ON) - endif() - find_package( - Boost - 1.81...1.88 - REQUIRED - filesystem - iostreams - program_options - regex - system - url - ) - message(STATUS "Found Boost ${Boost_VERSION}") -endif() - -if(CLP_NEED_CATCH2) - find_package(Catch2 3.8.0 REQUIRED) - message(STATUS "Found Catch2 ${Catch2_VERSION}") -endif() - -if(CLP_NEED_DATE) - find_package(date REQUIRED) - if (date_FOUND) - message(STATUS "Found date ${date_VERSION}") - endif() -endif() - -if(CLP_NEED_FMT) - find_package(fmt REQUIRED) - if(fmt_FOUND) - message(STATUS "Found fmt ${fmt_VERSION}") - endif() -endif() - -if(CLP_NEED_LOG_SURGEON) - find_package(log_surgeon REQUIRED) - if(log_surgeon_FOUND) - message(STATUS "Found log_surgeon ${log_surgeon_VERSION}") - endif() -endif() - -if(CLP_NEED_NLOHMANN_JSON) - find_package(nlohmann_json REQUIRED) - if(nlohmann_json_FOUND) - message(STATUS "Found nlohmann_json ${nlohmann_json_VERSION}") - endif() -endif() - -if(CLP_NEED_SIMDJSON) - find_package(simdjson REQUIRED) - if(simdjson_FOUND) - message(STATUS "Found simdjson ${simdjson_VERSION}") - endif() -endif() - -if(CLP_NEED_SPDLOG) - find_package(spdlog REQUIRED) - if(spdlog_FOUND) - message(STATUS "Found spdlog ${spdlog_VERSION}") - endif() -endif() - -# Find and setup libarchive -if(CLP_NEED_LIBARCHIVE) - if(CLP_USE_STATIC_LIBS) - set(LibArchive_USE_STATIC_LIBS ON) - endif() - find_package(LibArchive REQUIRED) - if(LibArchive_FOUND) - message(STATUS "Found LibArchive ${LibArchive_VERSION}") - else() - message(FATAL_ERROR "Could not find ${CLP_LIBS_STRING} libraries for LibArchive") - endif() -endif() - -# Find and setup libcurl -# By default, CURL does not provide static libraries -if(CLP_NEED_CURL) - find_package(CURL 7.61.1 REQUIRED) - if(CURL_FOUND) - message(STATUS "Found CURL ${CURL_VERSION_STRING}") - else() - message(FATAL_ERROR "Could not find ${CLP_LIBS_STRING} libraries for CURL") - endif() -endif() - -# Find OpenSSL -if(CLP_NEED_OPENSSL) - find_package(OpenSSL REQUIRED) - if(OPENSSL_FOUND) - message(STATUS "Found OpenSSL (${OPENSSL_VERSION})") - else() - message(FATAL_ERROR "OpenSSL not found") - endif() -endif() - -# Find and setup MariaDBClient library -if(CLP_NEED_MARIADB) - if(CLP_USE_STATIC_LIBS) - # NOTE: We can't statically link to MariaDBClient since it's GPL - message(AUTHOR_WARNING "MariaDBClient cannot be statically linked due to its license.") - endif() - find_package(MariaDBClient 3.1.0 REQUIRED) - if(MariaDBClient_FOUND) - message(STATUS "Found MariaDBClient ${MariaDBClient_VERSION}") - else() - message(FATAL_ERROR "Could not find ${CLP_LIBS_STRING} libraries for MariaDBClient") - endif() -endif() - -# Find and setup mongocxx -if(CLP_NEED_MONGOCXX) - find_package(mongocxx REQUIRED) - message(STATUS "Found mongocxx ${mongocxx_VERSION}") - if(CLP_USE_STATIC_LIBS) - set(MONGOCXX_TARGET mongo::mongocxx_static) - else() - set(MONGOCXX_TARGET mongo::mongocxx_shared) - endif() -endif() - -# Find and setup msgpack-cxx -if(CLP_NEED_MSGPACKCXX) - find_package(msgpack-cxx 7.0.0 REQUIRED) - message(STATUS "Found msgpack-cxx ${msgpack-cxx_VERSION}") -endif() - find_package(Threads REQUIRED) -if(CLP_NEED_YAMLCPP) - find_package(yaml-cpp REQUIRED) - if(yaml-cpp_FOUND) - message(STATUS "Found yaml-cpp ${yaml-cpp_VERSION}") - endif() -endif() - -# Add ystdlib -if(CLP_NEED_YSTDLIB) - find_package(ystdlib REQUIRED) - message(STATUS "Found ystdlib-cpp ${ystdlib_VERSION}") -endif() - -if(CLP_NEED_ZSTD) - # v1.4.8 is the lowest version available in the package managers of the OSes we support. - find_package(zstd 1.4.8 REQUIRED) - message(STATUS "Found zstd ${zstd_VERSION}") - if(CLP_USE_STATIC_LIBS) - set(zstd_TARGET zstd::libzstd_static) - else() - set(zstd_TARGET zstd::libzstd_shared) - endif() -endif() - -if(CLP_NEED_LIBLZMA) - if(CLP_USE_STATIC_LIBS) - set(LibLZMA_ROOT ${LibLZMA-static_ROOT}) - set(LibLZMA_USE_STATIC_LIBS ON) - else() - set(LibLZMA_ROOT ${LibLZMA-shared_ROOT}) - endif() - # Version 5.8.1 and above address CVE-2024-3094 and CVE-2025-31115. - find_package(LibLZMA 5.8.1 REQUIRED) - message(STATUS "Found LibLZMA ${LibLZMA_VERSION}") -endif() - -# sqlite dependencies -if(CLP_NEED_SQLITE) - set(sqlite_DYNAMIC_LIBS "dl;m;pthread") - include(cmake/Modules/FindLibraryDependencies.cmake) - FindDynamicLibraryDependencies(sqlite "${sqlite_DYNAMIC_LIBS}") -endif() - add_subdirectory(src/clp/regex_utils) add_subdirectory(src/clp/string_utils) @@ -728,6 +541,26 @@ set(SOURCE_FILES_unitTest ) if(CLP_BUILD_TESTING) + clp_find_absl() + clp_find_boost() + clp_find_catch2() + clp_find_curl() + clp_find_date() + clp_find_fmt() + clp_find_libarchive() + clp_find_log_surgeon() + clp_find_lzma() + clp_find_mariadb_client() + clp_find_mongocxx() + clp_find_msgpack() + clp_find_nlohmann_json() + clp_find_open_ssl() + clp_find_simdjson() + clp_find_spdlog() + clp_find_sqlite() + clp_find_ystdlib() + clp_find_zstd() + add_executable(unitTest ${SOURCE_FILES_unitTest} ${SOURCE_FILES_clp_s_unitTest} diff --git a/components/core/cmake/Modules/FindLibArchive.cmake b/components/core/cmake/Modules/FindLibArchive.cmake index c257e88341..3845094320 100644 --- a/components/core/cmake/Modules/FindLibArchive.cmake +++ b/components/core/cmake/Modules/FindLibArchive.cmake @@ -14,7 +14,7 @@ set(libarchive_LIBNAME "archive") -include(cmake/Modules/FindLibraryDependencies.cmake) +include("${PROJECT_SOURCE_DIR}/cmake/Modules/FindLibraryDependencies.cmake") # On macOS, libarchive installed through brew is not linked into prefix by default. # So it cannot be found by pkg-config and we need to manually find it. diff --git a/components/core/cmake/Modules/FindMariaDBClient.cmake b/components/core/cmake/Modules/FindMariaDBClient.cmake index 5801be2e6b..091229cbd9 100644 --- a/components/core/cmake/Modules/FindMariaDBClient.cmake +++ b/components/core/cmake/Modules/FindMariaDBClient.cmake @@ -14,7 +14,7 @@ set(mariadbclient_LIBNAME "mariadb") -include(cmake/Modules/FindLibraryDependencies.cmake) +include("${PROJECT_SOURCE_DIR}/cmake/Modules/FindLibraryDependencies.cmake") # Run pkg-config find_package(PkgConfig) diff --git a/components/core/cmake/Options/options.cmake b/components/core/cmake/Options/options.cmake index 3802b3dde4..9096b614dc 100644 --- a/components/core/cmake/Options/options.cmake +++ b/components/core/cmake/Options/options.cmake @@ -94,26 +94,22 @@ option( # @param {string} TARGET_CLP_BUILD_OPTION # @param {string[]} ARGN The required `CLP_BUILD_` options function(validate_clp_dependencies_for_target TARGET_CLP_BUILD_OPTION) - if (NOT DEFINED TARGET_CLP_BUILD_OPTION OR TARGET_CLP_BUILD_OPTION STREQUAL "") + if(NOT DEFINED TARGET_CLP_BUILD_OPTION OR TARGET_CLP_BUILD_OPTION STREQUAL "") message(FATAL_ERROR "TARGET_CLP_BUILD_OPTION can't be unset or empty.") endif() + # Only validate dependencies for this option if the option is enabled. + if(NOT "${${TARGET_CLP_BUILD_OPTION}}") + return() + endif() + foreach(DEPENDENCY IN LISTS ARGN) - if (NOT "${${DEPENDENCY}}") + if(NOT "${${DEPENDENCY}}") message(FATAL_ERROR "${TARGET_CLP_BUILD_OPTION} requires ${DEPENDENCY}=ON") endif() endforeach() endfunction() -# Sets the given `CLP_NEED_` flags as directory properties -# -# @param {string[]} ARGV The `CLP_NEED_` flags to set. -function(set_clp_need_flags) - foreach(NEEDS_FLAG IN LISTS ARGV) - set_property(DIRECTORY PROPERTY "${NEEDS_FLAG}" ON) - endforeach() -endfunction() - function(validate_clp_binaries_dependencies) validate_clp_dependencies_for_target(CLP_BUILD_EXECUTABLES CLP_BUILD_CLP_STRING_UTILS @@ -129,29 +125,6 @@ function(validate_clp_binaries_dependencies) ) endfunction() -function(set_clp_binaries_dependencies) - set_clp_need_flags( - CLP_NEED_ABSL - CLP_NEED_BOOST - CLP_NEED_CURL - CLP_NEED_DATE - CLP_NEED_FMT - CLP_NEED_LIBARCHIVE - CLP_NEED_LOG_SURGEON - CLP_NEED_MARIADB - CLP_NEED_MONGOCXX - CLP_NEED_MSGPACKCXX - CLP_NEED_NLOHMANN_JSON - CLP_NEED_OPENSSL - CLP_NEED_SIMDJSON - CLP_NEED_SPDLOG - CLP_NEED_SQLITE - CLP_NEED_YAMLCPP - CLP_NEED_YSTDLIB - CLP_NEED_ZSTD - ) -endfunction() - function(validate_clp_tests_dependencies) validate_clp_dependencies_for_target(CLP_BUILD_TESTING CLP_BUILD_CLP_REGEX_UTILS @@ -163,38 +136,12 @@ function(validate_clp_tests_dependencies) ) endfunction() -function(set_clp_tests_dependencies) - set_clp_need_flags( - CLP_NEED_ABSL - CLP_NEED_BOOST - CLP_NEED_CATCH2 - CLP_NEED_DATE - CLP_NEED_FMT - CLP_NEED_LIBARCHIVE - CLP_NEED_LIBLZMA - CLP_NEED_LOG_SURGEON - CLP_NEED_MARIADB - CLP_NEED_MONGOCXX - CLP_NEED_NLOHMANN_JSON - CLP_NEED_OPENSSL - CLP_NEED_SIMDJSON - CLP_NEED_SPDLOG - CLP_NEED_SQLITE - CLP_NEED_YSTDLIB - CLP_NEED_ZSTD - ) -endfunction() - function(validate_clp_regex_utils_dependencies) validate_clp_dependencies_for_target(CLP_BUILD_CLP_REGEX_UTILS CLP_BUILD_CLP_STRING_UTILS ) endfunction() -function(set_clp_regex_utils_dependencies) - set_property(DIRECTORY PROPERTY CLP_NEED_YSTDLIB TRUE) -endfunction() - function(validate_clp_s_archivereader_dependencies) validate_clp_dependencies_for_target(CLP_BUILD_CLP_S_ARCHIVEREADER CLP_BUILD_CLP_STRING_UTILS @@ -204,19 +151,6 @@ function(validate_clp_s_archivereader_dependencies) ) endfunction() -function(set_clp_s_archivereader_dependencies) - set_clp_need_flags( - CLP_NEED_ABSL - CLP_NEED_BOOST - CLP_NEED_CURL - CLP_NEED_FMT - CLP_NEED_MSGPACKCXX - CLP_NEED_NLOHMANN_JSON - CLP_NEED_SPDLOG - CLP_NEED_YSTDLIB - ) -endfunction() - function(validate_clp_s_archivewriter_dependencies) validate_clp_dependencies_for_target(CLP_BUILD_CLP_S_ARCHIVEWRITER CLP_BUILD_CLP_S_CLP_DEPENDENCIES @@ -225,84 +159,30 @@ function(validate_clp_s_archivewriter_dependencies) ) endfunction() -function(set_clp_s_archivewriter_dependencies) - set_clp_need_flags( - CLP_NEED_ABSL - CLP_NEED_BOOST - CLP_NEED_CURL - CLP_NEED_FMT - CLP_NEED_MSGPACKCXX - CLP_NEED_NLOHMANN_JSON - CLP_NEED_SIMDJSON - CLP_NEED_SPDLOG - CLP_NEED_YSTDLIB - ) -endfunction() - function(validate_clp_s_clp_dependencies_dependencies) validate_clp_dependencies_for_target(CLP_BUILD_CLP_S_CLP_DEPENDENCIES CLP_BUILD_CLP_STRING_UTILS ) endfunction() -function(set_clp_s_clp_dependencies_dependencies) - set_clp_need_flags( - CLP_NEED_BOOST - CLP_NEED_CURL - CLP_NEED_FMT - CLP_NEED_LOG_SURGEON - CLP_NEED_MSGPACKCXX - CLP_NEED_NLOHMANN_JSON - CLP_NEED_OPENSSL - CLP_NEED_SPDLOG - CLP_NEED_YSTDLIB - CLP_NEED_ZSTD - ) -endfunction() - function(validate_clp_s_io_dependencies) validate_clp_dependencies_for_target(CLP_BUILD_CLP_S_IO CLP_BUILD_CLP_S_CLP_DEPENDENCIES ) endfunction() -function(set_clp_s_io_dependencies) - set_clp_need_flags( - CLP_NEED_BOOST - CLP_NEED_FMT - CLP_NEED_SIMDJSON - CLP_NEED_SPDLOG - CLP_NEED_ZSTD - ) -endfunction() - function(validate_clp_s_json_constructor_dependencies) validate_clp_dependencies_for_target(CLP_BUILD_CLP_S_JSONCONSTRUCTOR CLP_BUILD_CLP_S_ARCHIVEREADER ) endfunction() -function(set_clp_s_json_constructor_dependencies) - set_clp_need_flags( - CLP_NEED_FMT - CLP_NEED_MONGOCXX - CLP_NEED_SPDLOG - CLP_NEED_ZSTD - ) -endfunction() - function(validate_clp_s_reducer_dependencies_dependencies) validate_clp_dependencies_for_target(CLP_BUILD_CLP_S_REDUCER_DEPENDENCIES CLP_BUILD_CLP_S_CLP_DEPENDENCIES ) endfunction() -function(set_clp_s_reducer_dependencies_dependencies) - set_clp_need_flags( - CLP_NEED_NLOHMANN_JSON - ) -endfunction() - function(validate_clp_s_search_dependencies) validate_clp_dependencies_for_target(CLP_BUILD_CLP_S_SEARCH CLP_BUILD_CLP_STRING_UTILS @@ -312,27 +192,12 @@ function(validate_clp_s_search_dependencies) ) endfunction() -function(set_clp_s_search_dependencies) - set_clp_need_flags( - CLP_NEED_ABSL - CLP_NEED_LOG_SURGEON - CLP_NEED_SIMDJSON - CLP_NEED_SPDLOG - ) -endfunction() - function(validate_clp_s_search_ast_dependencies) validate_clp_dependencies_for_target(CLP_BUILD_CLP_S_SEARCH_AST CLP_BUILD_CLP_S_TIMESTAMPPATTERN ) endfunction() -function(set_clp_s_search_ast_dependencies) - set_clp_need_flags( - CLP_NEED_SIMDJSON - ) -endfunction() - function(validate_clp_s_search_kql_dependencies) validate_clp_dependencies_for_target(CLP_BUILD_CLP_S_SEARCH_KQL CLP_BUILD_CLP_STRING_UTILS @@ -340,143 +205,35 @@ function(validate_clp_s_search_kql_dependencies) ) endfunction() -function(set_clp_s_search_kql_dependencies) - set_clp_need_flags( - CLP_NEED_ANTLR - CLP_NEED_SPDLOG - ) -endfunction() - function(validate_clp_s_search_sql_dependencies) validate_clp_dependencies_for_target(CLP_BUILD_CLP_S_SEARCH_SQL CLP_BUILD_CLP_S_SEARCH_AST ) endfunction() -function(set_clp_s_search_sql_dependencies) - set_clp_need_flags( - CLP_NEED_ANTLR - CLP_NEED_SPDLOG - ) -endfunction() - function(validate_clp_s_timestamppattern_dependencies) validate_clp_dependencies_for_target(CLP_BUILD_CLP_S_TIMESTAMPPATTERN CLP_BUILD_CLP_STRING_UTILS ) endfunction() -function(set_clp_s_timestamppattern_dependencies) - set_clp_need_flags( - CLP_NEED_DATE - CLP_NEED_SPDLOG - ) -endfunction() - # Validates that for each target whose `CLP_BUILD_` option is `ON`, the `CLP_BUILD_` options for -# the target's dependencies are also `ON`; Sets the required `CLP_NEED_` flags for any target that -# will be built. -function(validate_and_setup_all_clp_dependency_flags) - if (CLP_BUILD_EXECUTABLES) - validate_clp_binaries_dependencies() - set_clp_binaries_dependencies() - endif() - - if (CLP_BUILD_TESTING) - validate_clp_tests_dependencies() - set_clp_tests_dependencies() - endif() - - if (CLP_BUILD_CLP_REGEX_UTILS) - validate_clp_regex_utils_dependencies() - set_clp_regex_utils_dependencies() - endif() - +# the target's dependencies are also `ON`. +function(validate_all_clp_dependency_flags) + validate_clp_binaries_dependencies() + validate_clp_tests_dependencies() + validate_clp_regex_utils_dependencies() # clp::string_utils has no dependencies - if (CLP_BUILD_CLP_S_ARCHIVEREADER) - validate_clp_s_archivereader_dependencies() - set_clp_s_archivereader_dependencies() - endif() - - if (CLP_BUILD_CLP_S_ARCHIVEWRITER) - validate_clp_s_archivewriter_dependencies() - set_clp_s_archivewriter_dependencies() - endif() - - if (CLP_BUILD_CLP_S_CLP_DEPENDENCIES) - validate_clp_s_clp_dependencies_dependencies() - set_clp_s_clp_dependencies_dependencies() - endif() - - if (CLP_BUILD_CLP_S_IO) - validate_clp_s_io_dependencies() - set_clp_s_io_dependencies() - endif() - - if (CLP_BUILD_CLP_S_JSONCONSTRUCTOR) - validate_clp_s_json_constructor_dependencies() - set_clp_s_json_constructor_dependencies() - endif() - - if (CLP_BUILD_CLP_S_REDUCER_DEPENDENCIES) - validate_clp_s_reducer_dependencies_dependencies() - set_clp_s_reducer_dependencies_dependencies() - endif() - - if (CLP_BUILD_CLP_S_SEARCH) - validate_clp_s_search_dependencies() - set_clp_s_search_dependencies() - endif() - - if (CLP_BUILD_CLP_S_SEARCH_AST) - validate_clp_s_search_ast_dependencies() - set_clp_s_search_ast_dependencies() - endif() - - if (CLP_BUILD_CLP_S_SEARCH_KQL) - validate_clp_s_search_kql_dependencies() - set_clp_s_search_kql_dependencies() - endif() - - if (CLP_BUILD_CLP_S_SEARCH_SQL) - validate_clp_s_search_sql_dependencies() - set_clp_s_search_sql_dependencies() - endif() - - if (CLP_BUILD_CLP_S_TIMESTAMPPATTERN) - validate_clp_s_timestamppattern_dependencies() - set_clp_s_timestamppattern_dependencies() - endif() -endfunction() - -function (convert_clp_dependency_properties_to_variables) - list(APPEND CLP_NEED_FLAGS - CLP_NEED_ABSL - CLP_NEED_ANTLR - CLP_NEED_BOOST - CLP_NEED_CATCH2 - CLP_NEED_CURL - CLP_NEED_DATE - CLP_NEED_FMT - CLP_NEED_LIBARCHIVE - CLP_NEED_LIBLZMA - CLP_NEED_LOG_SURGEON - CLP_NEED_MARIADB - CLP_NEED_MONGOCXX - CLP_NEED_MSGPACKCXX - CLP_NEED_NLOHMANN_JSON - CLP_NEED_OPENSSL - CLP_NEED_SIMDJSON - CLP_NEED_SPDLOG - CLP_NEED_SQLITE - CLP_NEED_YAMLCPP - CLP_NEED_YSTDLIB - CLP_NEED_ZSTD - ) - - foreach(FLAG IN LISTS CLP_NEED_FLAGS) - get_property(VALUE DIRECTORY PROPERTY "${FLAG}") - set("${FLAG}" "${VALUE}" PARENT_SCOPE) - endforeach() + validate_clp_s_archivereader_dependencies() + validate_clp_s_archivewriter_dependencies() + validate_clp_s_clp_dependencies_dependencies() + validate_clp_s_io_dependencies() + validate_clp_s_json_constructor_dependencies() + validate_clp_s_reducer_dependencies_dependencies() + validate_clp_s_search_dependencies() + validate_clp_s_search_ast_dependencies() + validate_clp_s_search_kql_dependencies() + validate_clp_s_search_sql_dependencies() + validate_clp_s_timestamppattern_dependencies() endfunction() diff --git a/components/core/cmake/find_utils.cmake b/components/core/cmake/find_utils.cmake new file mode 100644 index 0000000000..8ada176fb6 --- /dev/null +++ b/components/core/cmake/find_utils.cmake @@ -0,0 +1,206 @@ +# This file contains utility functions for finding dependencies. + +# @param {string} LIBRARY +# @return {bool} Whether we have already run the find function for LIBRARY in the CLP_CHECKED_FIND +# variable. +function(get_clp_checked_find LIBRARY) + get_property(CLP_CHECKED_FIND + DIRECTORY "${PROJECT_SOURCE_DIR}" + PROPERTY "clp_checked_find_${LIBRARY}" + ) + set(CLP_CHECKED_FIND "${CLP_CHECKED_FIND}" PARENT_SCOPE) +endfunction() + +# Sets a flag indicating that we have run the find function for LIBRARY. +# @param {string} LIBRARY +function(set_clp_checked_find LIBRARY) + set_property(DIRECTORY "${PROJECT_SOURCE_DIR}" PROPERTY "clp_checked_find_${LIBRARY}" TRUE) +endfunction() + +# Finds and sets up the the absl library. +# @return Forwards any variables from the `find_package` call. +macro(clp_find_absl) + find_package(absl REQUIRED) +endmacro() + +# Finds and sets up the the antlr4-runtime library. +# @return Forwards any variables from the `find_package` call. +macro(clp_find_antlr4_runtime) + find_package(antlr4-runtime REQUIRED) +endmacro() + +# Finds and sets up the the Boost library. +# @return Forwards any variables from the `find_package` call. +macro(clp_find_boost) + get_clp_checked_find(boost) + if(CLP_CHECKED_FIND) + # Silence output from `find_package(Boost)` on repeated invocations. + set(CLP_QUIET_FIND_BOOST QUIET) + endif() + + if(CLP_USE_STATIC_LIBS) + set(Boost_USE_STATIC_LIBS ON) + endif() + + find_package( + Boost + 1.81 + ${CLP_QUIET_FIND_BOOST} + REQUIRED + filesystem + iostreams + program_options + regex + system + url + ) + if(Boost_VERSION VERSION_GREATER 1.88) + message( + FATAL_ERROR + "Boost version ${Boost_VERSION} is newer than the maximum allowed version (1.88.0)." + ) + endif() + set_clp_checked_find(boost) +endmacro() + +# Finds and sets up Catch2. +# @return Forwards any variables from the `find_package` call. +macro(clp_find_catch2) + find_package(Catch2 3.8.0 REQUIRED) +endmacro() + +# Finds and sets up libcurl. +# By default, CURL does not provide static libraries. +# @return Forwards any variables from the `find_package` call. +macro(clp_find_curl) + find_package(CURL 7.61.1 REQUIRED) +endmacro() + +# Finds and sets up the date library. +# @return Forwards any variables from the `find_package` call. +macro(clp_find_date) + find_package(date REQUIRED) +endmacro() + +# Finds and sets up the fmt library. +# @return Forwards any variables from the `find_package` call. +macro(clp_find_fmt) + find_package(fmt REQUIRED) +endmacro() + +# Finds and sets up libarchive. +# @return Forwards any variables from the `find_package` call. +macro(clp_find_libarchive) + if(CLP_USE_STATIC_LIBS) + set(LibArchive_USE_STATIC_LIBS ON) + endif() + find_package(LibArchive REQUIRED) +endmacro() + +# Finds and sets up the log_surgeon library. +# @return Forwards any variables from the `find_package` call. +macro(clp_find_log_surgeon) + find_package(log_surgeon REQUIRED) +endmacro() + +# Finds and sets up the LZMA library. +# TODO: Add a script in ./cmake/Modules to properly import LZMA in find_package()'s module mode. +# @return Forwards any variables from the `find_package` call. +macro(clp_find_lzma) + if(CLP_USE_STATIC_LIBS) + set(LibLZMA_ROOT ${LibLZMA-static_ROOT}) + set(LibLZMA_USE_STATIC_LIBS ON) + else() + set(LibLZMA_ROOT ${LibLZMA-shared_ROOT}) + endif() + # Version 5.8.1 and above address CVE-2024-3094 and CVE-2025-31115. + find_package(LibLZMA 5.8.1 REQUIRED) +endmacro() + +# Finds and sets up the MariaDBClient library. +# @return Forwards any variables from the `find_package` call. +macro(clp_find_mariadb_client) + # Only log static linking warning one time + get_clp_checked_find(mariadb_client) + if(CLP_USE_STATIC_LIBS AND NOT CLP_CHECKED_FIND) + # NOTE: We can't statically link to MariaDBClient since it's GPL + message(AUTHOR_WARNING "MariaDBClient cannot be statically linked due to its license.") + endif() + find_package(MariaDBClient 3.1.0 REQUIRED) + set_clp_checked_find(mariadb_client) +endmacro() + +# Finds and sets up the mongocxx library. +# @return The name of the mongocxx target in the `MONGOCXX_TARGET` variable, and +# forwards any variables from the `find_package` call. +macro(clp_find_mongocxx) + find_package(mongocxx REQUIRED) + if(CLP_USE_STATIC_LIBS) + set(MONGOCXX_TARGET mongo::mongocxx_static) + else() + set(MONGOCXX_TARGET mongo::mongocxx_shared) + endif() +endmacro() + +# Finds and sets up the msgpack library. +# @return Forwards any variables from the `find_package` call. +macro(clp_find_msgpack) + find_package(msgpack-cxx 7.0.0 REQUIRED) +endmacro() + +# Finds and sets up the nlohmann json library. +# @return Forwards any variables from the `find_package` call. +macro(clp_find_nlohmann_json) + find_package(nlohmann_json REQUIRED) +endmacro() + +# Finds and sets up OpenSSL. +# @return Forwards any variables from the `find_package` call. +macro(clp_find_open_ssl) + find_package(OpenSSL REQUIRED) +endmacro() + +# Finds and sets up the simdjson library. +# @return Forwards any variables from the `find_package` call. +macro(clp_find_simdjson) + find_package(simdjson REQUIRED) +endmacro() + +# Finds and sets up the spdlog library. +# @return Forwards any variables from the `find_package` call. +macro(clp_find_spdlog) + find_package(spdlog REQUIRED) +endmacro() + +# Finds and sets up the sqlite library. +# @return Forwards any variables from the `FindDynamicLibraryDependencies` call. +macro(clp_find_sqlite) + set(sqlite_DYNAMIC_LIBS "dl;m;pthread") + include("${PROJECT_SOURCE_DIR}/cmake/Modules/FindLibraryDependencies.cmake") + FindDynamicLibraryDependencies(sqlite "${sqlite_DYNAMIC_LIBS}") +endmacro() + +# Finds and sets up the yaml-cpp library. +# @return Forwards any variables from the `find_package` call. +macro(clp_find_yaml_cpp) + find_package(yaml-cpp REQUIRED) +endmacro() + + +# Finds and sets up ystdlib. +# @return Forwards any variables from the `find_package` call. +macro(clp_find_ystdlib) + find_package(ystdlib REQUIRED) +endmacro() + +# Finds and sets up the ZStd library. +# @return Forwards any variables from the `find_package` call. +macro(clp_find_zstd) + # v1.4.8 is the lowest version available in the package managers of the OSes we support. + find_package(zstd 1.4.8 REQUIRED) + if(CLP_USE_STATIC_LIBS) + set(zstd_TARGET zstd::libzstd_static) + else() + set(zstd_TARGET zstd::libzstd_shared) + endif() +endmacro() diff --git a/components/core/src/clp/clg/CMakeLists.txt b/components/core/src/clp/clg/CMakeLists.txt index 55c6b058b7..919da42101 100644 --- a/components/core/src/clp/clg/CMakeLists.txt +++ b/components/core/src/clp/clg/CMakeLists.txt @@ -135,6 +135,19 @@ set( ) if(CLP_BUILD_EXECUTABLES) + clp_find_absl() + clp_find_boost() + clp_find_date() + clp_find_fmt() + clp_find_log_surgeon() + clp_find_mariadb_client() + clp_find_msgpack() + clp_find_nlohmann_json() + clp_find_spdlog() + clp_find_sqlite() + clp_find_ystdlib() + clp_find_zstd() + add_executable(clg ${CLG_SOURCES}) target_compile_features(clg PRIVATE cxx_std_20) target_include_directories(clg diff --git a/components/core/src/clp/clo/CMakeLists.txt b/components/core/src/clp/clo/CMakeLists.txt index 28c8da4279..25643a7d7a 100644 --- a/components/core/src/clp/clo/CMakeLists.txt +++ b/components/core/src/clp/clo/CMakeLists.txt @@ -161,6 +161,19 @@ set( ) if(CLP_BUILD_EXECUTABLES) + clp_find_absl() + clp_find_boost() + clp_find_date() + clp_find_fmt() + clp_find_log_surgeon() + clp_find_mongocxx() + clp_find_msgpack() + clp_find_nlohmann_json() + clp_find_spdlog() + clp_find_sqlite() + clp_find_ystdlib() + clp_find_zstd() + add_executable(clo ${CLO_SOURCES} ${REDUCER_SOURCES}) target_compile_features(clo PRIVATE cxx_std_20) target_include_directories(clo diff --git a/components/core/src/clp/clp/CMakeLists.txt b/components/core/src/clp/clp/CMakeLists.txt index c1d0274fe1..53bfd67bcc 100644 --- a/components/core/src/clp/clp/CMakeLists.txt +++ b/components/core/src/clp/clp/CMakeLists.txt @@ -172,6 +172,20 @@ set( ) if(CLP_BUILD_EXECUTABLES) + clp_find_absl() + clp_find_boost() + clp_find_date() + clp_find_fmt() + clp_find_libarchive() + clp_find_log_surgeon() + clp_find_mariadb_client() + clp_find_msgpack() + clp_find_nlohmann_json() + clp_find_spdlog() + clp_find_sqlite() + clp_find_ystdlib() + clp_find_zstd() + add_executable(clp ${CLP_SOURCES}) target_compile_features(clp PRIVATE cxx_std_20) target_include_directories(clp diff --git a/components/core/src/clp/make_dictionaries_readable/CMakeLists.txt b/components/core/src/clp/make_dictionaries_readable/CMakeLists.txt index c979b9453b..3890e28dd3 100644 --- a/components/core/src/clp/make_dictionaries_readable/CMakeLists.txt +++ b/components/core/src/clp/make_dictionaries_readable/CMakeLists.txt @@ -40,6 +40,12 @@ set( ) if(CLP_BUILD_EXECUTABLES) + clp_find_boost() + clp_find_log_surgeon() + clp_find_spdlog() + clp_find_ystdlib() + clp_find_zstd() + add_executable(make-dictionaries-readable ${MAKE_DICTIONARIES_READABLE_SOURCES}) target_compile_features(make-dictionaries-readable PRIVATE cxx_std_20) target_link_libraries(make-dictionaries-readable diff --git a/components/core/src/clp/regex_utils/CMakeLists.txt b/components/core/src/clp/regex_utils/CMakeLists.txt index ecc3bc5553..b5c6de6dbf 100644 --- a/components/core/src/clp/regex_utils/CMakeLists.txt +++ b/components/core/src/clp/regex_utils/CMakeLists.txt @@ -6,6 +6,8 @@ set( "RegexToWildcardTranslatorConfig.hpp" ) if(CLP_BUILD_CLP_REGEX_UTILS) + clp_find_ystdlib() + add_library( regex_utils ErrorCode.cpp diff --git a/components/core/src/clp_s/CMakeLists.txt b/components/core/src/clp_s/CMakeLists.txt index 46204c4728..bb8039b0ce 100644 --- a/components/core/src/clp_s/CMakeLists.txt +++ b/components/core/src/clp_s/CMakeLists.txt @@ -115,6 +115,17 @@ set( # This library is intended as a temporary stand-in until clp has been packaged into libraries. if(CLP_BUILD_CLP_S_CLP_DEPENDENCIES) + clp_find_boost() + clp_find_curl() + clp_find_fmt() + clp_find_log_surgeon() + clp_find_msgpack() + clp_find_nlohmann_json() + clp_find_open_ssl() + clp_find_spdlog() + clp_find_ystdlib() + clp_find_zstd() + add_library( clp_s_clp_dependencies ${CLP_S_CLP_SOURCES} @@ -166,6 +177,8 @@ set( # This library is intended as a temporary stand-in until the reducer has been packaged into # libraries. if(CLP_BUILD_CLP_S_REDUCER_DEPENDENCIES) + clp_find_nlohmann_json() + add_library( clp_s_reducer_dependencies ${CLP_S_REDUCER_SOURCES} @@ -202,6 +215,12 @@ set( ) if(CLP_BUILD_CLP_S_IO) + clp_find_boost() + clp_find_fmt() + clp_find_simdjson() + clp_find_spdlog() + clp_find_zstd() + add_library( clp_s_io ${CLP_S_IO_SOURCES} @@ -263,6 +282,16 @@ set( ) if(CLP_BUILD_CLP_S_ARCHIVEWRITER) + clp_find_absl() + clp_find_boost() + clp_find_curl() + clp_find_fmt() + clp_find_msgpack() + clp_find_nlohmann_json() + clp_find_simdjson() + clp_find_spdlog() + clp_find_ystdlib() + add_library( clp_s_archive_writer ${CLP_S_ARCHIVE_WRITER_SOURCES} @@ -327,6 +356,15 @@ set( ) if(CLP_BUILD_CLP_S_ARCHIVEREADER) + clp_find_absl() + clp_find_boost() + clp_find_curl() + clp_find_fmt() + clp_find_msgpack() + clp_find_nlohmann_json() + clp_find_spdlog() + clp_find_ystdlib() + add_library( clp_s_archive_reader ${CLP_S_ARCHIVE_READER_SOURCES} @@ -362,6 +400,11 @@ set( ) if(CLP_BUILD_CLP_S_JSONCONSTRUCTOR) + clp_find_fmt() + clp_find_mongocxx() + clp_find_spdlog() + clp_find_zstd() + add_library( clp_s_json_constructor ${CLP_S_JSON_CONSTRUCTOR_SOURCES} @@ -391,6 +434,9 @@ set( ) if(CLP_BUILD_CLP_S_TIMESTAMPPATTERN) + clp_find_date() + clp_find_spdlog() + add_library( clp_s_timestamp_pattern ${CLP_S_TIMESTAMP_PATTERN_SOURCES} @@ -420,6 +466,12 @@ set( ) if(CLP_BUILD_EXECUTABLES) + clp_find_boost() + clp_find_mongocxx() + clp_find_msgpack() + clp_find_spdlog() + clp_find_ystdlib() + add_executable( clp-s clp-s.cpp diff --git a/components/core/src/clp_s/indexer/CMakeLists.txt b/components/core/src/clp_s/indexer/CMakeLists.txt index 54d8e5540c..b4e3affdd1 100644 --- a/components/core/src/clp_s/indexer/CMakeLists.txt +++ b/components/core/src/clp_s/indexer/CMakeLists.txt @@ -120,6 +120,19 @@ set( ) if(CLP_BUILD_EXECUTABLES) + clp_find_absl() + clp_find_boost() + clp_find_curl() + clp_find_date() + clp_find_mariadb_client() + clp_find_msgpack() + clp_find_nlohmann_json() + clp_find_open_ssl() + clp_find_simdjson() + clp_find_spdlog() + clp_find_ystdlib() + clp_find_zstd() + add_executable(indexer ${INDEXER_SOURCES}) target_compile_features(indexer PRIVATE cxx_std_20) target_link_libraries(indexer diff --git a/components/core/src/clp_s/log_converter/CMakeLists.txt b/components/core/src/clp_s/log_converter/CMakeLists.txt index 3d78443412..c3b397f4aa 100644 --- a/components/core/src/clp_s/log_converter/CMakeLists.txt +++ b/components/core/src/clp_s/log_converter/CMakeLists.txt @@ -9,6 +9,14 @@ set( ) if(CLP_BUILD_EXECUTABLES) + clp_find_boost() + clp_find_fmt() + clp_find_log_surgeon() + clp_find_msgpack() + clp_find_nlohmann_json() + clp_find_spdlog() + clp_find_ystdlib() + add_executable( log-converter log_converter.cpp diff --git a/components/core/src/clp_s/search/CMakeLists.txt b/components/core/src/clp_s/search/CMakeLists.txt index af4e425a6d..4eb4e459cc 100644 --- a/components/core/src/clp_s/search/CMakeLists.txt +++ b/components/core/src/clp_s/search/CMakeLists.txt @@ -27,6 +27,11 @@ set( ) if(CLP_BUILD_CLP_S_SEARCH) + clp_find_absl() + clp_find_log_surgeon() + clp_find_simdjson() + clp_find_spdlog() + add_library( clp_s_search ${CLP_S_SEARCH_SOURCES} diff --git a/components/core/src/clp_s/search/ast/CMakeLists.txt b/components/core/src/clp_s/search/ast/CMakeLists.txt index eda1c26a3f..db4c7f9b95 100644 --- a/components/core/src/clp_s/search/ast/CMakeLists.txt +++ b/components/core/src/clp_s/search/ast/CMakeLists.txt @@ -50,6 +50,8 @@ set( ) if(CLP_BUILD_CLP_S_SEARCH_AST) + clp_find_simdjson() + add_library( clp_s_search_ast ${CLP_S_AST_SOURCES} diff --git a/components/core/src/clp_s/search/kql/CMakeLists.txt b/components/core/src/clp_s/search/kql/CMakeLists.txt index 5fd7ecc58d..86da4dcfe2 100644 --- a/components/core/src/clp_s/search/kql/CMakeLists.txt +++ b/components/core/src/clp_s/search/kql/CMakeLists.txt @@ -12,6 +12,9 @@ set(ANTLR_GENERATED_SOURCES ) if(CLP_BUILD_CLP_S_SEARCH_KQL) + clp_find_antlr4_runtime() + clp_find_spdlog() + add_library( clp_s_search_kql ${ANTLR_GENERATED_SOURCES} diff --git a/components/core/src/clp_s/search/sql/CMakeLists.txt b/components/core/src/clp_s/search/sql/CMakeLists.txt index 7e62d7d493..5d38fb1c0b 100644 --- a/components/core/src/clp_s/search/sql/CMakeLists.txt +++ b/components/core/src/clp_s/search/sql/CMakeLists.txt @@ -12,6 +12,9 @@ set(ANTLR_GENERATED_SOURCES ) if(CLP_BUILD_CLP_S_SEARCH_SQL) + clp_find_antlr4_runtime() + clp_find_spdlog() + add_library( clp_s_search_sql ${ANTLR_GENERATED_SOURCES} diff --git a/components/core/src/glt/glt/CMakeLists.txt b/components/core/src/glt/glt/CMakeLists.txt index 6936dab8ea..6a181913b7 100644 --- a/components/core/src/glt/glt/CMakeLists.txt +++ b/components/core/src/glt/glt/CMakeLists.txt @@ -172,6 +172,18 @@ set( ) if(CLP_BUILD_EXECUTABLES) + clp_find_boost() + clp_find_date() + clp_find_fmt() + clp_find_spdlog() + clp_find_sqlite() + clp_find_libarchive() + clp_find_mariadb_client() + clp_find_nlohmann_json() + clp_find_yaml_cpp() + clp_find_ystdlib() + clp_find_zstd() + add_executable(glt ${GLT_SOURCES}) target_compile_features(glt PRIVATE cxx_std_20) target_include_directories(glt diff --git a/components/core/src/reducer/CMakeLists.txt b/components/core/src/reducer/CMakeLists.txt index ec830624b8..ca6be3f930 100644 --- a/components/core/src/reducer/CMakeLists.txt +++ b/components/core/src/reducer/CMakeLists.txt @@ -39,6 +39,13 @@ set( ) if(CLP_BUILD_EXECUTABLES) + clp_find_boost() + clp_find_fmt() + clp_find_mongocxx() + clp_find_msgpack() + clp_find_nlohmann_json() + clp_find_spdlog() + add_executable(reducer-server ${REDUCER_SOURCES}) target_compile_features(reducer-server PRIVATE cxx_std_20) target_link_libraries(reducer-server diff --git a/taskfiles/deps/main.yaml b/taskfiles/deps/main.yaml index 118ec1736e..947958aa73 100644 --- a/taskfiles/deps/main.yaml +++ b/taskfiles/deps/main.yaml @@ -600,8 +600,8 @@ tasks: - "-DCMAKE_POSITION_INDEPENDENT_CODE=ON" - "-Dystdlib_BUILD_TESTING=OFF" LIB_NAME: "ystdlib" - TARBALL_SHA256: "65990dc2bcc4a355c2181bfe31a7800f492309d1bcd340f52a34e85047e61bc8" - TARBALL_URL: "https://github.com/y-scope/ystdlib-cpp/archive/9ed78cd.tar.gz" + TARBALL_SHA256: "379c04c86715f39cffa09bb3ebc22b4c45af9a63ea3efa2081d210289fcd2af6" + TARBALL_URL: "https://github.com/y-scope/ystdlib-cpp/archive/c03806a.tar.gz" zlib: internal: true