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:
commit
e2c2d57599
72
.gitlab-ci.d/base.yml
Normal file
72
.gitlab-ci.d/base.yml
Normal 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
|
@ -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
|
|
||||||
|
@ -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
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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:
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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:
|
||||||
|
@ -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
|
||||||
|
@ -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'
|
||||||
|
@ -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:
|
allow_failure: true
|
||||||
- if: '$CI_PROJECT_NAMESPACE == "qemu-project"'
|
|
||||||
when: never
|
|
||||||
- when: on_success
|
|
||||||
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
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
.shared_msys2_builder:
|
.shared_msys2_builder:
|
||||||
|
extends: .base_job_template
|
||||||
tags:
|
tags:
|
||||||
- shared-windows
|
- shared-windows
|
||||||
- windows
|
- windows
|
||||||
|
9
Makefile
9
Makefile
@ -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
606
configure
vendored
@ -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`
|
|
||||||
symlink "$source_path/$f" "$f"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
(for i in $cross_cc_vars; do
|
tcg_tests_targets=
|
||||||
export $i
|
for target in $target_list; do
|
||||||
done
|
arch=${target%%-*}
|
||||||
export target_list source_path use_containers cpu host_cc
|
|
||||||
$source_path/tests/tcg/configure.sh)
|
|
||||||
|
|
||||||
config_mak=pc-bios/optionrom/config.mak
|
probe_target_compiler ${arch}
|
||||||
echo "# Automatically generated by configure - do not modify" > $config_mak
|
config_target_mak=tests/tcg/config-$target.mak
|
||||||
echo "TOPSRC_DIR=$source_path" >> $config_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
|
||||||
|
done
|
||||||
|
echo "TCG_TESTS_TARGETS=$tcg_tests_targets" >> $makefile)
|
||||||
|
|
||||||
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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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:
|
||||||
|
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
.. _testing:
|
||||||
|
|
||||||
Testing in QEMU
|
Testing in QEMU
|
||||||
===============
|
===============
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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')
|
||||||
|
@ -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","$@")
|
||||||
|
@ -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."
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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 \
|
||||||
exuberant-ctags \
|
bash \
|
||||||
global \
|
bc \
|
||||||
libbz2-dev \
|
bsdextrautils \
|
||||||
liblzo2-dev \
|
bzip2 \
|
||||||
libgcrypt20-dev \
|
ca-certificates \
|
||||||
libfdt-dev \
|
ccache \
|
||||||
librdmacm-dev \
|
clang \
|
||||||
libsasl2-dev \
|
dbus \
|
||||||
libsnappy-dev \
|
debianutils \
|
||||||
libvte-dev \
|
diffutils \
|
||||||
netcat-openbsd \
|
exuberant-ctags \
|
||||||
openssh-client \
|
findutils \
|
||||||
python3-numpy \
|
g++ \
|
||||||
python3-opencv \
|
gcc \
|
||||||
python3-venv
|
gcovr \
|
||||||
|
genisoimage \
|
||||||
|
gettext \
|
||||||
|
git \
|
||||||
|
hostname \
|
||||||
|
libaio-dev \
|
||||||
|
libasan5 \
|
||||||
|
libasound2-dev \
|
||||||
|
libattr1-dev \
|
||||||
|
libbpf-dev \
|
||||||
|
libbrlapi-dev \
|
||||||
|
libbz2-dev \
|
||||||
|
libc6-dev \
|
||||||
|
libcacard-dev \
|
||||||
|
libcap-ng-dev \
|
||||||
|
libcapstone-dev \
|
||||||
|
libcurl4-gnutls-dev \
|
||||||
|
libdaxctl-dev \
|
||||||
|
libdrm-dev \
|
||||||
|
libepoxy-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 \
|
||||||
|
libsasl2-dev \
|
||||||
|
libsdl2-dev \
|
||||||
|
libsdl2-image-dev \
|
||||||
|
libseccomp-dev \
|
||||||
|
libselinux1-dev \
|
||||||
|
libslirp-dev \
|
||||||
|
libsnappy-dev \
|
||||||
|
libspice-protocol-dev \
|
||||||
|
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 \
|
||||||
|
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 \
|
||||||
|
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 && \
|
apt install -y --no-install-recommends \
|
||||||
cd /usr/src/virglrenderer && git checkout virglrenderer-0.8.0
|
cscope\
|
||||||
RUN cd /usr/src/virglrenderer && ./autogen.sh && ./configure --disable-tests && make install
|
global\
|
||||||
|
linux-headers-amd64
|
||||||
# netmap
|
|
||||||
RUN apt update && \
|
|
||||||
DEBIAN_FRONTEND=noninteractive eatmydata \
|
|
||||||
apt install -y --no-install-recommends \
|
|
||||||
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
|
|
||||||
|
@ -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
|
|
||||||
|
@ -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 && \
|
||||||
|
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 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 \
|
||||||
|
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 \
|
||||||
|
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 \
|
||||||
|
libsasl2-dev:armhf \
|
||||||
|
libsdl2-dev:armhf \
|
||||||
|
libsdl2-image-dev:armhf \
|
||||||
|
libseccomp-dev:armhf \
|
||||||
|
libselinux1-dev:armhf \
|
||||||
|
libslirp-dev:armhf \
|
||||||
|
libsnappy-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 QEMU_CONFIGURE_OPTS --cross-prefix=arm-linux-gnueabihf-
|
||||||
ENV DEF_TARGET_LIST arm-softmmu,arm-linux-user,armeb-linux-user
|
ENV DEF_TARGET_LIST arm-softmmu,arm-linux-user
|
||||||
|
|
||||||
RUN apt update && \
|
|
||||||
DEBIAN_FRONTEND=noninteractive eatmydata \
|
|
||||||
apt install -y --no-install-recommends \
|
|
||||||
libbz2-dev:armhf \
|
|
||||||
liblzo2-dev:armhf \
|
|
||||||
librdmacm-dev:armhf \
|
|
||||||
libsnappy-dev:armhf \
|
|
||||||
libxen-dev:armhf
|
|
||||||
|
@ -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
|
|
||||||
|
@ -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 && \
|
||||||
|
dpkg --add-architecture mipsel && \
|
||||||
|
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++-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 \
|
||||||
|
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 \
|
||||||
|
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 \
|
||||||
|
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 QEMU_CONFIGURE_OPTS --cross-prefix=mipsel-linux-gnu-
|
||||||
|
ENV DEF_TARGET_LIST mipsel-softmmu,mipsel-linux-user
|
||||||
# Install extra libraries to increase code coverage
|
|
||||||
RUN apt update && \
|
|
||||||
DEBIAN_FRONTEND=noninteractive eatmydata \
|
|
||||||
apt install -y --no-install-recommends \
|
|
||||||
libbz2-dev:mipsel \
|
|
||||||
liblzo2-dev:mipsel \
|
|
||||||
librdmacm-dev:mipsel \
|
|
||||||
libsnappy-dev:mipsel
|
|
||||||
|
@ -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
|
|
||||||
|
@ -13,14 +13,13 @@
|
|||||||
# 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
|
||||||
|
|
||||||
if len(sys.argv) != 1:
|
if len(sys.argv) != 1:
|
||||||
print("syntax: %s" % sys.argv[0], file=sys.stderr)
|
print("syntax: %s" % sys.argv[0], file=sys.stderr)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
self_dir = Path(__file__).parent
|
self_dir = Path(__file__).parent
|
||||||
src_dir = self_dir.parent.parent
|
src_dir = self_dir.parent.parent
|
||||||
@ -30,76 +29,139 @@ 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:
|
||||||
with tmp.open("w") as fp:
|
with tmp.open("w") as fp:
|
||||||
print(content, file=fp, end="")
|
print(content, file=fp, end="")
|
||||||
tmp.rename(filename)
|
tmp.rename(filename)
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
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)
|
||||||
|
|
||||||
if lcitool.returncode != 0:
|
if lcitool.returncode != 0:
|
||||||
raise Exception("Failed to generate %s: %s" % (filename, lcitool.stderr))
|
raise Exception("Failed to generate %s: %s" % (filename, lcitool.stderr))
|
||||||
|
|
||||||
|
content = lcitool.stdout.decode("utf8")
|
||||||
|
if trailer is not None:
|
||||||
|
content += trailer
|
||||||
|
atomic_write(filename, content)
|
||||||
|
|
||||||
content = lcitool.stdout.decode("utf8")
|
|
||||||
if trailer is not None:
|
|
||||||
content += trailer
|
|
||||||
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"]
|
||||||
if cross is not None:
|
if cross is not None:
|
||||||
cmd.extend(["--cross", cross])
|
cmd.extend(["--cross", cross])
|
||||||
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"
|
||||||
]
|
]
|
||||||
|
|
||||||
def debian_cross_build(prefix, targets):
|
|
||||||
conf = "ENV QEMU_CONFIGURE_OPTS --cross-prefix=%s\n" % (prefix)
|
|
||||||
targets = "ENV DEF_TARGET_LIST %s\n" % (targets)
|
|
||||||
return "".join([conf, targets])
|
|
||||||
|
|
||||||
|
# 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):
|
||||||
|
conf = "ENV QEMU_CONFIGURE_OPTS --cross-prefix=%s\n" % (prefix)
|
||||||
|
targets = "ENV DEF_TARGET_LIST %s\n" % (targets)
|
||||||
|
return "".join([conf, targets])
|
||||||
|
|
||||||
|
#
|
||||||
|
# Update all the various build configurations.
|
||||||
|
# Please keep each group sorted alphabetically for easy reading.
|
||||||
|
#
|
||||||
|
|
||||||
try:
|
try:
|
||||||
generate_dockerfile("centos8", "centos-stream-8")
|
#
|
||||||
generate_dockerfile("fedora", "fedora-35")
|
# Standard native builds
|
||||||
generate_dockerfile("ubuntu2004", "ubuntu-2004",
|
#
|
||||||
trailer="".join(ubuntu2004_tsanhack))
|
generate_dockerfile("alpine", "alpine-edge")
|
||||||
generate_dockerfile("opensuse-leap", "opensuse-leap-152")
|
generate_dockerfile("centos8", "centos-stream-8")
|
||||||
generate_dockerfile("alpine", "alpine-edge")
|
generate_dockerfile("debian-amd64", "debian-11",
|
||||||
|
trailer="".join(debian11_extras))
|
||||||
|
generate_dockerfile("fedora", "fedora-35")
|
||||||
|
generate_dockerfile("opensuse-leap", "opensuse-leap-152")
|
||||||
|
generate_dockerfile("ubuntu2004", "ubuntu-2004",
|
||||||
|
trailer="".join(ubuntu2004_tsanhack))
|
||||||
|
|
||||||
generate_dockerfile("debian-arm64-cross", "debian-11",
|
#
|
||||||
cross="aarch64",
|
# Cross compiling builds
|
||||||
trailer=debian_cross_build("aarch64-linux-gnu-",
|
#
|
||||||
"aarch64-softmmu,aarch64-linux-user"))
|
generate_dockerfile("debian-arm64-cross", "debian-11",
|
||||||
|
cross="aarch64",
|
||||||
|
trailer=debian_cross_build("aarch64-linux-gnu-",
|
||||||
|
"aarch64-softmmu,aarch64-linux-user"))
|
||||||
|
|
||||||
generate_dockerfile("debian-s390x-cross", "debian-11",
|
generate_dockerfile("debian-armel-cross", "debian-11",
|
||||||
cross="s390x",
|
cross="armv6l",
|
||||||
trailer=debian_cross_build("s390x-linux-gnu-",
|
trailer=debian_cross_build("arm-linux-gnueabi-",
|
||||||
"s390x-softmmu,s390x-linux-user"))
|
"arm-softmmu,arm-linux-user,armeb-linux-user"))
|
||||||
|
|
||||||
generate_cirrus("freebsd-12")
|
generate_dockerfile("debian-armhf-cross", "debian-11",
|
||||||
generate_cirrus("freebsd-13")
|
cross="armv7l",
|
||||||
generate_cirrus("macos-11")
|
trailer=debian_cross_build("arm-linux-gnueabihf-",
|
||||||
|
"arm-softmmu,arm-linux-user"))
|
||||||
|
|
||||||
sys.exit(0)
|
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",
|
||||||
|
cross="s390x",
|
||||||
|
trailer=debian_cross_build("s390x-linux-gnu-",
|
||||||
|
"s390x-softmmu,s390x-linux-user"))
|
||||||
|
|
||||||
|
#
|
||||||
|
# Cirrus packages lists for GitLab
|
||||||
|
#
|
||||||
|
generate_cirrus("freebsd-12")
|
||||||
|
generate_cirrus("freebsd-13")
|
||||||
|
generate_cirrus("macos-11")
|
||||||
|
|
||||||
|
sys.exit(0)
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
print(str(ex), file=sys.stderr)
|
print(str(ex), file=sys.stderr)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
@ -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
|
|
Loading…
x
Reference in New Issue
Block a user