Loading .gitmodules +3 −0 Original line number Diff line number Diff line Loading @@ -16,3 +16,6 @@ [submodule "tests/scripts/helpers/bats-file"] path = tests/scripts/helpers/bats-file url = https://github.com/bats-core/bats-file.git [submodule "external/spdlog"] path = external/spdlog url = https://github.com/gabime/spdlog CMake/gkfs-utils.cmake 0 → 100644 +148 −0 Original line number Diff line number Diff line ################################################################################ # Copyright 2018-2021, Barcelona Supercomputing Center (BSC), Spain # # Copyright 2015-2021, Johannes Gutenberg Universitaet Mainz, Germany # # # # This software was partially supported by the # # EC H2020 funded project NEXTGenIO (Project ID: 671951, www.nextgenio.eu). # # # # This software was partially supported by the # # ADA-FS project under the SPPEXA project funded by the DFG. # # # # This file is part of GekkoFS. # # # # GekkoFS is free software: you can redistribute it and/or modify # # it under the terms of the GNU General Public License as published by # # the Free Software Foundation, either version 3 of the License, or # # (at your option) any later version. # # # # GekkoFS is distributed in the hope that it will be useful, # # but WITHOUT ANY WARRANTY; without even the implied warranty of # # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # # GNU General Public License for more details. # # # # You should have received a copy of the GNU General Public License # # along with GekkoFS. If not, see <https://www.gnu.org/licenses/>. # # # # SPDX-License-Identifier: GPL-3.0-or-later # ################################################################################ include(CMakeParseArguments) #[=======================================================================[.rst: get_cmake_variables(OUTPUT_VARIABLE [ REGEX <regular_expression> [EXCLUDE] ]) Initialize ``OUTPUT_VARIABLE`` to a list of all currently defined CMake variables. The function accepts a ``<regular_expression>`` to allow filtering the results. Furthermore, if the ``EXCLUDE`` flag is used, the function will return all variables NOT MATCHING the provided ``<regular_expression>``. #]=======================================================================] function(get_cmake_variables OUTPUT_VARIABLE) set(OPTIONS EXCLUDE) set(SINGLE_VALUE REGEX) set(MULTI_VALUE) # no multiple value args for now cmake_parse_arguments( ARGS "${OPTIONS}" "${SINGLE_VALUE}" "${MULTI_VALUE}" ${ARGN} ) if(ARGS_UNPARSED_ARGUMENTS) message(WARNING "Unparsed arguments in get_cmake_variables(): " "this often indicates typos!\n" "Unparsed arguments: ${ARGS_UNPARSED_ARGUMENTS}" ) endif() get_cmake_property(_var_names VARIABLES) if(NOT ARGS_REGEX) set(${OUTPUT_VARIABLE} ${_var_names} PARENT_SCOPE ) return() endif() if(ARGS_EXCLUDE) set(_mode EXCLUDE) else() set(_mode INCLUDE) endif() list(FILTER _var_names ${_mode} REGEX ${ARGS_REGEX}) set(${OUTPUT_VARIABLE} ${_var_names} PARENT_SCOPE ) endfunction() #[=======================================================================[.rst: dump_cmake_variables([ REGEX <regular_expression> [EXCLUDE] ]) Print all currently defined CMake variables. The function accepts a ``<regular_expression>`` to allow filtering the results. Furthermore, if the ``EXCLUDE`` flag is used, the function will print all variables NOT MATCHING the provided ``<regular_expression>``. #]=======================================================================] function(dump_cmake_variables) set(OPTIONS EXCLUDE) set(SINGLE_VALUE REGEX) set(MULTI_VALUE) # no multiple value args for now cmake_parse_arguments( ARGS "${OPTIONS}" "${SINGLE_VALUE}" "${MULTI_VALUE}" ${ARGN} ) if(ARGS_UNPARSED_ARGUMENTS) message(WARNING "Unparsed arguments in dump_cmake_variables(): " "this often indicates typos!" "Unparsed arguments: ${ARGS_UNPARSED_ARGUMENTS}" ) endif() if(ARGS_EXCLUDE AND NOT ARGS_REGEX) message(ERROR "EXCLUDE option doesn't make sense without REGEX.") endif() get_cmake_variables(_var_names REGEX ${ARGS_REGEX} ${ARGS_EXCLUDE}) foreach(_var ${_var_names}) message(STATUS "${_var}=${${_var}}") endforeach() endfunction() #[=======================================================================[.rst: mark_variables_as_advanced(REGEX <regular_expression>) Mark all CMake variables matching ``regular_expression`` as advanced. #]=======================================================================] function(mark_variables_as_advanced) set(OPTIONS) # no options for now set(SINGLE_VALUE REGEX) set(MULTI_VALUE) # no multiple value args for now cmake_parse_arguments( ARGS "${OPTIONS}" "${SINGLE_VALUE}" "${MULTI_VALUE}" ${ARGN} ) if(ARGS_UNPARSED_ARGUMENTS) message(WARNING "Unparsed arguments in mark_variables_as_advanced(): " "this often indicates typos!\n" "Unparsed arguments: ${ARGS_UNPARSED_ARGUMENTS}" ) endif() get_cmake_property(_var_names VARIABLES) list(FILTER _var_names INCLUDE REGEX ${ARGS_REGEX}) foreach(_var ${_var_names}) mark_as_advanced(${_var}) endforeach() endfunction() CMakeLists.txt +8 −6 Original line number Diff line number Diff line Loading @@ -137,6 +137,9 @@ find_package(Filesystem REQUIRED) find_package(Date REQUIRED) # Import some convenience functions include(gkfs-utils) option(CREATE_CHECK_PARENTS "Check parent directory existance before creating child node" ON) message(STATUS "[gekkofs] Create checks parents: ${CREATE_CHECK_PARENTS}") Loading Loading @@ -209,12 +212,6 @@ set_target_properties(RocksDB INTERFACE_INCLUDE_DIRECTORIES ${ROCKSDB_INCLUDE_DIRS} ) add_library(spdlog INTERFACE) # we cannot use target_include_directories with CMake < 3.11 set_target_properties(spdlog PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_SOURCE_DIR}/external" ) add_library(CLI11 INTERFACE) # we cannot use target_include_directories with CMake < 3.11 set_target_properties(CLI11 Loading Loading @@ -250,6 +247,11 @@ add_subdirectory(src/daemon) # Client library add_subdirectory(src/client) ### Mark any CMake variables imported from {fmt} and spdlog as advanced, so ### that they don't appear in cmake-gui or ccmake. Similarly for FETCHCONTENT ### variables. mark_variables_as_advanced(REGEX "^(FETCHCONTENT|fmt|FMT|spdlog|SPDLOG)_.*$") option(GKFS_BUILD_TESTS "Build GekkoFS self tests" OFF) cmake_dependent_option(GKFS_INSTALL_TESTS "Install GekkoFS self tests" OFF "GKFS_BUILD_TESTS" OFF) Loading spdlog @ eb322062 Original line number Diff line number Diff line Subproject commit eb3220622e73a4889eee355ffa37972b3cac3df5 src/common/CMakeLists.txt +21 −1 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ # SPDX-License-Identifier: GPL-3.0-or-later # ################################################################################ include(FetchContent) add_subdirectory(arithmetic) add_library(distributor STATIC) Loading @@ -39,13 +41,31 @@ target_sources(distributor if(GKFS_USE_GUIDED_DISTRIBUTION) find_package(Boost 1.53 REQUIRED) target_link_libraries(distributor PRIVATE Boost::boost) # target_include_directories(distributor PRIVATE ${BOOST_INCLUDE_DIRS}) endif() if(GKFS_ENABLE_CODE_COVERAGE) target_code_coverage(distributor AUTO) endif() # get spdlog set(FETCHCONTENT_QUIET ON) if (EXISTS ${CMAKE_SOURCE_DIR}/external/spdlog) message(STATUS "[gkfs] Using git submodule spdlog...") FetchContent_Declare(spdlog SOURCE_DIR ${CMAKE_SOURCE_DIR}/external/spdlog ) else() message(STATUS "[gkfs] git submodule spdlog not found. Downloading...") FetchContent_Declare(spdlog GIT_REPOSITORY https://github.com/gabime/spdlog.git GIT_TAG eb3220622e73a4889eee355ffa37972b3cac3df5 # v1.9.2 GIT_SHALLOW ON GIT_PROGRESS ON ) endif() FetchContent_MakeAvailable(spdlog) add_library(log_util STATIC) set_property(TARGET log_util PROPERTY POSITION_INDEPENDENT_CODE ON) target_sources(log_util Loading Loading
.gitmodules +3 −0 Original line number Diff line number Diff line Loading @@ -16,3 +16,6 @@ [submodule "tests/scripts/helpers/bats-file"] path = tests/scripts/helpers/bats-file url = https://github.com/bats-core/bats-file.git [submodule "external/spdlog"] path = external/spdlog url = https://github.com/gabime/spdlog
CMake/gkfs-utils.cmake 0 → 100644 +148 −0 Original line number Diff line number Diff line ################################################################################ # Copyright 2018-2021, Barcelona Supercomputing Center (BSC), Spain # # Copyright 2015-2021, Johannes Gutenberg Universitaet Mainz, Germany # # # # This software was partially supported by the # # EC H2020 funded project NEXTGenIO (Project ID: 671951, www.nextgenio.eu). # # # # This software was partially supported by the # # ADA-FS project under the SPPEXA project funded by the DFG. # # # # This file is part of GekkoFS. # # # # GekkoFS is free software: you can redistribute it and/or modify # # it under the terms of the GNU General Public License as published by # # the Free Software Foundation, either version 3 of the License, or # # (at your option) any later version. # # # # GekkoFS is distributed in the hope that it will be useful, # # but WITHOUT ANY WARRANTY; without even the implied warranty of # # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # # GNU General Public License for more details. # # # # You should have received a copy of the GNU General Public License # # along with GekkoFS. If not, see <https://www.gnu.org/licenses/>. # # # # SPDX-License-Identifier: GPL-3.0-or-later # ################################################################################ include(CMakeParseArguments) #[=======================================================================[.rst: get_cmake_variables(OUTPUT_VARIABLE [ REGEX <regular_expression> [EXCLUDE] ]) Initialize ``OUTPUT_VARIABLE`` to a list of all currently defined CMake variables. The function accepts a ``<regular_expression>`` to allow filtering the results. Furthermore, if the ``EXCLUDE`` flag is used, the function will return all variables NOT MATCHING the provided ``<regular_expression>``. #]=======================================================================] function(get_cmake_variables OUTPUT_VARIABLE) set(OPTIONS EXCLUDE) set(SINGLE_VALUE REGEX) set(MULTI_VALUE) # no multiple value args for now cmake_parse_arguments( ARGS "${OPTIONS}" "${SINGLE_VALUE}" "${MULTI_VALUE}" ${ARGN} ) if(ARGS_UNPARSED_ARGUMENTS) message(WARNING "Unparsed arguments in get_cmake_variables(): " "this often indicates typos!\n" "Unparsed arguments: ${ARGS_UNPARSED_ARGUMENTS}" ) endif() get_cmake_property(_var_names VARIABLES) if(NOT ARGS_REGEX) set(${OUTPUT_VARIABLE} ${_var_names} PARENT_SCOPE ) return() endif() if(ARGS_EXCLUDE) set(_mode EXCLUDE) else() set(_mode INCLUDE) endif() list(FILTER _var_names ${_mode} REGEX ${ARGS_REGEX}) set(${OUTPUT_VARIABLE} ${_var_names} PARENT_SCOPE ) endfunction() #[=======================================================================[.rst: dump_cmake_variables([ REGEX <regular_expression> [EXCLUDE] ]) Print all currently defined CMake variables. The function accepts a ``<regular_expression>`` to allow filtering the results. Furthermore, if the ``EXCLUDE`` flag is used, the function will print all variables NOT MATCHING the provided ``<regular_expression>``. #]=======================================================================] function(dump_cmake_variables) set(OPTIONS EXCLUDE) set(SINGLE_VALUE REGEX) set(MULTI_VALUE) # no multiple value args for now cmake_parse_arguments( ARGS "${OPTIONS}" "${SINGLE_VALUE}" "${MULTI_VALUE}" ${ARGN} ) if(ARGS_UNPARSED_ARGUMENTS) message(WARNING "Unparsed arguments in dump_cmake_variables(): " "this often indicates typos!" "Unparsed arguments: ${ARGS_UNPARSED_ARGUMENTS}" ) endif() if(ARGS_EXCLUDE AND NOT ARGS_REGEX) message(ERROR "EXCLUDE option doesn't make sense without REGEX.") endif() get_cmake_variables(_var_names REGEX ${ARGS_REGEX} ${ARGS_EXCLUDE}) foreach(_var ${_var_names}) message(STATUS "${_var}=${${_var}}") endforeach() endfunction() #[=======================================================================[.rst: mark_variables_as_advanced(REGEX <regular_expression>) Mark all CMake variables matching ``regular_expression`` as advanced. #]=======================================================================] function(mark_variables_as_advanced) set(OPTIONS) # no options for now set(SINGLE_VALUE REGEX) set(MULTI_VALUE) # no multiple value args for now cmake_parse_arguments( ARGS "${OPTIONS}" "${SINGLE_VALUE}" "${MULTI_VALUE}" ${ARGN} ) if(ARGS_UNPARSED_ARGUMENTS) message(WARNING "Unparsed arguments in mark_variables_as_advanced(): " "this often indicates typos!\n" "Unparsed arguments: ${ARGS_UNPARSED_ARGUMENTS}" ) endif() get_cmake_property(_var_names VARIABLES) list(FILTER _var_names INCLUDE REGEX ${ARGS_REGEX}) foreach(_var ${_var_names}) mark_as_advanced(${_var}) endforeach() endfunction()
CMakeLists.txt +8 −6 Original line number Diff line number Diff line Loading @@ -137,6 +137,9 @@ find_package(Filesystem REQUIRED) find_package(Date REQUIRED) # Import some convenience functions include(gkfs-utils) option(CREATE_CHECK_PARENTS "Check parent directory existance before creating child node" ON) message(STATUS "[gekkofs] Create checks parents: ${CREATE_CHECK_PARENTS}") Loading Loading @@ -209,12 +212,6 @@ set_target_properties(RocksDB INTERFACE_INCLUDE_DIRECTORIES ${ROCKSDB_INCLUDE_DIRS} ) add_library(spdlog INTERFACE) # we cannot use target_include_directories with CMake < 3.11 set_target_properties(spdlog PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_SOURCE_DIR}/external" ) add_library(CLI11 INTERFACE) # we cannot use target_include_directories with CMake < 3.11 set_target_properties(CLI11 Loading Loading @@ -250,6 +247,11 @@ add_subdirectory(src/daemon) # Client library add_subdirectory(src/client) ### Mark any CMake variables imported from {fmt} and spdlog as advanced, so ### that they don't appear in cmake-gui or ccmake. Similarly for FETCHCONTENT ### variables. mark_variables_as_advanced(REGEX "^(FETCHCONTENT|fmt|FMT|spdlog|SPDLOG)_.*$") option(GKFS_BUILD_TESTS "Build GekkoFS self tests" OFF) cmake_dependent_option(GKFS_INSTALL_TESTS "Install GekkoFS self tests" OFF "GKFS_BUILD_TESTS" OFF) Loading
spdlog @ eb322062 Original line number Diff line number Diff line Subproject commit eb3220622e73a4889eee355ffa37972b3cac3df5
src/common/CMakeLists.txt +21 −1 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ # SPDX-License-Identifier: GPL-3.0-or-later # ################################################################################ include(FetchContent) add_subdirectory(arithmetic) add_library(distributor STATIC) Loading @@ -39,13 +41,31 @@ target_sources(distributor if(GKFS_USE_GUIDED_DISTRIBUTION) find_package(Boost 1.53 REQUIRED) target_link_libraries(distributor PRIVATE Boost::boost) # target_include_directories(distributor PRIVATE ${BOOST_INCLUDE_DIRS}) endif() if(GKFS_ENABLE_CODE_COVERAGE) target_code_coverage(distributor AUTO) endif() # get spdlog set(FETCHCONTENT_QUIET ON) if (EXISTS ${CMAKE_SOURCE_DIR}/external/spdlog) message(STATUS "[gkfs] Using git submodule spdlog...") FetchContent_Declare(spdlog SOURCE_DIR ${CMAKE_SOURCE_DIR}/external/spdlog ) else() message(STATUS "[gkfs] git submodule spdlog not found. Downloading...") FetchContent_Declare(spdlog GIT_REPOSITORY https://github.com/gabime/spdlog.git GIT_TAG eb3220622e73a4889eee355ffa37972b3cac3df5 # v1.9.2 GIT_SHALLOW ON GIT_PROGRESS ON ) endif() FetchContent_MakeAvailable(spdlog) add_library(log_util STATIC) set_property(TARGET log_util PROPERTY POSITION_INDEPENDENT_CODE ON) target_sources(log_util Loading