cmake: add vapi build
[vpp.git] / src / vpp-api / vapi / CMakeLists.txt
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 include_directories (
15   ${CMAKE_CURRENT_SOURCE_DIR}/..
16   ${CMAKE_CURRENT_BINARY_DIR}/..
17 )
18
19 unset(VAPICLIENT_API_C_HEADERS)
20 unset(VAPICLIENT_API_CPP_HEADERS)
21
22 get_property(VPP_API_FILES GLOBAL PROPERTY VPP_API_FILES)
23 foreach(f ${VPP_API_FILES})
24   get_filename_component(output ${f}.vapi.h NAME)
25   set(input ${CMAKE_BINARY_DIR}/${f}.json)
26
27   # C VAPI Headers
28   add_custom_command(
29     OUTPUT ${output}
30     WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
31     COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/vapi_c_gen.py
32     ARGS --remove-path ${input}
33     DEPENDS ${input} vapi_c_gen.py vapi_json_parser.py
34     COMMENT "Generating VAPI C header ${output}"
35   )
36   install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${output} DESTINATION include/vapi)
37   list(APPEND VAPICLIENT_API_CPP_HEADERS ${output})
38
39   # C++ VAPI Headers
40   get_filename_component(output ${f}.vapi.hpp NAME)
41   add_custom_command(
42     OUTPUT ${output}
43     WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
44     COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/vapi_cpp_gen.py
45     ARGS --remove-path ${input}
46     DEPENDS ${input} vapi_cpp_gen.py vapi_json_parser.py
47     COMMENT "Generating VAPI C++ header ${output}"
48   )
49   install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${output} DESTINATION include/vapi)
50   list(APPEND VAPICLIENT_API_CPP_HEADERS ${output})
51 endforeach ()
52
53 add_custom_target(all-vapi-headers ALL DEPENDS
54   ${VAPICLIENT_API_C_HEADERS}
55   ${VAPICLIENT_API_CPP_HEADERS}
56 )
57
58 add_vpp_library(vapiclient
59   SOURCES
60   vapi.c
61   libvapiclient.map
62
63   LINK_LIBRARIES vppinfra vlibmemoryclient svm pthread m rt
64 )
65
66 install(
67   FILES
68   vapi.h
69   vapi_common.h
70   vapi_dbg.h
71   vapi.hpp
72   vapi_internal.h
73
74   DESTINATION include/vapi
75 )