summaryrefslogtreecommitdiffstats
path: root/CMakeLists.txt
blob: 5977b79553ffcb064f6e7ef18db2d05038378528 (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
# Copyright (c) 2017-2019 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.

cmake_minimum_required(VERSION 3.5 FATAL_ERROR)

project(hicn-fdio)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules")

set_property(GLOBAL PROPERTY USE_FOLDERS ON)

## 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_CTRL "Build the hicn control tools" ON)
option(BUILD_HICNPLUGIN "Build the hicn vpp plugin" OFF)
option(BUILD_HICNEXTRAPLUGIN "Build the hicn extra plugin" OFF)
option(BUILD_SYSREPOPLUGIN "Build the sysrepo plugin" OFF)

list(APPEND dir_options
  BUILD_LIBHICN
  BUILD_HICNLIGHT
  BUILD_LIBTRANSPORT
  BUILD_UTILS
  BUILD_APPS
  BUILD_CTRL
  BUILD_HICNPLUGIN
  BUILD_HICNEXTRAPLUGIN
  BUILD_SYSREPOPLUGIN
  BUILD_LIBMEMIF
)

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_HICNEXTRAPLUGIN_DIR extras/hicn-extra-plugin)
set(BUILD_LIBMEMIF_DIR extras/libmemif)

## Add enabled components
foreach (opt ${dir_options})
  if (${opt})
    list(APPEND subdirs
      ${${opt}_DIR}
    )
  endif()
endforeach()

## Static targets
set(LIBHICN hicn)
set(HICN_LIGHT hicn-light)
set(HICN_LIGHT_CONTROL hicn-light-control)
set(HICN_LIGHT_DAEMON hicn-light-daemon)
set(HICN_PLUGIN hicn-plugin)
set(HICN_EXTRA_PLUGIN hicn-extra-plugin)
set(LIBTRANSPORT hicntransport)
set(HICN_UTILS hicn-utils)
set(HICNCTRL hicnctrl)
set(LIBHICNCTRL hicnctrl)
set(HICN_APPS hicn-apps)
set(LIBFACEMGR facemgr)
set(FACEMGR facemgr)
set(LIBMEMIF memif)

if (BUILD_HICNPLUGIN AND "${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
  find_package(Libmemif)

  if (NOT Libmemif_FOUND)
    message(STATUS "Libmemif not found in the system. Building it as external project.")
    list(INSERT subdirs 0
      ${BUILD_LIBMEMIF_DIR}
    )

    unset(LIBMEMIF_INCLUDE_DIRS)
    unset(LIBMEMIF_LIBRARIES)
  endif()

  list(APPEND HICN_BINARY_API_INCLUDE_DIRS
    ${PROJECT_BINARY_DIR}/hicn-plugin
    ${PROJECT_BINARY_DIR}/hicn-plugin/vpp_plugins
  )

  set(LIBTRANSPORT ${LIBTRANSPORT}-memif)
endif()

## Libraries targets
set(LIBHICN_SHARED ${LIBHICN}.shared)
set(LIBTRANSPORT_SHARED ${LIBTRANSPORT}.shared)
set(LIBHICNCTRL_SHARED ${LIBHICNCTRL}.shared)
set(LIBMEMIF_SHARED ${LIBMEMIF}.shared)

set(LIBHICN_STATIC ${LIBHICN}.static)
set(LIBTRANSPORT_STATIC ${LIBTRANSPORT}.static)
set(LIBHICNCTRL_STATIC ${LIBHICNCTRL}.static)
set(LIBMEMIF_STATIC ${LIBMEMIF}.static)

## HEADER FILES
set(HICN_INCLUDE_DIRS "" "" CACHE INTERNAL "" FORCE)
set(LIBTRANSPORT_INCLUDE_DIRS "" "" CACHE INTERNAL "" FORCE)
set(LIBHICNCTRL_INCLUDE_DIRS ""  "" CACHE INTERNAL "" FORCE)

if (NOT WIN32)
  add_compile_options(-Wall -Werror)
endif ()

message(STATUS "Building the following subprojects: ${subdirs}")

foreach(dir ${subdirs})
  add_subdirectory(${dir})
endforeach()

include(Packager)
make_packages()