1# Copyright (c) 2018 Cisco and/or its affiliates.
2# Licensed under the Apache License, Version 2.0 (the "License");
3# you may not use this file except in compliance with the License.
4# You may obtain a copy of the License at:
5#
6#     http://www.apache.org/licenses/LICENSE-2.0
7#
8# Unless required by applicable law or agreed to in writing, software
9# distributed under the License is distributed on an "AS IS" BASIS,
10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13
14##############################################################################
15# Generate vpp/app/version.h
16##############################################################################
17add_custom_command(
18  OUTPUT ${CMAKE_BINARY_DIR}/include/vpp/app/version.h
19  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
20  COMMAND mkdir
21  ARGS -p ${CMAKE_BINARY_DIR}/include/vpp/app
22  COMMAND scripts/generate_version_h
23  ARGS ${CMAKE_BINARY_DIR}/include/vpp/app/version.h
24  COMMENT "Generating VPP version.h"
25)
26
27add_custom_target(vpp_version_h
28  DEPENDS ${CMAKE_BINARY_DIR}/include/vpp/app/version.h
29)
30
31##############################################################################
32# vpp binary
33##############################################################################
34option(VPP_API_TEST_BUILTIN "Use builtin VPP API test." ON)
35
36set(VPP_API_FILES
37  api/vpe_types.api
38  api/vpe.api
39)
40
41vpp_add_api_files(vpp core vpp ${VPP_API_FILES})
42
43foreach(file ${VPP_API_FILES})
44  get_filename_component(dir ${file} DIRECTORY)
45  install(
46    FILES ${CMAKE_CURRENT_BINARY_DIR}/${file}.h
47    ${CMAKE_CURRENT_BINARY_DIR}/${file}_enum.h
48    ${CMAKE_CURRENT_BINARY_DIR}/${file}_types.h
49    DESTINATION include/vpp/${dir}
50    COMPONENT vpp-dev
51  )
52endforeach()
53
54set(VPP_SOURCES
55  vnet/main.c
56  app/vpe_cli.c
57  app/version.c
58  stats/stat_segment.c
59  api/api.c
60  api/json_format.c
61  api/custom_dump.c
62  api/types.c
63)
64
65if(VPP_API_TEST_BUILTIN)
66  list(APPEND VPP_SOURCES
67    api/api_format.c
68    api/api_main.c
69    api/plugin.c
70    api/types.c
71  )
72  add_definitions(-DVPP_API_TEST_BUILTIN=1)
73endif()
74
75add_vpp_executable(vpp
76  ENABLE_EXPORTS
77  SOURCES ${VPP_SOURCES}
78  LINK_LIBRARIES svm vlib vppinfra vlibmemory vnet Threads::Threads ${CMAKE_DL_LIBS}
79  DEPENDS vpp_version_h api_headers
80)
81
82add_vpp_headers(vpp
83  api/vpe_msg_enum.h
84  api/vpe_all_api_h.h
85  stats/stat_segment.h
86  stats/stat_segment_shared.h
87)
88
89##############################################################################
90# vppctl binary
91##############################################################################
92add_vpp_executable(vppctl
93  SOURCES app/vppctl.c
94  LINK_LIBRARIES vppinfra
95)
96
97##############################################################################
98# vpp_get_metrics binary
99##############################################################################
100add_vpp_executable(vpp_get_metrics
101  SOURCES api/vpp_get_metrics.c
102  LINK_LIBRARIES vppinfra svm svmdb
103  DEPENDS api_headers
104)
105
106##############################################################################
107# stats binaries
108##############################################################################
109add_vpp_executable(vpp_get_stats
110  SOURCES app/vpp_get_stats.c
111  LINK_LIBRARIES vppapiclient vppinfra
112  DEPENDS api_headers
113)
114
115add_vpp_executable(vpp_prometheus_export
116  SOURCES app/vpp_prometheus_export.c
117  LINK_LIBRARIES vppapiclient vppinfra svm vlibmemoryclient
118  DEPENDS api_headers
119)
120
121install(FILES conf/startup.conf DESTINATION etc/vpp COMPONENT vpp)
122install(FILES conf/80-vpp.conf DESTINATION etc/sysctl.d COMPONENT vpp)
123