Various testing updates

- fix some gitlab container dependencies
   - report meson test results via JUnit
   - fix meson display of enabled cross compilers
   - convert more cross build containers to lcitool and Debian 11
   - re-factor cross compiler detection
   - use test cross-compilers for building ROMs
   - disable CI runs by default (see docs)
   - fix some broken links in development documentation
 -----BEGIN PGP SIGNATURE-----
 
 iQEzBAABCgAdFiEEZoWumedRZ7yvyN81+9DbCVqeKkQFAmKXqXYACgkQ+9DbCVqe
 KkTaogf+PpslFcqKzcT+CY2zkmen7+531fSHQ2oP6+lMPSuIDXi7jn/d/IXQ1gcI
 BfCvnAsictBzBqCPNhKYd8zxZwdzSYT3QtRWR4D86G26tyL5Zsuw+HrXuja/af7A
 RDULBl8HGKuZKY83QI1wTekjamfdFQeWn1t9051np5mPt0buPe4S3xELl0A/QGX+
 f3H9hqYeQ+tb11a5KXEsbWrQqKRCNrjFKI2iKyz5rZa73Go0ODjHrtTfBccBNJv4
 TBFxAW/XU+AUTI3vgtAsBIonEz7AcJyqlMffnx93GIttuChn5KRIIMPuz7Oztn89
 OFHtGajs3DSEWjfEg9xncCaL7EFasA==
 =9Iod
 -----END PGP SIGNATURE-----

Merge tag 'pull-testing-next-010622-3' of https://github.com/stsquad/qemu into staging

Various testing updates

  - fix some gitlab container dependencies
  - report meson test results via JUnit
  - fix meson display of enabled cross compilers
  - convert more cross build containers to lcitool and Debian 11
  - re-factor cross compiler detection
  - use test cross-compilers for building ROMs
  - disable CI runs by default (see docs)
  - fix some broken links in development documentation

# -----BEGIN PGP SIGNATURE-----
#
# iQEzBAABCgAdFiEEZoWumedRZ7yvyN81+9DbCVqeKkQFAmKXqXYACgkQ+9DbCVqe
# KkTaogf+PpslFcqKzcT+CY2zkmen7+531fSHQ2oP6+lMPSuIDXi7jn/d/IXQ1gcI
# BfCvnAsictBzBqCPNhKYd8zxZwdzSYT3QtRWR4D86G26tyL5Zsuw+HrXuja/af7A
# RDULBl8HGKuZKY83QI1wTekjamfdFQeWn1t9051np5mPt0buPe4S3xELl0A/QGX+
# f3H9hqYeQ+tb11a5KXEsbWrQqKRCNrjFKI2iKyz5rZa73Go0ODjHrtTfBccBNJv4
# TBFxAW/XU+AUTI3vgtAsBIonEz7AcJyqlMffnx93GIttuChn5KRIIMPuz7Oztn89
# OFHtGajs3DSEWjfEg9xncCaL7EFasA==
# =9Iod
# -----END PGP SIGNATURE-----
# gpg: Signature made Wed 01 Jun 2022 11:01:26 AM PDT
# gpg:                using RSA key 6685AE99E75167BCAFC8DF35FBD0DB095A9E2A44
# gpg: Good signature from "Alex Bennée (Master Work Key) <alex.bennee@linaro.org>" [undefined]
# gpg: WARNING: This key is not certified with a trusted signature!
# gpg:          There is no indication that the signature belongs to the owner.
# Primary key fingerprint: 6685 AE99 E751 67BC AFC8  DF35 FBD0 DB09 5A9E 2A44

* tag 'pull-testing-next-010622-3' of https://github.com/stsquad/qemu: (33 commits)
  docs/devel: clean-up the CI links in the docs
  gitlab: don't run CI jobs in forks by default
  gitlab: convert build/container jobs to .base_job_template
  gitlab: convert static checks to .base_job_template
  gitlab: convert Cirrus jobs to .base_job_template
  gitlab: introduce a common base job template
  configure: remove unused variables from config-host.mak
  configure: enable cross compilation of vof
  configure: enable cross-compilation of optionrom
  configure: enable cross-compilation of s390-ccw
  configure: move symlink configuration earlier
  configure: include more binutils in tests/tcg makefile
  configure: introduce --cross-prefix-*=
  configure: handle host compiler in probe_target_compiler
  configure: add missing cross compiler fallbacks
  tests/tcg: merge configure.sh back into main configure script
  tests/tcg: correct target CPU for sparc32
  configure, meson: move symlinking of ROMs to meson
  build: do a full build before running TCG tests
  build: add a more generic way to specify make->ninja dependencies
  ...

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
Richard Henderson 2022-06-01 12:15:30 -07:00
commit e2c2d57599
35 changed files with 1882 additions and 798 deletions

72
.gitlab-ci.d/base.yml Normal file
View File

@ -0,0 +1,72 @@
# The order of rules defined here is critically important.
# They are evaluated in order and first match wins.
#
# Thus we group them into a number of stages, ordered from
# most restrictive to least restrictive
#
.base_job_template:
rules:
#############################################################
# Stage 1: exclude scenarios where we definitely don't
# want jobs to run
#############################################################
# Cirrus jobs can't run unless the creds / target repo are set
- if: '$QEMU_JOB_CIRRUS && ($CIRRUS_GITHUB_REPO == "" || $CIRRUS_API_TOKEN == "")'
when: never
# Publishing jobs should only run on the default branch in upstream
- if: '$QEMU_JOB_PUBLISH == "1" && $CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH'
when: never
# Non-publishing jobs should only run on staging branches in upstream
- if: '$QEMU_JOB_PUBLISH != "1" && $CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH !~ /staging/'
when: never
# Jobs only intended for forks should always be skipped on upstream
- if: '$QEMU_JOB_ONLY_FORKS == "1" && $CI_PROJECT_NAMESPACE == "qemu-project"'
when: never
# Forks don't get pipelines unless QEMU_CI=1 or QEMU_CI=2 is set
- if: '$QEMU_CI != "1" && $QEMU_CI != "2" && $CI_PROJECT_NAMESPACE != "qemu-project"'
when: never
# Avocado jobs don't run in forks unless $QEMU_CI_AVOCADO_TESTING is set
- if: '$QEMU_JOB_AVOCADO && $QEMU_CI_AVOCADO_TESTING != "1" && $CI_PROJECT_NAMESPACE != "qemu-project"'
when: never
#############################################################
# Stage 2: fine tune execution of jobs in specific scenarios
# where the catch all logic is inapprorpaite
#############################################################
# Optional jobs should not be run unless manually triggered
- if: '$QEMU_JOB_OPTIONAL'
when: manual
allow_failure: true
# Skipped jobs should not be run unless manually triggered
- if: '$QEMU_JOB_SKIPPED'
when: manual
allow_failure: true
# Avocado jobs can be manually start in forks if $QEMU_CI_AVOCADO_TESTING is unset
- if: '$QEMU_JOB_AVOCADO && $CI_PROJECT_NAMESPACE != "qemu-project"'
when: manual
allow_failure: true
#############################################################
# Stage 3: catch all logic applying to any job not matching
# an earlier criteria
#############################################################
# Forks pipeline jobs don't start automatically unless
# QEMU_CI=2 is set
- if: '$QEMU_CI != "2" && $CI_PROJECT_NAMESPACE != "qemu-project"'
when: manual
# Jobs can run if any jobs they depend on were successfull
- when: on_success

View File

@ -1,4 +1,5 @@
.native_build_job_template: .native_build_job_template:
extends: .base_job_template
stage: build stage: build
image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest
before_script: before_script:
@ -27,6 +28,7 @@
fi fi
.common_test_job_template: .common_test_job_template:
extends: .base_job_template
stage: test stage: test
image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest
script: script:
@ -44,6 +46,8 @@
expire_in: 7 days expire_in: 7 days
paths: paths:
- build/meson-logs/testlog.txt - build/meson-logs/testlog.txt
reports:
junit: build/meson-logs/testlog.junit.xml
.avocado_test_job_template: .avocado_test_job_template:
extends: .common_test_job_template extends: .common_test_job_template
@ -75,15 +79,5 @@
after_script: after_script:
- cd build - cd build
- du -chs ${CI_PROJECT_DIR}/avocado-cache - du -chs ${CI_PROJECT_DIR}/avocado-cache
rules: variables:
# Only run these jobs if running on the mainstream namespace, QEMU_JOB_AVOCADO: 1
# or if the user set the QEMU_CI_AVOCADO_TESTING variable (either
# in its namespace setting or via git-push option, see documentation
# in /.gitlab-ci.yml of this repository).
- if: '$CI_PROJECT_NAMESPACE == "qemu-project"'
when: on_success
- if: '$QEMU_CI_AVOCADO_TESTING'
when: on_success
# Otherwise, set to manual (the jobs are created but not run).
- when: manual
allow_failure: true

View File

@ -360,12 +360,11 @@ build-cfi-aarch64:
expire_in: 2 days expire_in: 2 days
paths: paths:
- build - build
rules: variables:
# FIXME: This job is often failing, likely due to out-of-memory problems in # FIXME: This job is often failing, likely due to out-of-memory problems in
# the constrained containers of the shared runners. Thus this is marked as # the constrained containers of the shared runners. Thus this is marked as
# manual until the situation has been solved. # skipped until the situation has been solved.
- when: manual QEMU_JOB_SKIPPED: 1
allow_failure: true
check-cfi-aarch64: check-cfi-aarch64:
extends: .native_test_job_template extends: .native_test_job_template
@ -402,12 +401,11 @@ build-cfi-ppc64-s390x:
expire_in: 2 days expire_in: 2 days
paths: paths:
- build - build
rules: variables:
# FIXME: This job is often failing, likely due to out-of-memory problems in # FIXME: This job is often failing, likely due to out-of-memory problems in
# the constrained containers of the shared runners. Thus this is marked as # the constrained containers of the shared runners. Thus this is marked as
# manual until the situation has been solved. # skipped until the situation has been solved.
- when: manual QEMU_JOB_SKIPPED: 1
allow_failure: true
check-cfi-ppc64-s390x: check-cfi-ppc64-s390x:
extends: .native_test_job_template extends: .native_test_job_template
@ -579,6 +577,7 @@ build-without-default-features:
MAKE_CHECK_ARGS: check-unit check-qtest SPEED=slow MAKE_CHECK_ARGS: check-unit check-qtest SPEED=slow
build-libvhost-user: build-libvhost-user:
extends: .base_job_template
stage: build stage: build
image: $CI_REGISTRY_IMAGE/qemu/fedora:latest image: $CI_REGISTRY_IMAGE/qemu/fedora:latest
needs: needs:
@ -595,10 +594,13 @@ build-tools-and-docs-debian:
extends: .native_build_job_template extends: .native_build_job_template
needs: needs:
job: amd64-debian-container job: amd64-debian-container
# when running on 'master' we use pre-existing container
optional: true
variables: variables:
IMAGE: debian-amd64 IMAGE: debian-amd64
MAKE_CHECK_ARGS: check-unit check-softfloat ctags TAGS cscope MAKE_CHECK_ARGS: check-unit check-softfloat ctags TAGS cscope
CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools
QEMU_JOB_PUBLISH: 1
artifacts: artifacts:
expire_in: 2 days expire_in: 2 days
paths: paths:
@ -618,6 +620,7 @@ build-tools-and-docs-debian:
# that users can see the results of their commits, regardless # that users can see the results of their commits, regardless
# of what topic branch they're currently using # of what topic branch they're currently using
pages: pages:
extends: .base_job_template
image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:latest image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:latest
stage: test stage: test
needs: needs:
@ -635,10 +638,5 @@ pages:
artifacts: artifacts:
paths: paths:
- public - public
rules: variables:
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' QEMU_JOB_PUBLISH: 1
when: on_success
- if: '$CI_PROJECT_NAMESPACE == "qemu-project"'
when: never
- if: '$CI_PROJECT_NAMESPACE != "qemu-project"'
when: on_success

View File

@ -11,6 +11,7 @@
# special care, because we can't just override it at the GitLab CI job # special care, because we can't just override it at the GitLab CI job
# definition level or we risk breaking it completely. # definition level or we risk breaking it completely.
.cirrus_build_job: .cirrus_build_job:
extends: .base_job_template
stage: build stage: build
image: registry.gitlab.com/libvirt/libvirt-ci/cirrus-run:master image: registry.gitlab.com/libvirt/libvirt-ci/cirrus-run:master
needs: [] needs: []
@ -40,11 +41,8 @@
<.gitlab-ci.d/cirrus/build.yml >.gitlab-ci.d/cirrus/$NAME.yml <.gitlab-ci.d/cirrus/build.yml >.gitlab-ci.d/cirrus/$NAME.yml
- cat .gitlab-ci.d/cirrus/$NAME.yml - cat .gitlab-ci.d/cirrus/$NAME.yml
- cirrus-run -v --show-build-log always .gitlab-ci.d/cirrus/$NAME.yml - cirrus-run -v --show-build-log always .gitlab-ci.d/cirrus/$NAME.yml
rules: variables:
# Allow on 'staging' branch and 'stable-X.Y-staging' branches only QEMU_JOB_CIRRUS: 1
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH !~ /staging/'
when: never
- if: "$CIRRUS_GITHUB_REPO && $CIRRUS_API_TOKEN"
x64-freebsd-12-build: x64-freebsd-12-build:
extends: .cirrus_build_job extends: .cirrus_build_job
@ -90,11 +88,11 @@ x64-macos-11-base-build:
# The following jobs run VM-based tests via KVM on a Linux-based Cirrus-CI job # The following jobs run VM-based tests via KVM on a Linux-based Cirrus-CI job
.cirrus_kvm_job: .cirrus_kvm_job:
extends: .base_job_template
stage: build stage: build
image: registry.gitlab.com/libvirt/libvirt-ci/cirrus-run:master image: registry.gitlab.com/libvirt/libvirt-ci/cirrus-run:master
needs: [] needs: []
timeout: 80m timeout: 80m
allow_failure: true
script: script:
- sed -e "s|[@]CI_REPOSITORY_URL@|$CI_REPOSITORY_URL|g" - sed -e "s|[@]CI_REPOSITORY_URL@|$CI_REPOSITORY_URL|g"
-e "s|[@]CI_COMMIT_REF_NAME@|$CI_COMMIT_REF_NAME|g" -e "s|[@]CI_COMMIT_REF_NAME@|$CI_COMMIT_REF_NAME|g"
@ -105,8 +103,10 @@ x64-macos-11-base-build:
<.gitlab-ci.d/cirrus/kvm-build.yml >.gitlab-ci.d/cirrus/$NAME.yml <.gitlab-ci.d/cirrus/kvm-build.yml >.gitlab-ci.d/cirrus/$NAME.yml
- cat .gitlab-ci.d/cirrus/$NAME.yml - cat .gitlab-ci.d/cirrus/$NAME.yml
- cirrus-run -v --show-build-log always .gitlab-ci.d/cirrus/$NAME.yml - cirrus-run -v --show-build-log always .gitlab-ci.d/cirrus/$NAME.yml
rules: variables:
- when: manual QEMU_JOB_CIRRUS: 1
QEMU_JOB_OPTIONAL: 1
x86-netbsd: x86-netbsd:
extends: .cirrus_kvm_job extends: .cirrus_kvm_job

View File

@ -27,30 +27,26 @@ arm64-debian-cross-container:
armel-debian-cross-container: armel-debian-cross-container:
extends: .container_job_template extends: .container_job_template
stage: containers-layer2 stage: containers
needs: ['amd64-debian10-container']
variables: variables:
NAME: debian-armel-cross NAME: debian-armel-cross
armhf-debian-cross-container: armhf-debian-cross-container:
extends: .container_job_template extends: .container_job_template
stage: containers-layer2 stage: containers
needs: ['amd64-debian10-container']
variables: variables:
NAME: debian-armhf-cross NAME: debian-armhf-cross
# We never want to build hexagon in the CI system and by default we # We never want to build hexagon in the CI system and by default we
# always want to refer to the master registry where it lives. # always want to refer to the master registry where it lives.
hexagon-cross-container: hexagon-cross-container:
extends: .base_job_template
image: docker:stable image: docker:stable
stage: containers stage: containers
rules:
- if: '$CI_PROJECT_NAMESPACE == "qemu-project"'
when: never
- when: always
variables: variables:
NAME: debian-hexagon-cross NAME: debian-hexagon-cross
GIT_DEPTH: 1 GIT_DEPTH: 1
QEMU_JOB_ONLY_FORKS: 1
services: services:
- docker:dind - docker:dind
before_script: before_script:
@ -90,8 +86,7 @@ mips64-debian-cross-container:
mips64el-debian-cross-container: mips64el-debian-cross-container:
extends: .container_job_template extends: .container_job_template
stage: containers-layer2 stage: containers
needs: ['amd64-debian10-container']
variables: variables:
NAME: debian-mips64el-cross NAME: debian-mips64el-cross
@ -104,8 +99,7 @@ mips-debian-cross-container:
mipsel-debian-cross-container: mipsel-debian-cross-container:
extends: .container_job_template extends: .container_job_template
stage: containers-layer2 stage: containers
needs: ['amd64-debian10-container']
variables: variables:
NAME: debian-mipsel-cross NAME: debian-mipsel-cross
@ -118,14 +112,13 @@ powerpc-test-cross-container:
ppc64el-debian-cross-container: ppc64el-debian-cross-container:
extends: .container_job_template extends: .container_job_template
stage: containers-layer2 stage: containers
needs: ['amd64-debian10-container']
variables: variables:
NAME: debian-ppc64el-cross NAME: debian-ppc64el-cross
riscv64-debian-cross-container: riscv64-debian-cross-container:
extends: .container_job_template extends: .container_job_template
stage: containers-layer2 stage: containers
# as we are currently based on 'sid/unstable' we may break so... # as we are currently based on 'sid/unstable' we may break so...
allow_failure: true allow_failure: true
variables: variables:
@ -135,6 +128,7 @@ riscv64-debian-cross-container:
riscv64-debian-test-cross-container: riscv64-debian-test-cross-container:
extends: .container_job_template extends: .container_job_template
stage: containers-layer2 stage: containers-layer2
needs: ['amd64-debian11-container']
variables: variables:
NAME: debian-riscv64-test-cross NAME: debian-riscv64-test-cross

View File

@ -1,4 +1,5 @@
.container_job_template: .container_job_template:
extends: .base_job_template
image: docker:stable image: docker:stable
stage: containers stage: containers
services: services:

View File

@ -14,8 +14,7 @@ amd64-debian11-container:
amd64-debian-container: amd64-debian-container:
extends: .container_job_template extends: .container_job_template
stage: containers-layer2 stage: containers
needs: ['amd64-debian10-container']
variables: variables:
NAME: debian-amd64 NAME: debian-amd64

View File

@ -1,4 +1,5 @@
.cross_system_build_job: .cross_system_build_job:
extends: .base_job_template
stage: build stage: build
image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest
timeout: 80m timeout: 80m
@ -24,6 +25,7 @@
# KVM), and set extra options (such disabling other accelerators) via the # KVM), and set extra options (such disabling other accelerators) via the
# $EXTRA_CONFIGURE_OPTS variable. # $EXTRA_CONFIGURE_OPTS variable.
.cross_accel_build_job: .cross_accel_build_job:
extends: .base_job_template
stage: build stage: build
image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest
timeout: 30m timeout: 30m
@ -36,6 +38,7 @@
- make -j$(expr $(nproc) + 1) all check-build $MAKE_CHECK_ARGS - make -j$(expr $(nproc) + 1) all check-build $MAKE_CHECK_ARGS
.cross_user_build_job: .cross_user_build_job:
extends: .base_job_template
stage: build stage: build
image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest
script: script:

View File

@ -62,6 +62,8 @@ cross-i386-user:
cross-i386-tci: cross-i386-tci:
extends: .cross_accel_build_job extends: .cross_accel_build_job
timeout: 60m timeout: 60m
needs:
job: i386-fedora-cross-container
variables: variables:
IMAGE: fedora-i386-cross IMAGE: fedora-i386-cross
ACCEL: tcg-interpreter ACCEL: tcg-interpreter

View File

@ -2,6 +2,7 @@
# https://gitlab.com/qemu-project/qemu/-/pipelines # https://gitlab.com/qemu-project/qemu/-/pipelines
include: include:
- local: '/.gitlab-ci.d/base.yml'
- local: '/.gitlab-ci.d/stages.yml' - local: '/.gitlab-ci.d/stages.yml'
- local: '/.gitlab-ci.d/edk2.yml' - local: '/.gitlab-ci.d/edk2.yml'
- local: '/.gitlab-ci.d/opensbi.yml' - local: '/.gitlab-ci.d/opensbi.yml'

View File

@ -1,4 +1,5 @@
check-patch: check-patch:
extends: .base_job_template
stage: build stage: build
image: python:3.10-alpine image: python:3.10-alpine
needs: [] needs: []
@ -6,15 +7,13 @@ check-patch:
- .gitlab-ci.d/check-patch.py - .gitlab-ci.d/check-patch.py
variables: variables:
GIT_DEPTH: 1000 GIT_DEPTH: 1000
QEMU_JOB_ONLY_FORKS: 1
before_script: before_script:
- apk -U add git perl - apk -U add git perl
rules:
- if: '$CI_PROJECT_NAMESPACE == "qemu-project"'
when: never
- when: on_success
allow_failure: true allow_failure: true
check-dco: check-dco:
extends: .base_job_template
stage: build stage: build
image: python:3.10-alpine image: python:3.10-alpine
needs: [] needs: []
@ -23,12 +22,9 @@ check-dco:
GIT_DEPTH: 1000 GIT_DEPTH: 1000
before_script: before_script:
- apk -U add git - apk -U add git
rules:
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
when: never
- when: on_success
check-python-pipenv: check-python-pipenv:
extends: .base_job_template
stage: test stage: test
image: $CI_REGISTRY_IMAGE/qemu/python:latest image: $CI_REGISTRY_IMAGE/qemu/python:latest
script: script:
@ -39,6 +35,7 @@ check-python-pipenv:
job: python-container job: python-container
check-python-tox: check-python-tox:
extends: .base_job_template
stage: test stage: test
image: $CI_REGISTRY_IMAGE/qemu/python:latest image: $CI_REGISTRY_IMAGE/qemu/python:latest
script: script:
@ -46,8 +43,6 @@ check-python-tox:
variables: variables:
GIT_DEPTH: 1 GIT_DEPTH: 1
QEMU_TOX_EXTRA_ARGS: --skip-missing-interpreters=false QEMU_TOX_EXTRA_ARGS: --skip-missing-interpreters=false
QEMU_JOB_OPTIONAL: 1
needs: needs:
job: python-container job: python-container
rules:
- when: manual
allow_failure: true

View File

@ -1,4 +1,5 @@
.shared_msys2_builder: .shared_msys2_builder:
extends: .base_job_template
tags: tags:
- shared-windows - shared-windows
- windows - windows

View File

@ -143,10 +143,9 @@ MAKE.q = $(findstring q,$(firstword $(filter-out --%,$(MAKEFLAGS))))
MAKE.nq = $(if $(word 2, $(MAKE.n) $(MAKE.q)),nq) MAKE.nq = $(if $(word 2, $(MAKE.n) $(MAKE.q)),nq)
NINJAFLAGS = $(if $V,-v) $(if $(MAKE.n), -n) $(if $(MAKE.k), -k0) \ NINJAFLAGS = $(if $V,-v) $(if $(MAKE.n), -n) $(if $(MAKE.k), -k0) \
$(filter-out -j, $(lastword -j1 $(filter -l% -j%, $(MAKEFLAGS)))) \ $(filter-out -j, $(lastword -j1 $(filter -l% -j%, $(MAKEFLAGS)))) \
-d keepdepfile
ninja-cmd-goals = $(or $(MAKECMDGOALS), all) ninja-cmd-goals = $(or $(MAKECMDGOALS), all)
ninja-cmd-goals += $(foreach t, $(.check.build-suites), $(.check-$t.deps)) ninja-cmd-goals += $(foreach g, $(MAKECMDGOALS), $(.ninja-goals.$g))))
ninja-cmd-goals += $(foreach t, $(.bench.build-suites), $(.bench-$t.deps))
makefile-targets := build.ninja ctags TAGS cscope dist clean uninstall makefile-targets := build.ninja ctags TAGS cscope dist clean uninstall
# "ninja -t targets" also lists all prerequisites. If build system # "ninja -t targets" also lists all prerequisites. If build system
@ -160,8 +159,8 @@ $(ninja-targets): run-ninja
# --output-sync line. # --output-sync line.
run-ninja: config-host.mak run-ninja: config-host.mak
ifneq ($(filter $(ninja-targets), $(ninja-cmd-goals)),) ifneq ($(filter $(ninja-targets), $(ninja-cmd-goals)),)
+$(quiet-@)$(if $(MAKE.nq),@:, $(NINJA) -d keepdepfile \ +$(if $(MAKE.nq),@:,$(quiet-@)$(NINJA) $(NINJAFLAGS) \
$(NINJAFLAGS) $(sort $(filter $(ninja-targets), $(ninja-cmd-goals))) | cat) $(sort $(filter $(ninja-targets), $(ninja-cmd-goals))) | cat)
endif endif
endif endif

606
configure vendored
View File

@ -109,6 +109,20 @@ error_exit() {
} }
do_compiler() { do_compiler() {
# Run the compiler, capturing its output to the log. First argument
# is compiler binary to execute.
local compiler="$1"
shift
if test -n "$BASH_VERSION"; then eval '
echo >>config.log "
funcs: ${FUNCNAME[*]}
lines: ${BASH_LINENO[*]}"
'; fi
echo $compiler "$@" >> config.log
$compiler "$@" >> config.log 2>&1 || return $?
}
do_compiler_werror() {
# Run the compiler, capturing its output to the log. First argument # Run the compiler, capturing its output to the log. First argument
# is compiler binary to execute. # is compiler binary to execute.
compiler="$1" compiler="$1"
@ -142,15 +156,15 @@ lines: ${BASH_LINENO[*]}"
} }
do_cc() { do_cc() {
do_compiler "$cc" $CPU_CFLAGS "$@" do_compiler_werror "$cc" $CPU_CFLAGS "$@"
} }
do_cxx() { do_cxx() {
do_compiler "$cxx" $CPU_CFLAGS "$@" do_compiler_werror "$cxx" $CPU_CFLAGS "$@"
} }
do_objc() { do_objc() {
do_compiler "$objcc" $CPU_CFLAGS "$@" do_compiler_werror "$objcc" $CPU_CFLAGS "$@"
} }
# Append $2 to the variable named $1, with space separation # Append $2 to the variable named $1, with space separation
@ -345,11 +359,14 @@ for opt do
;; ;;
--cross-cc-cflags-*) cc_arch=${opt#--cross-cc-cflags-}; cc_arch=${cc_arch%%=*} --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-cflags-}; cc_arch=${cc_arch%%=*}
eval "cross_cc_cflags_${cc_arch}=\$optarg" eval "cross_cc_cflags_${cc_arch}=\$optarg"
cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
;; ;;
--cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*} --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
eval "cross_cc_${cc_arch}=\$optarg" eval "cross_cc_${cc_arch}=\$optarg"
cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}" ;;
--cross-prefix-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-prefix-FOO option"
;;
--cross-prefix-*) cc_arch=${opt#--cross-prefix-}; cc_arch=${cc_arch%%=*}
eval "cross_prefix_${cc_arch}=\$optarg"
;; ;;
esac esac
done done
@ -376,7 +393,6 @@ fi
ar="${AR-${cross_prefix}ar}" ar="${AR-${cross_prefix}ar}"
as="${AS-${cross_prefix}as}" as="${AS-${cross_prefix}as}"
ccas="${CCAS-$cc}" ccas="${CCAS-$cc}"
cpp="${CPP-$cc -E}"
objcopy="${OBJCOPY-${cross_prefix}objcopy}" objcopy="${OBJCOPY-${cross_prefix}objcopy}"
ld="${LD-${cross_prefix}ld}" ld="${LD-${cross_prefix}ld}"
ranlib="${RANLIB-${cross_prefix}ranlib}" ranlib="${RANLIB-${cross_prefix}ranlib}"
@ -717,6 +733,8 @@ for opt do
;; ;;
--cross-cc-*) --cross-cc-*)
;; ;;
--cross-prefix-*)
;;
--enable-debug-info) meson_option_add -Ddebug=true --enable-debug-info) meson_option_add -Ddebug=true
;; ;;
--disable-debug-info) meson_option_add -Ddebug=false --disable-debug-info) meson_option_add -Ddebug=false
@ -943,11 +961,6 @@ case $git_submodules_action in
;; ;;
esac esac
if eval test -z "\${cross_cc_$cpu}"; then
eval "cross_cc_${cpu}=\$cc"
cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
fi
default_target_list="" default_target_list=""
mak_wilds="" mak_wilds=""
@ -1010,6 +1023,7 @@ Advanced options (experts only):
--extra-ldflags=LDFLAGS append extra linker flags LDFLAGS --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
--cross-cc-ARCH=CC use compiler when building ARCH guest test cases --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
--cross-cc-cflags-ARCH= use compiler flags when building ARCH guest tests --cross-cc-cflags-ARCH= use compiler flags when building ARCH guest tests
--cross-prefix-ARCH=PREFIX cross compiler prefix when building ARCH guest test cases
--make=MAKE use specified make [$make] --make=MAKE use specified make [$make]
--python=PYTHON use specified python [$python] --python=PYTHON use specified python [$python]
--meson=MESON use specified meson [$meson] --meson=MESON use specified meson [$meson]
@ -1801,6 +1815,324 @@ case "$slirp" in
;; ;;
esac esac
##########################################
# functions to probe cross compilers
container="no"
if test $use_containers = "yes"; then
if has "docker" || has "podman"; then
container=$($python $source_path/tests/docker/docker.py probe)
fi
fi
# cross compilers defaults, can be overridden with --cross-cc-ARCH
: ${cross_prefix_aarch64="aarch64-linux-gnu-"}
: ${cross_prefix_aarch64_be="$cross_prefix_aarch64"}
: ${cross_prefix_alpha="alpha-linux-gnu-"}
: ${cross_prefix_arm="arm-linux-gnueabihf-"}
: ${cross_prefix_armeb="$cross_prefix_arm"}
: ${cross_prefix_hexagon="hexagon-unknown-linux-musl-"}
: ${cross_prefix_hppa="hppa-linux-gnu-"}
: ${cross_prefix_i386="i686-linux-gnu-"}
: ${cross_prefix_m68k="m68k-linux-gnu-"}
: ${cross_prefix_microblaze="microblaze-linux-musl-"}
: ${cross_prefix_mips64el="mips64el-linux-gnuabi64-"}
: ${cross_prefix_mips64="mips64-linux-gnuabi64-"}
: ${cross_prefix_mipsel="mipsel-linux-gnu-"}
: ${cross_prefix_mips="mips-linux-gnu-"}
: ${cross_prefix_nios2="nios2-linux-gnu-"}
: ${cross_prefix_ppc="powerpc-linux-gnu-"}
: ${cross_prefix_ppc64="powerpc64-linux-gnu-"}
: ${cross_prefix_ppc64le="$cross_prefix_ppc64"}
: ${cross_prefix_riscv64="riscv64-linux-gnu-"}
: ${cross_prefix_s390x="s390x-linux-gnu-"}
: ${cross_prefix_sh4="sh4-linux-gnu-"}
: ${cross_prefix_sparc64="sparc64-linux-gnu-"}
: ${cross_prefix_sparc="$cross_prefix_sparc64"}
: ${cross_prefix_x86_64="x86_64-linux-gnu-"}
: ${cross_cc_aarch64_be="$cross_cc_aarch64"}
: ${cross_cc_cflags_aarch64_be="-mbig-endian"}
: ${cross_cc_armeb="$cross_cc_arm"}
: ${cross_cc_cflags_armeb="-mbig-endian"}
: ${cross_cc_hexagon="hexagon-unknown-linux-musl-clang"}
: ${cross_cc_cflags_hexagon="-mv67 -O2 -static"}
: ${cross_cc_cflags_i386="-m32"}
: ${cross_cc_cflags_ppc="-m32"}
: ${cross_cc_cflags_ppc64="-m64 -mbig-endian"}
: ${cross_cc_ppc64le="$cross_cc_ppc64"}
: ${cross_cc_cflags_ppc64le="-m64 -mlittle-endian"}
: ${cross_cc_cflags_sparc64="-m64 -mcpu=ultrasparc"}
: ${cross_cc_sparc="$cross_cc_sparc64"}
: ${cross_cc_cflags_sparc="-m32 -mcpu=supersparc"}
: ${cross_cc_cflags_x86_64="-m64"}
compute_target_variable() {
if eval test -n "\"\${cross_prefix_$1}\""; then
if eval has "\"\${cross_prefix_$1}\$3\""; then
eval "$2=\"\${cross_prefix_$1}\$3\""
fi
fi
}
probe_target_compiler() {
# reset all output variables
container_image=
container_hosts=
container_cross_cc=
container_cross_ar=
container_cross_as=
container_cross_ld=
container_cross_nm=
container_cross_objcopy=
container_cross_ranlib=
container_cross_strip=
target_cc=
target_ar=
target_as=
target_ld=
target_nm=
target_objcopy=
target_ranlib=
target_strip=
case $1 in
aarch64) container_hosts="x86_64 aarch64" ;;
alpha) container_hosts=x86_64 ;;
arm) container_hosts="x86_64 aarch64" ;;
cris) container_hosts=x86_64 ;;
hexagon) container_hosts=x86_64 ;;
hppa) container_hosts=x86_64 ;;
i386) container_hosts=x86_64 ;;
m68k) container_hosts=x86_64 ;;
microblaze) container_hosts=x86_64 ;;
mips64el) container_hosts=x86_64 ;;
mips64) container_hosts=x86_64 ;;
mipsel) container_hosts=x86_64 ;;
mips) container_hosts=x86_64 ;;
nios2) container_hosts=x86_64 ;;
ppc) container_hosts=x86_64 ;;
ppc64|ppc64le) container_hosts=x86_64 ;;
riscv64) container_hosts=x86_64 ;;
s390x) container_hosts=x86_64 ;;
sh4) container_hosts=x86_64 ;;
sparc64) container_hosts=x86_64 ;;
tricore) container_hosts=x86_64 ;;
x86_64) container_hosts="aarch64 ppc64el x86_64" ;;
xtensa*) container_hosts=x86_64 ;;
esac
for host in $container_hosts; do
test "$container" != no || continue
test "$host" = "$cpu" || continue
case $1 in
aarch64)
# We don't have any bigendian build tools so we only use this for AArch64
container_image=debian-arm64-cross
container_cross_prefix=aarch64-linux-gnu-
container_cross_cc=${container_cross_prefix}gcc-10
;;
alpha)
container_image=debian-alpha-cross
container_cross_prefix=alpha-linux-gnu-
;;
arm)
# We don't have any bigendian build tools so we only use this for ARM
container_image=debian-armhf-cross
container_cross_prefix=arm-linux-gnueabihf-
;;
cris)
container_image=fedora-cris-cross
container_cross_prefix=cris-linux-gnu-
;;
hexagon)
container_image=debian-hexagon-cross
container_cross_prefix=hexagon-unknown-linux-musl-
container_cross_cc=${container_cross_prefix}clang
;;
hppa)
container_image=debian-hppa-cross
container_cross_prefix=hppa-linux-gnu-
;;
i386)
container_image=fedora-i386-cross
container_cross_prefix=
;;
m68k)
container_image=debian-m68k-cross
container_cross_prefix=m68k-linux-gnu-
;;
microblaze)
container_image=debian-microblaze-cross
container_cross_prefix=microblaze-linux-musl-
;;
mips64el)
container_image=debian-mips64el-cross
container_cross_prefix=mips64el-linux-gnuabi64-
;;
mips64)
container_image=debian-mips64-cross
container_cross_prefix=mips64-linux-gnuabi64-
;;
mipsel)
container_image=debian-mipsel-cross
container_cross_prefix=mipsel-linux-gnu-
;;
mips)
container_image=debian-mips-cross
container_cross_prefix=mips-linux-gnu-
;;
nios2)
container_image=debian-nios2-cross
container_cross_prefix=nios2-linux-gnu-
;;
ppc)
container_image=debian-powerpc-test-cross
container_cross_prefix=powerpc-linux-gnu-
container_cross_cc=${container_cross_prefix}gcc-10
;;
ppc64|ppc64le)
container_image=debian-powerpc-test-cross
container_cross_prefix=powerpc${1#ppc}-linux-gnu-
container_cross_cc=${container_cross_prefix}gcc-10
;;
riscv64)
container_image=debian-riscv64-test-cross
container_cross_prefix=riscv64-linux-gnu-
;;
s390x)
container_image=debian-s390x-cross
container_cross_prefix=s390x-linux-gnu-
;;
sh4)
container_image=debian-sh4-cross
container_cross_prefix=sh4-linux-gnu-
;;
sparc64)
container_image=debian-sparc64-cross
container_cross_prefix=sparc64-linux-gnu-
;;
tricore)
container_image=debian-tricore-cross
container_cross_prefix=tricore-
container_cross_as=tricore-as
container_cross_ld=tricore-ld
break
;;
x86_64)
container_image=debian-amd64-cross
container_cross_prefix=x86_64-linux-gnu-
;;
xtensa*)
# FIXME: xtensa-linux-user?
container_hosts=x86_64
container_image=debian-xtensa-cross
# default to the dc232b cpu
container_cross_prefix=/opt/2020.07/xtensa-dc232b-elf/bin/xtensa-dc232b-elf-
;;
esac
: ${container_cross_cc:=${container_cross_prefix}gcc}
: ${container_cross_ar:=${container_cross_prefix}ar}
: ${container_cross_as:=${container_cross_prefix}as}
: ${container_cross_ld:=${container_cross_prefix}ld}
: ${container_cross_nm:=${container_cross_prefix}nm}
: ${container_cross_objcopy:=${container_cross_prefix}objcopy}
: ${container_cross_ranlib:=${container_cross_prefix}ranlib}
: ${container_cross_strip:=${container_cross_prefix}strip}
done
eval "target_cflags=\${cross_cc_cflags_$1}"
if eval test -n "\"\${cross_cc_$1}\""; then
if eval has "\"\${cross_cc_$1}\""; then
eval "target_cc=\"\${cross_cc_$1}\""
fi
else
compute_target_variable $1 target_cc gcc
fi
target_ccas=$target_cc
compute_target_variable $1 target_ar ar
compute_target_variable $1 target_as as
compute_target_variable $1 target_ld ld
compute_target_variable $1 target_nm nm
compute_target_variable $1 target_objcopy objcopy
compute_target_variable $1 target_ranlib ranlib
compute_target_variable $1 target_strip strip
if test "$1" = $cpu; then
: ${target_cc:=$cc}
: ${target_ccas:=$ccas}
: ${target_as:=$as}
: ${target_ld:=$ld}
: ${target_ar:=$ar}
: ${target_as:=$as}
: ${target_ld:=$ld}
: ${target_nm:=$nm}
: ${target_objcopy:=$objcopy}
: ${target_ranlib:=$ranlib}
: ${target_strip:=$strip}
fi
if test -n "$target_cc"; then
case $1 in
i386|x86_64)
if $target_cc --version | grep -qi "clang"; then
unset target_cc
fi
;;
esac
fi
}
probe_target_compilers() {
for i; do
probe_target_compiler $i
test -n "$target_cc" && return 0
done
}
write_target_makefile() {
if test -n "$target_cc"; then
echo "CC=$target_cc"
echo "CCAS=$target_ccas"
fi
if test -n "$target_ar"; then
echo "AR=$target_ar"
fi
if test -n "$target_as"; then
echo "AS=$target_as"
fi
if test -n "$target_ld"; then
echo "LD=$target_ld"
fi
if test -n "$target_nm"; then
echo "NM=$target_nm"
fi
if test -n "$target_objcopy"; then
echo "OBJCOPY=$target_objcopy"
fi
if test -n "$target_ranlib"; then
echo "RANLIB=$target_ranlib"
fi
if test -n "$target_strip"; then
echo "STRIP=$target_strip"
fi
}
write_container_target_makefile() {
if test -n "$container_cross_cc"; then
echo "CC=\$(DOCKER_SCRIPT) cc --cc $container_cross_cc -i qemu/$container_image -s $source_path --"
echo "CCAS=\$(DOCKER_SCRIPT) cc --cc $container_cross_cc -i qemu/$container_image -s $source_path --"
fi
echo "AR=\$(DOCKER_SCRIPT) cc --cc $container_cross_ar -i qemu/$container_image -s $source_path --"
echo "AS=\$(DOCKER_SCRIPT) cc --cc $container_cross_as -i qemu/$container_image -s $source_path --"
echo "LD=\$(DOCKER_SCRIPT) cc --cc $container_cross_ld -i qemu/$container_image -s $source_path --"
echo "NM=\$(DOCKER_SCRIPT) cc --cc $container_cross_nm -i qemu/$container_image -s $source_path --"
echo "OBJCOPY=\$(DOCKER_SCRIPT) cc --cc $container_cross_objcopy -i qemu/$container_image -s $source_path --"
echo "RANLIB=\$(DOCKER_SCRIPT) cc --cc $container_cross_ranlib -i qemu/$container_image -s $source_path --"
echo "STRIP=\$(DOCKER_SCRIPT) cc --cc $container_cross_strip -i qemu/$container_image -s $source_path --"
}
########################################## ##########################################
# End of CC checks # End of CC checks
# After here, no more $cc or $ld runs # After here, no more $cc or $ld runs
@ -1865,41 +2197,95 @@ if test "$QEMU_GA_VERSION" = ""; then
QEMU_GA_VERSION=$(cat $source_path/VERSION) QEMU_GA_VERSION=$(cat $source_path/VERSION)
fi fi
#######################################
# cross-compiled firmware targets
# Set up build tree symlinks that point back into the source tree
# (these can be both files and directories).
# Caution: avoid adding files or directories here using wildcards. This
# will result in problems later if a new file matching the wildcard is
# added to the source tree -- nothing will cause configure to be rerun
# so the build tree will be missing the link back to the new file, and
# tests might fail. Prefer to keep the relevant files in their own
# directory and symlink the directory instead.
LINKS="Makefile"
LINKS="$LINKS tests/tcg/Makefile.target"
LINKS="$LINKS pc-bios/optionrom/Makefile"
LINKS="$LINKS pc-bios/s390-ccw/Makefile"
LINKS="$LINKS pc-bios/vof/Makefile"
LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
LINKS="$LINKS tests/avocado tests/data"
LINKS="$LINKS tests/qemu-iotests/check"
LINKS="$LINKS python"
LINKS="$LINKS contrib/plugins/Makefile "
for f in $LINKS ; do
if [ -e "$source_path/$f" ]; then
mkdir -p `dirname ./$f`
symlink "$source_path/$f" "$f"
fi
done
# Mac OS X ships with a broken assembler # Mac OS X ships with a broken assembler
roms= roms=
if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \ probe_target_compilers i386 x86_64
if test -n "$target_cc" &&
test "$targetos" != "darwin" && test "$targetos" != "sunos" && \ test "$targetos" != "darwin" && test "$targetos" != "sunos" && \
test "$targetos" != "haiku" && test "$softmmu" = yes ; then test "$targetos" != "haiku" && test "$softmmu" = yes ; then
# Different host OS linkers have different ideas about the name of the ELF # Different host OS linkers have different ideas about the name of the ELF
# emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
# variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then if "$target_ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
ld_i386_emulation="$emu" ld_i386_emulation="$emu"
roms="optionrom"
break break
fi fi
done done
if test -n "$ld_i386_emulation"; then
roms="optionrom"
config_mak=pc-bios/optionrom/config.mak
echo "# Automatically generated by configure - do not modify" > $config_mak
echo "TOPSRC_DIR=$source_path" >> $config_mak
echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_mak
write_target_makefile >> $config_mak
fi
fi fi
# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900 probe_target_compilers ppc ppc64
# or -march=z10 (which is the lowest architecture level that Clang supports) if test -n "$target_cc" && test "$softmmu" = yes; then
if test "$cpu" = "s390x" ; then roms="$roms vof"
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
fi
# Only build s390-ccw bios if the compiler has -march=z900 or -march=z10
# (which is the lowest architecture level that Clang supports)
probe_target_compiler s390x
if test -n "$target_cc" && test "$softmmu" = yes; then
write_c_skeleton write_c_skeleton
compile_prog "-march=z900" "" do_compiler "$target_cc" $target_cc_cflags -march=z900 -o $TMPO -c $TMPC
has_z900=$? has_z900=$?
if [ $has_z900 = 0 ] || compile_object "-march=z10 -msoft-float -Werror"; then 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 if [ $has_z900 != 0 ]; then
echo "WARNING: Your compiler does not support the z900!" echo "WARNING: Your compiler does not support the z900!"
echo " The s390-ccw bios will only work with guest CPUs >= z10." echo " The s390-ccw bios will only work with guest CPUs >= z10."
fi fi
roms="$roms s390-ccw" roms="$roms 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
# SLOF is required for building the s390-ccw firmware on s390x, # SLOF is required for building the s390-ccw firmware on s390x,
# since it is using the libnet code from SLOF for network booting. # since it is using the libnet code from SLOF for network booting.
git_submodules="${git_submodules} roms/SLOF" git_submodules="${git_submodules} roms/SLOF"
fi fi
fi fi
#######################################
# generate config-host.mak
# Check that the C++ compiler exists and works with the C compiler. # Check that the C++ compiler exists and works with the C compiler.
# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
if has $cxx; then if has $cxx; then
@ -2011,12 +2397,6 @@ echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
echo "MESON=$meson" >> $config_host_mak echo "MESON=$meson" >> $config_host_mak
echo "NINJA=$ninja" >> $config_host_mak echo "NINJA=$ninja" >> $config_host_mak
echo "CC=$cc" >> $config_host_mak echo "CC=$cc" >> $config_host_mak
echo "AR=$ar" >> $config_host_mak
echo "AS=$as" >> $config_host_mak
echo "CCAS=$ccas" >> $config_host_mak
echo "CPP=$cpp" >> $config_host_mak
echo "OBJCOPY=$objcopy" >> $config_host_mak
echo "LD=$ld" >> $config_host_mak
echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
echo "QEMU_OBJCFLAGS=$QEMU_OBJCFLAGS" >> $config_host_mak echo "QEMU_OBJCFLAGS=$QEMU_OBJCFLAGS" >> $config_host_mak
@ -2025,8 +2405,6 @@ echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
echo "GLIB_BINDIR=$glib_bindir" >> $config_host_mak echo "GLIB_BINDIR=$glib_bindir" >> $config_host_mak
echo "GLIB_VERSION=$(pkg-config --modversion glib-2.0)" >> $config_host_mak echo "GLIB_VERSION=$(pkg-config --modversion glib-2.0)" >> $config_host_mak
echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
echo "STRIP=$strip" >> $config_host_mak
echo "EXESUF=$EXESUF" >> $config_host_mak echo "EXESUF=$EXESUF" >> $config_host_mak
# use included Linux headers # use included Linux headers
@ -2084,55 +2462,136 @@ if test "$safe_stack" = "yes"; then
echo "CONFIG_SAFESTACK=y" >> $config_host_mak echo "CONFIG_SAFESTACK=y" >> $config_host_mak
fi fi
# If we're using a separate build tree, set it up now. # tests/tcg configuration
# LINKS are things to symlink back into the source tree (makefile=tests/tcg/Makefile.prereqs
# (these can be both files and directories). echo "# Automatically generated by configure - do not modify" > $makefile
# Caution: do not add files or directories here using wildcards. This
# will result in problems later if a new file matching the wildcard is
# added to the source tree -- nothing will cause configure to be rerun
# so the build tree will be missing the link back to the new file, and
# tests might fail. Prefer to keep the relevant files in their own
# directory and symlink the directory instead.
LINKS="Makefile"
LINKS="$LINKS tests/tcg/Makefile.target"
LINKS="$LINKS pc-bios/optionrom/Makefile"
LINKS="$LINKS pc-bios/s390-ccw/Makefile"
LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
LINKS="$LINKS tests/avocado tests/data"
LINKS="$LINKS tests/qemu-iotests/check"
LINKS="$LINKS python"
LINKS="$LINKS contrib/plugins/Makefile "
for bios_file in \
$source_path/pc-bios/*.bin \
$source_path/pc-bios/*.elf \
$source_path/pc-bios/*.lid \
$source_path/pc-bios/*.rom \
$source_path/pc-bios/*.dtb \
$source_path/pc-bios/*.img \
$source_path/pc-bios/openbios-* \
$source_path/pc-bios/u-boot.* \
$source_path/pc-bios/palcode-* \
$source_path/pc-bios/qemu_vga.ndrv
do config_host_mak=tests/tcg/config-host.mak
LINKS="$LINKS pc-bios/$(basename $bios_file)" echo "# Automatically generated by configure - do not modify" > $config_host_mak
done echo "SRC_PATH=$source_path" >> $config_host_mak
for f in $LINKS ; do echo "HOST_CC=$host_cc" >> $config_host_mak
if [ -e "$source_path/$f" ]; then
mkdir -p `dirname ./$f` tcg_tests_targets=
symlink "$source_path/$f" "$f" for target in $target_list; do
arch=${target%%-*}
probe_target_compiler ${arch}
config_target_mak=tests/tcg/config-$target.mak
echo "# Automatically generated by configure - do not modify" > $config_target_mak
echo "TARGET_NAME=$arch" >> $config_target_mak
case $target in
*-softmmu)
test -f $source_path/tests/tcg/$arch/Makefile.softmmu-target || continue
qemu="qemu-system-$arch"
;;
*-linux-user|*-bsd-user)
qemu="qemu-$arch"
;;
esac
got_cross_cc=no
unset build_static
if test -n "$target_cc"; then
write_c_skeleton
if ! do_compiler "$target_cc" $target_cflags \
-o $TMPE $TMPC -static ; then
# For host systems we might get away with building without -static
if do_compiler "$target_cc" $target_cflags \
-o $TMPE $TMPC ; then
got_cross_cc=yes
fi
else
got_cross_cc=yes
build_static=y
fi
elif test -n "$target_as" && test -n "$target_ld"; then
# Special handling for assembler only tests
case $target in
tricore-softmmu) got_cross_cc=yes ;;
esac
fi
if test $got_cross_cc = yes; then
# Test for compiler features for optional tests. We only do this
# for cross compilers because ensuring the docker containers based
# compilers is a requirememt for adding a new test that needs a
# compiler feature.
echo "BUILD_STATIC=$build_static" >> $config_target_mak
write_target_makefile >> $config_target_mak
case $target in
aarch64-*)
if do_compiler "$target_cc" $target_cflags \
-march=armv8.1-a+sve -o $TMPE $TMPC; then
echo "CROSS_CC_HAS_SVE=y" >> $config_target_mak
fi
if do_compiler "$target_cc" $target_cflags \
-march=armv8.1-a+sve2 -o $TMPE $TMPC; then
echo "CROSS_CC_HAS_SVE2=y" >> $config_target_mak
fi
if do_compiler "$target_cc" $target_cflags \
-march=armv8.3-a -o $TMPE $TMPC; then
echo "CROSS_CC_HAS_ARMV8_3=y" >> $config_target_mak
fi
if do_compiler "$target_cc" $target_cflags \
-mbranch-protection=standard -o $TMPE $TMPC; then
echo "CROSS_CC_HAS_ARMV8_BTI=y" >> $config_target_mak
fi
if do_compiler "$target_cc" $target_cflags \
-march=armv8.5-a+memtag -o $TMPE $TMPC; then
echo "CROSS_CC_HAS_ARMV8_MTE=y" >> $config_target_mak
fi
;;
ppc*)
if do_compiler "$target_cc" $target_cflags \
-mpower8-vector -o $TMPE $TMPC; then
echo "CROSS_CC_HAS_POWER8_VECTOR=y" >> $config_target_mak
fi
if do_compiler "$target_cc" $target_cflags \
-mpower10 -o $TMPE $TMPC; then
echo "CROSS_CC_HAS_POWER10=y" >> $config_target_mak
fi
;;
i386-linux-user)
if do_compiler "$target_cc" $target_cflags \
-Werror -fno-pie -o $TMPE $TMPC; then
echo "CROSS_CC_HAS_I386_NOPIE=y" >> $config_target_mak
fi
;;
esac
elif test -n "$container_image"; then
echo "build-tcg-tests-$target: docker-image-$container_image" >> $makefile
echo "BUILD_STATIC=y" >> $config_target_mak
write_container_target_makefile >> $config_target_mak
case $target in
aarch64-*)
echo "CROSS_CC_HAS_SVE=y" >> $config_target_mak
echo "CROSS_CC_HAS_SVE2=y" >> $config_target_mak
echo "CROSS_CC_HAS_ARMV8_3=y" >> $config_target_mak
echo "CROSS_CC_HAS_ARMV8_BTI=y" >> $config_target_mak
echo "CROSS_CC_HAS_ARMV8_MTE=y" >> $config_target_mak
;;
ppc*)
echo "CROSS_CC_HAS_POWER8_VECTOR=y" >> $config_target_mak
echo "CROSS_CC_HAS_POWER10=y" >> $config_target_mak
;;
i386-linux-user)
echo "CROSS_CC_HAS_I386_NOPIE=y" >> $config_target_mak
;;
esac
got_cross_cc=yes
fi
if test $got_cross_cc = yes; then
mkdir -p tests/tcg/$target
echo "QEMU=$PWD/$qemu" >> $config_target_mak
echo "EXTRA_CFLAGS=$target_cflags" >> $config_target_mak
echo "run-tcg-tests-$target: $qemu\$(EXESUF)" >> $makefile
tcg_tests_targets="$tcg_tests_targets $target"
fi fi
done done
echo "TCG_TESTS_TARGETS=$tcg_tests_targets" >> $makefile)
(for i in $cross_cc_vars; do
export $i
done
export target_list source_path use_containers cpu host_cc
$source_path/tests/tcg/configure.sh)
config_mak=pc-bios/optionrom/config.mak
echo "# Automatically generated by configure - do not modify" > $config_mak
echo "TOPSRC_DIR=$source_path" >> $config_mak
if test "$skip_meson" = no; then if test "$skip_meson" = no; then
cross="config-meson.cross.new" cross="config-meson.cross.new"
@ -2257,7 +2716,6 @@ preserve_env() {
preserve_env AR preserve_env AR
preserve_env AS preserve_env AS
preserve_env CC preserve_env CC
preserve_env CPP
preserve_env CFLAGS preserve_env CFLAGS
preserve_env CXX preserve_env CXX
preserve_env CXXFLAGS preserve_env CXXFLAGS

View File

@ -1,3 +1,5 @@
.. _ci_var:
Custom CI/CD variables Custom CI/CD variables
====================== ======================
@ -28,7 +30,113 @@ For further information about how to set these variables, please refer to::
https://docs.gitlab.com/ee/user/project/push_options.html#push-options-for-gitlab-cicd https://docs.gitlab.com/ee/user/project/push_options.html#push-options-for-gitlab-cicd
Here is a list of the most used variables: Setting aliases in your git config
----------------------------------
You can use aliases to make it easier to push branches with different
CI configurations. For example define an alias for triggering CI:
.. code::
git config --local alias.push-ci "push -o ci.variable=QEMU_CI=1"
git config --local alias.push-ci-now "push -o ci.variable=QEMU_CI=2"
Which lets you run:
.. code::
git push-ci
to create the pipeline, or:
.. code::
git push-ci-now
to create and run the pipeline
Variable naming and grouping
----------------------------
The variables used by QEMU's CI configuration are grouped together
in a handful of namespaces
* QEMU_JOB_nnnn - variables to be defined in individual jobs
or templates, to influence the shared rules defined in the
.base_job_template.
* QEMU_CI_nnn - variables to be set by contributors in their
repository CI settings, or as git push variables, to influence
which jobs get run in a pipeline
* nnn - other misc variables not falling into the above
categories, or using different names for historical reasons
and not yet converted.
Maintainer controlled job variables
-----------------------------------
The following variables may be set when defining a job in the
CI configuration file.
QEMU_JOB_CIRRUS
~~~~~~~~~~~~~~~
The job makes use of Cirrus CI infrastructure, requiring the
configuration setup for cirrus-run to be present in the repository
QEMU_JOB_OPTIONAL
~~~~~~~~~~~~~~~~~
The job is expected to be successful in general, but is not run
by default due to need to conserve limited CI resources. It is
available to be started manually by the contributor in the CI
pipelines UI.
QEMU_JOB_ONLY_FORKS
~~~~~~~~~~~~~~~~~~~
The job results are only of interest to contributors prior to
submitting code. They are not required as part of the gating
CI pipeline.
QEMU_JOB_SKIPPED
~~~~~~~~~~~~~~~~
The job is not reliably successsful in general, so is not
currently suitable to be run by default. Ideally this should
be a temporary marker until the problems can be addressed, or
the job permanently removed.
QEMU_JOB_PUBLISH
~~~~~~~~~~~~~~~~
The job is for publishing content after a branch has been
merged into the upstream default branch.
QEMU_JOB_AVOCADO
~~~~~~~~~~~~~~~~
The job runs the Avocado integration test suite
Contributor controlled runtime variables
----------------------------------------
The following variables may be set by contributors to control
job execution
QEMU_CI
~~~~~~~
By default, no pipelines will be created on contributor forks
in order to preserve CI credits
Set this variable to 1 to create the pipelines, but leave all
the jobs to be manually started from the UI
Set this variable to 2 to create the pipelines and run all
the jobs immediately, as was historicaly behaviour
QEMU_CI_AVOCADO_TESTING QEMU_CI_AVOCADO_TESTING
~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~
@ -38,6 +146,12 @@ these artifacts are not already cached, downloading them make the jobs
reach the timeout limit). Set this variable to have the tests using the reach the timeout limit). Set this variable to have the tests using the
Avocado framework run automatically. Avocado framework run automatically.
Other misc variables
--------------------
These variables are primarily to control execution of jobs on
private runners
AARCH64_RUNNER_AVAILABLE AARCH64_RUNNER_AVAILABLE
~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~
If you've got access to an aarch64 host that can be used as a gitlab-CI If you've got access to an aarch64 host that can be used as a gitlab-CI

View File

@ -1,12 +1,13 @@
.. _ci:
== ==
CI CI
== ==
QEMU has configurations enabled for a number of different CI services. Most of QEMU's CI is run on GitLab's infrastructure although a number
The most up to date information about them and their status can be of other CI services are used for specialised purposes. The most up to
found at:: date information about them and their status can be found on the
`project wiki testing page <https://wiki.qemu.org/Testing/CI>`_.
https://wiki.qemu.org/Testing/CI
.. include:: ci-definitions.rst.inc .. include:: ci-definitions.rst.inc
.. include:: ci-jobs.rst.inc .. include:: ci-jobs.rst.inc

View File

@ -204,23 +204,25 @@ log`` for these keywords for example usage.
Test your patches Test your patches
~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~
Although QEMU has `continuous integration Although QEMU uses various :ref:`ci` services that attempt to test
services <Testing#Continuous_Integration>`__ that attempt to test patches submitted to the list, it still saves everyone time if you
patches submitted to the list, it still saves everyone time if you have have already tested that your patch compiles and works. Because QEMU
already tested that your patch compiles and works. Because QEMU is such is such a large project the default configuration won't create a
a large project, it's okay to use configure arguments to limit what is testing pipeline on GitLab when a branch is pushed. See the :ref:`CI
built for faster turnaround during your development time; but it is variable documentation<ci_var>` for details on how to control the
still wise to also check that your patches work with a full build before running of tests; but it is still wise to also check that your patches
submitting a series, especially if your changes might have an unintended work with a full build before submitting a series, especially if your
effect on other areas of the code you don't normally experiment with. changes might have an unintended effect on other areas of the code you
See `Testing <Testing>`__ for more details on what tests are available. don't normally experiment with. See :ref:`testing` for more details on
Also, it is a wise idea to include a testsuite addition as part of your what tests are available.
patches - either to ensure that future changes won't regress your new
feature, or to add a test which exposes the bug that the rest of your Also, it is a wise idea to include a testsuite addition as part of
series fixes. Keeping separate commits for the test and the fix allows your patches - either to ensure that future changes won't regress your
reviewers to rebase the test to occur first to prove it catches the new feature, or to add a test which exposes the bug that the rest of
problem, then again to place it last in the series so that bisection your series fixes. Keeping separate commits for the test and the fix
doesn't land on a known-broken state. allows reviewers to rebase the test to occur first to prove it catches
the problem, then again to place it last in the series so that
bisection doesn't land on a known-broken state.
.. _submitting_your_patches: .. _submitting_your_patches:

View File

@ -1,3 +1,5 @@
.. _testing:
Testing in QEMU Testing in QEMU
=============== ===============

View File

@ -3735,12 +3735,8 @@ foreach target: target_dirs
config_cross_tcg = keyval.load(tcg_mak) config_cross_tcg = keyval.load(tcg_mak)
target = config_cross_tcg['TARGET_NAME'] target = config_cross_tcg['TARGET_NAME']
compiler = '' compiler = ''
if 'DOCKER_CROSS_CC_GUEST' in config_cross_tcg if 'CC' in config_cross_tcg
summary_info += {target + ' tests': config_cross_tcg['DOCKER_CROSS_CC_GUEST'] + summary_info += {target + ' tests': config_cross_tcg['CC']}
' via ' + config_cross_tcg['DOCKER_IMAGE']}
elif 'CROSS_CC_GUEST' in config_cross_tcg
summary_info += {target + ' tests'
: config_cross_tcg['CROSS_CC_GUEST'] }
endif endif
endif endif
endforeach endforeach

View File

@ -23,7 +23,7 @@ if unpack_edk2_blobs
endforeach endforeach
endif endif
blobs = files( blobs = [
'bios.bin', 'bios.bin',
'bios-256k.bin', 'bios-256k.bin',
'bios-microvm.bin', 'bios-microvm.bin',
@ -83,11 +83,18 @@ blobs = files(
'npcm7xx_bootrom.bin', 'npcm7xx_bootrom.bin',
'vof.bin', 'vof.bin',
'vof-nvram.bin', 'vof-nvram.bin',
) ]
if get_option('install_blobs') ln_s = [find_program('ln', required: true), '-sf']
install_data(blobs, install_dir: qemu_datadir) foreach f : blobs
endif roms += custom_target(f,
build_by_default: have_system,
output: f,
input: files('meson.build'), # dummy input
install: get_option('install_blobs'),
install_dir: qemu_datadir,
command: [ ln_s, meson.project_source_root() / 'pc-bios' / f, '@OUTPUT@' ])
endforeach
subdir('descriptors') subdir('descriptors')
subdir('keymaps') subdir('keymaps')

View File

@ -6,7 +6,6 @@ all: multiboot.bin multiboot_dma.bin linuxboot.bin linuxboot_dma.bin kvmvapic.bi
# Dummy command so that make thinks it has done something # Dummy command so that make thinks it has done something
@true @true
include ../../config-host.mak
CFLAGS = -O2 -g CFLAGS = -O2 -g
quiet-command = $(if $(V),$1,$(if $(2),@printf " %-7s %s\n" $2 $3 && $1, @$1)) quiet-command = $(if $(V),$1,$(if $(2),@printf " %-7s %s\n" $2 $3 && $1, @$1))
@ -44,13 +43,12 @@ Wa = -Wa,
override ASFLAGS += -32 override ASFLAGS += -32
override CFLAGS += $(call cc-option, $(Wa)-32) override CFLAGS += $(call cc-option, $(Wa)-32)
LD_I386_EMULATION ?= elf_i386
override LDFLAGS = -m $(LD_I386_EMULATION) -T $(SRC_DIR)/flat.lds override LDFLAGS = -m $(LD_I386_EMULATION) -T $(SRC_DIR)/flat.lds
pvh.img: pvh.o pvh_main.o pvh.img: pvh.o pvh_main.o
%.o: %.S %.o: %.S
$(call quiet-command,$(CPP) $(CPPFLAGS) -c -o - $< | $(AS) $(ASFLAGS) -o $@,"AS","$@") $(call quiet-command,$(CC) $(CPPFLAGS) -E -o - $< | $(AS) $(ASFLAGS) -o $@,"AS","$@")
%.o: %.c %.o: %.c
$(call quiet-command,$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@,"CC","$@") $(call quiet-command,$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@,"CC","$@")

View File

@ -2,8 +2,9 @@ all: build-all
# Dummy command so that make thinks it has done something # Dummy command so that make thinks it has done something
@true @true
include ../../config-host.mak include config-host.mak
CFLAGS = -O2 -g CFLAGS = -O2 -g
MAKEFLAGS += -rR
quiet-command = $(if $(V),$1,$(if $(2),@printf " %-7s %s\n" $2 $3 && $1, @$1)) quiet-command = $(if $(V),$1,$(if $(2),@printf " %-7s %s\n" $2 $3 && $1, @$1))
cc-option = $(if $(shell $(CC) $1 $2 -S -o /dev/null -xc /dev/null \ cc-option = $(if $(shell $(CC) $1 $2 -S -o /dev/null -xc /dev/null \
@ -11,7 +12,7 @@ cc-option = $(if $(shell $(CC) $1 $2 -S -o /dev/null -xc /dev/null \
VPATH_SUFFIXES = %.c %.h %.S %.m %.mak %.sh %.rc Kconfig% %.json.in VPATH_SUFFIXES = %.c %.h %.S %.m %.mak %.sh %.rc Kconfig% %.json.in
set-vpath = $(if $1,$(foreach PATTERN,$(VPATH_SUFFIXES),$(eval vpath $(PATTERN) $1))) set-vpath = $(if $1,$(foreach PATTERN,$(VPATH_SUFFIXES),$(eval vpath $(PATTERN) $1)))
$(call set-vpath, $(SRC_PATH)/pc-bios/s390-ccw) $(call set-vpath, $(SRC_PATH))
# Flags for dependency generation # Flags for dependency generation
QEMU_DGFLAGS = -MMD -MP -MT $@ -MF $(@D)/$(*F).d QEMU_DGFLAGS = -MMD -MP -MT $@ -MF $(@D)/$(*F).d
@ -49,8 +50,8 @@ s390-ccw.img: s390-ccw.elf
$(OBJECTS): Makefile $(OBJECTS): Makefile
ifneq ($(wildcard $(SRC_PATH)/roms/SLOF/lib/libnet),) ifneq ($(wildcard $(SRC_PATH)/../../roms/SLOF/lib/libnet),)
include $(SRC_PATH)/pc-bios/s390-ccw/netboot.mak include $(SRC_PATH)/netboot.mak
else else
s390-netboot.img: s390-netboot.img:
@echo "s390-netboot.img not built since roms/SLOF/ is not available." @echo "s390-netboot.img not built since roms/SLOF/ is not available."

View File

@ -1,5 +1,5 @@
SLOF_DIR := $(SRC_PATH)/roms/SLOF SLOF_DIR := $(SRC_PATH)/../../roms/SLOF
NETOBJS := start.o sclp.o cio.o virtio.o virtio-net.o jump2ipl.o netmain.o NETOBJS := start.o sclp.o cio.o virtio.o virtio-net.o jump2ipl.o netmain.o

View File

@ -1,11 +1,10 @@
all: build-all include config.mak
VPATH=$(SRC_DIR)
all: vof.bin
build-all: vof.bin CC ?= $(CROSS)gcc
LD ?= $(CROSS)ld
CROSS ?= OBJCOPY ?= $(CROSS)objcopy
CC = $(CROSS)gcc
LD = $(CROSS)ld
OBJCOPY = $(CROSS)objcopy
%.o: %.S %.o: %.S
$(CC) -m32 -mbig-endian -mcpu=power4 -c -o $@ $< $(CC) -m32 -mbig-endian -mcpu=power4 -c -o $@ $<
@ -14,10 +13,12 @@ OBJCOPY = $(CROSS)objcopy
$(CC) -m32 -mbig-endian -mcpu=power4 -c -fno-stack-protector -o $@ $< $(CC) -m32 -mbig-endian -mcpu=power4 -c -fno-stack-protector -o $@ $<
vof.elf: entry.o main.o ci.o bootmem.o libc.o vof.elf: entry.o main.o ci.o bootmem.o libc.o
$(LD) -nostdlib -e_start -Tvof.lds -EB -o $@ $^ $(LD) -nostdlib -e_start -T$(SRC_DIR)/vof.lds -EB -o $@ $^
%.bin: %.elf %.bin: %.elf
$(OBJCOPY) -O binary -j .text -j .data -j .toc -j .got2 $^ $@ $(OBJCOPY) -O binary -j .text -j .data -j .toc -j .got2 $^ $@
clean: clean:
rm -f *.o vof.bin vof.elf *~ rm -f *.o vof.bin vof.elf *~
.PHONY: all clean

View File

@ -81,12 +81,12 @@ def emit_prolog(suites, prefix):
def emit_suite_deps(name, suite, prefix): def emit_suite_deps(name, suite, prefix):
deps = ' '.join(suite.deps) deps = ' '.join(suite.deps)
targets = f'{prefix}-{name} {prefix}-report-{name}.junit.xml {prefix} {prefix}-report.junit.xml' targets = [f'{prefix}-{name}', f'{prefix}-report-{name}.junit.xml', f'{prefix}', f'{prefix}-report.junit.xml',
f'{prefix}-build']
print() print()
print(f'.{prefix}-{name}.deps = {deps}') print(f'.{prefix}-{name}.deps = {deps}')
print(f'ifneq ($(filter {prefix}-build {targets}, $(MAKECMDGOALS)),)') for t in targets:
print(f'.{prefix}.build-suites += {name}') print(f'.ninja-goals.{t} += $(.{prefix}-{name}.deps)')
print(f'endif')
def emit_suite(name, suite, prefix): def emit_suite(name, suite, prefix):
emit_suite_deps(name, suite, prefix) emit_suite_deps(name, suite, prefix)

View File

@ -37,7 +37,6 @@ export SRC_PATH
SPEED = quick SPEED = quick
-include tests/tcg/Makefile.prereqs -include tests/tcg/Makefile.prereqs
config-host.mak: $(SRC_PATH)/tests/tcg/configure.sh
tests/tcg/Makefile.prereqs: config-host.mak tests/tcg/Makefile.prereqs: config-host.mak
# Per guest TCG tests # Per guest TCG tests
@ -57,7 +56,7 @@ $(TCG_TESTS_TARGETS:%=build-tcg-tests-%): build-tcg-tests-%: $(BUILD_DIR)/tests/
"BUILD","$* guest-tests") "BUILD","$* guest-tests")
.PHONY: $(TCG_TESTS_TARGETS:%=run-tcg-tests-%) .PHONY: $(TCG_TESTS_TARGETS:%=run-tcg-tests-%)
$(TCG_TESTS_TARGETS:%=run-tcg-tests-%): run-tcg-tests-%: build-tcg-tests-% $(if $(CONFIG_PLUGIN),test-plugins) $(TCG_TESTS_TARGETS:%=run-tcg-tests-%): run-tcg-tests-%: build-tcg-tests-%
$(call quiet-command, \ $(call quiet-command, \
$(MAKE) -C tests/tcg/$* -f ../Makefile.target $(SUBDIR_MAKEFLAGS) \ $(MAKE) -C tests/tcg/$* -f ../Makefile.target $(SUBDIR_MAKEFLAGS) \
TARGET="$*" SRC_PATH="$(SRC_PATH)" SPEED=$(SPEED) run, \ TARGET="$*" SRC_PATH="$(SRC_PATH)" SPEED=$(SPEED) run, \
@ -74,6 +73,7 @@ $(TCG_TESTS_TARGETS:%=clean-tcg-tests-%): clean-tcg-tests-%:
build-tcg: $(BUILD_TCG_TARGET_RULES) build-tcg: $(BUILD_TCG_TARGET_RULES)
.PHONY: check-tcg .PHONY: check-tcg
.ninja-goals.check-tcg = all $(if $(CONFIG_PLUGIN),test-plugins)
check-tcg: $(RUN_TCG_TARGET_RULES) check-tcg: $(RUN_TCG_TARGET_RULES)
.PHONY: clean-tcg .PHONY: clean-tcg

View File

@ -89,15 +89,10 @@ DOCKER_PARTIAL_IMAGES += fedora
endif endif
docker-image-debian-alpha-cross: docker-image-debian10 docker-image-debian-alpha-cross: docker-image-debian10
docker-image-debian-armel-cross: docker-image-debian10
docker-image-debian-armhf-cross: docker-image-debian10
docker-image-debian-hppa-cross: docker-image-debian10 docker-image-debian-hppa-cross: docker-image-debian10
docker-image-debian-m68k-cross: docker-image-debian10 docker-image-debian-m68k-cross: docker-image-debian10
docker-image-debian-mips-cross: docker-image-debian10 docker-image-debian-mips-cross: docker-image-debian10
docker-image-debian-mips64-cross: docker-image-debian10 docker-image-debian-mips64-cross: docker-image-debian10
docker-image-debian-mips64el-cross: docker-image-debian10
docker-image-debian-mipsel-cross: docker-image-debian10
docker-image-debian-ppc64el-cross: docker-image-debian10
docker-image-debian-sh4-cross: docker-image-debian10 docker-image-debian-sh4-cross: docker-image-debian10
docker-image-debian-sparc64-cross: docker-image-debian10 docker-image-debian-sparc64-cross: docker-image-debian10

View File

@ -1,59 +1,153 @@
# THIS FILE WAS AUTO-GENERATED
# #
# Docker x86_64 target # $ lcitool dockerfile --layers all debian-11 qemu
# #
# This docker target builds on the Debian Buster base image. Further # https://gitlab.com/libvirt/libvirt-ci
# libraries which are not widely available are installed by hand.
#
FROM qemu/debian10
MAINTAINER Philippe Mathieu-Daudé <f4bug@amsat.org>
RUN apt update && \ FROM docker.io/library/debian:11-slim
DEBIAN_FRONTEND=noninteractive eatmydata \
apt build-dep -yy qemu
RUN apt update && \ RUN export DEBIAN_FRONTEND=noninteractive && \
DEBIAN_FRONTEND=noninteractive eatmydata \ apt-get update && \
apt install -y --no-install-recommends \ apt-get install -y eatmydata && \
cscope \ eatmydata apt-get dist-upgrade -y && \
genisoimage \ eatmydata apt-get install --no-install-recommends -y \
bash \
bc \
bsdextrautils \
bzip2 \
ca-certificates \
ccache \
clang \
dbus \
debianutils \
diffutils \
exuberant-ctags \ exuberant-ctags \
global \ findutils \
g++ \
gcc \
gcovr \
genisoimage \
gettext \
git \
hostname \
libaio-dev \
libasan5 \
libasound2-dev \
libattr1-dev \
libbpf-dev \
libbrlapi-dev \
libbz2-dev \ libbz2-dev \
liblzo2-dev \ libc6-dev \
libgcrypt20-dev \ libcacard-dev \
libcap-ng-dev \
libcapstone-dev \
libcurl4-gnutls-dev \
libdaxctl-dev \
libdrm-dev \
libepoxy-dev \
libfdt-dev \ libfdt-dev \
libffi-dev \
libfuse3-dev \
libgbm-dev \
libgcrypt20-dev \
libglib2.0-dev \
libglusterfs-dev \
libgnutls28-dev \
libgtk-3-dev \
libibumad-dev \
libibverbs-dev \
libiscsi-dev \
libjemalloc-dev \
libjpeg62-turbo-dev \
liblttng-ust-dev \
liblzo2-dev \
libncursesw5-dev \
libnfs-dev \
libnuma-dev \
libpam0g-dev \
libpcre2-dev \
libpixman-1-dev \
libpmem-dev \
libpng-dev \
libpulse-dev \
librbd-dev \
librdmacm-dev \ librdmacm-dev \
libsasl2-dev \ libsasl2-dev \
libsdl2-dev \
libsdl2-image-dev \
libseccomp-dev \
libselinux1-dev \
libslirp-dev \
libsnappy-dev \ libsnappy-dev \
libvte-dev \ libspice-protocol-dev \
netcat-openbsd \ libspice-server-dev \
libssh-gcrypt-dev \
libsystemd-dev \
libtasn1-6-dev \
libubsan1 \
libudev-dev \
liburing-dev \
libusb-1.0-0-dev \
libusbredirhost-dev \
libvdeplug-dev \
libvirglrenderer-dev \
libvte-2.91-dev \
libxen-dev \
libzstd-dev \
llvm \
locales \
make \
meson \
multipath-tools \
ncat \
nettle-dev \
ninja-build \
openssh-client \ openssh-client \
perl-base \
pkgconf \
python3 \
python3-numpy \ python3-numpy \
python3-opencv \ python3-opencv \
python3-venv python3-pillow \
python3-pip \
python3-sphinx \
python3-sphinx-rtd-theme \
python3-venv \
python3-yaml \
rpm2cpio \
sed \
sparse \
systemtap-sdt-dev \
tar \
tesseract-ocr \
tesseract-ocr-eng \
texinfo \
xfslibs-dev \
zlib1g-dev && \
eatmydata apt-get autoremove -y && \
eatmydata apt-get autoclean -y && \
sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
dpkg-reconfigure locales && \
dpkg-query --showformat '${Package}_${Version}_${Architecture}\n' --show > /packages.txt && \
mkdir -p /usr/libexec/ccache-wrappers && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/c++ && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/cc && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/clang && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/g++ && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/gcc
# virgl ENV LANG "en_US.UTF-8"
RUN apt update && \ ENV MAKE "/usr/bin/make"
DEBIAN_FRONTEND=noninteractive eatmydata \ ENV NINJA "/usr/bin/ninja"
apt install -y --no-install-recommends \ ENV PYTHON "/usr/bin/python3"
libegl1-mesa-dev \ ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
libepoxy-dev \ # netmap/cscope/global
libgbm-dev RUN DEBIAN_FRONTEND=noninteractive eatmydata \
RUN git clone https://gitlab.freedesktop.org/virgl/virglrenderer.git /usr/src/virglrenderer && \
cd /usr/src/virglrenderer && git checkout virglrenderer-0.8.0
RUN cd /usr/src/virglrenderer && ./autogen.sh && ./configure --disable-tests && make install
# netmap
RUN apt update && \
DEBIAN_FRONTEND=noninteractive eatmydata \
apt install -y --no-install-recommends \ apt install -y --no-install-recommends \
cscope\
global\
linux-headers-amd64 linux-headers-amd64
RUN git clone https://github.com/luigirizzo/netmap.git /usr/src/netmap RUN git clone https://github.com/luigirizzo/netmap.git /usr/src/netmap
RUN cd /usr/src/netmap && git checkout v11.3 RUN cd /usr/src/netmap && git checkout v11.3
RUN cd /usr/src/netmap/LINUX && ./configure --no-drivers --no-apps --kernel-dir=$(ls -d /usr/src/linux-headers-*-amd64) && make install RUN cd /usr/src/netmap/LINUX && ./configure --no-drivers --no-apps --kernel-dir=$(ls -d /usr/src/linux-headers-*-amd64) && make install
ENV QEMU_CONFIGURE_OPTS --enable-netmap ENV QEMU_CONFIGURE_OPTS --enable-netmap
RUN ldconfig
# gcrypt
ENV QEMU_CONFIGURE_OPTS $QEMU_CONFIGURE_OPTS --enable-gcrypt

View File

@ -1,26 +1,164 @@
# THIS FILE WAS AUTO-GENERATED
# #
# Docker armel cross-compiler target # $ lcitool dockerfile --layers all --cross armv6l debian-11 qemu
# #
# This docker target builds on the debian Stretch base image. # https://gitlab.com/libvirt/libvirt-ci
#
FROM qemu/debian10
MAINTAINER Philippe Mathieu-Daudé <f4bug@amsat.org>
# Add the foreign architecture we want and install dependencies FROM docker.io/library/debian:11-slim
RUN dpkg --add-architecture armel && \
apt update && \
apt install -yy crossbuild-essential-armel && \
DEBIAN_FRONTEND=noninteractive eatmydata \
apt build-dep -yy -a armel --arch-only qemu
# Specify the cross prefix for this image (see tests/docker/common.rc) 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 \
bsdextrautils \
bzip2 \
ca-certificates \
ccache \
dbus \
debianutils \
diffutils \
exuberant-ctags \
findutils \
gcovr \
genisoimage \
gettext \
git \
hostname \
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
ENV LANG "en_US.UTF-8"
ENV MAKE "/usr/bin/make"
ENV NINJA "/usr/bin/ninja"
ENV PYTHON "/usr/bin/python3"
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
RUN export DEBIAN_FRONTEND=noninteractive && \
dpkg --add-architecture armel && \
eatmydata apt-get update && \
eatmydata apt-get dist-upgrade -y && \
eatmydata apt-get install --no-install-recommends -y dpkg-dev && \
eatmydata apt-get install --no-install-recommends -y \
g++-arm-linux-gnueabi \
gcc-arm-linux-gnueabi \
libaio-dev:armel \
libasan5:armel \
libasound2-dev:armel \
libattr1-dev:armel \
libbpf-dev:armel \
libbrlapi-dev:armel \
libbz2-dev:armel \
libc6-dev:armel \
libcacard-dev:armel \
libcap-ng-dev:armel \
libcapstone-dev:armel \
libcurl4-gnutls-dev:armel \
libdaxctl-dev:armel \
libdrm-dev:armel \
libepoxy-dev:armel \
libfdt-dev:armel \
libffi-dev:armel \
libfuse3-dev:armel \
libgbm-dev:armel \
libgcrypt20-dev:armel \
libglib2.0-dev:armel \
libglusterfs-dev:armel \
libgnutls28-dev:armel \
libgtk-3-dev:armel \
libibumad-dev:armel \
libibverbs-dev:armel \
libiscsi-dev:armel \
libjemalloc-dev:armel \
libjpeg62-turbo-dev:armel \
liblttng-ust-dev:armel \
liblzo2-dev:armel \
libncursesw5-dev:armel \
libnfs-dev:armel \
libnuma-dev:armel \
libpam0g-dev:armel \
libpixman-1-dev:armel \
libpng-dev:armel \
libpulse-dev:armel \
librbd-dev:armel \
librdmacm-dev:armel \
libsasl2-dev:armel \
libsdl2-dev:armel \
libsdl2-image-dev:armel \
libseccomp-dev:armel \
libselinux1-dev:armel \
libslirp-dev:armel \
libsnappy-dev:armel \
libspice-server-dev:armel \
libssh-gcrypt-dev:armel \
libsystemd-dev:armel \
libtasn1-6-dev:armel \
libubsan1:armel \
libudev-dev:armel \
liburing-dev:armel \
libusb-1.0-0-dev:armel \
libusbredirhost-dev:armel \
libvdeplug-dev:armel \
libvirglrenderer-dev:armel \
libvte-2.91-dev:armel \
libzstd-dev:armel \
nettle-dev:armel \
systemtap-sdt-dev:armel \
xfslibs-dev:armel \
zlib1g-dev:armel && \
eatmydata apt-get autoremove -y && \
eatmydata apt-get autoclean -y && \
mkdir -p /usr/local/share/meson/cross && \
echo "[binaries]\n\
c = '/usr/bin/arm-linux-gnueabi-gcc'\n\
ar = '/usr/bin/arm-linux-gnueabi-gcc-ar'\n\
strip = '/usr/bin/arm-linux-gnueabi-strip'\n\
pkgconfig = '/usr/bin/arm-linux-gnueabi-pkg-config'\n\
\n\
[host_machine]\n\
system = 'linux'\n\
cpu_family = 'arm'\n\
cpu = 'arm'\n\
endian = 'little'" > /usr/local/share/meson/cross/arm-linux-gnueabi && \
dpkg-query --showformat '${Package}_${Version}_${Architecture}\n' --show > /packages.txt && \
mkdir -p /usr/libexec/ccache-wrappers && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/arm-linux-gnueabi-c++ && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/arm-linux-gnueabi-cc && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/arm-linux-gnueabi-g++ && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/arm-linux-gnueabi-gcc
ENV ABI "arm-linux-gnueabi"
ENV MESON_OPTS "--cross-file=arm-linux-gnueabi"
ENV QEMU_CONFIGURE_OPTS --cross-prefix=arm-linux-gnueabi- ENV QEMU_CONFIGURE_OPTS --cross-prefix=arm-linux-gnueabi-
ENV DEF_TARGET_LIST arm-softmmu,arm-linux-user,armeb-linux-user ENV DEF_TARGET_LIST arm-softmmu,arm-linux-user,armeb-linux-user
RUN apt update && \
DEBIAN_FRONTEND=noninteractive eatmydata \
apt install -y --no-install-recommends \
libbz2-dev:armel \
liblzo2-dev:armel \
librdmacm-dev:armel \
libsnappy-dev:armel

View File

@ -1,29 +1,165 @@
# THIS FILE WAS AUTO-GENERATED
# #
# Docker armhf cross-compiler target # $ lcitool dockerfile --layers all --cross armv7l debian-11 qemu
# #
# This docker target builds on the debian Stretch base image. # https://gitlab.com/libvirt/libvirt-ci
#
FROM qemu/debian10
# Add the foreign architecture we want and install dependencies FROM docker.io/library/debian:11-slim
RUN dpkg --add-architecture armhf
RUN apt update && \
DEBIAN_FRONTEND=noninteractive eatmydata \
apt install -y --no-install-recommends \
crossbuild-essential-armhf
RUN apt update && \
DEBIAN_FRONTEND=noninteractive eatmydata \
apt build-dep -yy -a armhf --arch-only qemu
# Specify the cross prefix for this image (see tests/docker/common.rc) RUN export DEBIAN_FRONTEND=noninteractive && \
ENV QEMU_CONFIGURE_OPTS --cross-prefix=arm-linux-gnueabihf- apt-get update && \
ENV DEF_TARGET_LIST arm-softmmu,arm-linux-user,armeb-linux-user apt-get install -y eatmydata && \
eatmydata apt-get dist-upgrade -y && \
eatmydata apt-get install --no-install-recommends -y \
bash \
bc \
bsdextrautils \
bzip2 \
ca-certificates \
ccache \
dbus \
debianutils \
diffutils \
exuberant-ctags \
findutils \
gcovr \
genisoimage \
gettext \
git \
hostname \
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
RUN apt update && \ ENV LANG "en_US.UTF-8"
DEBIAN_FRONTEND=noninteractive eatmydata \ ENV MAKE "/usr/bin/make"
apt install -y --no-install-recommends \ ENV NINJA "/usr/bin/ninja"
ENV PYTHON "/usr/bin/python3"
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
RUN export DEBIAN_FRONTEND=noninteractive && \
dpkg --add-architecture armhf && \
eatmydata apt-get update && \
eatmydata apt-get dist-upgrade -y && \
eatmydata apt-get install --no-install-recommends -y dpkg-dev && \
eatmydata apt-get install --no-install-recommends -y \
g++-arm-linux-gnueabihf \
gcc-arm-linux-gnueabihf \
libaio-dev:armhf \
libasan5:armhf \
libasound2-dev:armhf \
libattr1-dev:armhf \
libbpf-dev:armhf \
libbrlapi-dev:armhf \
libbz2-dev:armhf \ libbz2-dev:armhf \
libc6-dev:armhf \
libcacard-dev:armhf \
libcap-ng-dev:armhf \
libcapstone-dev:armhf \
libcurl4-gnutls-dev:armhf \
libdaxctl-dev:armhf \
libdrm-dev:armhf \
libepoxy-dev:armhf \
libfdt-dev:armhf \
libffi-dev:armhf \
libfuse3-dev:armhf \
libgbm-dev:armhf \
libgcrypt20-dev:armhf \
libglib2.0-dev:armhf \
libglusterfs-dev:armhf \
libgnutls28-dev:armhf \
libgtk-3-dev:armhf \
libibumad-dev:armhf \
libibverbs-dev:armhf \
libiscsi-dev:armhf \
libjemalloc-dev:armhf \
libjpeg62-turbo-dev:armhf \
liblttng-ust-dev:armhf \
liblzo2-dev:armhf \ liblzo2-dev:armhf \
libncursesw5-dev:armhf \
libnfs-dev:armhf \
libnuma-dev:armhf \
libpam0g-dev:armhf \
libpixman-1-dev:armhf \
libpng-dev:armhf \
libpulse-dev:armhf \
librbd-dev:armhf \
librdmacm-dev:armhf \ librdmacm-dev:armhf \
libsasl2-dev:armhf \
libsdl2-dev:armhf \
libsdl2-image-dev:armhf \
libseccomp-dev:armhf \
libselinux1-dev:armhf \
libslirp-dev:armhf \
libsnappy-dev:armhf \ libsnappy-dev:armhf \
libxen-dev:armhf libspice-server-dev:armhf \
libssh-gcrypt-dev:armhf \
libsystemd-dev:armhf \
libtasn1-6-dev:armhf \
libubsan1:armhf \
libudev-dev:armhf \
liburing-dev:armhf \
libusb-1.0-0-dev:armhf \
libusbredirhost-dev:armhf \
libvdeplug-dev:armhf \
libvirglrenderer-dev:armhf \
libvte-2.91-dev:armhf \
libxen-dev:armhf \
libzstd-dev:armhf \
nettle-dev:armhf \
systemtap-sdt-dev:armhf \
xfslibs-dev:armhf \
zlib1g-dev:armhf && \
eatmydata apt-get autoremove -y && \
eatmydata apt-get autoclean -y && \
mkdir -p /usr/local/share/meson/cross && \
echo "[binaries]\n\
c = '/usr/bin/arm-linux-gnueabihf-gcc'\n\
ar = '/usr/bin/arm-linux-gnueabihf-gcc-ar'\n\
strip = '/usr/bin/arm-linux-gnueabihf-strip'\n\
pkgconfig = '/usr/bin/arm-linux-gnueabihf-pkg-config'\n\
\n\
[host_machine]\n\
system = 'linux'\n\
cpu_family = 'arm'\n\
cpu = 'armhf'\n\
endian = 'little'" > /usr/local/share/meson/cross/arm-linux-gnueabihf && \
dpkg-query --showformat '${Package}_${Version}_${Architecture}\n' --show > /packages.txt && \
mkdir -p /usr/libexec/ccache-wrappers && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/arm-linux-gnueabihf-c++ && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/arm-linux-gnueabihf-cc && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/arm-linux-gnueabihf-g++ && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/arm-linux-gnueabihf-gcc
ENV ABI "arm-linux-gnueabihf"
ENV MESON_OPTS "--cross-file=arm-linux-gnueabihf"
ENV QEMU_CONFIGURE_OPTS --cross-prefix=arm-linux-gnueabihf-
ENV DEF_TARGET_LIST arm-softmmu,arm-linux-user

View File

@ -1,33 +1,162 @@
# THIS FILE WAS AUTO-GENERATED
# #
# Docker mips64el cross-compiler target # $ lcitool dockerfile --layers all --cross mips64el debian-11 qemu
#
# This docker target builds on the debian Stretch base image.
# #
# https://gitlab.com/libvirt/libvirt-ci
FROM qemu/debian10 FROM docker.io/library/debian:11-slim
MAINTAINER Philippe Mathieu-Daudé <f4bug@amsat.org> 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 \
bsdextrautils \
bzip2 \
ca-certificates \
ccache \
dbus \
debianutils \
diffutils \
exuberant-ctags \
findutils \
gcovr \
genisoimage \
gettext \
git \
hostname \
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
# Add the foreign architecture we want and install dependencies ENV LANG "en_US.UTF-8"
RUN dpkg --add-architecture mips64el && \ ENV MAKE "/usr/bin/make"
apt update && \ ENV NINJA "/usr/bin/ninja"
DEBIAN_FRONTEND=noninteractive eatmydata \ ENV PYTHON "/usr/bin/python3"
apt install -y --no-install-recommends \ ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
gcc-mips64el-linux-gnuabi64
RUN apt update && \ RUN export DEBIAN_FRONTEND=noninteractive && \
DEBIAN_FRONTEND=noninteractive eatmydata \ dpkg --add-architecture mips64el && \
apt build-dep -yy -a mips64el --arch-only qemu eatmydata apt-get update && \
eatmydata apt-get dist-upgrade -y && \
eatmydata apt-get install --no-install-recommends -y dpkg-dev && \
eatmydata apt-get install --no-install-recommends -y \
g++-mips64el-linux-gnuabi64 \
gcc-mips64el-linux-gnuabi64 \
libaio-dev:mips64el \
libasound2-dev:mips64el \
libattr1-dev:mips64el \
libbpf-dev:mips64el \
libbrlapi-dev:mips64el \
libbz2-dev:mips64el \
libc6-dev:mips64el \
libcacard-dev:mips64el \
libcap-ng-dev:mips64el \
libcapstone-dev:mips64el \
libcurl4-gnutls-dev:mips64el \
libdaxctl-dev:mips64el \
libdrm-dev:mips64el \
libepoxy-dev:mips64el \
libfdt-dev:mips64el \
libffi-dev:mips64el \
libfuse3-dev:mips64el \
libgbm-dev:mips64el \
libgcrypt20-dev:mips64el \
libglib2.0-dev:mips64el \
libglusterfs-dev:mips64el \
libgnutls28-dev:mips64el \
libgtk-3-dev:mips64el \
libibumad-dev:mips64el \
libibverbs-dev:mips64el \
libiscsi-dev:mips64el \
libjemalloc-dev:mips64el \
libjpeg62-turbo-dev:mips64el \
liblttng-ust-dev:mips64el \
liblzo2-dev:mips64el \
libncursesw5-dev:mips64el \
libnfs-dev:mips64el \
libnuma-dev:mips64el \
libpam0g-dev:mips64el \
libpixman-1-dev:mips64el \
libpng-dev:mips64el \
libpulse-dev:mips64el \
librbd-dev:mips64el \
librdmacm-dev:mips64el \
libsasl2-dev:mips64el \
libsdl2-dev:mips64el \
libsdl2-image-dev:mips64el \
libseccomp-dev:mips64el \
libselinux1-dev:mips64el \
libslirp-dev:mips64el \
libsnappy-dev:mips64el \
libspice-server-dev:mips64el \
libssh-gcrypt-dev:mips64el \
libsystemd-dev:mips64el \
libtasn1-6-dev:mips64el \
libudev-dev:mips64el \
liburing-dev:mips64el \
libusb-1.0-0-dev:mips64el \
libusbredirhost-dev:mips64el \
libvdeplug-dev:mips64el \
libvirglrenderer-dev:mips64el \
libvte-2.91-dev:mips64el \
libzstd-dev:mips64el \
nettle-dev:mips64el \
systemtap-sdt-dev:mips64el \
xfslibs-dev:mips64el \
zlib1g-dev:mips64el && \
eatmydata apt-get autoremove -y && \
eatmydata apt-get autoclean -y && \
mkdir -p /usr/local/share/meson/cross && \
echo "[binaries]\n\
c = '/usr/bin/mips64el-linux-gnuabi64-gcc'\n\
ar = '/usr/bin/mips64el-linux-gnuabi64-gcc-ar'\n\
strip = '/usr/bin/mips64el-linux-gnuabi64-strip'\n\
pkgconfig = '/usr/bin/mips64el-linux-gnuabi64-pkg-config'\n\
\n\
[host_machine]\n\
system = 'linux'\n\
cpu_family = 'mips64'\n\
cpu = 'mips64el'\n\
endian = 'little'" > /usr/local/share/meson/cross/mips64el-linux-gnuabi64 && \
dpkg-query --showformat '${Package}_${Version}_${Architecture}\n' --show > /packages.txt && \
mkdir -p /usr/libexec/ccache-wrappers && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/mips64el-linux-gnuabi64-c++ && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/mips64el-linux-gnuabi64-cc && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/mips64el-linux-gnuabi64-g++ && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/mips64el-linux-gnuabi64-gcc
# Specify the cross prefix for this image (see tests/docker/common.rc) ENV ABI "mips64el-linux-gnuabi64"
ENV MESON_OPTS "--cross-file=mips64el-linux-gnuabi64"
ENV QEMU_CONFIGURE_OPTS --cross-prefix=mips64el-linux-gnuabi64- ENV QEMU_CONFIGURE_OPTS --cross-prefix=mips64el-linux-gnuabi64-
ENV DEF_TARGET_LIST mips64el-softmmu,mips64el-linux-user ENV DEF_TARGET_LIST mips64el-softmmu,mips64el-linux-user
# Install extra libraries to increase code coverage
RUN apt update && \
DEBIAN_FRONTEND=noninteractive eatmydata \
apt install -y --no-install-recommends \
libbz2-dev:mips64el \
liblzo2-dev:mips64el \
librdmacm-dev:mips64el \
libsnappy-dev:mips64el

View File

@ -1,31 +1,162 @@
# THIS FILE WAS AUTO-GENERATED
# #
# Docker mipsel cross-compiler target # $ lcitool dockerfile --layers all --cross mipsel debian-11 qemu
# #
# This docker target builds on the debian Stretch base image. # https://gitlab.com/libvirt/libvirt-ci
#
FROM qemu/debian10
MAINTAINER Philippe Mathieu-Daudé <f4bug@amsat.org> FROM docker.io/library/debian:11-slim
# Add the foreign architecture we want and install dependencies RUN export DEBIAN_FRONTEND=noninteractive && \
RUN dpkg --add-architecture mipsel apt-get update && \
RUN apt update && \ apt-get install -y eatmydata && \
DEBIAN_FRONTEND=noninteractive eatmydata \ eatmydata apt-get dist-upgrade -y && \
apt install -y --no-install-recommends \ eatmydata apt-get install --no-install-recommends -y \
gcc-mipsel-linux-gnu bash \
bc \
bsdextrautils \
bzip2 \
ca-certificates \
ccache \
dbus \
debianutils \
diffutils \
exuberant-ctags \
findutils \
gcovr \
genisoimage \
gettext \
git \
hostname \
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
RUN apt update && \ ENV LANG "en_US.UTF-8"
DEBIAN_FRONTEND=noninteractive eatmydata \ ENV MAKE "/usr/bin/make"
apt build-dep -yy -a mipsel --arch-only qemu ENV NINJA "/usr/bin/ninja"
ENV PYTHON "/usr/bin/python3"
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
# Specify the cross prefix for this image (see tests/docker/common.rc) RUN export DEBIAN_FRONTEND=noninteractive && \
ENV QEMU_CONFIGURE_OPTS --cross-prefix=mipsel-linux-gnu- dpkg --add-architecture mipsel && \
eatmydata apt-get update && \
# Install extra libraries to increase code coverage eatmydata apt-get dist-upgrade -y && \
RUN apt update && \ eatmydata apt-get install --no-install-recommends -y dpkg-dev && \
DEBIAN_FRONTEND=noninteractive eatmydata \ eatmydata apt-get install --no-install-recommends -y \
apt install -y --no-install-recommends \ g++-mipsel-linux-gnu \
gcc-mipsel-linux-gnu \
libaio-dev:mipsel \
libasound2-dev:mipsel \
libattr1-dev:mipsel \
libbpf-dev:mipsel \
libbrlapi-dev:mipsel \
libbz2-dev:mipsel \ libbz2-dev:mipsel \
libc6-dev:mipsel \
libcacard-dev:mipsel \
libcap-ng-dev:mipsel \
libcapstone-dev:mipsel \
libcurl4-gnutls-dev:mipsel \
libdaxctl-dev:mipsel \
libdrm-dev:mipsel \
libepoxy-dev:mipsel \
libfdt-dev:mipsel \
libffi-dev:mipsel \
libfuse3-dev:mipsel \
libgbm-dev:mipsel \
libgcrypt20-dev:mipsel \
libglib2.0-dev:mipsel \
libglusterfs-dev:mipsel \
libgnutls28-dev:mipsel \
libgtk-3-dev:mipsel \
libibumad-dev:mipsel \
libibverbs-dev:mipsel \
libiscsi-dev:mipsel \
libjemalloc-dev:mipsel \
libjpeg62-turbo-dev:mipsel \
liblttng-ust-dev:mipsel \
liblzo2-dev:mipsel \ liblzo2-dev:mipsel \
libncursesw5-dev:mipsel \
libnfs-dev:mipsel \
libnuma-dev:mipsel \
libpam0g-dev:mipsel \
libpixman-1-dev:mipsel \
libpng-dev:mipsel \
libpulse-dev:mipsel \
librbd-dev:mipsel \
librdmacm-dev:mipsel \ librdmacm-dev:mipsel \
libsnappy-dev:mipsel libsasl2-dev:mipsel \
libsdl2-dev:mipsel \
libsdl2-image-dev:mipsel \
libseccomp-dev:mipsel \
libselinux1-dev:mipsel \
libslirp-dev:mipsel \
libsnappy-dev:mipsel \
libspice-server-dev:mipsel \
libssh-gcrypt-dev:mipsel \
libsystemd-dev:mipsel \
libtasn1-6-dev:mipsel \
libudev-dev:mipsel \
liburing-dev:mipsel \
libusb-1.0-0-dev:mipsel \
libusbredirhost-dev:mipsel \
libvdeplug-dev:mipsel \
libvirglrenderer-dev:mipsel \
libvte-2.91-dev:mipsel \
libzstd-dev:mipsel \
nettle-dev:mipsel \
systemtap-sdt-dev:mipsel \
xfslibs-dev:mipsel \
zlib1g-dev:mipsel && \
eatmydata apt-get autoremove -y && \
eatmydata apt-get autoclean -y && \
mkdir -p /usr/local/share/meson/cross && \
echo "[binaries]\n\
c = '/usr/bin/mipsel-linux-gnu-gcc'\n\
ar = '/usr/bin/mipsel-linux-gnu-gcc-ar'\n\
strip = '/usr/bin/mipsel-linux-gnu-strip'\n\
pkgconfig = '/usr/bin/mipsel-linux-gnu-pkg-config'\n\
\n\
[host_machine]\n\
system = 'linux'\n\
cpu_family = 'mips'\n\
cpu = 'mipsel'\n\
endian = 'little'" > /usr/local/share/meson/cross/mipsel-linux-gnu && \
dpkg-query --showformat '${Package}_${Version}_${Architecture}\n' --show > /packages.txt && \
mkdir -p /usr/libexec/ccache-wrappers && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/mipsel-linux-gnu-c++ && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/mipsel-linux-gnu-cc && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/mipsel-linux-gnu-g++ && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/mipsel-linux-gnu-gcc
ENV ABI "mipsel-linux-gnu"
ENV MESON_OPTS "--cross-file=mipsel-linux-gnu"
ENV QEMU_CONFIGURE_OPTS --cross-prefix=mipsel-linux-gnu-
ENV DEF_TARGET_LIST mipsel-softmmu,mipsel-linux-user

View File

@ -1,28 +1,164 @@
# THIS FILE WAS AUTO-GENERATED
# #
# Docker ppc64el cross-compiler target # $ lcitool dockerfile --layers all --cross ppc64le debian-11 qemu
# #
# This docker target builds on the debian Stretch base image. # https://gitlab.com/libvirt/libvirt-ci
#
FROM qemu/debian10
# Add the foreign architecture we want and install dependencies FROM docker.io/library/debian:11-slim
RUN dpkg --add-architecture ppc64el && \
apt update && \
apt install -yy crossbuild-essential-ppc64el
RUN apt update && \ RUN export DEBIAN_FRONTEND=noninteractive && \
DEBIAN_FRONTEND=noninteractive eatmydata \ apt-get update && \
apt build-dep -yy -a ppc64el --arch-only qemu apt-get install -y eatmydata && \
eatmydata apt-get dist-upgrade -y && \
eatmydata apt-get install --no-install-recommends -y \
bash \
bc \
bsdextrautils \
bzip2 \
ca-certificates \
ccache \
dbus \
debianutils \
diffutils \
exuberant-ctags \
findutils \
gcovr \
genisoimage \
gettext \
git \
hostname \
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
# Specify the cross prefix for this image (see tests/docker/common.rc) ENV LANG "en_US.UTF-8"
ENV MAKE "/usr/bin/make"
ENV NINJA "/usr/bin/ninja"
ENV PYTHON "/usr/bin/python3"
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
RUN export DEBIAN_FRONTEND=noninteractive && \
dpkg --add-architecture ppc64el && \
eatmydata apt-get update && \
eatmydata apt-get dist-upgrade -y && \
eatmydata apt-get install --no-install-recommends -y dpkg-dev && \
eatmydata apt-get install --no-install-recommends -y \
g++-powerpc64le-linux-gnu \
gcc-powerpc64le-linux-gnu \
libaio-dev:ppc64el \
libasan5:ppc64el \
libasound2-dev:ppc64el \
libattr1-dev:ppc64el \
libbpf-dev:ppc64el \
libbrlapi-dev:ppc64el \
libbz2-dev:ppc64el \
libc6-dev:ppc64el \
libcacard-dev:ppc64el \
libcap-ng-dev:ppc64el \
libcapstone-dev:ppc64el \
libcurl4-gnutls-dev:ppc64el \
libdaxctl-dev:ppc64el \
libdrm-dev:ppc64el \
libepoxy-dev:ppc64el \
libfdt-dev:ppc64el \
libffi-dev:ppc64el \
libfuse3-dev:ppc64el \
libgbm-dev:ppc64el \
libgcrypt20-dev:ppc64el \
libglib2.0-dev:ppc64el \
libglusterfs-dev:ppc64el \
libgnutls28-dev:ppc64el \
libgtk-3-dev:ppc64el \
libibumad-dev:ppc64el \
libibverbs-dev:ppc64el \
libiscsi-dev:ppc64el \
libjemalloc-dev:ppc64el \
libjpeg62-turbo-dev:ppc64el \
liblttng-ust-dev:ppc64el \
liblzo2-dev:ppc64el \
libncursesw5-dev:ppc64el \
libnfs-dev:ppc64el \
libnuma-dev:ppc64el \
libpam0g-dev:ppc64el \
libpixman-1-dev:ppc64el \
libpng-dev:ppc64el \
libpulse-dev:ppc64el \
librbd-dev:ppc64el \
librdmacm-dev:ppc64el \
libsasl2-dev:ppc64el \
libsdl2-dev:ppc64el \
libsdl2-image-dev:ppc64el \
libseccomp-dev:ppc64el \
libselinux1-dev:ppc64el \
libslirp-dev:ppc64el \
libsnappy-dev:ppc64el \
libspice-server-dev:ppc64el \
libssh-gcrypt-dev:ppc64el \
libsystemd-dev:ppc64el \
libtasn1-6-dev:ppc64el \
libubsan1:ppc64el \
libudev-dev:ppc64el \
liburing-dev:ppc64el \
libusb-1.0-0-dev:ppc64el \
libusbredirhost-dev:ppc64el \
libvdeplug-dev:ppc64el \
libvirglrenderer-dev:ppc64el \
libvte-2.91-dev:ppc64el \
libzstd-dev:ppc64el \
nettle-dev:ppc64el \
systemtap-sdt-dev:ppc64el \
xfslibs-dev:ppc64el \
zlib1g-dev:ppc64el && \
eatmydata apt-get autoremove -y && \
eatmydata apt-get autoclean -y && \
mkdir -p /usr/local/share/meson/cross && \
echo "[binaries]\n\
c = '/usr/bin/powerpc64le-linux-gnu-gcc'\n\
ar = '/usr/bin/powerpc64le-linux-gnu-gcc-ar'\n\
strip = '/usr/bin/powerpc64le-linux-gnu-strip'\n\
pkgconfig = '/usr/bin/powerpc64le-linux-gnu-pkg-config'\n\
\n\
[host_machine]\n\
system = 'linux'\n\
cpu_family = 'ppc64'\n\
cpu = 'powerpc64le'\n\
endian = 'little'" > /usr/local/share/meson/cross/powerpc64le-linux-gnu && \
dpkg-query --showformat '${Package}_${Version}_${Architecture}\n' --show > /packages.txt && \
mkdir -p /usr/libexec/ccache-wrappers && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/powerpc64le-linux-gnu-c++ && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/powerpc64le-linux-gnu-cc && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/powerpc64le-linux-gnu-g++ && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/powerpc64le-linux-gnu-gcc
ENV ABI "powerpc64le-linux-gnu"
ENV MESON_OPTS "--cross-file=powerpc64le-linux-gnu"
ENV QEMU_CONFIGURE_OPTS --cross-prefix=powerpc64le-linux-gnu- ENV QEMU_CONFIGURE_OPTS --cross-prefix=powerpc64le-linux-gnu-
ENV DEF_TARGET_LIST ppc64-softmmu,ppc64-linux-user ENV DEF_TARGET_LIST ppc64-softmmu,ppc64-linux-user
# Install extra libraries to increase code coverage
RUN apt update && \
DEBIAN_FRONTEND=noninteractive eatmydata \
apt install -y --no-install-recommends \
libbz2-dev:ppc64el \
liblzo2-dev:ppc64el \
librdmacm-dev:ppc64el \
libsnappy-dev:ppc64el

View File

@ -13,7 +13,6 @@
# the top-level directory. # the top-level directory.
import sys import sys
import os
import subprocess import subprocess
from pathlib import Path from pathlib import Path
@ -30,6 +29,7 @@ lcitool_path = Path(self_dir, "libvirt-ci", "lcitool")
lcitool_cmd = [lcitool_path, "--data-dir", self_dir] lcitool_cmd = [lcitool_path, "--data-dir", self_dir]
def atomic_write(filename, content): def atomic_write(filename, content):
tmp = filename.with_suffix(filename.suffix + ".tmp") tmp = filename.with_suffix(filename.suffix + ".tmp")
try: try:
@ -40,6 +40,7 @@ def atomic_write(filename, content):
tmp.unlink() tmp.unlink()
raise raise
def generate(filename, cmd, trailer): def generate(filename, cmd, trailer):
print("Generate %s" % filename) print("Generate %s" % filename)
lcitool = subprocess.run(cmd, capture_output=True) lcitool = subprocess.run(cmd, capture_output=True)
@ -52,6 +53,7 @@ def generate(filename, cmd, trailer):
content += trailer content += trailer
atomic_write(filename, content) atomic_write(filename, content)
def generate_dockerfile(host, target, cross=None, trailer=None): def generate_dockerfile(host, target, cross=None, trailer=None):
filename = Path(src_dir, "tests", "docker", "dockerfiles", host + ".docker") filename = Path(src_dir, "tests", "docker", "dockerfiles", host + ".docker")
cmd = lcitool_cmd + ["dockerfile"] cmd = lcitool_cmd + ["dockerfile"]
@ -60,41 +62,101 @@ def generate_dockerfile(host, target, cross=None, trailer=None):
cmd.extend([target, "qemu"]) cmd.extend([target, "qemu"])
generate(filename, cmd, trailer) generate(filename, cmd, trailer)
def generate_cirrus(target, trailer=None): def generate_cirrus(target, trailer=None):
filename = Path(src_dir, ".gitlab-ci.d", "cirrus", target + ".vars") filename = Path(src_dir, ".gitlab-ci.d", "cirrus", target + ".vars")
cmd = lcitool_cmd + ["variables", target, "qemu"] cmd = lcitool_cmd + ["variables", target, "qemu"]
generate(filename, cmd, trailer) generate(filename, cmd, trailer)
ubuntu2004_tsanhack = [ ubuntu2004_tsanhack = [
"# Apply patch https://reviews.llvm.org/D75820\n", "# Apply patch https://reviews.llvm.org/D75820\n",
"# This is required for TSan in clang-10 to compile with QEMU.\n", "# This is required for TSan in clang-10 to compile with QEMU.\n",
"RUN sed -i 's/^const/static const/g' /usr/lib/llvm-10/lib/clang/10.0.0/include/sanitizer/tsan_interface.h\n" "RUN sed -i 's/^const/static const/g' /usr/lib/llvm-10/lib/clang/10.0.0/include/sanitizer/tsan_interface.h\n"
] ]
# Netmap still needs to be manually built as it is yet to be packaged
# into a distro. We also add cscope and gtags which are used in the CI
# test
debian11_extras = [
"# netmap/cscope/global\n",
"RUN DEBIAN_FRONTEND=noninteractive eatmydata \\\n",
" apt install -y --no-install-recommends \\\n",
" cscope\\\n",
" global\\\n",
" linux-headers-amd64\n",
"RUN git clone https://github.com/luigirizzo/netmap.git /usr/src/netmap\n",
"RUN cd /usr/src/netmap && git checkout v11.3\n",
"RUN cd /usr/src/netmap/LINUX && ./configure --no-drivers --no-apps --kernel-dir=$(ls -d /usr/src/linux-headers-*-amd64) && make install\n",
"ENV QEMU_CONFIGURE_OPTS --enable-netmap\n"
]
def debian_cross_build(prefix, targets): def debian_cross_build(prefix, targets):
conf = "ENV QEMU_CONFIGURE_OPTS --cross-prefix=%s\n" % (prefix) conf = "ENV QEMU_CONFIGURE_OPTS --cross-prefix=%s\n" % (prefix)
targets = "ENV DEF_TARGET_LIST %s\n" % (targets) targets = "ENV DEF_TARGET_LIST %s\n" % (targets)
return "".join([conf, targets]) return "".join([conf, targets])
#
# Update all the various build configurations.
# Please keep each group sorted alphabetically for easy reading.
#
try: try:
#
# Standard native builds
#
generate_dockerfile("alpine", "alpine-edge")
generate_dockerfile("centos8", "centos-stream-8") generate_dockerfile("centos8", "centos-stream-8")
generate_dockerfile("debian-amd64", "debian-11",
trailer="".join(debian11_extras))
generate_dockerfile("fedora", "fedora-35") generate_dockerfile("fedora", "fedora-35")
generate_dockerfile("opensuse-leap", "opensuse-leap-152")
generate_dockerfile("ubuntu2004", "ubuntu-2004", generate_dockerfile("ubuntu2004", "ubuntu-2004",
trailer="".join(ubuntu2004_tsanhack)) trailer="".join(ubuntu2004_tsanhack))
generate_dockerfile("opensuse-leap", "opensuse-leap-152")
generate_dockerfile("alpine", "alpine-edge")
#
# Cross compiling builds
#
generate_dockerfile("debian-arm64-cross", "debian-11", generate_dockerfile("debian-arm64-cross", "debian-11",
cross="aarch64", cross="aarch64",
trailer=debian_cross_build("aarch64-linux-gnu-", trailer=debian_cross_build("aarch64-linux-gnu-",
"aarch64-softmmu,aarch64-linux-user")) "aarch64-softmmu,aarch64-linux-user"))
generate_dockerfile("debian-armel-cross", "debian-11",
cross="armv6l",
trailer=debian_cross_build("arm-linux-gnueabi-",
"arm-softmmu,arm-linux-user,armeb-linux-user"))
generate_dockerfile("debian-armhf-cross", "debian-11",
cross="armv7l",
trailer=debian_cross_build("arm-linux-gnueabihf-",
"arm-softmmu,arm-linux-user"))
generate_dockerfile("debian-mips64el-cross", "debian-11",
cross="mips64el",
trailer=debian_cross_build("mips64el-linux-gnuabi64-",
"mips64el-softmmu,mips64el-linux-user"))
generate_dockerfile("debian-mipsel-cross", "debian-11",
cross="mipsel",
trailer=debian_cross_build("mipsel-linux-gnu-",
"mipsel-softmmu,mipsel-linux-user"))
generate_dockerfile("debian-ppc64el-cross", "debian-11",
cross="ppc64le",
trailer=debian_cross_build("powerpc64le-linux-gnu-",
"ppc64-softmmu,ppc64-linux-user"))
generate_dockerfile("debian-s390x-cross", "debian-11", generate_dockerfile("debian-s390x-cross", "debian-11",
cross="s390x", cross="s390x",
trailer=debian_cross_build("s390x-linux-gnu-", trailer=debian_cross_build("s390x-linux-gnu-",
"s390x-softmmu,s390x-linux-user")) "s390x-softmmu,s390x-linux-user"))
#
# Cirrus packages lists for GitLab
#
generate_cirrus("freebsd-12") generate_cirrus("freebsd-12")
generate_cirrus("freebsd-13") generate_cirrus("freebsd-13")
generate_cirrus("macos-11") generate_cirrus("macos-11")

View File

@ -1,376 +0,0 @@
#! /bin/sh
if test -z "$source_path"; then
echo Do not invoke this script directly. It is called
echo automatically by configure.
exit 1
fi
write_c_skeleton() {
cat > $TMPC <<EOF
int main(void) { return 0; }
EOF
}
has() {
command -v "$1" >/dev/null 2>&1
}
do_compiler() {
# Run the compiler, capturing its output to the log. First argument
# is compiler binary to execute.
local compiler="$1"
shift
if test -n "$BASH_VERSION"; then eval '
echo >>config.log "
funcs: ${FUNCNAME[*]}
lines: ${BASH_LINENO[*]}"
'; fi
echo $compiler "$@" >> config.log
$compiler "$@" >> config.log 2>&1 || return $?
}
TMPDIR1="config-temp"
TMPC="${TMPDIR1}/qemu-conf.c"
TMPE="${TMPDIR1}/qemu-conf.exe"
container="no"
if test $use_containers = "yes"; then
if has "docker" || has "podman"; then
container=$($python $source_path/tests/docker/docker.py probe)
fi
fi
# cross compilers defaults, can be overridden with --cross-cc-ARCH
: ${cross_cc_aarch64="aarch64-linux-gnu-gcc"}
: ${cross_cc_aarch64_be="$cross_cc_aarch64"}
: ${cross_cc_cflags_aarch64_be="-mbig-endian"}
: ${cross_cc_alpha="alpha-linux-gnu-gcc"}
: ${cross_cc_arm="arm-linux-gnueabihf-gcc"}
: ${cross_cc_cflags_armeb="-mbig-endian"}
: ${cross_cc_hexagon="hexagon-unknown-linux-musl-clang"}
: ${cross_cc_cflags_hexagon="-mv67 -O2 -static"}
: ${cross_cc_hppa="hppa-linux-gnu-gcc"}
: ${cross_cc_i386="i686-linux-gnu-gcc"}
: ${cross_cc_cflags_i386="-m32"}
: ${cross_cc_m68k="m68k-linux-gnu-gcc"}
: ${cross_cc_microblaze="microblaze-linux-musl-gcc"}
: ${cross_cc_mips64el="mips64el-linux-gnuabi64-gcc"}
: ${cross_cc_mips64="mips64-linux-gnuabi64-gcc"}
: ${cross_cc_mipsel="mipsel-linux-gnu-gcc"}
: ${cross_cc_mips="mips-linux-gnu-gcc"}
: ${cross_cc_nios2="nios2-linux-gnu-gcc"}
: ${cross_cc_ppc="powerpc-linux-gnu-gcc"}
: ${cross_cc_cflags_ppc="-m32"}
: ${cross_cc_ppc64="powerpc64-linux-gnu-gcc"}
: ${cross_cc_cflags_ppc64="-m64 -mbig-endian"}
: ${cross_cc_ppc64le="$cross_cc_ppc64"}
: ${cross_cc_cflags_ppc64le="-m64 -mlittle-endian"}
: ${cross_cc_riscv64="riscv64-linux-gnu-gcc"}
: ${cross_cc_s390x="s390x-linux-gnu-gcc"}
: ${cross_cc_sh4="sh4-linux-gnu-gcc"}
: ${cross_cc_cflags_sparc="-m32 -mv8plus -mcpu=ultrasparc"}
: ${cross_cc_sparc64="sparc64-linux-gnu-gcc"}
: ${cross_cc_cflags_sparc64="-m64 -mcpu=ultrasparc"}
: ${cross_cc_x86_64="x86_64-linux-gnu-gcc"}
: ${cross_cc_cflags_x86_64="-m64"}
# tricore is special as it doesn't have a compiler
: ${cross_as_tricore="tricore-as"}
: ${cross_ld_tricore="tricore-ld"}
makefile=tests/tcg/Makefile.prereqs
echo "# Automatically generated by configure - do not modify" > $makefile
config_host_mak=tests/tcg/config-host.mak
echo "# Automatically generated by configure - do not modify" > $config_host_mak
echo "SRC_PATH=$source_path" >> $config_host_mak
echo "HOST_CC=$host_cc" >> $config_host_mak
tcg_tests_targets=
for target in $target_list; do
arch=${target%%-*}
# reset all container fields
container_image=
container_hosts=
container_cross_cc=
container_cross_as=
container_cross_ld=
# suppress clang
supress_clang=
case $target in
aarch64-*)
# We don't have any bigendian build tools so we only use this for AArch64
container_hosts="x86_64 aarch64"
container_image=debian-arm64-cross
container_cross_cc=aarch64-linux-gnu-gcc-10
;;
alpha-*)
container_hosts=x86_64
container_image=debian-alpha-cross
container_cross_cc=alpha-linux-gnu-gcc
;;
arm-*)
# We don't have any bigendian build tools so we only use this for ARM
container_hosts="x86_64 aarch64"
container_image=debian-armhf-cross
container_cross_cc=arm-linux-gnueabihf-gcc
;;
cris-*)
container_hosts=x86_64
container_image=fedora-cris-cross
container_cross_cc=cris-linux-gnu-gcc
;;
hexagon-*)
container_hosts=x86_64
container_image=debian-hexagon-cross
container_cross_cc=hexagon-unknown-linux-musl-clang
;;
hppa-*)
container_hosts=x86_64
container_image=debian-hppa-cross
container_cross_cc=hppa-linux-gnu-gcc
;;
i386-*)
container_hosts=x86_64
container_image=fedora-i386-cross
container_cross_cc=gcc
supress_clang=yes
;;
m68k-*)
container_hosts=x86_64
container_image=debian-m68k-cross
container_cross_cc=m68k-linux-gnu-gcc
;;
microblaze-*)
container_hosts=x86_64
container_image=debian-microblaze-cross
container_cross_cc=microblaze-linux-musl-gcc
;;
mips64el-*)
container_hosts=x86_64
container_image=debian-mips64el-cross
container_cross_cc=mips64el-linux-gnuabi64-gcc
;;
mips64-*)
container_hosts=x86_64
container_image=debian-mips64-cross
container_cross_cc=mips64-linux-gnuabi64-gcc
;;
mipsel-*)
container_hosts=x86_64
container_image=debian-mipsel-cross
container_cross_cc=mipsel-linux-gnu-gcc
;;
mips-*)
container_hosts=x86_64
container_image=debian-mips-cross
container_cross_cc=mips-linux-gnu-gcc
;;
nios2-*)
container_hosts=x86_64
container_image=debian-nios2-cross
container_cross_cc=nios2-linux-gnu-gcc
;;
ppc-*)
container_hosts=x86_64
container_image=debian-powerpc-test-cross
container_cross_cc=powerpc-linux-gnu-gcc-10
;;
ppc64-*|ppc64le-*)
container_hosts=x86_64
container_image=debian-powerpc-test-cross
container_cross_cc=${target%%-*}-linux-gnu-gcc-10
container_cross_cc=powerpc${container_cross_cc#ppc}
;;
riscv64-*)
container_hosts=x86_64
container_image=debian-riscv64-test-cross
container_cross_cc=riscv64-linux-gnu-gcc
;;
s390x-*)
container_hosts=x86_64
container_image=debian-s390x-cross
container_cross_cc=s390x-linux-gnu-gcc
;;
sh4-*)
container_hosts=x86_64
container_image=debian-sh4-cross
container_cross_cc=sh4-linux-gnu-gcc
;;
sparc64-*)
container_hosts=x86_64
container_image=debian-sparc64-cross
container_cross_cc=sparc64-linux-gnu-gcc
;;
tricore-softmmu)
container_hosts=x86_64
container_image=debian-tricore-cross
container_cross_as=tricore-as
container_cross_ld=tricore-ld
;;
x86_64-*)
container_hosts="aarch64 ppc64el x86_64"
container_image=debian-amd64-cross
container_cross_cc=x86_64-linux-gnu-gcc
supress_clang=yes
;;
xtensa*-softmmu)
container_hosts=x86_64
container_image=debian-xtensa-cross
# default to the dc232b cpu
container_cross_cc=/opt/2020.07/xtensa-dc232b-elf/bin/xtensa-dc232b-elf-gcc
;;
esac
config_target_mak=tests/tcg/config-$target.mak
echo "# Automatically generated by configure - do not modify" > $config_target_mak
echo "TARGET_NAME=$arch" >> $config_target_mak
case $target in
*-softmmu)
test -f $source_path/tests/tcg/$arch/Makefile.softmmu-target || continue
qemu="qemu-system-$arch"
;;
*-linux-user|*-bsd-user)
qemu="qemu-$arch"
;;
esac
eval "target_compiler_cflags=\${cross_cc_cflags_$arch}"
got_cross_cc=no
if eval test "x\"\${cross_cc_$arch}\"" != xyes; then
eval "target_compiler=\"\${cross_cc_$arch}\""
if has $target_compiler; then
if test "$supress_clang" = yes &&
$target_compiler --version | grep -qi "clang"; then
got_cross_cc=no
else
write_c_skeleton
if ! do_compiler "$target_compiler" $target_compiler_cflags \
-o $TMPE $TMPC -static ; then
# For host systems we might get away with building without -static
if do_compiler "$target_compiler" $target_compiler_cflags \
-o $TMPE $TMPC ; then
got_cross_cc=yes
echo "CC=$target_compiler" >> $config_target_mak
fi
else
got_cross_cc=yes
echo "BUILD_STATIC=y" >> $config_target_mak
echo "CC=$target_compiler" >> $config_target_mak
fi
fi
fi
# Special handling for assembler only tests
eval "target_as=\"\${cross_as_$arch}\""
eval "target_ld=\"\${cross_ld_$arch}\""
if has $target_as && has $target_ld; then
case $target in
tricore-softmmu)
echo "AS=$target_as" >> $config_target_mak
echo "LD=$target_ld" >> $config_target_mak
got_cross_cc=yes
;;
esac
fi
fi
if test $got_cross_cc = yes; then
# Test for compiler features for optional tests. We only do this
# for cross compilers because ensuring the docker containers based
# compilers is a requirememt for adding a new test that needs a
# compiler feature.
case $target in
aarch64-*)
if do_compiler "$target_compiler" $target_compiler_cflags \
-march=armv8.1-a+sve -o $TMPE $TMPC; then
echo "CROSS_CC_HAS_SVE=y" >> $config_target_mak
fi
if do_compiler "$target_compiler" $target_compiler_cflags \
-march=armv8.1-a+sve2 -o $TMPE $TMPC; then
echo "CROSS_CC_HAS_SVE2=y" >> $config_target_mak
fi
if do_compiler "$target_compiler" $target_compiler_cflags \
-march=armv8.3-a -o $TMPE $TMPC; then
echo "CROSS_CC_HAS_ARMV8_3=y" >> $config_target_mak
fi
if do_compiler "$target_compiler" $target_compiler_cflags \
-mbranch-protection=standard -o $TMPE $TMPC; then
echo "CROSS_CC_HAS_ARMV8_BTI=y" >> $config_target_mak
fi
if do_compiler "$target_compiler" $target_compiler_cflags \
-march=armv8.5-a+memtag -o $TMPE $TMPC; then
echo "CROSS_CC_HAS_ARMV8_MTE=y" >> $config_target_mak
fi
;;
ppc*)
if do_compiler "$target_compiler" $target_compiler_cflags \
-mpower8-vector -o $TMPE $TMPC; then
echo "CROSS_CC_HAS_POWER8_VECTOR=y" >> $config_target_mak
fi
if do_compiler "$target_compiler" $target_compiler_cflags \
-mpower10 -o $TMPE $TMPC; then
echo "CROSS_CC_HAS_POWER10=y" >> $config_target_mak
fi
;;
i386-linux-user)
if do_compiler "$target_compiler" $target_compiler_cflags \
-Werror -fno-pie -o $TMPE $TMPC; then
echo "CROSS_CC_HAS_I386_NOPIE=y" >> $config_target_mak
fi
;;
esac
elif test $got_cross_cc = no && test "$container" != no && \
test -n "$container_image"; then
for host in $container_hosts; do
if test "$host" = "$cpu"; then
echo "build-tcg-tests-$target: docker-image-$container_image" >> $makefile
echo "BUILD_STATIC=y" >> $config_target_mak
echo "CC=\$(DOCKER_SCRIPT) cc --cc $container_cross_cc -i qemu/$container_image -s $source_path --" >> $config_target_mak
if test -n "$container_cross_as"; then
echo "AS=\$(DOCKER_SCRIPT) cc --cc $container_cross_as -i qemu/$container_image -s $source_path --" >> $config_target_mak
fi
if test -n "$container_cross_ld"; then
echo "LD=\$(DOCKER_SCRIPT) cc --cc $container_cross_ld -i qemu/$container_image -s $source_path --" >> $config_target_mak
fi
case $target in
aarch64-*)
echo "CROSS_CC_HAS_SVE=y" >> $config_target_mak
echo "CROSS_CC_HAS_SVE2=y" >> $config_target_mak
echo "CROSS_CC_HAS_ARMV8_3=y" >> $config_target_mak
echo "CROSS_CC_HAS_ARMV8_BTI=y" >> $config_target_mak
echo "CROSS_CC_HAS_ARMV8_MTE=y" >> $config_target_mak
;;
ppc*)
echo "CROSS_CC_HAS_POWER8_VECTOR=y" >> $config_target_mak
echo "CROSS_CC_HAS_POWER10=y" >> $config_target_mak
;;
i386-linux-user)
echo "CROSS_CC_HAS_I386_NOPIE=y" >> $config_target_mak
;;
esac
got_cross_cc=yes
break
fi
done
fi
if test $got_cross_cc = yes; then
mkdir -p tests/tcg/$target
echo "QEMU=$PWD/$qemu" >> $config_target_mak
echo "EXTRA_CFLAGS=$target_compiler_cflags" >> $config_target_mak
echo "run-tcg-tests-$target: $qemu\$(EXESUF)" >> $makefile
tcg_tests_targets="$tcg_tests_targets $target"
fi
done
echo "TCG_TESTS_TARGETS=$tcg_tests_targets" >> $makefile