diff mbox series

[PULL,28/54] configure: build ROMs with container-based cross compilers

Message ID 20221004130138.2299307-29-alex.bennee@linaro.org
State New
Headers show
Series [PULL,01/54] scripts/ci/setup: ninja missing from build-environment | expand

Commit Message

Alex Bennée Oct. 4, 2022, 1:01 p.m. UTC
From: Paolo Bonzini <pbonzini@redhat.com>

s390-ccw remains a bit more complex, because the -march=z900 test is done
only for the native cross compiler.  Otherwise, all that is needed is
to pass the (now mandatory) target argument to write_target_makefile.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220929114231.583801-29-alex.bennee@linaro.org>

Comments

Stefan Hajnoczi Oct. 6, 2022, 8:37 p.m. UTC | #1
On Tue, Oct 04, 2022 at 02:01:12PM +0100, Alex Bennée wrote:
> From: Paolo Bonzini <pbonzini@redhat.com>
> 
> s390-ccw remains a bit more complex, because the -march=z900 test is done
> only for the native cross compiler.  Otherwise, all that is needed is
> to pass the (now mandatory) target argument to write_target_makefile.
> 
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> Message-Id: <20220929114231.583801-29-alex.bennee@linaro.org>

This commit broke local builds on my machine because there were
root-owned files in my QEMU source tree from some testing I had done
previously. I think podman gives up when it encounters such files:

  Error: lsetxattr qemu/virtiofsd-1.sock: operation not permitted
  Traceback (most recent call last):
    File "qemu/tests/docker/docker.py", line 683, in <module>
      sys.exit(main())
    File "qemu/tests/docker/docker.py", line 679, in main
      return args.cmdobj.run(args, argv)
    File "qemu/tests/docker/docker.py", line 657, in run
      return Docker().run(cmd, False, quiet=args.quiet,
    File "qemu/tests/docker/docker.py", line 370, in run
      ret = self._do_check(["run", "--rm", "--label",
    File "qemu/tests/docker/docker.py", line 247, in _do_check
      return subprocess.check_call(self._command + cmd, **kwargs)
    File "/usr/lib64/python3.10/subprocess.py", line 369, in check_call
      raise CalledProcessError(retcode, cmd)
  subprocess.CalledProcessError: Command '['podman', 'run', '--rm', '--label', 'com.qemu.instance.uuid=e5f732db938a455cb4dca486dc9534d6', '--userns=keep-id', '-u', '1000', '-w', 'qemu/build/pc-bios/s390-ccw', '-v', 'qemu/build/pc-bios/s390-ccw:qemu/build/pc-bios/s390-ccw:rw', '-v', 'qemu:qemu:ro,z', 'qemu/debian-s390x-cross', 's390x-linux-gnu-gcc', '-Wall', '-ffreestanding', '-fno-delete-null-pointer-checks', '-fno-common', '-fPIE', '-fwrapv', '-fno-strict-aliasing', '-fno-asynchronous-unwind-tables', '-msoft-float', '-std=gnu99', '-march=z10', '-O2', '-g', '-nostdinc', '-Iqemu/pc-bios/s390-ccw/../../roms/SLOF/lib/libc/include', '-Iqemu/pc-bios/s390-ccw/../../roms/SLOF/lib/libnet', '-DDHCPARCH=0x1F', '-MMD', '-MP', '-MT', 'ipv4.o', '-MF', 'ipv4.d', '-c', '-o', 'ipv4.o', 'qemu/pc-bios/s390-ccw/../../roms/SLOF/lib/libnet/ipv4.c']' returned non-zero exit status 126.

After removing those kinds of files from my source tree the build
completed successfully.

It would be nice if the build didn't trip up over this. My podman
version is 4.2.0.

Do you think we should do anything about this?

Stefan

> diff --git a/configure b/configure
> index c175650eb9..a54e17aca9 100755
> --- a/configure
> +++ b/configure
> @@ -2152,7 +2152,7 @@ probe_target_compiler() {
>      target_ranlib=
>      target_strip=
>    fi
> -  test -n "$target_cc"
> +  test -n "$target_cc" || test -n "$container_image"
>  }
>  
>  write_target_makefile() {
> @@ -2307,7 +2307,7 @@ if test "$targetos" != "darwin" && test "$targetos" != "sunos" && \
>      config_mak=pc-bios/optionrom/config.mak
>      echo "# Automatically generated by configure - do not modify" > $config_mak
>      echo "TOPSRC_DIR=$source_path" >> $config_mak
> -    write_target_makefile >> $config_mak
> +    write_target_makefile pc-bios/optionrom/all >> $config_mak
>  fi
>  
>  if test "$softmmu" = yes && probe_target_compiler ppc-softmmu; then
> @@ -2315,25 +2315,31 @@ if test "$softmmu" = yes && probe_target_compiler ppc-softmmu; then
>      config_mak=pc-bios/vof/config.mak
>      echo "# Automatically generated by configure - do not modify" > $config_mak
>      echo "SRC_DIR=$source_path/pc-bios/vof" >> $config_mak
> -    write_target_makefile >> $config_mak
> +    write_target_makefile pc-bios/vof/all >> $config_mak
>  fi
>  
>  # Only build s390-ccw bios if the compiler has -march=z900 or -march=z10
>  # (which is the lowest architecture level that Clang supports)
>  if test "$softmmu" = yes && probe_target_compiler s390x-softmmu; then
> -  write_c_skeleton
> -  do_compiler "$target_cc" $target_cc_cflags -march=z900 -o $TMPO -c $TMPC
> -  has_z900=$?
> -  if [ $has_z900 = 0 ] || do_compiler "$target_cc" $target_cc_cflags -march=z10 -msoft-float -Werror -o $TMPO -c $TMPC; then
> -    if [ $has_z900 != 0 ]; then
> -      echo "WARNING: Your compiler does not support the z900!"
> -      echo "         The s390-ccw bios will only work with guest CPUs >= z10."
> +  got_cross_cc=no
> +  if test -n "$target_cc"; then
> +    write_c_skeleton
> +    do_compiler "$target_cc" $target_cc_cflags -march=z900 -o $TMPO -c $TMPC
> +    has_z900=$?
> +    if [ $has_z900 = 0 ] || do_compiler "$target_cc" $target_cc_cflags -march=z10 -msoft-float -Werror -o $TMPO -c $TMPC; then
> +      if [ $has_z900 != 0 ]; then
> +        echo "WARNING: Your compiler does not support the z900!"
> +        echo "         The s390-ccw bios will only work with guest CPUs >= z10."
> +      fi
> +      got_cross_cc=yes
>      fi
> +  fi
> +  if test "$got_cross_cc" = yes || test -n "$container_image"; then
>      roms="$roms pc-bios/s390-ccw"
>      config_mak=pc-bios/s390-ccw/config-host.mak
>      echo "# Automatically generated by configure - do not modify" > $config_mak
>      echo "SRC_PATH=$source_path/pc-bios/s390-ccw" >> $config_mak
> -    write_target_makefile >> $config_mak
> +    write_target_makefile pc-bios/s390-ccw/all >> $config_mak
>      # SLOF is required for building the s390-ccw firmware on s390x,
>      # since it is using the libnet code from SLOF for network booting.
>      git_submodules="${git_submodules} roms/SLOF"
> @@ -2554,7 +2560,7 @@ for target in $target_list; do
>        ;;
>    esac
>  
> -  if probe_target_compiler $target || test -n "$container_image"; then
> +  if probe_target_compiler $target; then
>        test -n "$container_image" && build_static=y
>        mkdir -p "tests/tcg/$target"
>        config_target_mak=tests/tcg/$target/config-target.mak
> -- 
> 2.34.1
>
Daniel P. Berrangé Oct. 10, 2022, 12:54 p.m. UTC | #2
On Tue, Oct 04, 2022 at 02:01:12PM +0100, Alex Bennée wrote:
> From: Paolo Bonzini <pbonzini@redhat.com>
> 
> s390-ccw remains a bit more complex, because the -march=z900 test is done
> only for the native cross compiler.  Otherwise, all that is needed is
> to pass the (now mandatory) target argument to write_target_makefile.
> 
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> Message-Id: <20220929114231.583801-29-alex.bennee@linaro.org>

I'm not at all convinced this change was/is a good idea.

First of all, it causes 'make' to now download about 1 GB of
container images

  $ ./configure --target-list=x86_64-softmmu
  $ make
  ...snip...
  BUILD   debian-powerpc-test-cross
  Trying to pull registry.gitlab.com/qemu-project/qemu/qemu/debian-powerpc-test-cross:latest...
  Getting image source signatures
  Copying blob 2a205c8a1d36 [=>------------------------------------] 12.4MiB / 257.2MiB

  ...
  ...snip...
  
Despite downloading this image, it then proceeded to rebuild the
image from scratch, requiring another few 100MBs of downloads
of dpkgs. This time the download was without progress information
until it entirely failed due to a dead Debia mirror server, needing
a retry.

It then went on to download an s390x image which seems to have
two layers, each with 360 MB.

  BUILD   debian-s390x-cross
Trying to pull registry.gitlab.com/qemu-project/qemu/qemu/debian-s390x-cross:latest...
Getting image source signatures
Copying blob fc8d65e34cd5 [>-------------------------------------] 12.0MiB / 360.2MiB
Copying blob bd159e379b3b skipped: already exists  
Copying blob 13224e2971af [>-------------------------------------] 12.2MiB / 366.5MiB

So overall it was more than 1 GB of downloads when typing 'make'

I wasn't too amuzed by seeing this downloaded data , given that
I'm usually running off a 4G mobile connection, and it took a
very long time.


The progress information printed by docker when downloading
the images splatters all over the output meson displays, when
doing a parallel make making everything unintelligible.


Finally, I had requested only building x86_64, so we shouldn't
be doing anything related to ppc or s390 at all, but even if

AFAICT, it enables this downloading unconditionally merely by
having 'docker'/'podman' binaries installed, if you don't
otherwise have cross compuilers present.

I'd really not want to see any of this stuff downloaded without
an explicit opt-in choice at configure time.

I'm also a little concerned at what happens if we have to stop
publishing the containers at registry.gitlab.com in future. Are
we going to break the default 'make' for existing released QEMU
tarballs ?

Generally we've only relied on the gitlab infra for our CI
testing, so we have been free to change infra or alter the
way we publish images at any time, without risk of impact on
the released tarballs.

This isn't a theoretical problem, because GitLab has announced
their intention to limit storage usage in gitlab.com, and even
having joined the Open Source Program, our quota is only increased
from 5 GB to 25 GB.  I'd be concerned we're at risk of exceeding
that 25 GB limit, when they start to enforce it, requiring us to
move container image host to somewhere else such as quay.io


> diff --git a/configure b/configure
> index c175650eb9..a54e17aca9 100755
> --- a/configure
> +++ b/configure
> @@ -2152,7 +2152,7 @@ probe_target_compiler() {
>      target_ranlib=
>      target_strip=
>    fi
> -  test -n "$target_cc"
> +  test -n "$target_cc" || test -n "$container_image"
>  }
>  
>  write_target_makefile() {
> @@ -2307,7 +2307,7 @@ if test "$targetos" != "darwin" && test "$targetos" != "sunos" && \
>      config_mak=pc-bios/optionrom/config.mak
>      echo "# Automatically generated by configure - do not modify" > $config_mak
>      echo "TOPSRC_DIR=$source_path" >> $config_mak
> -    write_target_makefile >> $config_mak
> +    write_target_makefile pc-bios/optionrom/all >> $config_mak
>  fi
>  
>  if test "$softmmu" = yes && probe_target_compiler ppc-softmmu; then
> @@ -2315,25 +2315,31 @@ if test "$softmmu" = yes && probe_target_compiler ppc-softmmu; then
>      config_mak=pc-bios/vof/config.mak
>      echo "# Automatically generated by configure - do not modify" > $config_mak
>      echo "SRC_DIR=$source_path/pc-bios/vof" >> $config_mak
> -    write_target_makefile >> $config_mak
> +    write_target_makefile pc-bios/vof/all >> $config_mak
>  fi
>  
>  # Only build s390-ccw bios if the compiler has -march=z900 or -march=z10
>  # (which is the lowest architecture level that Clang supports)
>  if test "$softmmu" = yes && probe_target_compiler s390x-softmmu; then
> -  write_c_skeleton
> -  do_compiler "$target_cc" $target_cc_cflags -march=z900 -o $TMPO -c $TMPC
> -  has_z900=$?
> -  if [ $has_z900 = 0 ] || do_compiler "$target_cc" $target_cc_cflags -march=z10 -msoft-float -Werror -o $TMPO -c $TMPC; then
> -    if [ $has_z900 != 0 ]; then
> -      echo "WARNING: Your compiler does not support the z900!"
> -      echo "         The s390-ccw bios will only work with guest CPUs >= z10."
> +  got_cross_cc=no
> +  if test -n "$target_cc"; then
> +    write_c_skeleton
> +    do_compiler "$target_cc" $target_cc_cflags -march=z900 -o $TMPO -c $TMPC
> +    has_z900=$?
> +    if [ $has_z900 = 0 ] || do_compiler "$target_cc" $target_cc_cflags -march=z10 -msoft-float -Werror -o $TMPO -c $TMPC; then
> +      if [ $has_z900 != 0 ]; then
> +        echo "WARNING: Your compiler does not support the z900!"
> +        echo "         The s390-ccw bios will only work with guest CPUs >= z10."
> +      fi
> +      got_cross_cc=yes
>      fi
> +  fi
> +  if test "$got_cross_cc" = yes || test -n "$container_image"; then
>      roms="$roms pc-bios/s390-ccw"
>      config_mak=pc-bios/s390-ccw/config-host.mak
>      echo "# Automatically generated by configure - do not modify" > $config_mak
>      echo "SRC_PATH=$source_path/pc-bios/s390-ccw" >> $config_mak
> -    write_target_makefile >> $config_mak
> +    write_target_makefile pc-bios/s390-ccw/all >> $config_mak
>      # SLOF is required for building the s390-ccw firmware on s390x,
>      # since it is using the libnet code from SLOF for network booting.
>      git_submodules="${git_submodules} roms/SLOF"
> @@ -2554,7 +2560,7 @@ for target in $target_list; do
>        ;;
>    esac
>  
> -  if probe_target_compiler $target || test -n "$container_image"; then
> +  if probe_target_compiler $target; then
>        test -n "$container_image" && build_static=y
>        mkdir -p "tests/tcg/$target"
>        config_target_mak=tests/tcg/$target/config-target.mak
> -- 
> 2.34.1
> 
> 

With regards,
Daniel
Daniel P. Berrangé Oct. 10, 2022, 1:07 p.m. UTC | #3
On Mon, Oct 10, 2022 at 01:54:16PM +0100, Daniel P. Berrangé wrote:
> On Tue, Oct 04, 2022 at 02:01:12PM +0100, Alex Bennée wrote:
> > From: Paolo Bonzini <pbonzini@redhat.com>
> > 
> > s390-ccw remains a bit more complex, because the -march=z900 test is done
> > only for the native cross compiler.  Otherwise, all that is needed is
> > to pass the (now mandatory) target argument to write_target_makefile.
> > 
> > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> > Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> > Message-Id: <20220929114231.583801-29-alex.bennee@linaro.org>
> 
> I'm not at all convinced this change was/is a good idea.
> 
> First of all, it causes 'make' to now download about 1 GB of
> container images
> 
>   $ ./configure --target-list=x86_64-softmmu
>   $ make
>   ...snip...
>   BUILD   debian-powerpc-test-cross
>   Trying to pull registry.gitlab.com/qemu-project/qemu/qemu/debian-powerpc-test-cross:latest...
>   Getting image source signatures
>   Copying blob 2a205c8a1d36 [=>------------------------------------] 12.4MiB / 257.2MiB
> 
>   ...
>   ...snip...
>   
> Despite downloading this image, it then proceeded to rebuild the
> image from scratch, requiring another few 100MBs of downloads
> of dpkgs. This time the download was without progress information
> until it entirely failed due to a dead Debia mirror server, needing
> a retry.

This failure seems worse than I realized.  It also failed on a
non-responsive mirror when re-building the s390 image. WHen I
re-ran 'make' it definitely did not retry the re-build process,
as 'BUILD debian-s390x-cross' was instantaneous. So it looks
like it is using the downloaded cached image, despite the previous
'make' apparently considering that to have been outdated content
needing a rebuild.

FWIW the  failure output was:

  BUILD   debian-s390x-cross
Trying to pull registry.gitlab.com/qemu-project/qemu/qemu/debian-s390x-cross:latest...
Getting image source signatures
Copying blob fc8d65e34cd5 [===================================>--] 341.6MiB / 360.2MiB
Copying blob fc8d65e34cd5 done  
Copying blob bd159e379b3b skipped: already exists  
Copying blob 13224e2971af done  
Copying config 67a127f7cd done  
Writing manifest to image destination
Storing signatures
debconf: delaying package configuration, since apt-utils is not installed
E: Failed to fetch http://deb.debian.org/debian/pool/main/s/systemd/systemd_247.3-7%2bdeb11u1_amd64.deb  400  Bad Request [IP: 199.232.122.132 80]
E: Failed to fetch http://deb.debian.org/debian/pool/main/p/perl/perl_5.32.1-4%2bdeb11u2_amd64.deb  Error reading from server - read (104: Connection reset by peer) [IP: 199.232.122.132 80]
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
Error: error building at STEP "RUN export DEBIAN_FRONTEND=noninteractive &&     apt-get update &&     apt-get install -y eatmydata &&     eatmydata apt-get dist-upgrade -y &&     eatmydata apt-get install --no-install-recommends -y             bash             bc             bison             bsdextrautils             bzip2             ca-certificates             ccache             dbus             debianutils             diffutils             exuberant-ctags             findutils             flex             gcovr             genisoimage             gettext             git             hostname             libglib2.0-dev             libpcre2-dev             libspice-protocol-dev             llvm             locales             make             meson             ncat             ninja-build             openssh-client             perl-base             pkgconf             python3             python3-numpy             python3-opencv             python3-pillow             python3-pip             python3-sphinx             python3-sphinx-rtd-theme             python3-venv             python3-yaml             rpm2cpio             sed             sparse             tar             tesseract-ocr             tesseract-ocr-eng             texinfo &&     eatmydata apt-get autoremove -y &&     eatmydata apt-get autoclean -y &&     sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen &&     dpkg-reconfigure locales": error while running runtime: exit status 100
Traceback (most recent call last):
  File "/home/berrange/src/virt/qemu/tests/docker/docker.py", line 683, in <module>
    sys.exit(main())
  File "/home/berrange/src/virt/qemu/tests/docker/docker.py", line 679, in main
    return args.cmdobj.run(args, argv)
  File "/home/berrange/src/virt/qemu/tests/docker/docker.py", line 493, in run
    dkr.build_image(tag, docker_dir, dockerfile,
  File "/home/berrange/src/virt/qemu/tests/docker/docker.py", line 343, in build_image
    self._do_check(build_args,
  File "/home/berrange/src/virt/qemu/tests/docker/docker.py", line 247, in _do_check
    return subprocess.check_call(self._command + cmd, **kwargs)
  File "/usr/lib64/python3.10/subprocess.py", line 369, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['podman', 'build', '-t', 'qemu/debian-s390x-cross', '-f', '/tmp/docker_buildt03fabg5/tmp3xpdzx90.docker', '--cache-from', 'registry.gitlab.com/qemu-project/qemu/qemu/debian-s390x-cross', '/tmp/docker_buildt03fabg5']' returned non-zero exit status 100.
make[1]: *** [/home/berrange/src/virt/qemu/tests/docker/Makefile.include:38: docker-image-debian-s390x-cross] Error 1
make[1]: Leaving directory '/home/berrange/src/virt/qemu/build'
make: *** [GNUmakefile:11: all] Error 2


With regards,
Daniel
Alex Bennée Oct. 10, 2022, 1:47 p.m. UTC | #4
Daniel P. Berrangé <berrange@redhat.com> writes:

> On Tue, Oct 04, 2022 at 02:01:12PM +0100, Alex Bennée wrote:
>> From: Paolo Bonzini <pbonzini@redhat.com>
>> 
>> s390-ccw remains a bit more complex, because the -march=z900 test is done
>> only for the native cross compiler.  Otherwise, all that is needed is
>> to pass the (now mandatory) target argument to write_target_makefile.
>> 
>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>> Message-Id: <20220929114231.583801-29-alex.bennee@linaro.org>
>
> I'm not at all convinced this change was/is a good idea.
>
> First of all, it causes 'make' to now download about 1 GB of
> container images
>
>   $ ./configure --target-list=x86_64-softmmu
>   $ make
>   ...snip...
>   BUILD   debian-powerpc-test-cross
>   Trying to pull registry.gitlab.com/qemu-project/qemu/qemu/debian-powerpc-test-cross:latest...
>   Getting image source signatures
>   Copying blob 2a205c8a1d36 [=>------------------------------------] 12.4MiB / 257.2MiB
>
>   ...
>   ...snip...
>   
> Despite downloading this image, it then proceeded to rebuild the
> image from scratch, requiring another few 100MBs of downloads
> of dpkgs. This time the download was without progress information
> until it entirely failed due to a dead Debia mirror server, needing
> a retry.
>
> It then went on to download an s390x image which seems to have
> two layers, each with 360 MB.
>
>   BUILD   debian-s390x-cross
> Trying to pull registry.gitlab.com/qemu-project/qemu/qemu/debian-s390x-cross:latest...
> Getting image source signatures
> Copying blob fc8d65e34cd5 [>-------------------------------------] 12.0MiB / 360.2MiB
> Copying blob bd159e379b3b skipped: already exists  
> Copying blob 13224e2971af [>-------------------------------------] 12.2MiB / 366.5MiB
>
> So overall it was more than 1 GB of downloads when typing 'make'
>
> I wasn't too amuzed by seeing this downloaded data , given that
> I'm usually running off a 4G mobile connection, and it took a
> very long time.

Yikes, sorry I didn't notice that (probably because I always have most
of the containers built).

I was hoping the next set of patches would reduce the total re-build
time to just the mirror operation by dumping docker.py and any caching
that breaks.

> The progress information printed by docker when downloading
> the images splatters all over the output meson displays, when
> doing a parallel make making everything unintelligible.
>
>
> Finally, I had requested only building x86_64, so we shouldn't
> be doing anything related to ppc or s390 at all, but even if
>
> AFAICT, it enables this downloading unconditionally merely by
> having 'docker'/'podman' binaries installed, if you don't
> otherwise have cross compuilers present.
>
> I'd really not want to see any of this stuff downloaded without
> an explicit opt-in choice at configure time.
>
> I'm also a little concerned at what happens if we have to stop
> publishing the containers at registry.gitlab.com in future. Are
> we going to break the default 'make' for existing released QEMU
> tarballs ?

We can easily move the registry around. The aim of this work is to
eventually stop local re-builds for most people.

>
> Generally we've only relied on the gitlab infra for our CI
> testing, so we have been free to change infra or alter the
> way we publish images at any time, without risk of impact on
> the released tarballs.
>
> This isn't a theoretical problem, because GitLab has announced
> their intention to limit storage usage in gitlab.com, and even
> having joined the Open Source Program, our quota is only increased
> from 5 GB to 25 GB.  I'd be concerned we're at risk of exceeding
> that 25 GB limit, when they start to enforce it, requiring us to
> move container image host to somewhere else such as quay.io
>
>
>> diff --git a/configure b/configure
>> index c175650eb9..a54e17aca9 100755
>> --- a/configure
>> +++ b/configure
>> @@ -2152,7 +2152,7 @@ probe_target_compiler() {
>>      target_ranlib=
>>      target_strip=
>>    fi
>> -  test -n "$target_cc"
>> +  test -n "$target_cc" || test -n "$container_image"
>>  }
>>  
>>  write_target_makefile() {
>> @@ -2307,7 +2307,7 @@ if test "$targetos" != "darwin" && test "$targetos" != "sunos" && \
>>      config_mak=pc-bios/optionrom/config.mak
>>      echo "# Automatically generated by configure - do not modify" > $config_mak
>>      echo "TOPSRC_DIR=$source_path" >> $config_mak
>> -    write_target_makefile >> $config_mak
>> +    write_target_makefile pc-bios/optionrom/all >> $config_mak
>>  fi
>>  
>>  if test "$softmmu" = yes && probe_target_compiler ppc-softmmu; then
>> @@ -2315,25 +2315,31 @@ if test "$softmmu" = yes && probe_target_compiler ppc-softmmu; then
>>      config_mak=pc-bios/vof/config.mak
>>      echo "# Automatically generated by configure - do not modify" > $config_mak
>>      echo "SRC_DIR=$source_path/pc-bios/vof" >> $config_mak
>> -    write_target_makefile >> $config_mak
>> +    write_target_makefile pc-bios/vof/all >> $config_mak
>>  fi
>>  
>>  # Only build s390-ccw bios if the compiler has -march=z900 or -march=z10
>>  # (which is the lowest architecture level that Clang supports)
>>  if test "$softmmu" = yes && probe_target_compiler s390x-softmmu; then
>> -  write_c_skeleton
>> -  do_compiler "$target_cc" $target_cc_cflags -march=z900 -o $TMPO -c $TMPC
>> -  has_z900=$?
>> -  if [ $has_z900 = 0 ] || do_compiler "$target_cc" $target_cc_cflags -march=z10 -msoft-float -Werror -o $TMPO -c $TMPC; then
>> -    if [ $has_z900 != 0 ]; then
>> -      echo "WARNING: Your compiler does not support the z900!"
>> -      echo "         The s390-ccw bios will only work with guest CPUs >= z10."
>> +  got_cross_cc=no
>> +  if test -n "$target_cc"; then
>> +    write_c_skeleton
>> +    do_compiler "$target_cc" $target_cc_cflags -march=z900 -o $TMPO -c $TMPC
>> +    has_z900=$?
>> +    if [ $has_z900 = 0 ] || do_compiler "$target_cc" $target_cc_cflags -march=z10 -msoft-float -Werror -o $TMPO -c $TMPC; then
>> +      if [ $has_z900 != 0 ]; then
>> +        echo "WARNING: Your compiler does not support the z900!"
>> +        echo "         The s390-ccw bios will only work with guest CPUs >= z10."
>> +      fi
>> +      got_cross_cc=yes
>>      fi
>> +  fi
>> +  if test "$got_cross_cc" = yes || test -n "$container_image"; then
>>      roms="$roms pc-bios/s390-ccw"
>>      config_mak=pc-bios/s390-ccw/config-host.mak
>>      echo "# Automatically generated by configure - do not modify" > $config_mak
>>      echo "SRC_PATH=$source_path/pc-bios/s390-ccw" >> $config_mak
>> -    write_target_makefile >> $config_mak
>> +    write_target_makefile pc-bios/s390-ccw/all >> $config_mak
>>      # SLOF is required for building the s390-ccw firmware on s390x,
>>      # since it is using the libnet code from SLOF for network booting.
>>      git_submodules="${git_submodules} roms/SLOF"
>> @@ -2554,7 +2560,7 @@ for target in $target_list; do
>>        ;;
>>    esac
>>  
>> -  if probe_target_compiler $target || test -n "$container_image"; then
>> +  if probe_target_compiler $target; then
>>        test -n "$container_image" && build_static=y
>>        mkdir -p "tests/tcg/$target"
>>        config_target_mak=tests/tcg/$target/config-target.mak
>> -- 
>> 2.34.1
>> 
>> 
>
> With regards,
> Daniel
diff mbox series

Patch

diff --git a/configure b/configure
index c175650eb9..a54e17aca9 100755
--- a/configure
+++ b/configure
@@ -2152,7 +2152,7 @@  probe_target_compiler() {
     target_ranlib=
     target_strip=
   fi
-  test -n "$target_cc"
+  test -n "$target_cc" || test -n "$container_image"
 }
 
 write_target_makefile() {
@@ -2307,7 +2307,7 @@  if test "$targetos" != "darwin" && test "$targetos" != "sunos" && \
     config_mak=pc-bios/optionrom/config.mak
     echo "# Automatically generated by configure - do not modify" > $config_mak
     echo "TOPSRC_DIR=$source_path" >> $config_mak
-    write_target_makefile >> $config_mak
+    write_target_makefile pc-bios/optionrom/all >> $config_mak
 fi
 
 if test "$softmmu" = yes && probe_target_compiler ppc-softmmu; then
@@ -2315,25 +2315,31 @@  if test "$softmmu" = yes && probe_target_compiler ppc-softmmu; then
     config_mak=pc-bios/vof/config.mak
     echo "# Automatically generated by configure - do not modify" > $config_mak
     echo "SRC_DIR=$source_path/pc-bios/vof" >> $config_mak
-    write_target_makefile >> $config_mak
+    write_target_makefile pc-bios/vof/all >> $config_mak
 fi
 
 # Only build s390-ccw bios if the compiler has -march=z900 or -march=z10
 # (which is the lowest architecture level that Clang supports)
 if test "$softmmu" = yes && probe_target_compiler s390x-softmmu; then
-  write_c_skeleton
-  do_compiler "$target_cc" $target_cc_cflags -march=z900 -o $TMPO -c $TMPC
-  has_z900=$?
-  if [ $has_z900 = 0 ] || do_compiler "$target_cc" $target_cc_cflags -march=z10 -msoft-float -Werror -o $TMPO -c $TMPC; then
-    if [ $has_z900 != 0 ]; then
-      echo "WARNING: Your compiler does not support the z900!"
-      echo "         The s390-ccw bios will only work with guest CPUs >= z10."
+  got_cross_cc=no
+  if test -n "$target_cc"; then
+    write_c_skeleton
+    do_compiler "$target_cc" $target_cc_cflags -march=z900 -o $TMPO -c $TMPC
+    has_z900=$?
+    if [ $has_z900 = 0 ] || do_compiler "$target_cc" $target_cc_cflags -march=z10 -msoft-float -Werror -o $TMPO -c $TMPC; then
+      if [ $has_z900 != 0 ]; then
+        echo "WARNING: Your compiler does not support the z900!"
+        echo "         The s390-ccw bios will only work with guest CPUs >= z10."
+      fi
+      got_cross_cc=yes
     fi
+  fi
+  if test "$got_cross_cc" = yes || test -n "$container_image"; then
     roms="$roms pc-bios/s390-ccw"
     config_mak=pc-bios/s390-ccw/config-host.mak
     echo "# Automatically generated by configure - do not modify" > $config_mak
     echo "SRC_PATH=$source_path/pc-bios/s390-ccw" >> $config_mak
-    write_target_makefile >> $config_mak
+    write_target_makefile pc-bios/s390-ccw/all >> $config_mak
     # SLOF is required for building the s390-ccw firmware on s390x,
     # since it is using the libnet code from SLOF for network booting.
     git_submodules="${git_submodules} roms/SLOF"
@@ -2554,7 +2560,7 @@  for target in $target_list; do
       ;;
   esac
 
-  if probe_target_compiler $target || test -n "$container_image"; then
+  if probe_target_compiler $target; then
       test -n "$container_image" && build_static=y
       mkdir -p "tests/tcg/$target"
       config_target_mak=tests/tcg/$target/config-target.mak