+##############################################################################
+# VPP-API
+##############################################################################
+function(vpp_generate_vapi_c_header f)
+ get_filename_component(output ${f}.vapi.h NAME)
+ set (output_name ${CMAKE_BINARY_DIR}/vpp-api/vapi/${output})
+ if(NOT VPP_VAPI_C_GEN)
+ set(VPP_VAPI_C_GEN ${CMAKE_SOURCE_DIR}/vpp-api/vapi/vapi_c_gen.py)
+ set(VPP_VAPI_C_GEN_DEPENDS
+ ${CMAKE_SOURCE_DIR}/vpp-api/vapi/vapi_c_gen.py
+ ${CMAKE_SOURCE_DIR}/vpp-api/vapi/vapi_json_parser.py
+ )
+ endif()
+
+ # C VAPI Headers
+ set(input ${CMAKE_CURRENT_BINARY_DIR}/${f}.json)
+ add_custom_command(
+ OUTPUT ${output_name}
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/vpp-api/vapi
+ COMMAND ${VPP_VAPI_C_GEN}
+ ARGS --remove-path ${input}
+ DEPENDS ${input} ${VPP_VAPI_C_GEN_DEPENDS}
+ COMMENT "Generating VAPI C header ${output_name}"
+ )
+ install(
+ FILES ${output_name}
+ DESTINATION include/vapi
+ COMPONENT vpp-dev
+ )
+endfunction ()
+
+function (vpp_generate_vapi_cpp_header f)
+ get_filename_component(output ${f}.vapi.hpp NAME)
+ set (output_name ${CMAKE_BINARY_DIR}/vpp-api/vapi/${output})
+ if(NOT VPP_VAPI_CPP_GEN)
+ set(VPP_VAPI_CPP_GEN ${CMAKE_SOURCE_DIR}/vpp-api/vapi/vapi_cpp_gen.py)
+ set(VPP_VAPI_CPP_GEN_DEPENDS
+ ${CMAKE_SOURCE_DIR}/vpp-api/vapi/vapi_cpp_gen.py
+ ${CMAKE_SOURCE_DIR}/vpp-api/vapi/vapi_json_parser.py
+ )
+ endif()
+ # C++ VAPI Headers
+ set(input ${CMAKE_CURRENT_BINARY_DIR}/${f}.json)
+ add_custom_command(
+ OUTPUT ${output_name}
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/vpp-api/vapi
+ COMMAND ${VPP_VAPI_CPP_GEN}
+ ARGS --gen-h-prefix=vapi --remove-path ${input}
+ DEPENDS ${input} ${VPP_VAPI_CPP_GEN_DEPENDS}
+ COMMENT "Generating VAPI C++ header ${output_name}"
+ )
+ install(
+ FILES ${output_name}
+ DESTINATION include/vapi
+ COMPONENT vpp-dev
+ )
+endfunction ()
+
+