aboutsummaryrefslogtreecommitdiffstats
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt126
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()