From 4c64b6edc86f7732f4a160b948b3386e4021a265 Mon Sep 17 00:00:00 2001 From: Damjan Marion Date: Sun, 26 Aug 2018 18:14:46 +0200 Subject: cmake: add vapi build Change-Id: Id939a0cbe35601478ad262f49bb0a1abdb62aa45 Signed-off-by: Damjan Marion --- src/vpp-api/vapi/CMakeLists.txt | 75 ++++++++++++++++++++++++++++++++++++ src/vpp-api/vapi/vapi_c_gen.py | 19 ++++++--- src/vpp-api/vapi/vapi_cpp_gen.py | 18 ++++++--- src/vpp-api/vapi/vapi_json_parser.py | 2 +- 4 files changed, 102 insertions(+), 12 deletions(-) create mode 100644 src/vpp-api/vapi/CMakeLists.txt (limited to 'src/vpp-api/vapi') diff --git a/src/vpp-api/vapi/CMakeLists.txt b/src/vpp-api/vapi/CMakeLists.txt new file mode 100644 index 00000000000..8feb12e3dcf --- /dev/null +++ b/src/vpp-api/vapi/CMakeLists.txt @@ -0,0 +1,75 @@ +# 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. + +include_directories ( + ${CMAKE_CURRENT_SOURCE_DIR}/.. + ${CMAKE_CURRENT_BINARY_DIR}/.. +) + +unset(VAPICLIENT_API_C_HEADERS) +unset(VAPICLIENT_API_CPP_HEADERS) + +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) + + # C VAPI Headers + add_custom_command( + OUTPUT ${output} + 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 + COMMENT "Generating VAPI C header ${output}" + ) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${output} DESTINATION include/vapi) + list(APPEND VAPICLIENT_API_CPP_HEADERS ${output}) + + # C++ VAPI Headers + get_filename_component(output ${f}.vapi.hpp NAME) + add_custom_command( + OUTPUT ${output} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/vapi_cpp_gen.py + ARGS --remove-path ${input} + DEPENDS ${input} vapi_cpp_gen.py vapi_json_parser.py + COMMENT "Generating VAPI C++ header ${output}" + ) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${output} DESTINATION include/vapi) + list(APPEND VAPICLIENT_API_CPP_HEADERS ${output}) +endforeach () + +add_custom_target(all-vapi-headers ALL DEPENDS + ${VAPICLIENT_API_C_HEADERS} + ${VAPICLIENT_API_CPP_HEADERS} +) + +add_vpp_library(vapiclient + SOURCES + vapi.c + libvapiclient.map + + LINK_LIBRARIES vppinfra vlibmemoryclient svm pthread m rt +) + +install( + FILES + vapi.h + vapi_common.h + vapi_dbg.h + vapi.hpp + vapi_internal.h + + DESTINATION include/vapi +) diff --git a/src/vpp-api/vapi/vapi_c_gen.py b/src/vpp-api/vapi/vapi_c_gen.py index 5a185398e89..445790d1059 100755 --- a/src/vpp-api/vapi/vapi_c_gen.py +++ b/src/vpp-api/vapi/vapi_c_gen.py @@ -532,6 +532,7 @@ vapi_send_with_control_ping (vapi_ctx_t ctx, void *msg, u32 context) def gen_json_unified_header(parser, logger, j, io, name): + d, f = os.path.split(j) logger.info("Generating header `%s'" % name) orig_stdout = sys.stdout sys.stdout = io @@ -561,7 +562,7 @@ def gen_json_unified_header(parser, logger, j, io, name): print("extern vapi_msg_id_t %s;" % m.get_msg_id_name()) print("") print("#define DEFINE_VAPI_MSG_IDS_%s\\" % - j.replace(".", "_").replace("/", "_").replace("-", "_").upper()) + f.replace(".", "_").replace("/", "_").replace("-", "_").upper()) print("\\\n".join([ " vapi_msg_id_t %s;" % m.get_msg_id_name() for m in parser.messages_by_json[j].values() @@ -639,15 +640,19 @@ def json_to_c_header_name(json_name): raise Exception("Unexpected json name `%s'!" % json_name) -def gen_c_unified_headers(parser, logger, prefix): +def gen_c_unified_headers(parser, logger, prefix, remove_path): if prefix == "" or prefix is None: prefix = "" else: prefix = "%s/" % prefix for j in parser.json_files: - with open('%s%s' % (prefix, json_to_c_header_name(j)), "w") as io: + if remove_path: + d, f = os.path.split(j) + else: + f = j + with open('%s%s' % (prefix, json_to_c_header_name(f)), "w") as io: gen_json_unified_header( - parser, logger, j, io, json_to_c_header_name(j)) + parser, logger, j, io, json_to_c_header_name(f)) if __name__ == '__main__': @@ -673,6 +678,8 @@ if __name__ == '__main__': '(may be specified multiple times)') argparser.add_argument('--prefix', action='store', default=None, help='path prefix') + argparser.add_argument('--remove-path', action='store_true', + help='remove path from filename') args = argparser.parse_args() jsonparser = JsonParser(logger, args.files, @@ -686,7 +693,7 @@ if __name__ == '__main__': # Damjan), to avoid symbol version issues in .so # gen_c_headers_and_code(jsonparser, logger, args.prefix) - gen_c_unified_headers(jsonparser, logger, args.prefix) + gen_c_unified_headers(jsonparser, logger, args.prefix, args.remove_path) for e in jsonparser.exceptions: - logger.error(e) + logger.warning(e) diff --git a/src/vpp-api/vapi/vapi_cpp_gen.py b/src/vpp-api/vapi/vapi_cpp_gen.py index e83e151a879..adf85c753d8 100755 --- a/src/vpp-api/vapi/vapi_cpp_gen.py +++ b/src/vpp-api/vapi/vapi_cpp_gen.py @@ -129,8 +129,9 @@ def gen_json_header(parser, logger, j, io, gen_h_prefix, add_debug_comments): logger.info("Generating header `%s'" % io.name) orig_stdout = sys.stdout sys.stdout = io + d, f = os.path.split(j) include_guard = "__included_hpp_%s" % ( - j.replace(".", "_").replace("/", "_").replace("-", "_")) + f.replace(".", "_").replace("/", "_").replace("-", "_")) print("#ifndef %s" % include_guard) print("#define %s" % include_guard) print("") @@ -192,7 +193,7 @@ def json_to_cpp_header_name(json_name): raise Exception("Unexpected json name `%s'!" % json_name) -def gen_cpp_headers(parser, logger, prefix, gen_h_prefix, +def gen_cpp_headers(parser, logger, prefix, gen_h_prefix, remove_path, add_debug_comments=False): if prefix == "" or prefix is None: prefix = "" @@ -203,7 +204,11 @@ def gen_cpp_headers(parser, logger, prefix, gen_h_prefix, else: gen_h_prefix = "%s/" % gen_h_prefix for j in parser.json_files: - with open('%s%s' % (prefix, json_to_cpp_header_name(j)), "w") as io: + if remove_path: + d, f = os.path.split(j) + else: + f = j + with open('%s%s' % (prefix, json_to_cpp_header_name(f)), "w") as io: gen_json_header(parser, logger, j, io, gen_h_prefix, add_debug_comments) @@ -233,6 +238,8 @@ if __name__ == '__main__': help='path prefix') argparser.add_argument('--gen-h-prefix', action='store', default=None, help='generated C header prefix') + argparser.add_argument('--remove-path', action='store_true', + help='remove path from filename') args = argparser.parse_args() jsonparser = JsonParser(logger, args.files, @@ -241,7 +248,8 @@ if __name__ == '__main__': field_class=CppField, message_class=CppMessage) - gen_cpp_headers(jsonparser, logger, args.prefix, args.gen_h_prefix) + gen_cpp_headers(jsonparser, logger, args.prefix, args.gen_h_prefix, + args.remove_path) for e in jsonparser.exceptions: - logger.error(e) + logger.warning(e) diff --git a/src/vpp-api/vapi/vapi_json_parser.py b/src/vpp-api/vapi/vapi_json_parser.py index 58a75777f11..b18eda42f6b 100644 --- a/src/vpp-api/vapi/vapi_json_parser.py +++ b/src/vpp-api/vapi/vapi_json_parser.py @@ -346,7 +346,7 @@ class JsonParser(object): def finalize_parsing(self): if len(self.messages) == 0: for e in self.exceptions: - self.logger.error(e) + self.logger.warning(e) for jn, j in self.messages_by_json.items(): remove = [] for n, m in j.items(): -- cgit 1.2.3-korg