diff options
author | Dominik Holland <dominik.holland@qt.io> | 2021-02-17 17:34:35 +0100 |
---|---|---|
committer | Dominik Holland <dominik.holland@qt.io> | 2021-05-10 17:28:11 +0200 |
commit | 8e3d637e7776638149119bd62f459178cbca2955 (patch) | |
tree | 077f7a597039a05555da2c2fe33c1535227dd35e /src | |
parent | eac2590d4266e234f0f2ec4d261d940b14dd79bf (diff) | |
download | qtivi-8e3d637e7776638149119bd62f459178cbca2955.tar.gz |
cmake integration of the ivigenerator
Rerun pro2cmake.py for all examples and tests.
Ivigenerator based tests and examples are compiling
fine, but the cmake files need to be reworked to be
also able to run them.
Task-number: AUTOSUITE-1633
Change-Id: Icb95ecfa62ecb319d042dc30ea9f643b69a4aacf
Reviewed-by: Robert Griebl <robert.griebl@qt.io>
Diffstat (limited to 'src')
27 files changed, 430 insertions, 23 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 23fbafd..636fb71 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,6 +1,7 @@ # Generated from src.pro. qt_feature_evaluate_features("${CMAKE_CURRENT_SOURCE_DIR}/ivicore/configure.cmake") # special case +qt_feature_evaluate_features("${CMAKE_CURRENT_SOURCE_DIR}/ivivehiclefunctions/configure.cmake") # special case qt_feature_evaluate_features("${CMAKE_CURRENT_SOURCE_DIR}/ivimedia/configure.cmake") # special case qt_feature_evaluate_features("${CMAKE_CURRENT_SOURCE_DIR}/geniviextras/configure.cmake") # special case diff --git a/src/imports/CMakeLists.gen.txt b/src/imports/CMakeLists.gen.txt new file mode 100644 index 0000000..343d24d --- /dev/null +++ b/src/imports/CMakeLists.gen.txt @@ -0,0 +1,11 @@ +# Generated from imports.pro. + +if(TARGET Qt::IviCore) + add_subdirectory(core) +endif() +if(TARGET Qt::IviMedia) + add_subdirectory(media) +endif() +if(TARGET Qt::IviVehicleFunctions) + add_subdirectory(vehiclefunctions) +endif() diff --git a/src/imports/CMakeLists.txt b/src/imports/CMakeLists.txt index a3e937e..046b6ad 100644 --- a/src/imports/CMakeLists.txt +++ b/src/imports/CMakeLists.txt @@ -6,6 +6,6 @@ endif() if(TARGET Qt::IviMedia) add_subdirectory(media) endif() -if(TARGET ivivehiclefunctions) +if(TARGET Qt::IviVehicleFunctions) # special case add_subdirectory(vehiclefunctions) endif() diff --git a/src/imports/vehiclefunctions/CMakeLists.txt b/src/imports/vehiclefunctions/CMakeLists.txt new file mode 100644 index 0000000..d5a7c70 --- /dev/null +++ b/src/imports/vehiclefunctions/CMakeLists.txt @@ -0,0 +1,36 @@ +# Generated from vehiclefunctions.pro. + +##################################################################### +## vehiclefunctions Plugin: +##################################################################### + +# IVI Generator: +qt_ivigenerator(qtivivehiclefunctionsplugin + QFACE_SOURCES ../../ivivehiclefunctions/ivivehiclefunctions.qface + QFACE_FORMAT qmlplugin + QFACE_MODULE_NAME QtIviVehicleFunctions +) + +# special case begin +target_link_libraries(qtivivehiclefunctionsplugin PUBLIC + Qt::IviCore + Qt::IviVehicleFunctions +) +# special case end + +#### Keys ignored in scope 1:.:.:vehiclefunctions.pro:<TRUE>: +# CXX_MODULE = "qml" +# QML_IMPORT_VERSION = "1.0" +# QT_FOR_CONFIG = "ivicore" +# TARGETPATH = "$$replace(URI, \\., /)" +# qml2build.files = "-$$_PRO_FILE_PWD_/qmldir" "-$$_PRO_FILE_PWD_/plugins.qmltypes" +# qmldir2build.files = "-$$_PRO_FILE_PWD_/qmldir" "-$$_PRO_FILE_PWD_/plugins.qmltypes" + +## Scopes: +##################################################################### + +#### Keys ignored in scope 3:.:.:vehiclefunctions.pro:NOT PWD___equals____ss_OUT_PWD: +# qmldir.base = <EMPTY> +# qmldir.files = "-$$_PRO_FILE_PWD_/qmldir" +# qmlfiles.base = <EMPTY> +# qmlfiles.files = "-$$_PRO_FILE_PWD_/qmldir" diff --git a/src/ivicore/CMakeLists.txt b/src/ivicore/CMakeLists.txt index 01e55f7..d6d7aed 100644 --- a/src/ivicore/CMakeLists.txt +++ b/src/ivicore/CMakeLists.txt @@ -39,6 +39,9 @@ qt_add_module(IviCore PRIVATE_MODULE_INTERFACE Qt::CorePrivate Qt::QmlPrivate + EXTRA_CMAKE_FILES + Qt6IviCoreConfigExtras.cmake.in + Qt6IviCoreMacros.cmake ) #### Keys ignored in scope 1:.:.:ivicore.pro:<TRUE>: diff --git a/src/ivicore/Qt6IviCoreConfigExtras.cmake.in b/src/ivicore/Qt6IviCoreConfigExtras.cmake.in new file mode 100644 index 0000000..057a591 --- /dev/null +++ b/src/ivicore/Qt6IviCoreConfigExtras.cmake.in @@ -0,0 +1,3 @@ + +# install layout information, following what qmake -query provides +get_filename_component(QTIVI_INSTALL_PREFIX ${CMAKE_CURRENT_LIST_DIR}/../../../ ABSOLUTE) diff --git a/src/ivicore/Qt6IviCoreMacros.cmake b/src/ivicore/Qt6IviCoreMacros.cmake new file mode 100644 index 0000000..5101501 --- /dev/null +++ b/src/ivicore/Qt6IviCoreMacros.cmake @@ -0,0 +1,199 @@ +function(qt6_ivigenerator target) + qt6_ivigenerator_generate(${ARGN}) + qt6_ivigenerator_include(${target} ${ARGN}) +endfunction() + +if(NOT QT_NO_CREATE_VERSIONLESS_FUNCTIONS) + function(qt_ivigenerator) + qt6_ivigenerator(${ARGV}) + endfunction() +endif() + +macro(internal_resolve_ivigenerator_path) + if (DEFINED QtIvi_BINARY_DIR AND (NOT DEFINED QT_BUILD_STANDALONE_TESTS)) + set (VIRTUALENV ${QtIvi_BINARY_DIR}/src/tools/ivigenerator/qtivi_qface_virtualenv) + set (GENERATOR_PATH ${QtIvi_SOURCE_DIR}/src/tools/ivigenerator) + set (IVIGENERATOR_CONFIG ${QtIvi_BINARY_DIR}/src/tools/ivigenerator/.config) + else() + set (GENERATOR_PATH ${QTIVI_INSTALL_PREFIX}/${QT6_INSTALL_BINS}/ivigenerator) + set (VIRTUALENV ${GENERATOR_PATH}/qtivi_qface_virtualenv) + endif() +endmacro() + +function(qt6_ivigenerator_generate) + internal_resolve_ivigenerator_path() + + if (NOT EXISTS ${VIRTUALENV}/bin/activate AND NOT EXISTS ${VIRTUALENV}/Scripts/activate.bat) + return() + endif() + + cmake_parse_arguments( + PARSE_ARGV 0 + ARG + "" "QFACE_FORMAT;QFACE_OUTPUT_DIR;QFACE_SOURCES;QFACE_HEADERS_OUTPUT_DIR" "QFACE_ANNOTATIONS;QFACE_IMPORT_PATH" + ) + + if (DEFINED ARG_KEYWORDS_MISSING_VALUES) + message(FATAL_ERROR "Keywords can't be empty: ${ARG_KEYWORDS_MISSING_VALUES}") + endif() + + if (NOT DEFINED ARG_QFACE_FORMAT) + set(ARG_QFACE_FORMAT frontend) + endif() + set(QFACE_OUTPUT_DIR ${ARG_QFACE_OUTPUT_DIR}) + if (NOT DEFINED ARG_QFACE_OUTPUT_DIR) + set(QFACE_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}) + endif() + if (NOT DEFINED ARG_QFACE_SOURCES) + message(FATAL_ERROR "QFACE_SOURCES can't be empty") + endif() + get_filename_component(QFACE_SOURCES "${ARG_QFACE_SOURCES}" REALPATH BASE_DIR) + get_filename_component(QFACE_SOURCE_DIR "${ARG_QFACE_SOURCES}" DIRECTORY) + get_filename_component(QFACE_BASE_NAME "${ARG_QFACE_SOURCES}" NAME_WLE) + get_filename_component(QFACE_SOURCE_ANNOTATION ${QFACE_SOURCE_DIR}/${QFACE_BASE_NAME}.yaml REALPATH BASE_DIR) + + set(QFACE_TEMPLATE_PWD "${GENERATOR_PATH}/templates/${ARG_QFACE_FORMAT}") + if(EXISTS ${QFACE_TEMPLATE_PWD}) + set(FORMAT_PATH ${QFACE_TEMPLATE_PWD}) + set(QFACE_FORMAT ${ARG_QFACE_FORMAT}) + else() + get_filename_component(FORMAT_PATH "${ARG_QFACE_FORMAT}" REALPATH) + if(EXISTS ${FORMAT_PATH}) + set(QFACE_FORMAT ${FORMAT_PATH}) + endif() + endif() + if (NOT DEFINED QFACE_FORMAT) + message(FATAL_ERROR "Invalid QFACE_FORMAT: Couldn't find the template folder: ${FORMAT_PATH}") + endif() + + # Register all source files to cause a cmake rerun + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${QFACE_SOURCES}) + if (EXISTS ${QFACE_SOURCE_ANNOTATION}) + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${QFACE_SOURCE_ANNOTATION}) + endif() + # Also register all files which are part of the current template + file(GLOB FORMAT_FILES ${FORMAT_PATH}/*) + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${FORMAT_FILES}) + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${FORMAT_PATH}.yaml) + # Most templates also have a dependency to a common folder + file(GLOB COMMON_FORMAT_FILES ${GENERATOR_PATH}/templates/*common*/*) + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${COMMON_FORMAT_FILES}) + + set(GENERATOR_ARGUMENTS --format=${QFACE_FORMAT} --force) + foreach(ANNOTATION ${ARG_QFACE_ANNOTATIONS}) + get_filename_component(ANNOTATION_PATH "${ANNOTATION}" REALPATH BASE_DIR) + list(APPEND GENERATOR_ARGUMENTS -A ${ANNOTATION_PATH}) + # Dependency for regeneration + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${ANNOTATION_PATH}) + endforeach() + + foreach(IMPORT ${ARG_QFACE_IMPORT_PATH}) + get_filename_component(IMPORT_PATH "${IMPORT}" REALPATH BASE_DIR) + list(APPEND GENERATOR_ARGUMENTS -I ${IMPORT_PATH}) + # Dependency for regeneration + file(GLOB QFACE_FILES ${IMPORT_PATH}/*.qface) + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${QFACE_FILES}) + endforeach() + + # If the generator was run successfully before + # Check for the timestamps to determine when to run it again. + # TODO, this needs to be extended to also include template and yaml changes + if (${QFACE_SOURCES} IS_NEWER_THAN ${QFACE_OUTPUT_DIR}/.stamp-ivigenerator) + # TODO How to best unset those again afterwards ? + # Use cmake -E slee + cmake -E env COMMAND instead ? + #equals(QMAKE_HOST.os, Windows): ENV = chcp 65001 && + if ("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Windows") + set(PYTHON_EXECUTABLE ${VIRTUALENV}/Scripts/python.exe) + file(TO_NATIVE_PATH "${VIRTUALENV}" VIRTUALENV) + else() + set(PYTHON_EXECUTABLE ${VIRTUALENV}/bin/python) + set(ENV{LC_ALL} en_US.UTF-8) + set(ENV{LD_LIBRARY_PATH} ${VIRTUALENV}/bin) + endif() + if (DEFINED IVIGENERATOR_CONFIG) + set(ENV{IVIGENERATOR_CONFIG} ${IVIGENERATOR_CONFIG}) + endif() + set(ENV{PYTHONHOME} ${VIRTUALENV}) + set(ENV{VIRTUAL_ENV} ${VIRTUALENV}) + + message(STATUS "Running ivigenerator for ${QFACE_SOURCES}") + execute_process( + COMMAND ${PYTHON_EXECUTABLE} + ${GENERATOR_PATH}/generate.py + ${GENERATOR_ARGUMENTS} + ${QFACE_SOURCES} + ${QFACE_OUTPUT_DIR} + RESULT_VARIABLE RET_CODE + OUTPUT_VARIABLE GENERATOR_LOG + ERROR_VARIABLE GENERATOR_LOG + COMMAND_ECHO STDOUT + ) + message("${GENERATOR_LOG}") + + # Touch the stamp file if the generator run was successful + if("${RET_CODE}" EQUAL "0") + execute_process(COMMAND ${CMAKE_COMMAND} -E touch ${QFACE_OUTPUT_DIR}/.stamp-ivigenerator) + else() + message(FATAL_ERROR "Error while running the ivigenerator") + endif() + endif() + + # hack for the developer-build to have all headers where the Qt build expects them + if (DEFINED ARG_QFACE_HEADERS_OUTPUT_DIR) + file(GLOB HEADER_FILES ${QFACE_OUTPUT_DIR}/*.h) + file(COPY ${HEADER_FILES} DESTINATION ${ARG_QFACE_HEADERS_OUTPUT_DIR}) + endif() + +endfunction() + +if(NOT QT_NO_CREATE_VERSIONLESS_FUNCTIONS) + function(qt_ivigenerator_generate) + qt6_ivigenerator_generate(${ARGV}) + endfunction() +endif() + +function(qt6_ivigenerator_include target) + internal_resolve_ivigenerator_path() + + if (NOT EXISTS ${VIRTUALENV}/bin/activate AND NOT EXISTS ${VIRTUALENV}/Scripts/activate.bat) + # Create a dummy target instead + if (NOT TARGET ${target} AND NOT TEST ${target}) + if (DEFINED QtIvi_BINARY_DIR) + file(TOUCH ${CMAKE_CURRENT_BINARY_DIR}/cmake_dummy.cpp) + add_library(${target} ${CMAKE_CURRENT_BINARY_DIR}/cmake_dummy.cpp) + else() + message(FATAL_ERROR "No virtualenv environment to run the ivigenerator") + endif() + endif() + return() + endif() + + cmake_parse_arguments( + PARSE_ARGV 1 + ARG + "" "QFACE_SOURCES;QFACE_OUTPUT_DIR" "" + ) + + if (DEFINED ARG_KEYWORDS_MISSING_VALUES) + message(FATAL_ERROR "Keywords can't be empty: ${ARG_KEYWORDS_MISSING_VALUES}") + endif() + + set(QFACE_OUTPUT_DIR ${ARG_QFACE_OUTPUT_DIR}) + if (NOT DEFINED ARG_QFACE_OUTPUT_DIR) + set(QFACE_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}) + endif() + if (NOT DEFINED ARG_QFACE_SOURCES) + message(FATAL_ERROR "QFACE_SOURCES can't be empty") + endif() + get_filename_component(QFACE_SOURCES "${ARG_QFACE_SOURCES}" REALPATH BASE_DIR) + get_filename_component(QFACE_BASE_NAME "${ARG_QFACE_SOURCES}" NAME_WLE) + + set(CURRENT_TARGET "${target}") + include(${QFACE_OUTPUT_DIR}/${QFACE_BASE_NAME}.cmake) +endfunction() + +if(NOT QT_NO_CREATE_VERSIONLESS_FUNCTIONS) + function(qt_ivigenerator_include) + qt6_ivigenerator_include(${ARGV}) + endfunction() +endif() diff --git a/src/ivivehiclefunctions/CMakeLists.txt b/src/ivivehiclefunctions/CMakeLists.txt index 6ab20cc..4541cb1 100644 --- a/src/ivivehiclefunctions/CMakeLists.txt +++ b/src/ivivehiclefunctions/CMakeLists.txt @@ -1,22 +1,39 @@ # Generated from ivivehiclefunctions.pro. +# special case begin ##################################################################### -## QtIviVehicleFunctions Binary: +## IviVehicleFunctions Module: ##################################################################### -qt_add_executable(QtIviVehicleFunctions - GUI - PUBLIC_LIBRARIES +qt_ivigenerator_generate( + QFACE_SOURCES ivivehiclefunctions.qface + QFACE_FORMAT frontend + QFACE_MODULE_NAME QtIviVehicleFunctions + QFACE_HEADERS_OUTPUT_DIR ${QT_BUILD_DIR}/src/ivivehiclefunctions +) +make_directory(${QT_BUILD_DIR}/src/ivivehiclefunctions) + +qt_add_module(IviVehicleFunctions + LIBRARIES Qt::CorePrivate + Qt::IviCorePrivate + PUBLIC_LIBRARIES + Qt::Core Qt::IviCore + PRIVATE_MODULE_INTERFACE + Qt::CorePrivate Qt::IviCorePrivate ) +qt_ivigenerator_include(IviVehicleFunctions + QFACE_SOURCES ivivehiclefunctions.qface +) + +# special case end + #### Keys ignored in scope 1:.:.:ivivehiclefunctions.pro:<TRUE>: # CMAKE_MODULE_TESTS = "'-'" # OTHER_FILES = "$$PWD/doc/*.qdocconf" "$$PWD/doc/src/*.qdoc" "$$PWD/doc/snippets/*" "$$PWD/doc/images/*" -# QFACE_MODULE_NAME = "QtIviVehicleFunctions" -# QFACE_SOURCES = "ivivehiclefunctions.qface" # QT_FOR_CONFIG = "ivicore" ## Scopes: diff --git a/src/plugins/CMakeLists.txt b/src/plugins/CMakeLists.txt index f2dbb2d..810c302 100644 --- a/src/plugins/CMakeLists.txt +++ b/src/plugins/CMakeLists.txt @@ -3,6 +3,6 @@ if(TARGET Qt::IviMedia) add_subdirectory(ivimedia) endif() -if(TARGET ivivehiclefunctions) +if(TARGET Qt::IviVehicleFunctions) add_subdirectory(ivivehiclefunctions) endif() diff --git a/src/plugins/ivivehiclefunctions/vehiclefunctions_qtro/CMakeLists.txt b/src/plugins/ivivehiclefunctions/vehiclefunctions_qtro/CMakeLists.txt index c97f629..71a3091 100644 --- a/src/plugins/ivivehiclefunctions/vehiclefunctions_qtro/CMakeLists.txt +++ b/src/plugins/ivivehiclefunctions/vehiclefunctions_qtro/CMakeLists.txt @@ -10,12 +10,16 @@ qt_internal_add_plugin(QtIviVehicleFunctionsQtROPlugin PUBLIC_LIBRARIES Qt::Core Qt::IviCore - ivivehiclefunctions + Qt::IviVehicleFunctions +) + +# IVI Generator: +qt_ivigenerator(QtIviVehicleFunctionsQtROPlugin + QFACE_SOURCES ../../../ivivehiclefunctions/ivivehiclefunctions.qface + QFACE_FORMAT backend_qtro + QFACE_MODULE_NAME QtIviVehicleFunctions ) #### Keys ignored in scope 1:.:.:vehiclefunctions_qtro.pro:<TRUE>: # CMAKE_MODULE_TESTS = "'-'" # PLUGIN_EXTENDS = "ivivehiclefunctions" -# QFACE_FORMAT = "backend_qtro" -# QFACE_MODULE_NAME = "QtIviVehicleFunctions" -# QFACE_SOURCES = "../../../ivivehiclefunctions/ivivehiclefunctions.qface" diff --git a/src/plugins/ivivehiclefunctions/vehiclefunctions_simulator/CMakeLists.txt b/src/plugins/ivivehiclefunctions/vehiclefunctions_simulator/CMakeLists.txt index 71ab87d..58c98a0 100644 --- a/src/plugins/ivivehiclefunctions/vehiclefunctions_simulator/CMakeLists.txt +++ b/src/plugins/ivivehiclefunctions/vehiclefunctions_simulator/CMakeLists.txt @@ -10,7 +10,7 @@ qt_internal_add_plugin(QtIviVehicleFunctionsSimulatorPlugin PUBLIC_LIBRARIES Qt::Core Qt::IviCore - ivivehiclefunctions + Qt::IviVehicleFunctions ) # Resources: @@ -27,10 +27,14 @@ qt_internal_add_resource(QtIviVehicleFunctionsSimulatorPlugin "qml" ) +# IVI Generator: +qt_ivigenerator(QtIviVehicleFunctionsSimulatorPlugin + QFACE_SOURCES ../../../ivivehiclefunctions/ivivehiclefunctions.qface + QFACE_FORMAT backend_simulator + QFACE_MODULE_NAME QtIviVehicleFunctions +) + #### Keys ignored in scope 1:.:.:vehiclefunctions_simulator.pro:<TRUE>: # CMAKE_MODULE_TESTS = "'-'" # PLUGIN_EXTENDS = "ivivehiclefunctions" -# QFACE_FORMAT = "backend_simulator" -# QFACE_MODULE_NAME = "QtIviVehicleFunctions" -# QFACE_SOURCES = "../../../ivivehiclefunctions/ivivehiclefunctions.qface" # QML_IMPORT_PATH = "$$OUT_PWD/qml" diff --git a/src/tools/ivigenerator/templates/backend_qtro.yaml b/src/tools/ivigenerator/templates/backend_qtro.yaml index 795d781..0d0fbff 100644 --- a/src/tools/ivigenerator/templates/backend_qtro.yaml +++ b/src/tools/ivigenerator/templates/backend_qtro.yaml @@ -5,6 +5,7 @@ backend_qtro: - "{{module.module_name|lower}}qtroplugin.cpp": "plugin.cpp.tpl" - "{{module.module_name|lower}}.json": "plugin.json" - "{{srcBase|lower}}.pri": "plugin.pri.tpl" + - '{{srcBase|lower}}.cmake': 'CMakeLists.txt.tpl' interface: documents: - '{{interface|lower}}backend.h': 'backend.h.tpl' diff --git a/src/tools/ivigenerator/templates/backend_qtro/CMakeLists.txt.tpl b/src/tools/ivigenerator/templates/backend_qtro/CMakeLists.txt.tpl new file mode 100644 index 0000000..f72276c --- /dev/null +++ b/src/tools/ivigenerator/templates/backend_qtro/CMakeLists.txt.tpl @@ -0,0 +1,19 @@ +find_package(Qt6 COMPONENTS RemoteObjects IviRemoteObjectsHelper) + +target_sources(${CURRENT_TARGET} + PRIVATE +{% for interface in module.interfaces %} + {{interface|lower}}backend.cpp +{% endfor %} + {{module.module_name|lower}}qtroplugin.cpp +) + +qt_add_repc_replica(${CURRENT_TARGET} +{% for interface in module.interfaces %} + {{interface|lower}}.rep +{% endfor %} +) + +### MISSING +# OTHER_FILES += \ +# $$PWD/{{module.module_name|lower}}.json diff --git a/src/tools/ivigenerator/templates/backend_simulator.yaml b/src/tools/ivigenerator/templates/backend_simulator.yaml index bf8dad7..e1a75d2 100644 --- a/src/tools/ivigenerator/templates/backend_simulator.yaml +++ b/src/tools/ivigenerator/templates/backend_simulator.yaml @@ -8,6 +8,7 @@ backend_simulator: - "{{module.module_name|lower}}_simulation_data.json": "common/simulation_data.json.tpl" - "{{module.module_name|lower}}_simulation.qrc": "common/simulation.qrc.tpl" - "{{srcBase|lower}}.pri": "plugin.pri.tpl" + - '{{srcBase|lower}}.cmake': 'CMakeLists.txt.tpl' - "qml/{{module|qml_type|replace('.', '/')}}/simulation/plugins.qmltypes": "common/simulation.qmltypes.tpl" - "qml/{{module|qml_type|replace('.', '/')}}/simulation/qmldir": "common/qmldir.tpl" - "qml/{{module|qml_type|replace('.', '/')}}/plugins.qmltypes": "common/plugins.qmltypes.tpl" diff --git a/src/tools/ivigenerator/templates/backend_simulator/CMakeLists.txt.tpl b/src/tools/ivigenerator/templates/backend_simulator/CMakeLists.txt.tpl new file mode 100644 index 0000000..843a3f4 --- /dev/null +++ b/src/tools/ivigenerator/templates/backend_simulator/CMakeLists.txt.tpl @@ -0,0 +1,13 @@ +target_sources(${CURRENT_TARGET} + PRIVATE +{% for interface in module.interfaces %} + {{interface|lower}}backend.cpp +{% endfor %} + {{module.module_name|lower}}simulatorplugin.cpp + {{module.module_name|lower}}_simulation.qrc +) + +### MISSING +# OTHER_FILES += \ +# $$PWD/{{module.module_name|lower}}.json \ +# $$PWD/{{module.module_name|lower}}_simulation_data.json diff --git a/src/tools/ivigenerator/templates/backend_simulator/plugin.pri.tpl b/src/tools/ivigenerator/templates/backend_simulator/plugin.pri.tpl index 84dbe37..62a76b2 100644 --- a/src/tools/ivigenerator/templates/backend_simulator/plugin.pri.tpl +++ b/src/tools/ivigenerator/templates/backend_simulator/plugin.pri.tpl @@ -42,10 +42,6 @@ ## Do not edit! All changes made to it will be lost. ############################################################################# -{% if 'simulator' in features %} -QT += simulator -{% endif %} - HEADERS += \ {% for interface in module.interfaces %} $$PWD/{{interface|lower}}backend.h \ diff --git a/src/tools/ivigenerator/templates/frontend.yaml b/src/tools/ivigenerator/templates/frontend.yaml index 7aec967..7323d32 100644 --- a/src/tools/ivigenerator/templates/frontend.yaml +++ b/src/tools/ivigenerator/templates/frontend.yaml @@ -8,6 +8,7 @@ frontend: - '{{module.module_name|lower}}modulefactory.h': 'modulefactory.h.tpl' - '{{module.module_name|lower}}modulefactory.cpp': 'modulefactory.cpp.tpl' - '{{srcBase|lower}}.pri': 'module.pri.tpl' + - '{{srcBase|lower}}.cmake': 'CMakeLists.txt.tpl' - 'qml/{{module|qml_type|replace(".", "/")}}/plugins.qmltypes': 'common/plugins.qmltypes.tpl' - "qml/{{module|qml_type|replace('.', '/')}}/designer/{{module.module_name|lower}}.metainfo": "common/designer.metainfo.tpl" - 'qml/{{module|qml_type|replace(".", "/")}}/qmldir': 'common/qmldir.tpl' diff --git a/src/tools/ivigenerator/templates/frontend/CMakeLists.txt.tpl b/src/tools/ivigenerator/templates/frontend/CMakeLists.txt.tpl new file mode 100644 index 0000000..4f39367 --- /dev/null +++ b/src/tools/ivigenerator/templates/frontend/CMakeLists.txt.tpl @@ -0,0 +1,14 @@ +target_compile_definitions(${CURRENT_TARGET} PRIVATE QT_BUILD_{{module|upper|replace('.', '_')|strip_QT}}_LIB) + +target_sources(${CURRENT_TARGET} + PRIVATE +{% for interface in module.interfaces %} + {{interface|lower}}.cpp + {{interface|lower}}backendinterface.cpp +{% endfor %} +{% for struct in module.structs %} + {{struct|lower}}.cpp +{% endfor %} + {{module.module_name|lower}}module.cpp + {{module.module_name|lower}}modulefactory.cpp +) diff --git a/src/tools/ivigenerator/templates/qmlplugin.yaml b/src/tools/ivigenerator/templates/qmlplugin.yaml index 368b4c1..e64398c 100644 --- a/src/tools/ivigenerator/templates/qmlplugin.yaml +++ b/src/tools/ivigenerator/templates/qmlplugin.yaml @@ -3,6 +3,7 @@ qmlplugin: documents: - "plugin.cpp": "plugin.cpp.tpl" - "{{srcBase|lower}}.pri": "module.pri.tpl" + - '{{srcBase|lower}}.cmake': 'CMakeLists.txt.tpl' - "plugins.qmltypes": "common/plugins.qmltypes.tpl" - "designer/{{module.module_name|lower}}.metainfo": "common/designer.metainfo.tpl" - "qmldir": "qmldir_plugin.tpl" diff --git a/src/tools/ivigenerator/templates/qmlplugin/CMakeLists.txt.tpl b/src/tools/ivigenerator/templates/qmlplugin/CMakeLists.txt.tpl new file mode 100644 index 0000000..435b92a --- /dev/null +++ b/src/tools/ivigenerator/templates/qmlplugin/CMakeLists.txt.tpl @@ -0,0 +1,33 @@ +# TODO We probably dont' need this template at all in the cmake case +# Keep it until the templates have been adapted and everything can be done without autogenerating + +if (NOT TARGET ${CURRENT_TARGET}) + qt_add_qml_module(${CURRENT_TARGET} + URI "{{module|qml_type}}" + VERSION "{{module.majorVersion}}.{{module.minorVersion}}" + SKIP_TYPE_REGISTRATION + # TODO remove this again + # This is needed to make the test build work as it would create duplicate qmldir entries + # in the global qml folder + OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + PUBLIC_LIBRARIES + Qt::IviCore + SOURCES + plugin.cpp + ) +else() + target_sources(${CURRENT_TARGET} + PRIVATE + plugin.cpp + ) +endif() + +#set_target_properties(${CURRENT_TARGET} PROPERTIES +# QT_QML_MODULE_VERSION {{module.majorVersion}}.{{module.minorVersion}} +# QT_QML_MODULE_URI {{module|qml_type}} +# QT_QMLTYPES_FILENAME plugins.qmltypes +#) + +### MISSING +# AUX_QML_FILES += $$PWD/qmldir \ +# $$PWD/designer/{{module.module_name|lower}}.metainfo diff --git a/src/tools/ivigenerator/templates/server_qtro.yaml b/src/tools/ivigenerator/templates/server_qtro.yaml index 0c8024e..f397468 100644 --- a/src/tools/ivigenerator/templates/server_qtro.yaml +++ b/src/tools/ivigenerator/templates/server_qtro.yaml @@ -4,6 +4,7 @@ server_qtro: - "core.cpp": "core.cpp.tpl" - "core.h": "core.h.tpl" - "{{srcBase|lower}}.pri": "server.pri.tpl" + - '{{srcBase|lower}}.cmake': 'CMakeLists.txt.tpl' interface: documents: - "{{interface|lower}}.rep": "common/interface.rep.tpl" diff --git a/src/tools/ivigenerator/templates/server_qtro/CMakeLists.txt.tpl b/src/tools/ivigenerator/templates/server_qtro/CMakeLists.txt.tpl new file mode 100644 index 0000000..963d7aa --- /dev/null +++ b/src/tools/ivigenerator/templates/server_qtro/CMakeLists.txt.tpl @@ -0,0 +1,13 @@ +find_package(Qt6 COMPONENTS RemoteObjects) + +target_sources(${CURRENT_TARGET} + PRIVATE + core.cpp +) + +qt_add_repc_source(${CURRENT_TARGET} +{% for interface in module.interfaces %} + {{interface|lower}}.rep +{% endfor %} +) + diff --git a/src/tools/ivigenerator/templates/server_qtro_simulator.yaml b/src/tools/ivigenerator/templates/server_qtro_simulator.yaml index 5563460..5a8dabe 100644 --- a/src/tools/ivigenerator/templates/server_qtro_simulator.yaml +++ b/src/tools/ivigenerator/templates/server_qtro_simulator.yaml @@ -4,6 +4,7 @@ server_qtro_simulator: - "core.cpp": "core.cpp.tpl" - "core.h": "core.h.tpl" - "{{srcBase|lower}}.pri": "server.pri.tpl" + - '{{srcBase|lower}}.cmake': 'CMakeLists.txt.tpl' - "main.cpp": "main.cpp.tpl" - "{{module.module_name|lower}}_simulation.qml": "common/module_simulation.qml.tpl" - "{{module.module_name|lower}}_simulation_data.json": "common/simulation_data.json.tpl" diff --git a/src/tools/ivigenerator/templates/server_qtro_simulator/CMakeLists.txt.tpl b/src/tools/ivigenerator/templates/server_qtro_simulator/CMakeLists.txt.tpl new file mode 100644 index 0000000..7398ad1 --- /dev/null +++ b/src/tools/ivigenerator/templates/server_qtro_simulator/CMakeLists.txt.tpl @@ -0,0 +1,23 @@ +find_package(Qt6 COMPONENTS RemoteObjects IviRemoteObjectsHelper) + +target_sources(${CURRENT_TARGET} + PRIVATE +{% for interface in module.interfaces %} + {{interface|lower}}backend.cpp + {{interface|lower}}adapter.cpp +{% endfor %} + core.cpp + main.cpp + {{module.module_name|lower}}_simulation.qrc +) + +qt_add_repc_source(${CURRENT_TARGET} +{% for interface in module.interfaces %} + {{interface|lower}}.rep +{% endfor %} +) + +### MISSING +# OTHER_FILES += \ +# $$PWD/{{module.module_name|lower}}.json \ +# $$PWD/{{module.module_name|lower}}_simulation_data.json diff --git a/src/tools/ivigenerator/templates/test.yaml b/src/tools/ivigenerator/templates/test.yaml index fbd2801..70bec2d 100644 --- a/src/tools/ivigenerator/templates/test.yaml +++ b/src/tools/ivigenerator/templates/test.yaml @@ -2,6 +2,7 @@ test: module: documents: - "{{srcBase|lower}}.pri": "module.pri.tpl" + - '{{srcBase|lower}}.cmake': 'CMakeLists.txt.tpl' - 'main.cpp': 'main.cpp.tpl' interface: documents: diff --git a/src/tools/ivigenerator/templates/test/CMakeLists.txt.tpl b/src/tools/ivigenerator/templates/test/CMakeLists.txt.tpl new file mode 100644 index 0000000..4348529 --- /dev/null +++ b/src/tools/ivigenerator/templates/test/CMakeLists.txt.tpl @@ -0,0 +1,7 @@ +target_sources(${CURRENT_TARGET} + PRIVATE +{% for interface in module.interfaces %} + tst_{{interface|lower}}.cpp +{% endfor %} + main.cpp +) diff --git a/src/tools/vehiclefunctions-simulation-server/CMakeLists.txt b/src/tools/vehiclefunctions-simulation-server/CMakeLists.txt index 54cd9f5..549def5 100644 --- a/src/tools/vehiclefunctions-simulation-server/CMakeLists.txt +++ b/src/tools/vehiclefunctions-simulation-server/CMakeLists.txt @@ -34,10 +34,14 @@ qt_add_resource(${target_name} "qml" ) +# IVI Generator: +qt_ivigenerator(ivivehiclefunctions-simulation-server + QFACE_SOURCES ../../ivivehiclefunctions/ivivehiclefunctions.qface + QFACE_FORMAT server_qtro_simulator + QFACE_MODULE_NAME QtIviVehicleFunctions +) + #### Keys ignored in scope 1:.:.:vehiclefunctions-simulation-server.pro:<TRUE>: -# QFACE_FORMAT = "server_qtro_simulator" -# QFACE_MODULE_NAME = "QtIviVehicleFunctions" -# QFACE_SOURCES = "../../ivivehiclefunctions/ivivehiclefunctions.qface" # QML_IMPORT_PATH = "$$OUT_PWD/qml" # QT_FOR_CONFIG = "ivicore" # TEMPLATE = "app" |