summaryrefslogtreecommitdiffstats
path: root/CMakeLists.txt
blob: 41ecda0181a602c7b4f8b96f2eafe4ee3f120226 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
# 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_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)


##############################################################
# 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_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_SYSREPOPLUGIN_DIR ctrl/sysrepo-plugins)
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()