User:Joger

From Qt Wiki
Revision as of 12:03, 12 February 2024 by Joger (talk | contribs)
Jump to navigation Jump to search

My build setup

OS: Windows 11 with dev drive mounted on D: (Using a dev drive makes builds faster when using Windows Defender antivirus)

Qt source tree: D:\qt\qt6\

Build directory containing all builds: D:\qt\build\

Main (host) build for dev branch: D:\qt\build\dev\

Visual Studio 2022 (MSVC)

Don't have perl in path as it can cause hard to understand build failures

Have cmake in path

Developer setup for Qt Multimedia

Initializing Qt Repo for Qt 6 with necessary dependencies for QtMultimedia

This init-repository initializes the necessary Qt submodules for working with QtMultimedia. By only initializing the repository with the necessary modules, the main Qt build is faster than doing a full build.

C:\Strawberry\perl\bin\perl init-repository --module-subset=qtbase,qtquick3d,qtdeclarative,qtsvg,qtshadertools,qtmultimedia,qtrepotools -f --codereview-username johanseg

Building FFmpeg on Windows

  1. Install 7-zip from provisioning: Run qt6\coin\provisioning\common\windows\install-sevenzip.ps1 as admin
    • Needed by provisioning script for FFmpeg to unzip downloaded FFmpeg
  2. Install msys2 from provisioning: Run qt6\coin\provisioning\common\windows\install-msys2.ps1 as admin
    • Needed by provisioning script for FFmpeg because FFmpeg requires tools from msys to configure
  3. Install FFmpeg from provisioning: Run qt6\coin\provisioning\common\windows\install-ffmpeg.ps1 as admin
    • Since I only need MSVC build, I edit the install-ffmpeg.ps1 first, to comment out unnecessary versions
    • This sets FFMPEG_DIR=C:\FFmpeg-n6.0\build\msvc\installed\

Configure Qt main build

I build Qt as stand-alone module to make builds run faster when working in QtMultimedia. But first, we need to build the necessary dependencies. I do this from command line with D:\qt\build\dev as current directory:

..\..\qt6\configure.bat -debug -developer-build -submodules QtMultimedia -nomake tests -nomake examples -- -DFFMPEG_DIR=C:\FFmpeg-n6.0\build\msvc\installed --fresh & ninja

This is a developer build, and we can use D:\qt\build\dev\qtbase\ as CMAKE_PREFIX_PATH when developing other Qt modules. By configuring this way, QtMultimedia is built, which is not strictly necessary since I develop QtMultimedia in a separate build tree, but it is an easy way to make sure all QtMultimedia dependencies are built.

Configure Qt multimedia

I configure QtMultimedia using a CMakeUserPresets.json file that is located in D:\qt\qt6\qtmultimedia instead of using a configure script. This way, I can open the D:\qt\qt6\qtmultimedia as a folder in Visual Studio and configure it from there.

The benefit of using CMakeUserPresets.json is that Visual Studio knows how to debug the tests and examples.

{
    "version": 5,
    "configurePresets": [
        {
            "name": "msvc-64",
            "hidden": true,
            "condition": {
                "type": "equals",
                "lhs": "${hostSystemName}",
                "rhs": "Windows"
            },
            "generator": "Ninja",
            "cacheVariables": {
                "CMAKE_CXX_COMPILER": "cl.exe",
                "CMAKE_C_COMPILER": "cl.exe"
            },
            "toolset": {
                "value": "v143,host=x64",
                "strategy": "external"
            },
            "architecture": {
                "value": "x64",
                "strategy": "external"
            }
        },
        {
            "name": "Debug",
            "hidden": true,
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Debug"
            }
        },
        {
            "name": "qt6-dev-base",
            "hidden": true,
            "cacheVariables": {
                "FEATURE_developer_build": true,
                "BUILD_qttools": false,
                "BUILD_qtdoc": false,
                "BUILD_qttranslations": false,
                "QT_BUILD_EXAMPLES": false,
                "QT_BUILD_EXAMPLES_BY_DEFAULT": false,
                "QT_BUILD_EXAMPLES_AS_EXTERNAL": false,
                "QT_BUILD_TESTS": false,
                "QT_BUILD_TESTS_BY_DEFAULT": false
            },
            "environment": {
                "PATH": "D:/qt/build/dev/qtbase/bin;$penv{PATH}"
            }
        },
        {
            "name": "qt6-dev-debug",
            "hidden": true,
            "inherits": [
                "qt6-dev-base",
                "msvc-64",
                "Debug"
            ],
            "cacheVariables": {
                "CMAKE_PREFIX_PATH": "D:/qt/build/dev/qtbase/"
            },
            "environment": {
                "PATH": "D:/qt/build/dev/qtbase/bin;$penv{PATH}"
            }
        },
        {
            "name": "QtMultimedia",
            "inherits": "qt6-dev-debug",
            "binaryDir": "D:/qt/build/qtmultimedia/",
            "cacheVariables": {
                "QT_BUILD_EXAMPLES": true,
                "QT_BUILD_EXAMPLES_BY_DEFAULT": true,
                "QT_BUILD_TESTS": true,
                "QT_BUILD_TESTS_BY_DEFAULT": true,
                "QT_BUILD_EXAMPLES_AS_EXTERNAL": false,
                "QT_BUILD_MANUAL_TESTS": false,
                "QT_DEPLOY_FFMPEG": true,
                "FEATURE_ffmpeg": true,
                "FFMPEG_DIR": "C:\\ffmpeg-n6.0\\build\\msvc\\installed"
            }
        }
    ],
    "buildPresets": [
        {
            "name": "Build-Qt-Multimedia-MSVC-Debug-64",
            "displayName": "Build Qt Multimedia MSVC Debug 64",
            "configurePreset": "QtMultimedia"
        }
    ]
}

Setting up Qt Creator for Android

  1. Install Qt Creator with Android option
  2. In Creator preferences, install Adoptium JDK (C:\Program Files\Eclipse Adoptium\jdk-17.0.10.7-hotspot)
  3. Android SDK location: C:\dev\android
  4. Select Android NDK 26.1.10909125 and make default
  5. Oppenssl location: C:\dev\android\android_openssl
  6. Verify Android settings:

Android settings 26.png

  1. Add Android device for ABI x86_64, OS Version 13.0 ("Tiramisu") (SDK 33)

Android Emulator.png

Building Qt for Android on Windows

Main build root Android: D:\qt\build\android


Configure Qt for Android in build root using host build

cmake -DQT_BUILD_SUBMODULES=QtMultimedia -DQT_HOST_PATH=D:/qt/build/dev/qtbase -DQT_BUILD_TESTS_BY_DEFAULT=OFF -DQT_BUILD_TESTS=ON -DANDROID_PLATFORM=android-33 -DQT_USE_TARGET_ANDROID_BUILD_DIR=TRUE -DQT_QMAKE_TARGET_MKSPEC=android-clang -DANDROID_SDK_ROOT=C:/dev/android -DANDROID_NDK_ROOT=C:/dev/android/ndk/26.1.10909125 -DANDROID_ABI=x86_64 -DQT_BUILD_EXAMPLES=FALSE -DCMAKE_BUILD_TYPE=Debug -DINPUT_developer_build=yes --fresh -G Ninja D:/qt/qt6 & ninja

Main build directory for Qt Multimedia on Android: D:\qt\build\androidmultimedia Configure Qt Multimedia for Android

cmake-DCMAKE_TOOLCHAIN_FILE=D:\qt\build\android\qtbase\lib\cmake\qt6\qt.toolchain.cmake -G Ninja  -DQT_USE_ORIGINAL_COMPILER=ON -DQT_BUILD_TESTS=ON -DQT_BUILD_TESTS_BY_DEFAULT=OFF D:/qt/qt6/qtmultimedia & ninja

Importing Qt Multimedia build into QtCreator

  1. Open QtMultimedia CMakeLists.txt from D:\qt\qt6\qtmultimedia
  2. Deselect all kits
  3. Import build from D:\qt\build\androidmultimedia
    • This creates a Android Qt 6.8.0 (android) Clang x86_64 kit
    • Configure is run automatically again
  4. Select a test to be built (tst_qmediadevices) and choose a corresponding emulator in project build settings for Android kit
  5. Build target tst_qmediadevices
  6. Observe error message:

19:15:12: The process "C:\Program Files\CMake\bin\cmake.exe" exited normally.

19:15:12: Starting: "D:\qt\build\dev\qtbase\bin\androiddeployqt.exe" --input D:/qt/build/androidmultimedia/tests/auto/unit/multimedia/qmediadevices/android-tst_qmediadevices-deployment-settings.json --output D:/qt/build/androidmultimedia/tests/auto/unit/multimedia/qmediadevices/android-build --android-platform android-33 --jdk "C:/Program Files/Eclipse Adoptium/jdk-17.0.10.7-hotspot" --gradle

Cannot find application binary in build dir D:/qt/build/androidmultimedia/tests/auto/unit/multimedia/qmediadevices/android-build//libs/x86_64/libtst_qmediadevices_x86_64.so.

19:15:12: The process "D:\qt\build\dev\qtbase\bin\androiddeployqt.exe" exited with code 2.

Error while building/deploying project QtMultimedia (kit: Android Qt 6.8.0 (android) Clang x86_64)

When executing step "Build Android APK"

19:15:12: Elapsed time: 01:05.