# Copyright (c) 2021-2022 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # 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. ############################################################## # Compiler preferences ############################################################## set(CMAKE_C_COMPILER_NAMES clang-13 clang-12 clang-11 clang-10 clang-9 gcc-10 gcc-9 cc ) set(CMAKE_CXX_COMPILER_NAMES clang++-13 clang++-12 clang++-11 clang++-10 clang++-9 g++-10 g++-9 c++ ) ############################################################## # Project and cmake version ############################################################## cmake_minimum_required(VERSION 3.11 FATAL_ERROR) project(hicn-fdio) ############################################################## # Fetch submodules if needed ############################################################## find_package(Git QUIET) if(GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git") # Update submodules as needed option(GIT_SUBMODULE "Check submodules during build" ON) if(GIT_SUBMODULE) message(STATUS "Submodule update") execute_process( COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} RESULT_VARIABLE GIT_SUBMOD_RESULT ) if(NOT GIT_SUBMOD_RESULT EQUAL "0") message(FATAL_ERROR "git submodule update --init --recursive failed with ${GIT_SUBMOD_RESULT}, please checkout submodules") endif() endif() endif() if(NOT EXISTS "${PROJECT_SOURCE_DIR}/cmake/Modules") message( FATAL_ERROR "The submodules were not downloaded! GIT_SUBMODULE was turned off or failed. Please update submodules and try again." ) endif() ############################################################## # CMake Modules ############################################################## set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules") if(EXISTS "${PROJECT_SOURCE_DIR}/internal/cmake/Modules") set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/internal/cmake/Modules") set(INTERNAL_ENVIRONMENT True) endif() include("${CMAKE_CURRENT_SOURCE_DIR}/versions.cmake") list(GET VPP_DEFAULT_VERSION 0 VPP_DEFAULT_VERSION) set(PREFIX_VERSION "${VPP_DEFAULT_VERSION}") string(REPLACE "-" ";" PREFIX_VERSION ${PREFIX_VERSION}) list (GET PREFIX_VERSION 0 PREFIX_VERSION) include(CommonSetup) ############################################################## # Enabled components ############################################################## option(BUILD_LIBHICN "Build the hicn core library" ON) option(BUILD_HICNLIGHT "Build the hicn light forwarder" ON) option(BUILD_LIBTRANSPORT "Build the hicn transport library" ON) option(BUILD_APPS "Build the hicn apps" ON) if (NOT WIN32) option(BUILD_CTRL "Build the hicn control tools" ON) option(DISABLE_SHARED_LIBRARIES "Disable shared libraries" OFF) else () option(BUILD_CTRL "Build the hicn control tools" OFF) option(DISABLE_SHARED_LIBRARIES "Disable shared libraries" ON) endif () option(BUILD_HICNPLUGIN "Build the hicn vpp plugin" OFF) option(BUILD_EXTRAS "Build external projects" OFF) option(BUILD_TELEMETRY "Build telemetry projects" OFF) option(BUILD_TESTS "Build unit tests" OFF) option(DISABLE_EXECUTABLES "Disable executables" OFF) ############################################################## # Basic sanity checks ############################################################## if (BUILD_APPS AND NOT BUILD_LIBTRANSPORT) message(STATUS "Libhicntransport required. Enabled by default.") set (BUILD_LIBTRANSPORT ON) endif() if ((BUILD_HICNLIGHT OR BUILD_LIBTRANSPORT OR BUILD_APPS OR BUILD_CTRL OR BUILD_HICNPLUGIN OR BUILD_SYSREPOPLUGIN) AND NOT BUILD_LIBHICN) message(STATUS "Libhicn required. Enabled by default.") set(BUILD_LIBHICN ON) endif() list(APPEND dir_options BUILD_LIBHICN BUILD_HICNPLUGIN BUILD_CTRL BUILD_HICNLIGHT BUILD_LIBTRANSPORT BUILD_APPS BUILD_SYSREPOPLUGIN BUILD_EXTRAS BUILD_TELEMETRY ) set(BUILD_LIBHICN_DIR lib) set(BUILD_HICNLIGHT_DIR hicn-light) set(BUILD_LIBTRANSPORT_DIR libtransport) set(BUILD_APPS_DIR apps) set(BUILD_CTRL_DIR ctrl) set(BUILD_HICNPLUGIN_DIR hicn-plugin) set(BUILD_EXTRAS_DIR extras/) set(BUILD_TELEMETRY_DIR telemetry) ############################################################## # Add enabled components to the build ############################################################## foreach (opt ${dir_options}) if (${opt}) list(APPEND subdirs ${${opt}_DIR} ) endif() endforeach() ############################################################## # Build gtest if tests are enabled ############################################################## if (BUILD_TESTS) message(STATUS "Tests enabled.") include (GTestImport) if(${CMAKE_VERSION} VERSION_GREATER "3.10.0") include (GoogleTest) else() include (CTest) endif() endif() message(STATUS "Building the following subprojects: ${subdirs}") foreach(dir ${subdirs}) pr_title("Subproject" "${dir}") add_subdirectory(${dir}) endforeach() add_subdirectory(docs/doxygen) make_packages()