meson: subprojects: replace submodules with wrap files
Compared to submodules, .wrap files have several advantages: * option parsing and downloading is delegated to meson * the commit is stored in a text file instead of a magic entry in the git tree object * we could stop shipping external dependencies that are only used as a fallback, but not break compilation on platforms that lack them. For example it may make sense to download dtc at build time, controlled by --enable-download, even when building from a tarball. Right now, this patch does the opposite: make-release treats dtc like libvfio-user (which is not stable API and therefore hasn't found its way into any distros) and keycodemap (which is a copylib, for better or worse). dependency() can fall back to a wrap automatically. However, this is only possible for libraries that come with a .pc file, and this is not very common for libfdt even though the upstream project in principle provides it; it also removes the control that we provide with --enable-fdt={system,internal}. Therefore, the logic to pick system vs. internal libfdt is left untouched. --enable-fdt=git is removed; it was already a synonym for --enable-fdt=internal. Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
d120116b5d
commit
2019cabfee
@ -44,6 +44,7 @@
|
|||||||
script:
|
script:
|
||||||
- scripts/git-submodule.sh update
|
- scripts/git-submodule.sh update
|
||||||
$(sed -n '/GIT_SUBMODULES=/ s/.*=// p' build/config-host.mak)
|
$(sed -n '/GIT_SUBMODULES=/ s/.*=// p' build/config-host.mak)
|
||||||
|
- meson subprojects download $(cd build/subprojects && echo *)
|
||||||
- cd build
|
- cd build
|
||||||
- find . -type f -exec touch {} +
|
- find . -type f -exec touch {} +
|
||||||
# Avoid recompiling by hiding ninja with NINJA=":"
|
# Avoid recompiling by hiding ninja with NINJA=":"
|
||||||
|
9
.gitmodules
vendored
9
.gitmodules
vendored
@ -13,9 +13,6 @@
|
|||||||
[submodule "roms/qemu-palcode"]
|
[submodule "roms/qemu-palcode"]
|
||||||
path = roms/qemu-palcode
|
path = roms/qemu-palcode
|
||||||
url = https://gitlab.com/qemu-project/qemu-palcode.git
|
url = https://gitlab.com/qemu-project/qemu-palcode.git
|
||||||
[submodule "subprojects/dtc"]
|
|
||||||
path = subprojects/dtc
|
|
||||||
url = https://gitlab.com/qemu-project/dtc.git
|
|
||||||
[submodule "roms/u-boot"]
|
[submodule "roms/u-boot"]
|
||||||
path = roms/u-boot
|
path = roms/u-boot
|
||||||
url = https://gitlab.com/qemu-project/u-boot.git
|
url = https://gitlab.com/qemu-project/u-boot.git
|
||||||
@ -25,9 +22,6 @@
|
|||||||
[submodule "roms/QemuMacDrivers"]
|
[submodule "roms/QemuMacDrivers"]
|
||||||
path = roms/QemuMacDrivers
|
path = roms/QemuMacDrivers
|
||||||
url = https://gitlab.com/qemu-project/QemuMacDrivers.git
|
url = https://gitlab.com/qemu-project/QemuMacDrivers.git
|
||||||
[submodule "subprojects/keycodemapdb"]
|
|
||||||
path = subprojects/keycodemapdb
|
|
||||||
url = https://gitlab.com/qemu-project/keycodemapdb.git
|
|
||||||
[submodule "roms/seabios-hppa"]
|
[submodule "roms/seabios-hppa"]
|
||||||
path = roms/seabios-hppa
|
path = roms/seabios-hppa
|
||||||
url = https://gitlab.com/qemu-project/seabios-hppa.git
|
url = https://gitlab.com/qemu-project/seabios-hppa.git
|
||||||
@ -55,6 +49,3 @@
|
|||||||
[submodule "tests/lcitool/libvirt-ci"]
|
[submodule "tests/lcitool/libvirt-ci"]
|
||||||
path = tests/lcitool/libvirt-ci
|
path = tests/lcitool/libvirt-ci
|
||||||
url = https://gitlab.com/libvirt/libvirt-ci.git
|
url = https://gitlab.com/libvirt/libvirt-ci.git
|
||||||
[submodule "subprojects/libvfio-user"]
|
|
||||||
path = subprojects/libvfio-user
|
|
||||||
url = https://gitlab.com/qemu-project/libvfio-user.git
|
|
||||||
|
77
configure
vendored
77
configure
vendored
@ -253,7 +253,7 @@ else
|
|||||||
git_submodules_action="ignore"
|
git_submodules_action="ignore"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
git_submodules="subprojects/keycodemapdb"
|
git_submodules=""
|
||||||
git="git"
|
git="git"
|
||||||
debug_tcg="no"
|
debug_tcg="no"
|
||||||
docs="auto"
|
docs="auto"
|
||||||
@ -269,7 +269,6 @@ python=
|
|||||||
download="enabled"
|
download="enabled"
|
||||||
bindir="bin"
|
bindir="bin"
|
||||||
skip_meson=no
|
skip_meson=no
|
||||||
vfio_user_server="disabled"
|
|
||||||
use_containers="yes"
|
use_containers="yes"
|
||||||
gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
|
gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
|
||||||
gdb_arches=""
|
gdb_arches=""
|
||||||
@ -281,16 +280,13 @@ unset target_list_exclude
|
|||||||
|
|
||||||
# The following Meson options are handled manually (still they
|
# The following Meson options are handled manually (still they
|
||||||
# are included in the automatically generated help message)
|
# are included in the automatically generated help message)
|
||||||
|
# because they automatically enable/disable other options
|
||||||
# 1. Track which submodules are needed
|
|
||||||
fdt="auto"
|
|
||||||
|
|
||||||
# 2. Automatically enable/disable other options
|
|
||||||
tcg="auto"
|
tcg="auto"
|
||||||
cfi="false"
|
cfi="false"
|
||||||
|
|
||||||
# 3. Need to check for -static-pie before Meson runs. Also,
|
# Meson has PIE as a boolean rather than enabled/disabled/auto,
|
||||||
# Meson has PIE as a boolean rather than enabled/disabled/auto.
|
# and we also need to check for -static-pie before Meson runs
|
||||||
|
# which requires knowing whether --static is enabled.
|
||||||
pie=""
|
pie=""
|
||||||
static="no"
|
static="no"
|
||||||
|
|
||||||
@ -743,14 +739,6 @@ for opt do
|
|||||||
;;
|
;;
|
||||||
--disable-cfi) cfi="false"
|
--disable-cfi) cfi="false"
|
||||||
;;
|
;;
|
||||||
--disable-fdt) fdt="disabled"
|
|
||||||
;;
|
|
||||||
--enable-fdt) fdt="enabled"
|
|
||||||
;;
|
|
||||||
--enable-fdt=git) fdt="internal"
|
|
||||||
;;
|
|
||||||
--enable-fdt=*) fdt="$optarg"
|
|
||||||
;;
|
|
||||||
--with-git-submodules=*)
|
--with-git-submodules=*)
|
||||||
git_submodules_action="$optarg"
|
git_submodules_action="$optarg"
|
||||||
;;
|
;;
|
||||||
@ -772,10 +760,6 @@ for opt do
|
|||||||
;;
|
;;
|
||||||
--gdb=*) gdb_bin="$optarg"
|
--gdb=*) gdb_bin="$optarg"
|
||||||
;;
|
;;
|
||||||
--enable-vfio-user-server) vfio_user_server="enabled"
|
|
||||||
;;
|
|
||||||
--disable-vfio-user-server) vfio_user_server="disabled"
|
|
||||||
;;
|
|
||||||
# everything else has the same name in configure and meson
|
# everything else has the same name in configure and meson
|
||||||
--*) meson_option_parse "$opt" "$optarg"
|
--*) meson_option_parse "$opt" "$optarg"
|
||||||
;;
|
;;
|
||||||
@ -787,6 +771,32 @@ if test "$plugins" = "yes" -a "$tcg" = "disabled"; then
|
|||||||
error_exit "Can't enable plugins on non-TCG builds"
|
error_exit "Can't enable plugins on non-TCG builds"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if ! test -f "$source_path/subprojects/keycodemapdb/README" \
|
||||||
|
&& test -f "$download" = disabled
|
||||||
|
then
|
||||||
|
echo
|
||||||
|
echo "ERROR: missing subprojects"
|
||||||
|
echo
|
||||||
|
if test -e "$source_path/.git"; then
|
||||||
|
echo "--disable-download specified but subprojects were not"
|
||||||
|
echo 'checked out. Please invoke "meson subprojects download"'
|
||||||
|
echo "before configuring QEMU, or remove --disable-download"
|
||||||
|
echo "from the command line."
|
||||||
|
else
|
||||||
|
echo "This is not a GIT checkout but subproject content appears to"
|
||||||
|
echo "be missing. Do not use 'git archive' or GitHub download links"
|
||||||
|
echo "to acquire QEMU source archives. Non-GIT builds are only"
|
||||||
|
echo "supported with source archives linked from:"
|
||||||
|
echo
|
||||||
|
echo " https://www.qemu.org/download/#source"
|
||||||
|
echo
|
||||||
|
echo "Developers working with GIT can use scripts/archive-source.sh"
|
||||||
|
echo "if they need to create valid source archives."
|
||||||
|
fi
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
case $git_submodules_action in
|
case $git_submodules_action in
|
||||||
update|validate)
|
update|validate)
|
||||||
if test ! -e "$source_path/.git" || ! has git; then
|
if test ! -e "$source_path/.git" || ! has git; then
|
||||||
@ -795,7 +805,7 @@ case $git_submodules_action in
|
|||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
ignore)
|
ignore)
|
||||||
if ! test -f "$source_path/subprojects/keycodemapdb/README"
|
if ! test -f "$source_path/tests/fp/berkeley-testfloat-3/README.md"
|
||||||
then
|
then
|
||||||
echo
|
echo
|
||||||
echo "ERROR: missing GIT submodules"
|
echo "ERROR: missing GIT submodules"
|
||||||
@ -1164,16 +1174,6 @@ EOF
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
##########################################
|
|
||||||
# fdt probe
|
|
||||||
|
|
||||||
case "$fdt" in
|
|
||||||
auto | enabled | internal)
|
|
||||||
# Simpler to always update submodule, even if not needed.
|
|
||||||
git_submodules="${git_submodules} subprojects/dtc"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
########################################
|
########################################
|
||||||
# check if ccache is interfering with
|
# check if ccache is interfering with
|
||||||
# semantic analysis of macros
|
# semantic analysis of macros
|
||||||
@ -1609,17 +1609,6 @@ write_target_makefile() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
##########################################
|
|
||||||
# check for vfio_user_server
|
|
||||||
|
|
||||||
case "$vfio_user_server" in
|
|
||||||
enabled )
|
|
||||||
if test "$git_submodules_action" != "ignore"; then
|
|
||||||
git_submodules="${git_submodules} subprojects/libvfio-user"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
#######################################
|
#######################################
|
||||||
# cross-compiled firmware targets
|
# cross-compiled firmware targets
|
||||||
|
|
||||||
@ -1951,12 +1940,10 @@ if test "$skip_meson" = no; then
|
|||||||
# QEMU options
|
# QEMU options
|
||||||
test "$cfi" != false && meson_option_add "-Dcfi=$cfi"
|
test "$cfi" != false && meson_option_add "-Dcfi=$cfi"
|
||||||
test "$docs" != auto && meson_option_add "-Ddocs=$docs"
|
test "$docs" != auto && meson_option_add "-Ddocs=$docs"
|
||||||
test "$fdt" != auto && meson_option_add "-Dfdt=$fdt"
|
|
||||||
test -n "${LIB_FUZZING_ENGINE+xxx}" && meson_option_add "-Dfuzzing_engine=$LIB_FUZZING_ENGINE"
|
test -n "${LIB_FUZZING_ENGINE+xxx}" && meson_option_add "-Dfuzzing_engine=$LIB_FUZZING_ENGINE"
|
||||||
test "$qemu_suffix" != qemu && meson_option_add "-Dqemu_suffix=$qemu_suffix"
|
test "$qemu_suffix" != qemu && meson_option_add "-Dqemu_suffix=$qemu_suffix"
|
||||||
test "$smbd" != '' && meson_option_add "-Dsmbd=$smbd"
|
test "$smbd" != '' && meson_option_add "-Dsmbd=$smbd"
|
||||||
test "$tcg" != enabled && meson_option_add "-Dtcg=$tcg"
|
test "$tcg" != enabled && meson_option_add "-Dtcg=$tcg"
|
||||||
test "$vfio_user_server" != auto && meson_option_add "-Dvfio_user_server=$vfio_user_server"
|
|
||||||
run_meson() {
|
run_meson() {
|
||||||
NINJA=$ninja $meson setup --prefix "$prefix" "$@" $cross_arg "$PWD" "$source_path"
|
NINJA=$ninja $meson setup --prefix "$prefix" "$@" $cross_arg "$PWD" "$source_path"
|
||||||
}
|
}
|
||||||
|
15
meson.build
15
meson.build
@ -3031,14 +3031,7 @@ endif
|
|||||||
|
|
||||||
libvfio_user_dep = not_found
|
libvfio_user_dep = not_found
|
||||||
if have_system and vfio_user_server_allowed
|
if have_system and vfio_user_server_allowed
|
||||||
have_internal = fs.exists(meson.current_source_dir() / 'subprojects/libvfio-user/meson.build')
|
libvfio_user_proj = subproject('libvfio-user', required: true)
|
||||||
|
|
||||||
if not have_internal
|
|
||||||
error('libvfio-user source not found - please pull git submodule')
|
|
||||||
endif
|
|
||||||
|
|
||||||
libvfio_user_proj = subproject('libvfio-user')
|
|
||||||
|
|
||||||
libvfio_user_dep = libvfio_user_proj.get_variable('libvfio_user_dep')
|
libvfio_user_dep = libvfio_user_proj.get_variable('libvfio_user_dep')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@ -3066,12 +3059,6 @@ if fdt_required.length() > 0 or fdt_opt == 'enabled'
|
|||||||
endif
|
endif
|
||||||
if not fdt.found()
|
if not fdt.found()
|
||||||
assert(fdt_opt == 'internal')
|
assert(fdt_opt == 'internal')
|
||||||
have_internal = fs.exists(meson.current_source_dir() / 'subprojects/dtc/meson.build')
|
|
||||||
|
|
||||||
if not have_internal
|
|
||||||
error('libfdt source not found - please pull git submodule')
|
|
||||||
endif
|
|
||||||
|
|
||||||
libfdt_proj = subproject('dtc', required: true,
|
libfdt_proj = subproject('dtc', required: true,
|
||||||
default_options: ['tools=false', 'yaml=disabled',
|
default_options: ['tools=false', 'yaml=disabled',
|
||||||
'python=disabled', 'default_library=static'])
|
'python=disabled', 'default_library=static'])
|
||||||
|
@ -26,8 +26,8 @@ sub_file="${sub_tdir}/submodule.tar"
|
|||||||
# independent of what the developer currently has initialized
|
# independent of what the developer currently has initialized
|
||||||
# in their checkout, because the build environment is completely
|
# in their checkout, because the build environment is completely
|
||||||
# different to the host OS.
|
# different to the host OS.
|
||||||
submodules="subprojects/dtc subprojects/keycodemapdb"
|
subprojects="dtc keycodemapdb libvfio-user"
|
||||||
submodules="$submodules tests/fp/berkeley-softfloat-3 tests/fp/berkeley-testfloat-3"
|
submodules="tests/fp/berkeley-softfloat-3 tests/fp/berkeley-testfloat-3"
|
||||||
sub_deinit=""
|
sub_deinit=""
|
||||||
|
|
||||||
function cleanup() {
|
function cleanup() {
|
||||||
@ -70,4 +70,11 @@ for sm in $submodules; do
|
|||||||
tar --concatenate --file "$tar_file" "$sub_file"
|
tar --concatenate --file "$tar_file" "$sub_file"
|
||||||
test $? -ne 0 && error "failed append submodule $sm to $tar_file"
|
test $? -ne 0 && error "failed append submodule $sm to $tar_file"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
for sp in $subprojects; do
|
||||||
|
meson subprojects download $sp
|
||||||
|
test $? -ne 0 && error "failed to download subproject $sp"
|
||||||
|
tar --append --file "$tar_file" --exclude=.git subprojects/$sp
|
||||||
|
test $? -ne 0 && error "failed to append subproject $sp to $tar_file"
|
||||||
|
done
|
||||||
exit 0
|
exit 0
|
||||||
|
@ -16,6 +16,9 @@ if [ $# -ne 2 ]; then
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Only include wraps that are invoked with subproject()
|
||||||
|
SUBPROJECTS="dtc libvfio-user keycodemapdb"
|
||||||
|
|
||||||
src="$1"
|
src="$1"
|
||||||
version="$2"
|
version="$2"
|
||||||
destination=qemu-${version}
|
destination=qemu-${version}
|
||||||
@ -26,6 +29,8 @@ git clone --single-branch -b "v${version}" -c advice.detachedHead=false \
|
|||||||
pushd ${destination}
|
pushd ${destination}
|
||||||
|
|
||||||
git submodule update --init --single-branch
|
git submodule update --init --single-branch
|
||||||
|
meson subprojects download $SUBPROJECTS
|
||||||
|
|
||||||
(cd roms/seabios && git describe --tags --long --dirty > .version)
|
(cd roms/seabios && git describe --tags --long --dirty > .version)
|
||||||
(cd roms/skiboot && ./make_version.sh > .version)
|
(cd roms/skiboot && ./make_version.sh > .version)
|
||||||
# Fetch edk2 submodule's submodules, since it won't have access to them via
|
# Fetch edk2 submodule's submodules, since it won't have access to them via
|
||||||
|
3
subprojects/.gitignore
vendored
3
subprojects/.gitignore
vendored
@ -1,3 +1,6 @@
|
|||||||
/packagecache
|
/packagecache
|
||||||
|
|
||||||
|
/dtc
|
||||||
|
/keycodemapdb
|
||||||
|
/libvfio-user
|
||||||
/slirp
|
/slirp
|
||||||
|
@ -1 +0,0 @@
|
|||||||
Subproject commit b6910bec11614980a21e46fbccc35934b671bd81
|
|
4
subprojects/dtc.wrap
Normal file
4
subprojects/dtc.wrap
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
[wrap-git]
|
||||||
|
url = https://gitlab.com/qemu-project/dtc.git
|
||||||
|
revision = b6910bec11614980a21e46fbccc35934b671bd81
|
||||||
|
depth = 1
|
@ -1 +0,0 @@
|
|||||||
Subproject commit f5772a62ec52591ff6870b7e8ef32482371f22c6
|
|
4
subprojects/keycodemapdb.wrap
Normal file
4
subprojects/keycodemapdb.wrap
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
[wrap-git]
|
||||||
|
url = https://gitlab.com/qemu-project/keycodemapdb.git
|
||||||
|
revision = f5772a62ec52591ff6870b7e8ef32482371f22c6
|
||||||
|
depth = 1
|
@ -1 +0,0 @@
|
|||||||
Subproject commit 0b28d205572c80b568a1003db2c8f37ca333e4d7
|
|
4
subprojects/libvfio-user.wrap
Normal file
4
subprojects/libvfio-user.wrap
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
[wrap-git]
|
||||||
|
url = https://gitlab.com/qemu-project/libvfio-user.git
|
||||||
|
revision = 0b28d205572c80b568a1003db2c8f37ca333e4d7
|
||||||
|
depth = 1
|
Loading…
Reference in New Issue
Block a user