diff mbox series

[11/11] dockerfiles/debian-win64-cross: Download WHPX MinGW headers

Message ID 20200804170055.2851-12-thuth@redhat.com
State New
Headers show
Series Run cross-compilation build tests in the gitlab-CI | expand

Commit Message

Thomas Huth Aug. 4, 2020, 5 p.m. UTC
To compile-test the WHPX accelerator, we need to download these system
headers first (they are unfortunately not part of any released and
packaged MinGW toolchain yet).

Idea taken from another patch by Stefan Weil.

Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 tests/docker/dockerfiles/debian-win64-cross.docker | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

Comments

Philippe Mathieu-Daudé Aug. 4, 2020, 6:07 p.m. UTC | #1
On 8/4/20 7:00 PM, Thomas Huth wrote:
> To compile-test the WHPX accelerator, we need to download these system
> headers first (they are unfortunately not part of any released and
> packaged MinGW toolchain yet).
> 
> Idea taken from another patch by Stefan Weil.
> 
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
>  tests/docker/dockerfiles/debian-win64-cross.docker | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/tests/docker/dockerfiles/debian-win64-cross.docker b/tests/docker/dockerfiles/debian-win64-cross.docker
> index 2fc9cfcbc6..4cc4a3f365 100644
> --- a/tests/docker/dockerfiles/debian-win64-cross.docker
> +++ b/tests/docker/dockerfiles/debian-win64-cross.docker
> @@ -32,7 +32,14 @@ RUN apt-get update && \
>          mxe-$TARGET-w64-mingw32.shared-sdl2 \
>          mxe-$TARGET-w64-mingw32.shared-sdl2-mixer \
>          mxe-$TARGET-w64-mingw32.shared-sdl2-gfx \
> -        mxe-$TARGET-w64-mingw32.shared-zlib
> +        mxe-$TARGET-w64-mingw32.shared-zlib \
> +        curl && \
> +    curl -s -S -o /usr/lib/mxe/usr/x86_64-w64-mingw32.shared/include/WinHvEmulation.h \
> +        "https://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/tree/mingw-w64-headers/include/winhvemulation.h?format=raw" && \
> +    curl -s -S -o /usr/lib/mxe/usr/x86_64-w64-mingw32.shared/include/WinHvPlatform.h \
> +        "https://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/tree/mingw-w64-headers/include/winhvplatform.h?format=raw" && \
> +    curl -s -S -o /usr/lib/mxe/usr/x86_64-w64-mingw32.shared/include/winhvplatformdefs.h \
> +        "https://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/tree/mingw-w64-headers/include/winhvplatformdefs.h?format=raw"

Seems legally safer than my older approach =)
https://www.mail-archive.com/qemu-devel@nongnu.org/msg645794.html

>  
>  # Specify the cross prefix for this image (see tests/docker/common.rc)
>  ENV QEMU_CONFIGURE_OPTS --cross-prefix=x86_64-w64-mingw32.shared-
>
Stefan Weil Aug. 4, 2020, 6:32 p.m. UTC | #2
Am 04.08.20 um 19:00 schrieb Thomas Huth:

> To compile-test the WHPX accelerator, we need to download these system
> headers first (they are unfortunately not part of any released and
> packaged MinGW toolchain yet).
>
> Idea taken from another patch by Stefan Weil.
>
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
>  tests/docker/dockerfiles/debian-win64-cross.docker | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/tests/docker/dockerfiles/debian-win64-cross.docker b/tests/docker/dockerfiles/debian-win64-cross.docker
> index 2fc9cfcbc6..4cc4a3f365 100644
> --- a/tests/docker/dockerfiles/debian-win64-cross.docker
> +++ b/tests/docker/dockerfiles/debian-win64-cross.docker
> @@ -32,7 +32,14 @@ RUN apt-get update && \
>          mxe-$TARGET-w64-mingw32.shared-sdl2 \
>          mxe-$TARGET-w64-mingw32.shared-sdl2-mixer \
>          mxe-$TARGET-w64-mingw32.shared-sdl2-gfx \
> -        mxe-$TARGET-w64-mingw32.shared-zlib
> +        mxe-$TARGET-w64-mingw32.shared-zlib \
> +        curl && \
> +    curl -s -S -o /usr/lib/mxe/usr/x86_64-w64-mingw32.shared/include/WinHvEmulation.h \
> +        "https://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/tree/mingw-w64-headers/include/winhvemulation.h?format=raw" && \
> +    curl -s -S -o /usr/lib/mxe/usr/x86_64-w64-mingw32.shared/include/WinHvPlatform.h \
> +        "https://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/tree/mingw-w64-headers/include/winhvplatform.h?format=raw" && \
> +    curl -s -S -o /usr/lib/mxe/usr/x86_64-w64-mingw32.shared/include/winhvplatformdefs.h \
> +        "https://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/tree/mingw-w64-headers/include/winhvplatformdefs.h?format=raw"
>  
>  # Specify the cross prefix for this image (see tests/docker/common.rc)
>  ENV QEMU_CONFIGURE_OPTS --cross-prefix=x86_64-w64-mingw32.shared-


I expect a build failure: Mingw-w64 decided to use lower case filenames,
and those header files include each other.

We need both lower case filenames (for Mingw-w64) and camel case
filenames (for QEMU). That's why I used additional symlinks.

Regards

Stefan
Thomas Huth Aug. 5, 2020, 6:28 a.m. UTC | #3
On 04/08/2020 20.32, Stefan Weil wrote:
> Am 04.08.20 um 19:00 schrieb Thomas Huth:
> 
>> To compile-test the WHPX accelerator, we need to download these system
>> headers first (they are unfortunately not part of any released and
>> packaged MinGW toolchain yet).
>>
>> Idea taken from another patch by Stefan Weil.
>>
>> Signed-off-by: Thomas Huth <thuth@redhat.com>
>> ---
>>  tests/docker/dockerfiles/debian-win64-cross.docker | 9 ++++++++-
>>  1 file changed, 8 insertions(+), 1 deletion(-)
>>
>> diff --git a/tests/docker/dockerfiles/debian-win64-cross.docker b/tests/docker/dockerfiles/debian-win64-cross.docker
>> index 2fc9cfcbc6..4cc4a3f365 100644
>> --- a/tests/docker/dockerfiles/debian-win64-cross.docker
>> +++ b/tests/docker/dockerfiles/debian-win64-cross.docker
>> @@ -32,7 +32,14 @@ RUN apt-get update && \
>>          mxe-$TARGET-w64-mingw32.shared-sdl2 \
>>          mxe-$TARGET-w64-mingw32.shared-sdl2-mixer \
>>          mxe-$TARGET-w64-mingw32.shared-sdl2-gfx \
>> -        mxe-$TARGET-w64-mingw32.shared-zlib
>> +        mxe-$TARGET-w64-mingw32.shared-zlib \
>> +        curl && \
>> +    curl -s -S -o /usr/lib/mxe/usr/x86_64-w64-mingw32.shared/include/WinHvEmulation.h \
>> +        "https://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/tree/mingw-w64-headers/include/winhvemulation.h?format=raw" && \
>> +    curl -s -S -o /usr/lib/mxe/usr/x86_64-w64-mingw32.shared/include/WinHvPlatform.h \
>> +        "https://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/tree/mingw-w64-headers/include/winhvplatform.h?format=raw" && \
>> +    curl -s -S -o /usr/lib/mxe/usr/x86_64-w64-mingw32.shared/include/winhvplatformdefs.h \
>> +        "https://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/tree/mingw-w64-headers/include/winhvplatformdefs.h?format=raw"
>>  
>>  # Specify the cross prefix for this image (see tests/docker/common.rc)
>>  ENV QEMU_CONFIGURE_OPTS --cross-prefix=x86_64-w64-mingw32.shared-
> 
> 
> I expect a build failure: Mingw-w64 decided to use lower case filenames,
> and those header files include each other.

The first two headers include the third header, that's why I've used
lowercase for the third header (which is apparently not included by QEMU
directly).
But yes, all that CamelCase vs. lower-case stuff is very annoying. I
think once there is a new MinGW release available in the major Linux
distros that ships with these headers, we should change the QEMU source
code to always use the lowercase headers, too.

 Thomas
Daniel P. Berrangé Aug. 5, 2020, 9:11 a.m. UTC | #4
On Tue, Aug 04, 2020 at 08:32:18PM +0200, Stefan Weil wrote:
> Am 04.08.20 um 19:00 schrieb Thomas Huth:
> 
> > To compile-test the WHPX accelerator, we need to download these system
> > headers first (they are unfortunately not part of any released and
> > packaged MinGW toolchain yet).
> >
> > Idea taken from another patch by Stefan Weil.
> >
> > Signed-off-by: Thomas Huth <thuth@redhat.com>
> > ---
> >  tests/docker/dockerfiles/debian-win64-cross.docker | 9 ++++++++-
> >  1 file changed, 8 insertions(+), 1 deletion(-)
> >
> > diff --git a/tests/docker/dockerfiles/debian-win64-cross.docker b/tests/docker/dockerfiles/debian-win64-cross.docker
> > index 2fc9cfcbc6..4cc4a3f365 100644
> > --- a/tests/docker/dockerfiles/debian-win64-cross.docker
> > +++ b/tests/docker/dockerfiles/debian-win64-cross.docker
> > @@ -32,7 +32,14 @@ RUN apt-get update && \
> >          mxe-$TARGET-w64-mingw32.shared-sdl2 \
> >          mxe-$TARGET-w64-mingw32.shared-sdl2-mixer \
> >          mxe-$TARGET-w64-mingw32.shared-sdl2-gfx \
> > -        mxe-$TARGET-w64-mingw32.shared-zlib
> > +        mxe-$TARGET-w64-mingw32.shared-zlib \
> > +        curl && \
> > +    curl -s -S -o /usr/lib/mxe/usr/x86_64-w64-mingw32.shared/include/WinHvEmulation.h \
> > +        "https://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/tree/mingw-w64-headers/include/winhvemulation.h?format=raw" && \
> > +    curl -s -S -o /usr/lib/mxe/usr/x86_64-w64-mingw32.shared/include/WinHvPlatform.h \
> > +        "https://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/tree/mingw-w64-headers/include/winhvplatform.h?format=raw" && \
> > +    curl -s -S -o /usr/lib/mxe/usr/x86_64-w64-mingw32.shared/include/winhvplatformdefs.h \
> > +        "https://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/tree/mingw-w64-headers/include/winhvplatformdefs.h?format=raw"
> >  
> >  # Specify the cross prefix for this image (see tests/docker/common.rc)
> >  ENV QEMU_CONFIGURE_OPTS --cross-prefix=x86_64-w64-mingw32.shared-
> 
> 
> I expect a build failure: Mingw-w64 decided to use lower case filenames,
> and those header files include each other.
> 
> We need both lower case filenames (for Mingw-w64) and camel case
> filenames (for QEMU). That's why I used additional symlinks.

Hmm, this feels wrong. Either QEMU or Mingw-w64 is broken here.

Mingw-w64 needs to match whatever upper/lower case scheme that Windows
has used for these headers. QEMU also needs to match whatever Windows
used.

Mingw originally commited the files with mixed case, and then later
renamed then to lower case, but the commit doing the rename gives
zero information about why it did that.

The microsoft docs appear to show that camel case is required:

  https://docs.microsoft.com/en-us/virtualization/api/hypervisor-platform/hypervisor-platform

so I think mingw just needs fixing to revert that broken commit
the changed to lowercase.

Regards,
Daniel
Yonggang Luo Aug. 5, 2020, 12:54 p.m. UTC | #5
Fixes in mingw seems not possible and would broken lots of things, the
better way may change all include of Windows API headers to lowercase,


On Wed, Aug 5, 2020 at 5:12 PM Daniel P. Berrangé <berrange@redhat.com>
wrote:

> On Tue, Aug 04, 2020 at 08:32:18PM +0200, Stefan Weil wrote:
> > Am 04.08.20 um 19:00 schrieb Thomas Huth:
> >
> > > To compile-test the WHPX accelerator, we need to download these system
> > > headers first (they are unfortunately not part of any released and
> > > packaged MinGW toolchain yet).
> > >
> > > Idea taken from another patch by Stefan Weil.
> > >
> > > Signed-off-by: Thomas Huth <thuth@redhat.com>
> > > ---
> > >  tests/docker/dockerfiles/debian-win64-cross.docker | 9 ++++++++-
> > >  1 file changed, 8 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/tests/docker/dockerfiles/debian-win64-cross.docker
> b/tests/docker/dockerfiles/debian-win64-cross.docker
> > > index 2fc9cfcbc6..4cc4a3f365 100644
> > > --- a/tests/docker/dockerfiles/debian-win64-cross.docker
> > > +++ b/tests/docker/dockerfiles/debian-win64-cross.docker
> > > @@ -32,7 +32,14 @@ RUN apt-get update && \
> > >          mxe-$TARGET-w64-mingw32.shared-sdl2 \
> > >          mxe-$TARGET-w64-mingw32.shared-sdl2-mixer \
> > >          mxe-$TARGET-w64-mingw32.shared-sdl2-gfx \
> > > -        mxe-$TARGET-w64-mingw32.shared-zlib
> > > +        mxe-$TARGET-w64-mingw32.shared-zlib \
> > > +        curl && \
> > > +    curl -s -S -o
> /usr/lib/mxe/usr/x86_64-w64-mingw32.shared/include/WinHvEmulation.h \
> > > +        "
> https://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/tree/mingw-w64-headers/include/winhvemulation.h?format=raw"
> && \
> > > +    curl -s -S -o
> /usr/lib/mxe/usr/x86_64-w64-mingw32.shared/include/WinHvPlatform.h \
> > > +        "
> https://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/tree/mingw-w64-headers/include/winhvplatform.h?format=raw"
> && \
> > > +    curl -s -S -o
> /usr/lib/mxe/usr/x86_64-w64-mingw32.shared/include/winhvplatformdefs.h \
> > > +        "
> https://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/tree/mingw-w64-headers/include/winhvplatformdefs.h?format=raw
> "
> > >
> > >  # Specify the cross prefix for this image (see tests/docker/common.rc)
> > >  ENV QEMU_CONFIGURE_OPTS --cross-prefix=x86_64-w64-mingw32.shared-
> >
> >
> > I expect a build failure: Mingw-w64 decided to use lower case filenames,
> > and those header files include each other.
> >
> > We need both lower case filenames (for Mingw-w64) and camel case
> > filenames (for QEMU). That's why I used additional symlinks.
>
> Hmm, this feels wrong. Either QEMU or Mingw-w64 is broken here.
>
> Mingw-w64 needs to match whatever upper/lower case scheme that Windows
> has used for these headers. QEMU also needs to match whatever Windows
> used.
>
> Mingw originally commited the files with mixed case, and then later
> renamed then to lower case, but the commit doing the rename gives
> zero information about why it did that.
>
> The microsoft docs appear to show that camel case is required:
>
>
> https://docs.microsoft.com/en-us/virtualization/api/hypervisor-platform/hypervisor-platform
>
> so I think mingw just needs fixing to revert that broken commit
> the changed to lowercase.
>
> Regards,
> Daniel
> --
> |: https://berrange.com      -o-
> https://www.flickr.com/photos/dberrange :|
> |: https://libvirt.org         -o-
> https://fstop138.berrange.com :|
> |: https://entangle-photo.org    -o-
> https://www.instagram.com/dberrange :|
>
>
>
diff mbox series

Patch

diff --git a/tests/docker/dockerfiles/debian-win64-cross.docker b/tests/docker/dockerfiles/debian-win64-cross.docker
index 2fc9cfcbc6..4cc4a3f365 100644
--- a/tests/docker/dockerfiles/debian-win64-cross.docker
+++ b/tests/docker/dockerfiles/debian-win64-cross.docker
@@ -32,7 +32,14 @@  RUN apt-get update && \
         mxe-$TARGET-w64-mingw32.shared-sdl2 \
         mxe-$TARGET-w64-mingw32.shared-sdl2-mixer \
         mxe-$TARGET-w64-mingw32.shared-sdl2-gfx \
-        mxe-$TARGET-w64-mingw32.shared-zlib
+        mxe-$TARGET-w64-mingw32.shared-zlib \
+        curl && \
+    curl -s -S -o /usr/lib/mxe/usr/x86_64-w64-mingw32.shared/include/WinHvEmulation.h \
+        "https://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/tree/mingw-w64-headers/include/winhvemulation.h?format=raw" && \
+    curl -s -S -o /usr/lib/mxe/usr/x86_64-w64-mingw32.shared/include/WinHvPlatform.h \
+        "https://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/tree/mingw-w64-headers/include/winhvplatform.h?format=raw" && \
+    curl -s -S -o /usr/lib/mxe/usr/x86_64-w64-mingw32.shared/include/winhvplatformdefs.h \
+        "https://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/tree/mingw-w64-headers/include/winhvplatformdefs.h?format=raw"
 
 # Specify the cross prefix for this image (see tests/docker/common.rc)
 ENV QEMU_CONFIGURE_OPTS --cross-prefix=x86_64-w64-mingw32.shared-