Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. How to create recipe for QT quick app in yocto
Forum Updated to NodeBB v4.3 + New Features

How to create recipe for QT quick app in yocto

Scheduled Pinned Locked Moved Solved Mobile and Embedded
11 Posts 3 Posters 1.6k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • J Offline
    J Offline
    Juan Gomez
    wrote on last edited by
    #1

    Hi there QT community!

    I create a QT quick app in QT Creator with CMake using qt 6.7.3.

    Now, I would like to create an embedded Linux image with this app for the stm32mp157f-dk2.
    I'm using a VM with Ubuntu 22.04 and set up the yocto directory with the v6.7.3.xml manifest. Then, I added the meta-st layer.

    Then, inside my custom layer, I created a recipe that looks like this:

    SUMMARY = "This is the GUI for Hespect Software medical device"
    DESCRIPTION = "Recipe created by bitbake-layers"
    LICENSE = "CLOSED"
    SECTION = "Mysection"
    
    DEPENDS += "qtbase"
    RDEPENDS_${PN} += "qtwayland"
    
    SRC_URI = "file://Backendsensors.h"
    SRC_URI = "file://Backendsensors.cpp"
    SRC_URI = "file://brushfactory.h"
    SRC_URI = "file://brushfactory.cpp"
    SRC_URI = "file://main.cpp"
    SRC_URI = "file://Main.qml"
    SRC_URI = "file://CMakeLists.txt"
                
    S = "${WORKDIR}"
    
    do_compile () {
        cmake -DCMAKE_TOOLCHAIN_FILE=${STAGING_DIR_NATIVE}/usr/share/cmake/OEToolchain.cmake ${S}
        make
    }
    
    do_install () {		
        install -d ${D}/usr/share/mygui/
        install -m 0644 ${S}/assets/images/* ${D}/usr/share/mygui/assets/images/
        install -m 0644 ${S}/Backendsensors.h ${D}/usr/include/
        install -m 0644 ${S}/Backendsensors.cpp ${D}/usr/src/mygui/
        install -m 0644 ${S}/brushfactory.h ${D}/usr/include/
        install -m 0644 ${S}/brushfactory.cpp ${D}/usr/src/mygui/
        install -m 0644 ${S}/main.cpp ${D}/usr/src/mygui/
        install -m 0644 ${S}/Main.qml ${D}/usr/share/mygui/
        install -m 0755 ${B}/main ${D}/usr/bin/
    }
    

    These are the files inside the "file" folder

    Backendsensors.cpp 
    assets/    
    Backendsensors.h
    brushfactory.cpp
    main.cpp
    CMakeLists.txt     
    Main.qml            
    brushfactory.h
    

    I tried building this recipe with "bitbake mygui" but I got the error

    ERROR: mygui-0-r0 do_compile: ExecutionError('/home/vboxuser/yocto/build-stm32mp15-disco/tmp/work/cortexa7t2hf-neon-vfpv4-poky-linux-gnueabi/mygui/0/temp/run.do_compile.8991', 127, None, None)
    ERROR: Logfile of failure stored in: /home/vboxuser/yocto/build-stm32mp15-disco/tmp/work/cortexa7t2hf-neon-vfpv4-poky-linux-gnueabi/mygui/0/temp/log.do_compile.8991
    Log data follows:
    | DEBUG: Executing shell function do_compile
    | /home/vboxuser/yocto/build-stm32mp15-disco/tmp/work/cortexa7t2hf-neon-vfpv4-poky-linux-gnueabi/mygui/0/temp/run.do_compile.8991: 141: cmake: not found
    | WARNING: exit code 127 from a shell command.
    ERROR: Task (/home/vboxuser/yocto/build-stm32mp15-disco/meta-custom/recipes-software/myGUI/mygui_0_1.bb:do_compile) failed with exit code '1'
    NOTE: Tasks Summary: Attempted 3568 tasks of which 3567 didn't need to be rerun and 1 failed.
    
    Summary: 1 task failed:
      /home/vboxuser/yocto/build-stm32mp15-disco/meta-custom/recipes-software/myGUI/mygui_0_1.bb:do_compile
    Summary: There was 1 ERROR message, returning a non-zero exit code
    

    When I call cmake --version I get 3.22, so it's there.

    Any help is sincerely appreciated :)

    Ronel_qtmasterR 1 Reply Last reply
    0
    • J Offline
      J Offline
      Juan Gomez
      wrote on last edited by
      #10

      I was finally able to bitbake the recipe :)
      The problem was that I needed to use SRC_URI +=, instead or SRC_URI =

      Then, I read on another post that qt6-cmake add the assets without needing to explicitly tell it to do it, but I had to add them with SRC_URI =+ because they weren't being found.

      Then, I had a typo and that was it, the recipe bake successfully :)

      1 Reply Last reply
      1
      • J Juan Gomez

        Hi there QT community!

        I create a QT quick app in QT Creator with CMake using qt 6.7.3.

        Now, I would like to create an embedded Linux image with this app for the stm32mp157f-dk2.
        I'm using a VM with Ubuntu 22.04 and set up the yocto directory with the v6.7.3.xml manifest. Then, I added the meta-st layer.

        Then, inside my custom layer, I created a recipe that looks like this:

        SUMMARY = "This is the GUI for Hespect Software medical device"
        DESCRIPTION = "Recipe created by bitbake-layers"
        LICENSE = "CLOSED"
        SECTION = "Mysection"
        
        DEPENDS += "qtbase"
        RDEPENDS_${PN} += "qtwayland"
        
        SRC_URI = "file://Backendsensors.h"
        SRC_URI = "file://Backendsensors.cpp"
        SRC_URI = "file://brushfactory.h"
        SRC_URI = "file://brushfactory.cpp"
        SRC_URI = "file://main.cpp"
        SRC_URI = "file://Main.qml"
        SRC_URI = "file://CMakeLists.txt"
                    
        S = "${WORKDIR}"
        
        do_compile () {
            cmake -DCMAKE_TOOLCHAIN_FILE=${STAGING_DIR_NATIVE}/usr/share/cmake/OEToolchain.cmake ${S}
            make
        }
        
        do_install () {		
            install -d ${D}/usr/share/mygui/
            install -m 0644 ${S}/assets/images/* ${D}/usr/share/mygui/assets/images/
            install -m 0644 ${S}/Backendsensors.h ${D}/usr/include/
            install -m 0644 ${S}/Backendsensors.cpp ${D}/usr/src/mygui/
            install -m 0644 ${S}/brushfactory.h ${D}/usr/include/
            install -m 0644 ${S}/brushfactory.cpp ${D}/usr/src/mygui/
            install -m 0644 ${S}/main.cpp ${D}/usr/src/mygui/
            install -m 0644 ${S}/Main.qml ${D}/usr/share/mygui/
            install -m 0755 ${B}/main ${D}/usr/bin/
        }
        

        These are the files inside the "file" folder

        Backendsensors.cpp 
        assets/    
        Backendsensors.h
        brushfactory.cpp
        main.cpp
        CMakeLists.txt     
        Main.qml            
        brushfactory.h
        

        I tried building this recipe with "bitbake mygui" but I got the error

        ERROR: mygui-0-r0 do_compile: ExecutionError('/home/vboxuser/yocto/build-stm32mp15-disco/tmp/work/cortexa7t2hf-neon-vfpv4-poky-linux-gnueabi/mygui/0/temp/run.do_compile.8991', 127, None, None)
        ERROR: Logfile of failure stored in: /home/vboxuser/yocto/build-stm32mp15-disco/tmp/work/cortexa7t2hf-neon-vfpv4-poky-linux-gnueabi/mygui/0/temp/log.do_compile.8991
        Log data follows:
        | DEBUG: Executing shell function do_compile
        | /home/vboxuser/yocto/build-stm32mp15-disco/tmp/work/cortexa7t2hf-neon-vfpv4-poky-linux-gnueabi/mygui/0/temp/run.do_compile.8991: 141: cmake: not found
        | WARNING: exit code 127 from a shell command.
        ERROR: Task (/home/vboxuser/yocto/build-stm32mp15-disco/meta-custom/recipes-software/myGUI/mygui_0_1.bb:do_compile) failed with exit code '1'
        NOTE: Tasks Summary: Attempted 3568 tasks of which 3567 didn't need to be rerun and 1 failed.
        
        Summary: 1 task failed:
          /home/vboxuser/yocto/build-stm32mp15-disco/meta-custom/recipes-software/myGUI/mygui_0_1.bb:do_compile
        Summary: There was 1 ERROR message, returning a non-zero exit code
        

        When I call cmake --version I get 3.22, so it's there.

        Any help is sincerely appreciated :)

        Ronel_qtmasterR Offline
        Ronel_qtmasterR Offline
        Ronel_qtmaster
        wrote on last edited by
        #2

        @Juan-Gomez check this https://stackoverflow.com/questions/68895012/how-to-build-simple-qt-application-using-yocto/68896403#68896403

        1 Reply Last reply
        0
        • J Offline
          J Offline
          Juan Gomez
          wrote on last edited by
          #3

          Hi @Ronel_qtmaster , thanks for the quick reply.

          My project is based on CMake, so I don't have the ".pro" file.

          Also, I'm using meta-qt6 which seems to be the last release. Is that a problem or should I use meta-qt5 with QMake?

          1 Reply Last reply
          0
          • SGaistS Offline
            SGaistS Offline
            SGaist
            Lifetime Qt Champion
            wrote on last edited by
            #4

            Hi,

            From a very quick search, aren't you missing something like inherit cmake in your recipe ?

            You have to tell Yocto that you require this tool to build your application.

            Interested in AI ? www.idiap.ch
            Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

            1 Reply Last reply
            0
            • J Offline
              J Offline
              Juan Gomez
              wrote on last edited by
              #5

              Hi @SGaist , I missed "inherit qt6-cmake" and that seems to help because the build continued. At the end of the build I had a qtchart problem because it wasn't being found but it seems I fixed it in the depends.

              Now, it seems my build doesn't find the "main.cpp" even though it's in the "file" folder.

              CMake Error at recipe-sysroot/usr/lib/cmake/Qt6Core/Qt6CoreMacros.cmake:634 (add_executable):
              |   Cannot find source file:
              | 
              |     main.cpp
              | 
              |   Tried extensions .c .C .c++ .cc .cpp .cxx .cu .mpp .m .M .mm .ixx .cppm
              |   .ccm .cxxm .c++m .h .hh .h++ .hm .hpp .hxx .in .txx .f .F .for .f77 .f90
              |   .f95 .f03 .hip .ispc
              | Call Stack (most recent call first):
              |   recipe-sysroot/usr/lib/cmake/Qt6Core/Qt6CoreMacros.cmake:575 (_qt_internal_create_executable)
              |   recipe-sysroot/usr/lib/cmake/Qt6Core/Qt6CoreMacros.cmake:875 (qt6_add_executable)
              |   CMakeLists.txt:11 (qt_add_executable)
              | 
              | 
              | -- Generating done (0.0s)
              | CMake Warning:
              |   Manually-specified variables were not used by the project:
              | 
              |     CMAKE_EXPORT_NO_PACKAGE_REGISTRY
              |     FETCHCONTENT_FULLY_DISCONNECTED
              |     INSTALL_ARCHDATADIR
              |     INSTALL_BINDIR
              |     INSTALL_DATADIR
              |     INSTALL_DESCRIPTIONSDIR
              |     INSTALL_DOCDIR
              |     INSTALL_EXAMPLESDIR
              |     INSTALL_INCLUDEDIR
              |     INSTALL_LIBDIR
              |     INSTALL_LIBEXECDIR
              |     INSTALL_MKSPECSDIR
              |     INSTALL_PLUGINSDIR
              |     INSTALL_QMLDIR
              |     INSTALL_SYSCONFDIR
              |     INSTALL_TESTSDIR
              |     INSTALL_TRANSLATIONSDIR
              |     LIB_SUFFIX
              |     PYTHON_EXECUTABLE
              |     Python3_EXECUTABLE
              |     Python_EXECUTABLE
              |     QT_BUILD_INTERNALS_NO_FORCE_SET_INSTALL_PREFIX
              |     QT_CMAKE_DEBUG_EXTEND_TARGET
              |     QT_FORCE_BUILD_TOOLS
              |     __harfbuzz_broken_config_file
              | 
              | 
              | CMake Generate step failed.  Build files cannot be regenerated correctly.
              | WARNING: exit code 1 from a shell command.
              ERROR: Task (/home/vboxuser/yocto/build-stm32mp15-disco/meta-custom/recipes-software/myGUI/mygui_0_1.bb:do_configure) failed with exit code '1'
              NOTE: Tasks Summary: Attempted 3853 tasks of which 3829 didn't need to be rerun and 1 failed.
              NOTE: Build completion summary:
              NOTE:   do_populate_sysroot: 0.0% sstate reuse(0 setscene, 1 scratch)
              NOTE:   do_deploy_source_date_epoch: 0.0% sstate reuse(0 setscene, 2 scratch)
              NOTE:   do_create_spdx: 0.0% sstate reuse(0 setscene, 1 scratch)
              NOTE:   do_create_runtime_spdx: 0.0% sstate reuse(0 setscene, 1 scratch)
              NOTE:   do_package_qa: 0.0% sstate reuse(0 setscene, 1 scratch)
              NOTE:   do_recipe_qa: 0.0% sstate reuse(0 setscene, 1 scratch)
              NOTE:   do_package: 0.0% sstate reuse(0 setscene, 1 scratch)
              NOTE:   do_packagedata: 0.0% sstate reuse(0 setscene, 1 scratch)
              NOTE:   do_package_write_ipk: 99.0% sstate reuse(95 setscene, 1 scratch)
              NOTE:   do_populate_lic: 0.0% sstate reuse(0 setscene, 1 scratch)
              
              Summary: 1 task failed:
                /home/vboxuser/yocto/build-stm32mp15-disco/meta-custom/recipes-software/myGUI/mygui_0_1.bb:do_configure
              Summary: There was 1 WARNING message.
              Summary: There was 1 ERROR message, returning a non-zero exit code.
              
              1 Reply Last reply
              0
              • SGaistS Offline
                SGaistS Offline
                SGaist
                Lifetime Qt Champion
                wrote on last edited by
                #6

                Is it the only file it's complaining about ?

                Interested in AI ? www.idiap.ch
                Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                1 Reply Last reply
                0
                • J Offline
                  J Offline
                  Juan Gomez
                  wrote on last edited by
                  #7

                  Hi @SGaist , I tried a clean build to fix the qtcharts and the "inherit qt6-cmake" and it results on the same output, but it doesn't matter the order of the SRC_URI, it complains about the "CMakeLists.txt" file

                  | DEBUG: Python function extend_recipe_sysroot finished
                  | DEBUG: Executing shell function do_configure
                  | CMake Warning:
                  |   Ignoring extra path from command line:
                  | 
                  |    "/home/vboxuser/yocto/build-stm32mp15-disco/tmp/work/cortexa7t2hf-neon-vfpv4-poky-linux-gnueabi/mygui/0"
                  | 
                  | 
                  | CMake Error: The source directory "/home/vboxuser/yocto/build-stm32mp15-disco/tmp/work/cortexa7t2hf-neon-vfpv4-poky-linux-gnueabi/mygui/0" does not appear to contain CMakeLists.txt.
                  | Specify --help for usage, or press the help button on the CMake GUI.
                  | WARNING: exit code 1 from a shell command.
                  ERROR: Task (/home/vboxuser/yocto/build-stm32mp15-disco/meta-custom/recipes-software/myGUI/mygui_0_1.bb:do_configure) failed with exit code '1'
                  NOTE: Tasks Summary: Attempted 3857 tasks of which 3855 didn't need to be rerun and 1 failed.
                  NOTE: Build completion summary:
                  NOTE:   do_create_spdx: 0.0% sstate reuse(0 setscene, 1 scratch)
                  
                  Summary: 1 task failed:
                    /home/vboxuser/yocto/build-stm32mp15-disco/meta-custom/recipes-software/myGUI/mygui_0_1.bb:do_configure
                  Summary: There was 1 ERROR message, returning a non-zero exit code.
                  

                  The file is under recipes/files/CMakeLists.txt.
                  I'm using "file://CMakeLists.txt" because I saw it on a youtube video where it's working. Notice the difference between file and files. But, even if I use files in SRC_URI it doesn't work

                  1 Reply Last reply
                  0
                  • SGaistS Offline
                    SGaistS Offline
                    SGaist
                    Lifetime Qt Champion
                    wrote on last edited by
                    #8

                    Can you show your CMakeLists.txt ?

                    Interested in AI ? www.idiap.ch
                    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                    1 Reply Last reply
                    0
                    • J Offline
                      J Offline
                      Juan Gomez
                      wrote on last edited by
                      #9

                      It's the same one created by the QT creator. I can run the app in qt Creator so the file works in CMake
                      CMakeLists.txt

                      cmake_minimum_required(VERSION 3.16)
                      
                      project(medical-device-qt VERSION 0.1 LANGUAGES CXX)
                      
                      set(CMAKE_CXX_STANDARD_REQUIRED ON)
                      
                      find_package(Qt6 6.5 REQUIRED COMPONENTS Quick Charts)
                      
                      qt_standard_project_setup(REQUIRES 6.5)
                      
                      qt_add_executable(appmedical-device-qt
                          main.cpp
                          Backendsensors.h Backendsensors.cpp
                          brushfactory.h brushfactory.cpp
                      )
                      
                      qt_add_qml_module(appmedical-device-qt
                          URI medical-device-qt
                          VERSION 1.0
                          QML_FILES
                              Main.qml
                      
                          RESOURCES
                              assets/images/battery-full.svg
                              assets/images/battery-mid.svg
                              assets/images/battery-low.svg
                              assets/images/rss-full.svg
                              assets/images/rss-mid.svg
                              assets/images/rss-low.svg
                              assets/images/signal-full.svg
                              assets/images/signal-mid.svg
                              assets/images/signal-low.svg
                      
                          SOURCES
                              Backendsensors.h Backendsensors.cpp
                              brushfactory.h brushfactory.cpp
                      )
                      
                      # Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
                      # If you are developing for iOS or macOS you should consider setting an
                      # explicit, fixed bundle identifier manually though.
                      set_target_properties(appmedical-device-qt PROPERTIES
                      #    MACOSX_BUNDLE_GUI_IDENTIFIER com.example.appmedical-device-qt
                          MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
                          MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
                          MACOSX_BUNDLE TRUE
                          WIN32_EXECUTABLE TRUE
                      )
                      
                      target_link_libraries(appmedical-device-qt
                          PRIVATE Qt6::Quick
                          Qt6::Charts
                      )
                      
                      include(GNUInstallDirs)
                      install(TARGETS appmedical-device-qt
                          BUNDLE DESTINATION .
                          LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
                          RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
                      )
                      

                      mygui_0.1.bb

                      SUMMARY = "This is the GUI for Hespect Software medical device"
                      DESCRIPTION = "Recipe created by bitbake-layers"
                      LICENSE = "CLOSED"
                      SECTION = "Mysection"
                      
                      DEPENDS += " qtbase \
                                   qtdeclarative-native \
                                   qtdeclarative \
                                   qtquick3d \
                                   qtcharts"
                                   
                      RDEPENDS_${PN} += "qtwayland"
                      
                      EXTRA_OECMAKE += "-DCMAKE_PREFIX_PATH=${STAGING_DIR_HOST}${prefix}"
                      
                      SRC_URI = "file://main.cpp"
                      SRC_URI = "file://CMakeLists.txt"
                      SRC_URI = "file://CMakeLists.txt.user"
                      SRC_URI = "file://Backendsensors.h"
                      SRC_URI = "file://Backendsensors.cpp"
                      SRC_URI = "file://brushfactory.h"
                      SRC_URI = "file://brushfactory.cpp"
                      SRC_URI = "file://Main.qml"
                      
                                  
                      S = "${WORKDIR}"
                      
                      inherit qt6-cmake
                      inherit populate_sdk_qt6
                      
                      1 Reply Last reply
                      0
                      • J Offline
                        J Offline
                        Juan Gomez
                        wrote on last edited by
                        #10

                        I was finally able to bitbake the recipe :)
                        The problem was that I needed to use SRC_URI +=, instead or SRC_URI =

                        Then, I read on another post that qt6-cmake add the assets without needing to explicitly tell it to do it, but I had to add them with SRC_URI =+ because they weren't being found.

                        Then, I had a typo and that was it, the recipe bake successfully :)

                        1 Reply Last reply
                        1
                        • J Juan Gomez has marked this topic as solved on
                        • SGaistS Offline
                          SGaistS Offline
                          SGaist
                          Lifetime Qt Champion
                          wrote on last edited by
                          #11

                          Nice ! Thanks for the feedback ! :-)
                          Happy coding

                          Interested in AI ? www.idiap.ch
                          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                          1 Reply Last reply
                          0
                          • J Juan Gomez referenced this topic on

                          • Login

                          • Login or register to search.
                          • First post
                            Last post
                          0
                          • Categories
                          • Recent
                          • Tags
                          • Popular
                          • Users
                          • Groups
                          • Search
                          • Get Qt Extensions
                          • Unsolved