qt: preparation for qtmultimedia - #16012
Conversation
with `init-repository` it is much easier to automate cloning of the full qt folder structure, as it will automatically pull in submodule dependencies.
`init-repository` recently gained `--depth`, which does a shallow clone of the submodules. This should make the clones more lightweight.
Moving the os version to ubuntu 24.04. Ubuntu 20.04 is not "officially supported" by qt anymore and it has some rather old versions of system libraries like ffmpeg, that we would require for qtmultimedia.
|
timblechmann is a new contributor to projects/qt. The PR must be approved by known contributors before it can be merged. The past contributors are: rlohning, hunsche, DonggeLiu, sgaist, cvediver |
|
Hello Tim, |
|
Please don't use init-repository. It often clones code which is several weeks old which is pretty unfortunate for continuous fuzzing. I understand that building qtmultimedia would require qtdeclarative to be built, too. When I tried that a couple of years ago, I didn't succeed. I don't know what effort would be needed to do it now. |
|
I removed the use of init-repository in #7017. |
| - x86_64 | ||
| - i386 | ||
| help_url: "https://code.qt.io/cgit/qt/qtbase.git/plain/tests/libfuzzer/README" | ||
| base_os_version: ubuntu-24-04 |
There was a problem hiding this comment.
Thank you for spotting the issue with the old Ubuntu.
According to the documentation it only takes this one line for porting to 24.04. If you add that as a separate pull request with this, I'll support it.
There was a problem hiding this comment.
i'm not sure if it is sufficient, but also the docker file needs to be updated. at least that's what other projects are doing. e.g. 959e29f
There was a problem hiding this comment.
Good catch!
I'm asking that paragraph's author how to do it right.
There was a problem hiding this comment.
Both changes are needed, indeed.
qtmultimedia will pull in a handful of dependencies, not only declarative. those will have dependencies on their own, so we will have to maintain the dependency lists ourselves. that said, there is no guarantee that the |
|
Except for the Ubuntu update, which I extracted to #16038, I'm not convinced of this, yet. I see several issues which we should discuss separately:
|
i'm curious: how is this solved? if we have component A, B, C and D. C requires revision B-v1, D requires revision B-v2. B, C and D will provide fuzzing targets. they may not be compatible. if we want to fuzz B, C and D, we would be better off splitting all of them into separate fuzzing projects and building them independently. |
It would check out each submodule's respective dev branch, it seems. You get an untested combination then.
I don't know the internals. What I expect and what QtSynchronizeRepo.cmake seems to do is that it parses qtmultimedia's dependencies.yaml and checks out the revisions listed there. Then it recursively does the same in the modules it just checked out. Because each module's respective dependencies.yaml was updated after a passed CI run, this gives you a combination of revisions which passed CI before. If you 'd like to know in more detail, Alexandru, Joerg or Volker can probably tell you. |
but qtsvg and qtimageformats are both dependencies of qtmultimedia (via qtdeclarative). so they will be synced to the dependencies.yaml of qtmultimedia then. it sounds to me that the approach of fuzzing all of qt in the same checkout doesn't scale if we want to have commit granularity of the different submodules. also the current state will break if there are some source incompatibilities between qtbase that qtsvg and qtimageformat requires ... |
|
apparently we will need to use a separate project in oss-fuzz for qtmultimedia |
Yes. Isn't that exactly what you want? We'd be testing a somewhat older qtsvg than we do with the current script but it's a consistent, tested combination of revisions. |
This is a proof of concept for integrating qtmultimedia's fuzz tests into oss-fuzz.
it includes some cleanups:
init-repositoryto clone qt's submodules with their dependencies instead of cloning manually. note: this requires a--depthargument for shallow clones, which is not yet merged into qt5.git: https://codereview.qt-project.org/c/qt/qt5/+/760920 (it can probably not merged before landing this)the PR contains multiple independent patches. some could be landed independently, but it's probably best to land them all at once.
CC @rlohning