User:Joger: Difference between revisions
mNo edit summary |
(Added description on how to build FFmpeg and QtMultimedia for Windows with MSVC) |
||
Line 6: | Line 6: | ||
Build directory containing all builds: D:\qt\build\ | 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 | |||
== 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:<blockquote>C:\Strawberry\perl\bin\perl init-repository --module-subset=qtbase,qtquick3d,qtdeclarative,qtsvg,qtshadertools,qtmultimedia,qtrepotools -f --codereview-username johanseg</blockquote> | |||
=== Building FFmpeg on Windows === | |||
# Install 7-zip from provisioning: Run qt6\coin\provisioning\common\windows\install-sevenzip.ps1 as admin | |||
## Needed by provisioning script for FFmpeg | |||
# Install msys from provisioning: Run qt6\coin\provisioning\common\windows\install-msys2.ps1 as admin | |||
## Needed by provisioning script for FFmpeg | |||
# 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:<blockquote>..\..\qt6\configure.bat -debug -developer-build -submodules QtMultimedia -nomake tests -nomake examples -- -DFFMPEG_DIR=C:\FFmpeg-n6.0\build\msvc\installed --fresh & ninja</blockquote> | |||
=== Configure Qt multimedia === | |||
I configure QtMultimedia using a CMakeUserPresets.json file that is located in D:\qt\qt6\qtmultimedia | |||
<code> | |||
{ | |||
"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": true, | |||
"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" | |||
} | |||
] | |||
} | |||
</code> | |||
== Setting up Qt Creator for Android == | == Setting up Qt Creator for Android == | ||
Revision as of 11:51, 12 February 2024
My build setup
OS: Windows 11 with dev drive mounted on D:
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
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:
C:\Strawberry\perl\bin\perl init-repository --module-subset=qtbase,qtquick3d,qtdeclarative,qtsvg,qtshadertools,qtmultimedia,qtrepotools -f --codereview-username johanseg
Building FFmpeg on Windows
- Install 7-zip from provisioning: Run qt6\coin\provisioning\common\windows\install-sevenzip.ps1 as admin
- Needed by provisioning script for FFmpeg
- Install msys from provisioning: Run qt6\coin\provisioning\common\windows\install-msys2.ps1 as admin
- Needed by provisioning script for FFmpeg
- 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
Configure Qt multimedia
I configure QtMultimedia using a CMakeUserPresets.json file that is located in D:\qt\qt6\qtmultimedia
{
"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": true,
"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
- Install Qt Creator with Android option
- In Creator preferences, install Adoptium JDK (C:\Program Files\Eclipse Adoptium\jdk-17.0.10.7-hotspot)
- Android SDK location: C:\dev\android
- Select Android NDK 26.1.10909125 and make default
- Oppenssl location: C:\dev\android\android_openssl
- Verify Android settings:
- Add Android device for ABI x86_64, OS Version 13.0 ("Tiramisu") (SDK 33)
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
- Open QtMultimedia CMakeLists.txt from D:\qt\qt6\qtmultimedia
- Deselect all kits
- 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
- Select a test to be built (tst_qmediadevices) and choose a corresponding emulator in project build settings for Android kit
- Build target tst_qmediadevices
- 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.