include_directories (
${CMAKE_CURRENT_SOURCE_DIR}/..
${CMAKE_CURRENT_BINARY_DIR}/..
+ ${CMAKE_CURRENT_BINARY_DIR}
)
-unset(VAPICLIENT_API_C_HEADERS)
-unset(VAPICLIENT_API_CPP_HEADERS)
+add_vpp_library(vapiclient
+ SOURCES
+ vapi.c
+ libvapiclient.map
+
+ LINK_LIBRARIES vppinfra vlibmemoryclient svm pthread m rt
+ DEPENDS api_headers
+)
+
+install(
+ FILES
+ vapi.h
+ vapi_common.h
+ vapi_dbg.h
+ vapi.hpp
+ vapi_internal.h
+ DESTINATION
+ ${CMAKE_INSTALL_INCLUDEDIR}/vapi
+ COMPONENT
+ vpp-dev
+)
+
+install(
+ FILES
+ vapi_c_gen.py
+ vapi_json_parser.py
+ vapi_cpp_gen.py
+ DESTINATION
+ share/vpp
+ COMPONENT
+ vpp-dev
+)
+
+install(
+ PROGRAMS
+ vapi_c_gen.py
+ vapi_cpp_gen.py
+ vapi_json_parser.py
+
+ DESTINATION ${VPP_RUNTIME_DIR}
+ COMPONENT vpp-dev
+)
+
+vpp_find_path(SUBUNIT_INCLUDE_DIR NAMES subunit/child.h)
+vpp_find_library(SUBUNIT_LIB NAMES subunit)
-get_property(VPP_API_FILES GLOBAL PROPERTY VPP_API_FILES)
-foreach(f ${VPP_API_FILES})
- get_filename_component(output ${f}.vapi.h NAME)
- set(input ${CMAKE_BINARY_DIR}/${f}.json)
+if(SUBUNIT_INCLUDE_DIR AND SUBUNIT_LIB)
+ message (STATUS "Found subunit in ${SUBUNIT_INCLUDE_DIR} and ${SUBUNIT_LIB}")
- # C VAPI Headers
add_custom_command(
- OUTPUT ${output}
+ OUTPUT fake.api.vapi.h
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
- COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/vapi_c_gen.py
- ARGS --remove-path ${input}
- DEPENDS ${input} vapi_c_gen.py vapi_json_parser.py api_headers
- COMMENT "Generating VAPI C header ${output}"
+ COMMAND ${PYENV} ${CMAKE_CURRENT_SOURCE_DIR}/vapi_c_gen.py
+ ARGS --remove-path ${CMAKE_CURRENT_SOURCE_DIR}/fake.api.json
+ DEPENDS fake.api.json
+ COMMENT "Generating fake VAPI C header ${output_name}"
)
- install(
- FILES ${CMAKE_CURRENT_BINARY_DIR}/${output}
- DESTINATION include/vapi
- COMPONENT vpp-dev
- )
- list(APPEND VAPICLIENT_API_CPP_HEADERS ${output})
- # C++ VAPI Headers
- get_filename_component(output ${f}.vapi.hpp NAME)
add_custom_command(
- OUTPUT ${output}
+ OUTPUT fake.api.vapi.hpp
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
- COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/vapi_cpp_gen.py
- ARGS --gen-h-prefix=vapi --remove-path ${input}
- DEPENDS ${input} vapi_cpp_gen.py vapi_json_parser.py api_headers
- COMMENT "Generating VAPI C++ header ${output}"
- )
- install(
- FILES ${CMAKE_CURRENT_BINARY_DIR}/${output}
- DESTINATION include/vapi
- COMPONENT vpp-dev
+ COMMAND ${PYENV} ${CMAKE_CURRENT_SOURCE_DIR}/vapi_cpp_gen.py
+ ARGS --remove-path ${CMAKE_CURRENT_SOURCE_DIR}/fake.api.json
+ DEPENDS fake.api.json
+ COMMENT "Generating fake VAPI C++ header ${output_name}"
)
- list(APPEND VAPICLIENT_API_CPP_HEADERS ${output})
-endforeach ()
-add_custom_target(all-vapi-headers DEPENDS
- ${VAPICLIENT_API_C_HEADERS}
- ${VAPICLIENT_API_CPP_HEADERS}
-)
+ add_custom_target(fake_api_vapi_h DEPENDS fake.api.vapi.h)
+ add_custom_target(fake_api_vapi_hpp DEPENDS fake.api.vapi.hpp)
-add_vpp_library(vapiclient
- SOURCES
- vapi.c
- libvapiclient.map
+ set(libs vppinfra vlibmemoryclient svm pthread check rt m vapiclient ${SUBUNIT_LIB})
- LINK_LIBRARIES vppinfra vlibmemoryclient svm pthread m rt
- DEPENDS all-vapi-headers
-)
+ add_vpp_executable(vapi_c_test
+ SOURCES
+ vapi_c_test.c
+ DEPENDS fake_api_vapi_h
+ LINK_LIBRARIES ${libs}
+ NO_INSTALL
+ )
-install(
- FILES
- vapi.h
- vapi_common.h
- vapi_dbg.h
- vapi.hpp
- vapi_internal.h
+ enable_language(CXX)
+ add_vpp_executable(vapi_cpp_test
+ SOURCES
+ vapi_cpp_test.cpp
+ DEPENDS fake_api_vapi_hpp
+ LINK_LIBRARIES ${libs}
+ NO_INSTALL
+ )
- DESTINATION include/vapi
- COMPONENT vpp-dev
-)
+else()
+ message (WARNING "subunit library not found - vapi tests disabled")
+endif()