diff options
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 126 |
1 files changed, 102 insertions, 24 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 27d3b419e..26783d544 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 Cisco and/or its affiliates. +# 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: @@ -11,20 +11,89 @@ # See the License for the specific language governing permissions and # limitations under the License. -cmake_minimum_required(VERSION 3.5 FATAL_ERROR) +############################################################## +# 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) -set_property(GLOBAL PROPERTY USE_FOLDERS ON) +include(CommonSetup) -## Enabled components +############################################################## +# 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_UTILS "Build the hicn utils" ON) -option(BUILD_APPS "Build the hicn apps" OFF) +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) @@ -33,24 +102,22 @@ else () option(DISABLE_SHARED_LIBRARIES "Disable shared libraries" ON) endif () option(BUILD_HICNPLUGIN "Build the hicn vpp plugin" OFF) -option(BUILD_SYSREPOPLUGIN "Build the sysrepo 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) -if ((BUILD_APPS OR BUILD_UTILS) AND NOT BUILD_LIBTRANSPORT) + +############################################################## +# Basic sanity checks +############################################################## +if (BUILD_APPS AND NOT BUILD_LIBTRANSPORT) message(STATUS "Libhicntransport required. Enabled by default.") set (BUILD_LIBTRANSPORT ON) endif() -if (BUILD_SYSREPOPLUGIN AND NOT BUILD_HICNPLUGIN) - message(STATUS "Hicn-plugin required. Enabled by default.") - set (BUILD_HICNPLUGIN ON) -endif() - if ((BUILD_HICNLIGHT OR BUILD_LIBTRANSPORT OR - BUILD_UTILS OR BUILD_APPS OR BUILD_CTRL OR BUILD_HICNPLUGIN OR @@ -62,11 +129,10 @@ endif() list(APPEND dir_options BUILD_LIBHICN - BUILD_HICNLIGHT BUILD_HICNPLUGIN BUILD_CTRL + BUILD_HICNLIGHT BUILD_LIBTRANSPORT - BUILD_UTILS BUILD_APPS BUILD_SYSREPOPLUGIN BUILD_EXTRAS @@ -76,15 +142,16 @@ list(APPEND dir_options set(BUILD_LIBHICN_DIR lib) set(BUILD_HICNLIGHT_DIR hicn-light) set(BUILD_LIBTRANSPORT_DIR libtransport) -set(BUILD_UTILS_DIR utils) set(BUILD_APPS_DIR apps) set(BUILD_CTRL_DIR ctrl) set(BUILD_HICNPLUGIN_DIR hicn-plugin) -set(BUILD_SYSREPOPLUGIN_DIR ctrl/sysrepo-plugins) set(BUILD_EXTRAS_DIR extras/) set(BUILD_TELEMETRY_DIR telemetry) -## Add enabled components + +############################################################## +# Add enabled components to the build +############################################################## foreach (opt ${dir_options}) if (${opt}) list(APPEND subdirs @@ -93,17 +160,28 @@ foreach (opt ${dir_options}) endif() endforeach() -if (NOT WIN32) - add_compile_options(-Wall -Werror -Wno-shorten-64-to-32) -endif () + +############################################################## +# 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) -include(Packager) -make_packages()
\ No newline at end of file +make_packages() |