From 35ff53c6b0a98f6376cca5f42ab96499e4b476b6 Mon Sep 17 00:00:00 2001 From: Thiago de Arruda Date: Thu, 10 Apr 2014 15:51:44 -0300 Subject: Add `msgpack_rpc_dispatch`/metadata generator This adds a lua script which parses the contents of 'api.h'. After the api is parsed into a metadata table. After that, it will generate: - A msgpack blob for the metadata table. This msgpack object contains everything scripting engines need to generate their own wrappers for the remote API. - The `msgpack_rpc_dispatch` function, which takes care of validating msgpack requests, converting arguments to C types and passing control to the appropriate 'api.h' function. The result is then serialized back to msgpack and returned to the client. This approach was used because: - It automatically modifies `msgpack_rpc_dispatch` to reflect API changes. - Scripting engines that generate remote call wrappers using the msgpack metadata will also adapt automatically to API changes --- src/CMakeLists.txt | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'src') diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 48f656fad4..8e38839e24 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,5 +1,27 @@ include(CheckLibraryExists) +if(DEFINED ENV{LUA_BINARY}) + set(LUA_BIN $ENV{LUA_BINARY}) +else() + set(LUA_BIN ${DEPS_BIN_DIR}/luajit) +endif() + +set(GENERATED_DIR ${PROJECT_BINARY_DIR}/src/auto) +set(DISPATCH_GENERATOR ${PROJECT_SOURCE_DIR}/scripts/msgpack-gen.lua) +set(API_HEADER ${PROJECT_SOURCE_DIR}/src/api.h) +set(MSGPACK_RPC_HEADER ${PROJECT_SOURCE_DIR}/src/msgpack_rpc.h) +set(MSGPACK_DISPATCH ${GENERATED_DIR}/msgpack_dispatch.c) + +file(MAKE_DIRECTORY ${GENERATED_DIR}) + +add_custom_command(OUTPUT ${MSGPACK_DISPATCH} + COMMAND ${LUA_BIN} ${DISPATCH_GENERATOR} ${API_HEADER} ${MSGPACK_DISPATCH} + DEPENDS + ${API_HEADER} + ${MSGPACK_RPC_HEADER} + ${DISPATCH_GENERATOR} + ) + file( GLOB NEOVIM_SOURCES *.c ) foreach(sfile ${NEOVIM_SOURCES}) @@ -11,6 +33,7 @@ endforeach() list(REMOVE_ITEM NEOVIM_SOURCES ${to_remove}) list(APPEND NEOVIM_SOURCES "${PROJECT_BINARY_DIR}/config/auto/pathdef.c") +list(APPEND NEOVIM_SOURCES "${MSGPACK_DISPATCH}") file( GLOB OS_SOURCES os/*.c ) -- cgit