diff options
author | Justin Dickow <jjdickow@gmail.com> | 2014-10-20 17:44:41 -0400 |
---|---|---|
committer | Justin Dickow <jjdickow@gmail.com> | 2014-10-20 17:44:41 -0400 |
commit | 34e7256493ff0e6594029b9857d7e2aa31f5dbeb (patch) | |
tree | 367306b507c52d3af211533810adbc22004e0192 /tools/intergen/GenerateInterfaceLibrary.cmake | |
parent | 2eef966e9b5fd4d94dd98820095eb765e200c64b (diff) | |
download | sdl_core-34e7256493ff0e6594029b9857d7e2aa31f5dbeb.tar.gz |
SDL 3.8!
Signed-off-by: Justin Dickow <jjdickow@gmail.com>
Diffstat (limited to 'tools/intergen/GenerateInterfaceLibrary.cmake')
-rw-r--r-- | tools/intergen/GenerateInterfaceLibrary.cmake | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/tools/intergen/GenerateInterfaceLibrary.cmake b/tools/intergen/GenerateInterfaceLibrary.cmake new file mode 100644 index 0000000000..8482a8206a --- /dev/null +++ b/tools/intergen/GenerateInterfaceLibrary.cmake @@ -0,0 +1,60 @@ +set(INTERGEN_CMD ${CMAKE_BINARY_DIR}/tools/intergen/bin/intergen) +set(GENERATED_LIB_DEPENDENCIES jsoncpp) +set(GENERATED_LIB_HEADER_DEPENDENCIES + ${CMAKE_SOURCE_DIR}/src/components/rpc_base/include + ${CMAKE_SOURCE_DIR}/src/thirdPartyLibs/jsoncpp/include +) + +# Generates interface library from given xml file and builds it +# in CMAKE_CURRENT_BINARY_DIR +# |xml_file_name| contains path to xml spec files +# |generated_interface_names| should contain list of generated interfaces +# if |AUTO_FUNC_IDS| is added to argument list, intergen is called with "-a" +# flag telling intergen to generate function ids automatically +# if |DBUS_SUPPORT| is added to argument list, intergen is called with "-d" +# flag that enables DBus serialization code generation +# from xml_file (intergen creates separate directory for every interface). +# Their names are written lowercase_underscored_style. +function (GenerateInterfaceLibrary xml_file_name generated_interface_names) + set(options AUTO_FUNC_IDS DBUS_SUPPORT) + cmake_parse_arguments(GenerateInterfaceLibrary "${options}" "" "" ${ARGN}) + if (GenerateInterfaceLibrary_AUTO_FUNC_IDS) + set(AUTOID "-a") + endif() + if (GenerateInterfaceLibrary_DBUS_SUPPORT) + set(NEED_DBUS "-d") + list(APPEND GENERATED_LIB_HEADER_DEPENDENCIES ${DBUS_INCLUDE_DIRS}) + endif() + + foreach(interface_name ${generated_interface_names}) + set(HEADERS + ${interface_name}/enums.h + ${interface_name}/types.h + ${interface_name}/functions.h + ${interface_name}/interface.h + ) + set(SOURCES + ${interface_name}/enums.cc + ${interface_name}/types.cc + ${interface_name}/functions.cc + ${interface_name}/validation.cc + ${interface_name}/interface.cc + ) + add_custom_command( OUTPUT ${HEADERS} ${SOURCES} + COMMAND ${INTERGEN_CMD} -f ${CMAKE_CURRENT_SOURCE_DIR}/${xml_file_name} -j ${AUTOID} ${NEED_DBUS} -i ${interface_name} + DEPENDS ${INTERGEN_CMD} ${xml_file_name} + COMMENT "Generating interface ${interface_name} from ${xml_file_name}" + VERBATIM + ) + include_directories( + ${CMAKE_CURRENT_BINARY_DIR} + ${GENERATED_LIB_HEADER_DEPENDENCIES} + ) + add_library(${interface_name} ${SOURCES}) + + # |previous_interface| ensures that interface libraries are built in the same order + # as they defined in |generated_interface_names| + target_link_libraries(${interface_name} ${GENERATED_LIB_DEPENDENCIES} ${previous_interface}) + set(previous_interface ${interface_name}) + endforeach(interface_name) +endfunction(GenerateInterfaceLibrary xml_file_name generated_interface_names) |