aboutsummaryrefslogtreecommitdiffstats
path: root/extras/vom/vom/CMakeLists.txt
blob: c9ff7aa41ee06472968461ff8f2aaeefe3894fa0 (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
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
# Copyright (c) 2018 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.

unset (VAPICLIENT_LIB)
unset (ACL_FILE)
unset (NAT_FILE)
unset (L2E_FILE)
unset (GBP_FILE)
unset (VOM_SOURCES)
unset (VOM_HEADERS)

find_library(VAPICLIENT_LIB NAMES vapiclient REQUIRED HINTS ${VPP_LIB_DIR_HINT})
find_path(VAPICLIENT_INCLUDE_DIR NAMES vapi/vapi.hpp HINTS ${VPP_INCLUDE_DIR_HINT})

if(NOT VAPICLIENT_INCLUDE_DIR OR NOT VAPICLIENT_LIB)
  message(FATAL_ERROR "Cannot find vapiclient library and/or headers")
endif()

include_directories(${VAPICLIENT_INCLUDE_DIR})
include_directories(${CMAKE_SOURCE_DIR})

find_file(ACL_FILE NAMES acl.api.vapi.hpp PATH_SUFFIXES vapi HINTS ${VPP_INCLUDE_DIR_HINT})
find_file(NAT_FILE NAMES nat.api.vapi.hpp PATH_SUFFIXES vapi HINTS ${VPP_INCLUDE_DIR_HINT})
find_file(L2E_FILE NAMES l2e.api.vapi.hpp PATH_SUFFIXES vapi HINTS ${VPP_INCLUDE_DIR_HINT})
find_file(GBP_FILE NAMES gbp.api.vapi.hpp PATH_SUFFIXES vapi HINTS ${VPP_INCLUDE_DIR_HINT})

if(ACL_FILE)
  list(APPEND VOM_SOURCES
    acl_binding_cmds.cpp
    acl_binding.cpp
    acl_ethertype_cmds.cpp
    acl_ethertype.cpp
    acl_l2_rule.cpp
    acl_l3_rule.cpp
    acl_list_cmds.cpp
    acl_list.cpp
    acl_types.cpp
  )
endif()

if(NAT_FILE)
  list(APPEND VOM_SOURCES
    nat_static.cpp
    nat_static_cmds.cpp
    nat_binding.cpp
    nat_binding_cmds.cpp
  )
endif()

if (L2E_FILE)
  list(APPEND VOM_SOURCES
    l2_emulation_cmds.cpp
    l2_emulation.cpp
  )
endif()

if(GBP_FILE)
  list(APPEND VOM_SOURCES
    gbp_recirc_cmds.cpp
    gbp_recirc.cpp
    gbp_subnet_cmds.cpp
    gbp_subnet.cpp
    gbp_endpoint_cmds.cpp
    gbp_endpoint.cpp
    gbp_endpoint_group_cmds.cpp
    gbp_endpoint_group.cpp
    gbp_contract_cmds.cpp
    gbp_contract.cpp
  )
endif()

list(APPEND VOM_SOURCES
  types.cpp
  api_types.cpp
  arp_proxy_binding_cmds.cpp
  arp_proxy_binding.cpp
  arp_proxy_config_cmds.cpp
  arp_proxy_config.cpp
  bond_group_binding_cmds.cpp
  bond_group_binding.cpp
  bond_interface_cmds.cpp
  bond_interface.cpp
  bond_member.cpp
  bridge_domain_cmds.cpp
  bridge_domain.cpp
  bridge_domain_arp_entry.cpp
  bridge_domain_arp_entry_cmds.cpp
  bridge_domain_entry_cmds.cpp
  bridge_domain_entry.cpp
  client_db.cpp
  cmd.cpp
  connection.cpp
  dhcp_client_cmds.cpp
  dhcp_client.cpp
  hw_cmds.cpp
  hw.cpp
  inspect.cpp
  interface_cmds.cpp
  interface.cpp
  interface_factory.cpp
  interface_ip6_nd_cmds.cpp
  interface_span_cmds.cpp
  interface_span.cpp
  interface_types.cpp
  ip_unnumbered_cmds.cpp
  ip_unnumbered.cpp
  l2_binding_cmds.cpp
  l2_binding.cpp
  l2_xconnect_cmds.cpp
  l2_xconnect.cpp
  l3_binding_cmds.cpp
  l3_binding.cpp
  lldp_binding_cmds.cpp
  lldp_binding.cpp
  lldp_global_cmds.cpp
  lldp_global.cpp
  logger.cpp
  neighbour.cpp
  neighbour_cmds.cpp
  object_base.cpp
  om.cpp
  pipe.cpp
  pipe_cmds.cpp
  prefix.cpp
  ra_config.cpp
  ra_prefix.cpp
  route.cpp
  route_cmds.cpp
  route_domain.cpp
  route_domain_cmds.cpp
  sub_interface_cmds.cpp
  sub_interface.cpp
  tap_interface.cpp
  tap_interface_cmds.cpp
  vxlan_tunnel_cmds.cpp
  vxlan_tunnel.cpp
)

if(ACL_FILE)
  list(APPEND VOM_HEADERS
    acl_binding.hpp
    acl_ethertype.hpp
    acl_l2_rule.hpp
    acl_l3_rule.hpp
    acl_list.hpp
    acl_types.hpp
  )
endif()

if(NAT_FILE)
  list(APPEND VOM_HEADERS
    nat_static.hpp
    nat_binding.hpp
  )
endif()

if(L2E_FILE)
  list(APPEND VOM_HEADERS
    l2_emulation.hpp
  )
endif()

if(GBP_FILE)
  list(APPEND VOM_HEADERS
    gbp_endpoint.hpp
    gbp_endpoint_group.hpp
    gbp_subnet.hpp
    gbp_recirc.hpp
    gbp_contract.hpp
  )
endif()

list(APPEND VOM_HEADERS
  arp_proxy_binding.hpp
  arp_proxy_config.hpp
  bond_group_binding.hpp
  bond_interface.hpp
  bond_member.hpp
  bridge_domain.hpp
  bridge_domain_arp_entry.hpp
  bridge_domain_entry.hpp
  client_db.hpp
  cmd.hpp
  connection.hpp
  dhcp_client.hpp
  dump_cmd.hpp
  enum_base.hpp
  event_cmd.hpp
  hw.hpp
  inspect.hpp
  interface.hpp
  interface_cmds.hpp
  interface_ip6_nd.hpp
  interface_span.hpp
  ip_unnumbered.hpp
  l2_binding.hpp
  l2_xconnect.hpp
  l3_binding.hpp
  lldp_binding.hpp
  lldp_global.hpp
  logger.hpp
  neighbour.hpp
  object_base.hpp
  om.hpp
  pipe.hpp
  prefix.hpp
  ra_config.hpp
  ra_prefix.hpp
  route.hpp
  route_domain.hpp
  rpc_cmd.hpp
  singular_db.hpp
  singular_db_funcs.hpp
  sub_interface.hpp
  tap_interface.hpp
  types.hpp
  api_types.hpp
  vxlan_tunnel.hpp
)

add_library(vom SHARED ${VOM_SOURCES})
target_link_libraries(vom ${VAPICLIENT_LIB} Threads::Threads boost_thread
  ${BOOST_SYSTEM_LIB} ${BOOST_FILESYSTEM_LIB} ${BOOST_ASIO_LIB} m rt)
add_definitions(-Wall -Werror -std=gnu++11)
install(TARGETS vom DESTINATION ${VOM_LIB_DIR_NAME})

foreach(file ${VOM_HEADERS})
  install(FILES ${file} DESTINATION include/vom)
endforeach()