All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH] gitlab-ci: Test compilation on Windows with MSYS2
@ 2021-07-09  7:52 Thomas Huth
  2021-07-09  8:20 ` Daniel P. Berrangé
  0 siblings, 1 reply; 4+ messages in thread
From: Thomas Huth @ 2021-07-09  7:52 UTC (permalink / raw)
  To: qemu-devel
  Cc: Daniel P . Berrange, Philippe Mathieu-Daudé,
	Wainer dos Santos Moschetta, Willian Rampazzo, Yonggang Luo,
	Alex Bennée

Gitlab also provides runners with Windows, we can use them to
test compilation with MSYS2.

However, it takes quite a long time to set up the VM, so to
stay in the 1h time frame, we can only compile and check one
target here. And there is also still a problem with compiling
the multiboot.bin in pc-bios/optionrom/, so this is currently
disabled, too.

Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 I'm sending this out as an RFC in case somebody else wants to play
 with this. Considering that the corresponding job in Cirrus-CI compiles
 way more targets within 1 hour, we might rather want to keep using
 the Cirrus-CI job instead?

 .gitlab-ci.d/qemu-project.yml |  1 +
 .gitlab-ci.d/windows.yml      | 59 +++++++++++++++++++++++++++++++++++
 2 files changed, 60 insertions(+)
 create mode 100644 .gitlab-ci.d/windows.yml

diff --git a/.gitlab-ci.d/qemu-project.yml b/.gitlab-ci.d/qemu-project.yml
index 64cb2ba1da..f1a34038af 100644
--- a/.gitlab-ci.d/qemu-project.yml
+++ b/.gitlab-ci.d/qemu-project.yml
@@ -9,3 +9,4 @@ include:
   - local: '/.gitlab-ci.d/crossbuilds.yml'
   - local: '/.gitlab-ci.d/buildtest.yml'
   - local: '/.gitlab-ci.d/static_checks.yml'
+  - local: '/.gitlab-ci.d/windows.yml'
diff --git a/.gitlab-ci.d/windows.yml b/.gitlab-ci.d/windows.yml
new file mode 100644
index 0000000000..1874a06739
--- /dev/null
+++ b/.gitlab-ci.d/windows.yml
@@ -0,0 +1,59 @@
+.shared_windows_runners:
+  tags:
+  - shared-windows
+  - windows
+  - windows-1809
+
+msys2-build:
+  extends: .shared_windows_runners
+  stage: build
+  before_script:
+  - Invoke-WebRequest
+    "https://github.com/msys2/msys2-installer/releases/download/nightly-x86_64/msys2-base-x86_64-latest.sfx.exe"
+    -outfile "msys2.exe"
+  - .\msys2.exe -y -oC:\
+  - del msys2.exe
+  - ((Get-Content -path C:\msys64\etc\\post-install\\07-pacman-key.post -Raw)
+      -replace '--refresh-keys', '--version') |
+     Set-Content -Path C:\msys64\etc\\post-install\\07-pacman-key.post
+  - C:\msys64\usr\bin\bash -lc "sed -i 's/^CheckSpace/#CheckSpace/g' /etc/pacman.conf"
+  - C:\msys64\usr\bin\bash -lc 'pacman --noconfirm -Syuu'  # Core update
+  - C:\msys64\usr\bin\bash -lc 'pacman --noconfirm -Syuu'  # Normal update
+  - C:\msys64\usr\bin\bash -lc "pacman -Sy --noconfirm --needed
+      diffutils git grep make pkg-config sed
+      mingw-w64-x86_64-capstone
+      mingw-w64-x86_64-curl
+      mingw-w64-x86_64-cyrus-sasl
+      mingw-w64-x86_64-gcc
+      mingw-w64-x86_64-glib2
+      mingw-w64-x86_64-gnutls
+      mingw-w64-x86_64-gtk3
+      mingw-w64-x86_64-libgcrypt
+      mingw-w64-x86_64-libjpeg-turbo
+      mingw-w64-x86_64-libnfs
+      mingw-w64-x86_64-libpng
+      mingw-w64-x86_64-libssh
+      mingw-w64-x86_64-libtasn1
+      mingw-w64-x86_64-libusb
+      mingw-w64-x86_64-libxml2
+      mingw-w64-x86_64-lzo2
+      mingw-w64-x86_64-make
+      mingw-w64-x86_64-nettle
+      mingw-w64-x86_64-ninja
+      mingw-w64-x86_64-pixman
+      mingw-w64-x86_64-pkgconf
+      mingw-w64-x86_64-python
+      mingw-w64-x86_64-SDL2
+      mingw-w64-x86_64-SDL2_image
+      mingw-w64-x86_64-snappy
+      mingw-w64-x86_64-usbredir
+      mingw-w64-x86_64-zstd "
+  - taskkill /F /FI "MODULES eq msys-2.0.dll"
+  script:
+  - $env:CHERE_INVOKING = 'yes'  # Preserve the current working directory
+  - $env:MSYSTEM = 'MINGW64'     # Start a 64 bit Mingw environment
+  - C:\msys64\usr\bin\bash -lc './configure --target-list=x86_64-softmmu
+      --enable-capstone=system --disable-fdt'
+  - C:\msys64\usr\bin\bash -lc "sed -i '/^ROMS=/d' build/config-host.mak"
+  - C:\msys64\usr\bin\bash -lc 'make -j2'
+  - C:\msys64\usr\bin\bash -lc 'make V=1 check'
-- 
2.27.0



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [RFC PATCH] gitlab-ci: Test compilation on Windows with MSYS2
  2021-07-09  7:52 [RFC PATCH] gitlab-ci: Test compilation on Windows with MSYS2 Thomas Huth
@ 2021-07-09  8:20 ` Daniel P. Berrangé
  2021-07-09 14:34   ` Thomas Huth
  0 siblings, 1 reply; 4+ messages in thread
From: Daniel P. Berrangé @ 2021-07-09  8:20 UTC (permalink / raw)
  To: Thomas Huth
  Cc: qemu-devel, Wainer dos Santos Moschetta,
	Philippe Mathieu-Daudé,
	Willian Rampazzo, Yonggang Luo, Alex Bennée

On Fri, Jul 09, 2021 at 09:52:18AM +0200, Thomas Huth wrote:
> Gitlab also provides runners with Windows, we can use them to
> test compilation with MSYS2.
> 
> However, it takes quite a long time to set up the VM, so to
> stay in the 1h time frame, we can only compile and check one
> target here. And there is also still a problem with compiling
> the multiboot.bin in pc-bios/optionrom/, so this is currently
> disabled, too.

THe gitlab VM provisioning seems quite fast (2+1/2 minutes),
so I guess you mean the time is sunk in intsalling msys
packages.

In the crurent Cirrus job there's a bunch of code that is
done to cache all the msys install, so that 90% of the time
we're merely extracting a local zipfile.

I wonder if we can do similar caching here. Perhaps even
have 2 seprate jobs running on the windows runner. The
first job can just build a zip file and store it as an
artifact and cache it in gitlab for speed. The second
job can do the actual build ?

> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
>  I'm sending this out as an RFC in case somebody else wants to play
>  with this. Considering that the corresponding job in Cirrus-CI compiles
>  way more targets within 1 hour, we might rather want to keep using
>  the Cirrus-CI job instead?

Yes, unless we can do the same kind of caching tricks to speed it
all up.

> 
>  .gitlab-ci.d/qemu-project.yml |  1 +
>  .gitlab-ci.d/windows.yml      | 59 +++++++++++++++++++++++++++++++++++
>  2 files changed, 60 insertions(+)
>  create mode 100644 .gitlab-ci.d/windows.yml

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 :|



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [RFC PATCH] gitlab-ci: Test compilation on Windows with MSYS2
  2021-07-09  8:20 ` Daniel P. Berrangé
@ 2021-07-09 14:34   ` Thomas Huth
  2021-07-09 14:38     ` Daniel P. Berrangé
  0 siblings, 1 reply; 4+ messages in thread
From: Thomas Huth @ 2021-07-09 14:34 UTC (permalink / raw)
  To: Daniel P. Berrangé
  Cc: qemu-devel, Wainer dos Santos Moschetta,
	Philippe Mathieu-Daudé,
	Willian Rampazzo, Yonggang Luo, Alex Bennée

On 09/07/2021 10.20, Daniel P. Berrangé wrote:
> On Fri, Jul 09, 2021 at 09:52:18AM +0200, Thomas Huth wrote:
>> Gitlab also provides runners with Windows, we can use them to
>> test compilation with MSYS2.
>>
>> However, it takes quite a long time to set up the VM, so to
>> stay in the 1h time frame, we can only compile and check one
>> target here. And there is also still a problem with compiling
>> the multiboot.bin in pc-bios/optionrom/, so this is currently
>> disabled, too.
> 
> THe gitlab VM provisioning seems quite fast (2+1/2 minutes),
> so I guess you mean the time is sunk in intsalling msys
> packages.
> 
> In the crurent Cirrus job there's a bunch of code that is
> done to cache all the msys install, so that 90% of the time
> we're merely extracting a local zipfile.
> 
> I wonder if we can do similar caching here.

Maybe, yes. It might save 10 - 15 minutes or so, I guess.

> Perhaps even
> have 2 seprate jobs running on the windows runner. The
> first job can just build a zip file and store it as an
> artifact and cache it in gitlab for speed. The second
> job can do the actual build ?

I'm not sure ... the Windows builders are likely single-threaded on Gitlab, 
too, just like the Linux containers. So that the main problem - while we can 
compile with -j8 on Cirrus, it's 8 times slower on Gitlab.

  Thomas



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [RFC PATCH] gitlab-ci: Test compilation on Windows with MSYS2
  2021-07-09 14:34   ` Thomas Huth
@ 2021-07-09 14:38     ` Daniel P. Berrangé
  0 siblings, 0 replies; 4+ messages in thread
From: Daniel P. Berrangé @ 2021-07-09 14:38 UTC (permalink / raw)
  To: Thomas Huth
  Cc: qemu-devel, Wainer dos Santos Moschetta,
	Philippe Mathieu-Daudé,
	Willian Rampazzo, Yonggang Luo, Alex Bennée

On Fri, Jul 09, 2021 at 04:34:54PM +0200, Thomas Huth wrote:
> On 09/07/2021 10.20, Daniel P. Berrangé wrote:
> > On Fri, Jul 09, 2021 at 09:52:18AM +0200, Thomas Huth wrote:
> > > Gitlab also provides runners with Windows, we can use them to
> > > test compilation with MSYS2.
> > > 
> > > However, it takes quite a long time to set up the VM, so to
> > > stay in the 1h time frame, we can only compile and check one
> > > target here. And there is also still a problem with compiling
> > > the multiboot.bin in pc-bios/optionrom/, so this is currently
> > > disabled, too.
> > 
> > THe gitlab VM provisioning seems quite fast (2+1/2 minutes),
> > so I guess you mean the time is sunk in intsalling msys
> > packages.
> > 
> > In the crurent Cirrus job there's a bunch of code that is
> > done to cache all the msys install, so that 90% of the time
> > we're merely extracting a local zipfile.
> > 
> > I wonder if we can do similar caching here.
> 
> Maybe, yes. It might save 10 - 15 minutes or so, I guess.
> 
> > Perhaps even
> > have 2 seprate jobs running on the windows runner. The
> > first job can just build a zip file and store it as an
> > artifact and cache it in gitlab for speed. The second
> > job can do the actual build ?
> 
> I'm not sure ... the Windows builders are likely single-threaded on Gitlab,
> too, just like the Linux containers. So that the main problem - while we can
> compile with -j8 on Cirrus, it's 8 times slower on Gitlab.

Ah yes, good point.

Since we have cirrus integration for freebsd/macos now, we ought todo
the same for Windows too.  I auto-generated the freebsd/mac logic
with libvirt-ci, but I ignored msys since it was somewhat special
in its build commands. We can still set it up manually though to
integrate

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 :|



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-07-09 14:52 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-09  7:52 [RFC PATCH] gitlab-ci: Test compilation on Windows with MSYS2 Thomas Huth
2021-07-09  8:20 ` Daniel P. Berrangé
2021-07-09 14:34   ` Thomas Huth
2021-07-09 14:38     ` Daniel P. Berrangé

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.