Message ID | 20241031040426.772604-13-pierrick.bouvier@linaro.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Enable building plugins on Windows with Clang | expand |
On Wed, Oct 30, 2024 at 09:04:26PM -0700, Pierrick Bouvier wrote: > MacOS and Linux are straightforward, but Windows needs a bit more > details. > > Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> > --- > docs/about/build-platforms.rst | 4 +- > docs/devel/build-system.rst | 100 +++++++++++++++++++++++++++++++++ > 2 files changed, 103 insertions(+), 1 deletion(-) > +Windows > +------- > + > +You first need to install `MSYS2 <https://www.msys2.org/>`_. > +MSYS2 offers `different environments <https://www.msys2.org/docs/environments/>`_. > +x86_64 environments are based on GCC, while aarch64 is based on Clang. > + > +We recommend to use UCRT64 for windows-x86_64 and CLANGARM64 for windows-aarch64 > +(only available on windows-aarch64 hosts). I don't believe we should be recommending ucrt64 for windows. We have two testing jobs, one cross compiled from Mingw Fedora, and one native under Msys2, both of which are validating mingw64. We have no ucrt64 testing. IIUC, Stefan's QEMU installer binaries are also mingw32/mingw64 based, not ucrt64. With regards, Daniel
On 10/31/24 02:24, Daniel P. Berrangé wrote: > On Wed, Oct 30, 2024 at 09:04:26PM -0700, Pierrick Bouvier wrote: >> MacOS and Linux are straightforward, but Windows needs a bit more >> details. >> >> Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> >> --- >> docs/about/build-platforms.rst | 4 +- >> docs/devel/build-system.rst | 100 +++++++++++++++++++++++++++++++++ >> 2 files changed, 103 insertions(+), 1 deletion(-) > >> +Windows >> +------- >> + >> +You first need to install `MSYS2 <https://www.msys2.org/>`_. >> +MSYS2 offers `different environments <https://www.msys2.org/docs/environments/>`_. >> +x86_64 environments are based on GCC, while aarch64 is based on Clang. >> + >> +We recommend to use UCRT64 for windows-x86_64 and CLANGARM64 for windows-aarch64 >> +(only available on windows-aarch64 hosts). > > I don't believe we should be recommending ucrt64 for windows. We have two > testing jobs, one cross compiled from Mingw Fedora, and one native under > Msys2, both of which are validating mingw64. We have no ucrt64 testing. > IIUC, Stefan's QEMU installer binaries are also mingw32/mingw64 based, > not ucrt64. > I have no strong opinion, and was just following default recommendation of MSYS2 project to switch to UCRT64. All msys2 environment use mingw64, but mingw64 can target different windows runtime. From what I understand, any difference or bug would be a bug for mingw64 project, not for us. UCRT is now the default target used by mingw64 [1]. More information on this difference here [2]. Migrating to UCRT64 seems to be the best way in the future. All that said, I'll update this recommendation to MINGW64 for V2 of this series, [1] https://www.mingw-w64.org/changelog/#v1200-2024-05-29 [2] https://github.com/mingw-w64/mingw-w64/blob/master/mingw-w64-doc/howto-build/ucrt-vs-msvcrt.txt > With regards, > Daniel
On Thu, 31 Oct 2024 at 04:07, Pierrick Bouvier <pierrick.bouvier@linaro.org> wrote: > > MacOS and Linux are straightforward, but Windows needs a bit more > details. > > Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> We have documentation on the wiki currently about how to build on various platforms: https://wiki.qemu.org/Hosts/Linux https://wiki.qemu.org/Hosts/Mac https://wiki.qemu.org/Hosts/W32 I agree that we ought to move this into the main documentation. Some of the information in those wiki pages is probably out of date, but some of it looks like useful extra detail that we could incorporate here. > --- > docs/about/build-platforms.rst | 4 +- > docs/devel/build-system.rst | 100 +++++++++++++++++++++++++++++++++ I don't think this is the best place to put this information. "How do I build from source?" is a question that most beginning developers and some end users will have. The information in build-system.rst is mostly about the internals of our build system and how to modify it, which is a more niche topic. I would be inclined to put this in a new file, maybe even in docs/about/ rather than docs/devel. thanks -- PMM
On Mon, Nov 04, 2024 at 03:58:19PM +0000, Peter Maydell wrote: > On Thu, 31 Oct 2024 at 04:07, Pierrick Bouvier > <pierrick.bouvier@linaro.org> wrote: > > > > MacOS and Linux are straightforward, but Windows needs a bit more > > details. > > > > Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> > > We have documentation on the wiki currently about how to > build on various platforms: > > https://wiki.qemu.org/Hosts/Linux > https://wiki.qemu.org/Hosts/Mac > https://wiki.qemu.org/Hosts/W32 > > I agree that we ought to move this into the main documentation. > Some of the information in those wiki pages is probably > out of date, but some of it looks like useful extra detail > that we could incorporate here. Also, as that wiki notes: 32 bit Linux target on a 64 bit Linux host would be useful for build bots > > --- > > docs/about/build-platforms.rst | 4 +- > > docs/devel/build-system.rst | 100 +++++++++++++++++++++++++++++++++ > > I don't think this is the best place to put this information. > "How do I build from source?" is a question that most beginning > developers and some end users will have. The information in > build-system.rst is mostly about the internals of our > build system and how to modify it, which is a more niche topic. > > I would be inclined to put this in a new file, maybe even > in docs/about/ rather than docs/devel. > > thanks > -- PMM
On 11/4/24 07:58, Peter Maydell wrote: > On Thu, 31 Oct 2024 at 04:07, Pierrick Bouvier > <pierrick.bouvier@linaro.org> wrote: >> >> MacOS and Linux are straightforward, but Windows needs a bit more >> details. >> >> Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> > > We have documentation on the wiki currently about how to > build on various platforms: > > https://wiki.qemu.org/Hosts/Linux > https://wiki.qemu.org/Hosts/Mac > https://wiki.qemu.org/Hosts/W32 > > I agree that we ought to move this into the main documentation. > Some of the information in those wiki pages is probably > out of date, but some of it looks like useful extra detail > that we could incorporate here. > I noticed that. Is the QEMU wiki considered as "deprecated" (no new information there), or more seen as a complement to current manual? My goal adding this to the documentation was to have a simple (and single) "how-to" per platform, instead of trying to cover all the possible details and configuration. Would that be acceptable to add links to the wiki instead of adding all information in our documentation? >> --- >> docs/about/build-platforms.rst | 4 +- >> docs/devel/build-system.rst | 100 +++++++++++++++++++++++++++++++++ > > I don't think this is the best place to put this information. > "How do I build from source?" is a question that most beginning > developers and some end users will have. The information in > build-system.rst is mostly about the internals of our > build system and how to modify it, which is a more niche topic. > > I would be inclined to put this in a new file, maybe even > in docs/about/ rather than docs/devel. > I was not sure, and adding a new file for new developers seems to be the best solution. I'll do it. > thanks > -- PMM Thanks
On 11/4/24 08:08, Michael S. Tsirkin wrote: > On Mon, Nov 04, 2024 at 03:58:19PM +0000, Peter Maydell wrote: >> On Thu, 31 Oct 2024 at 04:07, Pierrick Bouvier >> <pierrick.bouvier@linaro.org> wrote: >>> >>> MacOS and Linux are straightforward, but Windows needs a bit more >>> details. >>> >>> Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> >> >> We have documentation on the wiki currently about how to >> build on various platforms: >> >> https://wiki.qemu.org/Hosts/Linux >> https://wiki.qemu.org/Hosts/Mac >> https://wiki.qemu.org/Hosts/W32 >> >> I agree that we ought to move this into the main documentation. >> Some of the information in those wiki pages is probably >> out of date, but some of it looks like useful extra detail >> that we could incorporate here. > > Also, as that wiki notes: > > 32 bit Linux target on a 64 bit Linux host would be useful for build bots > IMHO, and regarding my previous message, I don't think adding details about cross compilation would help new comers. Cross compilation is specific, and most of the people who do it know how to do it. Especially when setting up a build bot. In more, we already have a docker container for this use case (debian-i686-cross), without needing to play with host machine. > > >>> --- >>> docs/about/build-platforms.rst | 4 +- >>> docs/devel/build-system.rst | 100 +++++++++++++++++++++++++++++++++ >> >> I don't think this is the best place to put this information. >> "How do I build from source?" is a question that most beginning >> developers and some end users will have. The information in >> build-system.rst is mostly about the internals of our >> build system and how to modify it, which is a more niche topic. >> >> I would be inclined to put this in a new file, maybe even >> in docs/about/ rather than docs/devel. >> >> thanks >> -- PMM >
On Mon, 4 Nov 2024 at 22:05, Pierrick Bouvier <pierrick.bouvier@linaro.org> wrote: > > On 11/4/24 07:58, Peter Maydell wrote: > > On Thu, 31 Oct 2024 at 04:07, Pierrick Bouvier > > <pierrick.bouvier@linaro.org> wrote: > >> > >> MacOS and Linux are straightforward, but Windows needs a bit more > >> details. > >> > >> Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> > > > > We have documentation on the wiki currently about how to > > build on various platforms: > > > > https://wiki.qemu.org/Hosts/Linux > > https://wiki.qemu.org/Hosts/Mac > > https://wiki.qemu.org/Hosts/W32 > > > > I agree that we ought to move this into the main documentation. > > Some of the information in those wiki pages is probably > > out of date, but some of it looks like useful extra detail > > that we could incorporate here. > > > > I noticed that. Is the QEMU wiki considered as "deprecated" (no new > information there), or more seen as a complement to current manual? It's in the usual state of all wikis -- it has a lot of information, some of which is out of date and some of which is still useful, and none of which is particularly well organized. Some of it we should definitely move into our main documentation. > My goal adding this to the documentation was to have a simple (and > single) "how-to" per platform, instead of trying to cover all the > possible details and configuration. > > Would that be acceptable to add links to the wiki instead of adding all > information in our documentation? I think if we want to document the build process in our "real" documentation (which we should) then we should remove the wiki pages (or replace their content with pointers to the docs). Otherwise we just have two places with the same information. If we decide that some of the information on the wiki pages is too stale or too niche to include that's fine. thanks -- PMM
diff --git a/docs/about/build-platforms.rst b/docs/about/build-platforms.rst index 8fd7da140a3..fd1a8cabe36 100644 --- a/docs/about/build-platforms.rst +++ b/docs/about/build-platforms.rst @@ -29,6 +29,9 @@ The `Repology`_ site is a useful resource to identify currently shipped versions of software in various operating systems, though it does not cover all distros listed below. +You can find how to install build dependencies for different systems on the +:ref:`setup-build-env` page. + Supported host architectures ---------------------------- @@ -118,7 +121,6 @@ Optional build dependencies cross compilation using ``docker`` or ``podman``, or to use pre-built binaries distributed with QEMU. - Windows ------- diff --git a/docs/devel/build-system.rst b/docs/devel/build-system.rst index d42045a2325..fa5601fed82 100644 --- a/docs/devel/build-system.rst +++ b/docs/devel/build-system.rst @@ -595,3 +595,103 @@ Built by Makefile: meson.build. The rules are produced from Meson's JSON description of tests (obtained with "meson introspect --tests") through the script scripts/mtest2make.py. + +.. _setup-build-env: + +Setup build environment +======================= + +Linux +----- + +Fedora +++++++ + +:: + + sudo dnf update && sudo dnf builddep qemu + +Debian/Ubuntu ++++++++++++++ + +You first need to enable `Sources List <https://wiki.debian.org/SourcesList>`_. +Then, use apt to install dependencies: + +:: + + sudo apt update && sudo apt build-dep qemu + +MacOS +----- + +You first need to install `Homebrew <https://brew.sh/>`_. Then, use it to +install dependencies: + +:: + + brew update && brew install $(brew deps --include-build qemu) + +Windows +------- + +You first need to install `MSYS2 <https://www.msys2.org/>`_. +MSYS2 offers `different environments <https://www.msys2.org/docs/environments/>`_. +x86_64 environments are based on GCC, while aarch64 is based on Clang. + +We recommend to use UCRT64 for windows-x86_64 and CLANGARM64 for windows-aarch64 +(only available on windows-aarch64 hosts). + +Then, you can open a windows shell, and enter msys2 env using: + +:: + + c:/msys64/msys2_shell.cmd -defterm -here -no-start -ucrt64 + # Replace -ucrt64 by -clangarm64 or -mingw64 for other environments. + +MSYS2 package manager does not offer a built-in way to install build +dependencies. You can start with this list of packages using pacman: + +Note: Dependencies need to be installed again if you use a different MSYS2 +environment. + +:: + + # update MSYS2 itself, you need to reopen your shell at the end. + pacman -Syu + pacman -S \ + base-devel binutils bison diffutils flex git grep make sed \ + ${MINGW_PACKAGE_PREFIX}-toolchain \ + ${MINGW_PACKAGE_PREFIX}-glib2 \ + ${MINGW_PACKAGE_PREFIX}-gtk3 \ + ${MINGW_PACKAGE_PREFIX}-libnfs \ + ${MINGW_PACKAGE_PREFIX}-libssh \ + ${MINGW_PACKAGE_PREFIX}-ninja \ + ${MINGW_PACKAGE_PREFIX}-pixman \ + ${MINGW_PACKAGE_PREFIX}-pkgconf \ + ${MINGW_PACKAGE_PREFIX}-python \ + ${MINGW_PACKAGE_PREFIX}-SDL2 \ + ${MINGW_PACKAGE_PREFIX}-zstd + +If you want to install all dependencies, it's possible to use recipe used to +build QEMU in MSYS2 itself. + +:: + + pacman -S wget + wget https://raw.githubusercontent.com/msys2/MINGW-packages/refs/heads/master/mingw-w64-qemu/PKGBUILD + # Some packages may be missing for your environment, installation will still + # be done though. + makepkg -s PKGBUILD || true + +Build on windows-aarch64 +++++++++++++++++++++++++ + +When trying to cross compile meson for x86_64 using UCRT64 or MINGW64 env, +configure will run into an error because the cpu detected is not correct. + +Meson detects x86_64 processes emulated, so you need to manually set the cpu, +and force a cross compilation (with empty prefix). + +:: + + ./configure --cpu=x86_64 --cross-prefix=
MacOS and Linux are straightforward, but Windows needs a bit more details. Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> --- docs/about/build-platforms.rst | 4 +- docs/devel/build-system.rst | 100 +++++++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+), 1 deletion(-)