Building Qt 6.2 sub-modules

Extending the Qt 6.2 base install with various extra features from sub-modules.

Sun, 12/04/2022 - 15:09
Changed
Sun, 12/04/2022 - 15:11

Building Qt 6.2 submodules

Qt submodules contains various extra features not included in the base package, for example QtQuick, support for Wayland, CAN-BUS and so forth. For most parts, building the submodules is quite straightforward:

  1. download the source for the submodule you require
  2. extract the archive
    tar xf submodule-version.tar.xz
     
  3. configure sources
    /opt/Qt/6.2.4-armv7l/bin/qt-configure-module .
     
  4. build the sources
    /opt/cmake/bin/cmake --build . --parallel 4
     
  5. install the result
    /opt/cmake/bin/cmake --install .
     

The only thing you need to keep in mind is to build them in the correct order to satisfy various dependencies. The following (incomplete at this time) table describes the required dependency submodules and any development packages that are needed and also the build time on various systems.

 

Development and Qt Submodule dependencies
Module Required submodules Development packages required Description

Build time

Pi 4

Build time

Pine 64

Build time

Pi 3

Build time

AMD Ryzen 3600X

qtbase     Qt core, start with this ~50m 184m    
qtimageformats   libmng-dev libjasper-dev Support for loading various extra image formats        
qtsvg     Support for SVG vector graphics        
qtshadertools     Tools for the cross-platform Qt shader pipeline     ~12m  
qttools qtdeclarative

QDoc requires clang to be installed (See section about documentation above):

clang-9 libclang-9-dev

Various Qt tools:

       
qtserialbus     Serial bus (CAN bus, ModBus) support ~2m      
qtserialport qtserialbus   Serial port support < 1m      
qtlocation qtserialport   Positioning (GPS) and location (Map) services < 3m      
qtdeclarative qtshadertools   Qt Quick / QML ~85m     ~6m
qtmultimedia qtdeclarative

For gstreamer backend:
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad libgstreamer-plugins-bad1.0-dev gstreamer1.0-pulseaudio gstreamer1.0-tools gstreamer1.0-alsa

For pulseaudio support:
pulseaudio libpulse-dev

For plain ALSA:
libasound2-dev

Multimedia (audio/video) support

  • Audio playback/recording
  • Video playback
  • Camera picture/video
       
qtsensors qtmultimedia   Support for various device sensors        
qtnetworkauth     Network authentication protocol support (OAuth) < 1m      
qtconnectivity   bluez libbluetooth-dev Bluetooth and NFC connectivity support        
qtwebsockets qtdeclarative   Websockets support ~1m      
qtwebchannel qtwebsockets            
qtcharts qtdeclarative   Charting controls ~10m      
qtwayland   libwayland-dev Wayland support ~10m      
qtvirtualkeyboard qtsvg   Provides on-screen keyboard ~4m      
qtwebengine qtdeclarative flex bison gperf libre2-dev libnss3-dev nodejs libdrm-dev libxdamage-dev libsnappy-dev WebEngine.
Has build issues with old gcc versions.
N/A      
qt5compat     Unsupported Qt 5 compatibility code. ~2m      

TL;DR Building submodules

You can quickly configure, build and install the Qt submodules with (why not do it in simple for loop, I'll leave that as an excerise for the reader!):

/opt/Qt/6.2.4-armv7l/bin/qt-configure-module . && /opt/cmake/bin/cmake --build . --parallel 4 && /opt/cmake/bin/cmake --install .