diff options
Diffstat (limited to 'cmake/CommonAPI.cmake')
-rwxr-xr-x | cmake/CommonAPI.cmake | 105 |
1 files changed, 56 insertions, 49 deletions
diff --git a/cmake/CommonAPI.cmake b/cmake/CommonAPI.cmake index f98bcda..45c1078 100755 --- a/cmake/CommonAPI.cmake +++ b/cmake/CommonAPI.cmake @@ -11,7 +11,7 @@ # A list with include directories include(CMakeParseArguments) -include(TargetArch) + MACRO(LOAD_COMMONAPI) #parse the input parameters @@ -20,14 +20,12 @@ MACRO(LOAD_COMMONAPI) set(multiValueArgs "") cmake_parse_arguments(PARAMS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - # check the binding parameter ... if(PARAMS_DBUS) SET(COMMONAPI_USED_BINDING 0 CACHE INTERNAL "hide this!" FORCE) elseif(PARAMS_SOMEIP) SET(COMMONAPI_USED_BINDING 1 CACHE INTERNAL "hide this!" FORCE) - else() - SET(COMMONAPI_USED_BINDING 0 CACHE INTERNAL "hide this!" FORCE) endif() + # load the proper libs ... IF(NOT CommonAPI_FOUND) FIND_PACKAGE(CommonAPI REQUIRED) @@ -47,6 +45,7 @@ MACRO(LOAD_COMMONAPI) IF(${COMMONAPI_USED_BINDING} EQUAL 1) IF(NOT CommonAPI-SomeIP_FOUND) + FIND_PACKAGE (vsomeip REQUIRED) FIND_PACKAGE(CommonAPI-SomeIP REQUIRED CONFIG NO_CMAKE_PACKAGE_REGISTRY) FIND_LIBRARY(CommonAPI-SomeIP_LIBRARY REQUIRED @@ -82,15 +81,12 @@ MACRO(LOAD_COMMONAPI) ENDMACRO() # helper function giving a string with the current architecture -function(GET_TARGET_ARCH OUT_ARCH) - target_architecture(TARGET_ARCH) - IF("${TARGET_ARCH}" STREQUAL "i386") - SET(${OUT_ARCH} "x86" PARENT_SCOPE) - ELSEIF("${TARGET_ARCH}" STREQUAL "x86_64") +function(GET_TARGET_ARCH OUT_ARCH) + IF(CMAKE_SIZEOF_VOID_P EQUAL 8) SET(${OUT_ARCH} "x86_64" PARENT_SCOPE) - ELSE() - SET(${OUT_ARCH} "x86_64" PARENT_SCOPE) - ENDIF() + ELSE() + SET(${OUT_ARCH} "x86" PARENT_SCOPE) + ENDIF() endfunction() # helper function giving a string with the current host @@ -138,13 +134,12 @@ macro(GET_GENERATED_FILES GEN_DESTINATION) LIST(REMOVE_DUPLICATES CAPI_SOURCES) set(${PARAMS_TARGET}_GEN_HEADERS ${CAPI_HEADERS} PARENT_SCOPE) - set(${PARAMS_TARGET}_GEN_SOURCES ${CAPI_SOURCES} PARENT_SCOPE) - + set(${PARAMS_TARGET}_GEN_SOURCES ${CAPI_SOURCES} PARENT_SCOPE) #add base path src-gen SET(${PARAMS_TARGET}_GEN_INCLUDE_DIR ${CAPI_INCLUDES} ${GEN_DESTINATION} PARENT_SCOPE) endmacro(GET_GENERATED_FILES) -macro(FIND_AND_EXEC_GENERATOR GENERATOR_EXECUTABLE SHOULD_GENERATE_STUB_DEFAULT) +macro(FIND_AND_EXEC_GENERATOR GENERATOR_EXECUTABLE SHOULD_GENERATE_STUB_DEFAULT FIDLS) MESSAGE(STATUS "Searching for common-api generator executable ${GENERATOR_EXECUTABLE} ...") # find the generator binary ... execute_process(COMMAND find "/usr/local/share/CommonAPI-${CommonAPI_VERSION}" -name ${GENERATOR_EXECUTABLE} @@ -164,7 +159,7 @@ macro(FIND_AND_EXEC_GENERATOR GENERATOR_EXECUTABLE SHOULD_GENERATE_STUB_DEFAULT) message(STATUS "Common-api generator can't be found. Will try the alternative folder!") ELSE() # the generator binary is found - MESSAGE(STATUS "Will execute common-api generator at path ${OUT_RESULT}") + MESSAGE(STATUS "Will execute common-api generator at path ${OUT_RESULT} with ${FIDLS}") function(mktmpdir OUTVAR) while(NOT TEMP_DESTINATION OR EXISTS ${TEMP_DESTINATION}) string(RANDOM LENGTH 16 TEMP_DESTINATION) @@ -175,9 +170,9 @@ macro(FIND_AND_EXEC_GENERATOR GENERATOR_EXECUTABLE SHOULD_GENERATE_STUB_DEFAULT) set(${OUTVAR} ${TEMP_DESTINATION} PARENT_SCOPE) endfunction() - # execute the generate command ... + # execute the generate command ... IF(${SHOULD_GENERATE_STUB_DEFAULT} EQUAL 1) - execute_process(COMMAND ${OUT_RESULT} -sk Default -d ${PARAMS_DESTINATION} ${FIDLS} + execute_process(COMMAND ${OUT_RESULT} -sk Default -d ${PARAMS_DESTINATION} ${FIDLS} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} RESULT_VARIABLE EXIT_CODE OUTPUT_VARIABLE GENERATOR_OUTPUT @@ -185,13 +180,13 @@ macro(FIND_AND_EXEC_GENERATOR GENERATOR_EXECUTABLE SHOULD_GENERATE_STUB_DEFAULT) OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE) ELSE() - execute_process(COMMAND ${OUT_RESULT} -d ${PARAMS_DESTINATION} ${FIDLS} - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - RESULT_VARIABLE EXIT_CODE - OUTPUT_VARIABLE GENERATOR_OUTPUT - ERROR_VARIABLE GENERATOR_ERR_OUTPUT - OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND ${OUT_RESULT} -d ${PARAMS_DESTINATION} ${FIDLS} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + RESULT_VARIABLE EXIT_CODE + OUTPUT_VARIABLE GENERATOR_OUTPUT + ERROR_VARIABLE GENERATOR_ERR_OUTPUT + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_STRIP_TRAILING_WHITESPACE) ENDIF() if(EXIT_CODE) message(FATAL_ERROR "Failed to generate files from FIDL:${GENERATOR_OUTPUT}") @@ -200,7 +195,7 @@ macro(FIND_AND_EXEC_GENERATOR GENERATOR_EXECUTABLE SHOULD_GENERATE_STUB_DEFAULT) endif() SET(TEMP_GEN_DST ${PARAMS_DESTINATION}) ENDIF() -endmacro(FIND_AND_EXEC_GENERATOR GENERATOR_EXECUTABLE ADDITIONAL_ARGS) +endmacro(FIND_AND_EXEC_GENERATOR GENERATOR_EXECUTABLE SHOULD_GENERATE_STUB_DEFAULT FIDLS) # generate common-api sources and retreive a list with them MACRO(EXECUTE_GENERATOR) @@ -222,22 +217,37 @@ MACRO(EXECUTE_GENERATOR) SET(GENERATE_STUB 0) ENDIF() # searching for common-api-generator executable ... - FIND_AND_EXEC_GENERATOR(${COMMONAPI_GENERATOR_EXECUTABLE} ${GENERATE_STUB}) - FIND_AND_EXEC_GENERATOR(${COMMONAPI_BINDING_GENERATOR_EXECUTABLE} FALSE) + FOREACH(FIDL ${IN_FIDLS_GENERIC}) + FIND_AND_EXEC_GENERATOR(${COMMONAPI_GENERATOR_EXECUTABLE} ${GENERATE_STUB} ${FIDL}) + ENDFOREACH() + FOREACH(FIDL ${IN_FIDLS_BINDING}) + FIND_AND_EXEC_GENERATOR(${COMMONAPI_BINDING_GENERATOR_EXECUTABLE} FALSE ${FIDL}) + ENDFOREACH() # get the lists with the sources and headers message(STATUS "Looking for generated common-api files...") GET_GENERATED_FILES(${TEMP_GEN_DST}) ENDMACRO(EXECUTE_GENERATOR) +# Function COMMON_API_GENERATE_SOUCRES +# +# TARGET COMMON_API +# FIDLS_GENERIC a list with fidls for the generic generator. +# FIDLS_BINDING a list with fidls for the binding generator. +# DESTINATION a relative path to the build directory or an absolute path. +# ALT_DESTINATION an alternative relative/absolute path with common-api sources, usually in the source tree. FUNCTION(COMMON_API_GENERATE_SOUCRES) #parse the input parameters set(options "") set(oneValueArgs TARGET DESTINATION ALT_DESTINATION HEADER_TEMPLATE) - set(multiValueArgs FIDLS FIDL_DEPENDS) + set(multiValueArgs FIDLS_GENERIC FIDLS_BINDING) cmake_parse_arguments(PARAMS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - if(NOT IS_ABSOLUTE ${PARAMS_DESTINATION}) + if(NOT PARAMS_TARGET) + message(FATAL_ERROR "TARGET must be specified") + endif() + + if(NOT IS_ABSOLUTE ${PARAMS_DESTINATION}) set(PARAMS_DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/${PARAMS_DESTINATION}) endif() @@ -254,38 +264,35 @@ FUNCTION(COMMON_API_GENERATE_SOUCRES) GET_GENERATED_FILES(${PARAMS_ALT_DESTINATION}) ENDIF() ELSE() - - if(NOT PARAMS_FIDLS) + if(NOT PARAMS_FIDLS_GENERIC) message(FATAL_ERROR "FIDLS must be specified") endif() - if(NOT PARAMS_TARGET) - message(FATAL_ERROR "TARGET must be specified") - endif() - if(PARAMS_HEADER_TEMPLATE) list(APPEND ARGS -pref ${PARAMS_HEADER_TEMPLATE}) endif() - foreach(FIDL ${PARAMS_FIDLS}) + # Run configure_file on each .fidl which forces cmake to reexecute its configure phase if the input file changes. + foreach(FIDL ${PARAMS_FIDLS_GENERIC}) get_filename_component(FIDL_PATH ${FIDL} ABSOLUTE) - - # Run configure_file on the .fidl - this forces cmake to reexecute its - # configure phase if the input file changes. string(MD5 ${FIDL_PATH} FIDL_CHECKSUM) configure_file(${FIDL_PATH} ${CMAKE_CURRENT_BINARY_DIR}/${FIDL_CHECKSUM}.fidl.done) - - list(APPEND FIDLS ${FIDL_PATH}) + list(APPEND IN_FIDLS_GENERIC ${FIDL_PATH}) endforeach() + + if(PARAMS_FIDLS_BINDING) + foreach(FIDL ${PARAMS_FIDLS_BINDING}) + get_filename_component(FIDL_PATH ${FIDL} ABSOLUTE) + string(MD5 ${FIDL_PATH} FIDL_CHECKSUM) + configure_file(${FIDL_PATH} ${CMAKE_CURRENT_BINARY_DIR}/${FIDL_CHECKSUM}.fidl.done) + list(APPEND IN_FIDLS_BINDING ${FIDL_PATH}) + endforeach() + else() + SET(IN_FIDLS_BINDING ${IN_FIDLS_GENERIC}) + endif() - message(STATUS "Will generate common-api files for ${PARAMS_FIDLS} ...") - - foreach(FIDL_DEPEND ${PARAMS_FIDL_DEPENDS}) - string(MD5 ${FIDL_PATH} FIDL_CHECKSUM) - configure_file(${FIDL_PATH} ${CMAKE_CURRENT_BINARY_DIR}/${FIDL_CHECKSUM}.fidl.done) - endforeach() # run the generator ... EXECUTE_GENERATOR() - ENDIF() + ENDIF() ENDFUNCTION() |