* [PATCH 0/2] Getting qemu building under msys2 properly
@ 2020-08-28 16:22 Yonggang Luo
2020-08-28 16:22 ` [PATCH 1/2] meson: Convert undefsym.sh to undefsym.py Yonggang Luo
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Yonggang Luo @ 2020-08-28 16:22 UTC (permalink / raw)
To: qemu-devel; +Cc: Paolo Bonzini, Yonggang Luo
Convert undefsym.sh to undefsym.py and replace $PWD with $build_dir
Yonggang Luo (2):
meson: Convert undefsym.sh to undefsym.py
configure: Fix include and linkage issue on msys2
configure | 28 +++++++++++++++-------
meson.build | 2 +-
scripts/undefsym.py | 57 +++++++++++++++++++++++++++++++++++++++++++++
scripts/undefsym.sh | 20 ----------------
4 files changed, 77 insertions(+), 30 deletions(-)
create mode 100644 scripts/undefsym.py
delete mode 100755 scripts/undefsym.sh
--
2.27.0.windows.1
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 1/2] meson: Convert undefsym.sh to undefsym.py
2020-08-28 16:22 [PATCH 0/2] Getting qemu building under msys2 properly Yonggang Luo
@ 2020-08-28 16:22 ` Yonggang Luo
2020-08-28 16:22 ` [PATCH 2/2] configure: Fix include and linkage issue on msys2 Yonggang Luo
2020-08-28 17:41 ` [PATCH 0/2] Getting qemu building under msys2 properly Paolo Bonzini
2 siblings, 0 replies; 4+ messages in thread
From: Yonggang Luo @ 2020-08-28 16:22 UTC (permalink / raw)
To: qemu-devel; +Cc: Paolo Bonzini, Yonggang Luo
undefsym.sh are not msys2 compatible, convert it to python script
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
---
meson.build | 2 +-
scripts/undefsym.py | 57 +++++++++++++++++++++++++++++++++++++++++++++
scripts/undefsym.sh | 20 ----------------
3 files changed, 58 insertions(+), 21 deletions(-)
create mode 100644 scripts/undefsym.py
delete mode 100755 scripts/undefsym.sh
diff --git a/meson.build b/meson.build
index 74f8ea0c2e..9d8419bf82 100644
--- a/meson.build
+++ b/meson.build
@@ -859,7 +859,7 @@ foreach d, list : modules
endforeach
nm = find_program('nm')
-undefsym = find_program('scripts/undefsym.sh')
+undefsym = find_program('scripts/undefsym.py')
block_syms = custom_target('block.syms', output: 'block.syms',
input: [libqemuutil, block_mods],
capture: true,
diff --git a/scripts/undefsym.py b/scripts/undefsym.py
new file mode 100644
index 0000000000..c690f88c7a
--- /dev/null
+++ b/scripts/undefsym.py
@@ -0,0 +1,57 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+# Before a shared module's DSO is produced, a static library is built for it
+# and passed to this script. The script generates -Wl,-u options to force
+# the inclusion of symbol from libqemuutil.a if the shared modules need them,
+# This is necessary because the modules may use functions not needed by the
+# executable itself, which would cause the function to not be linked in.
+# Then the DSO loading would fail because of the missing symbol.
+
+
+"""
+Compare the static library with the shared module for compute the symbol duplication
+"""
+
+import sys
+import subprocess
+
+def filter_lines_set(stdout, is_static = True):
+ linesSet = set()
+ for line in stdout.splitlines():
+ tokens = line.split(b' ')
+ if len(tokens) >= 1:
+ if len(tokens) > 1:
+ if is_static and tokens[1] == b'U':
+ continue
+ if not is_static and tokens[1] != b'U':
+ continue
+ new_line = b'-Wl,-u,' + tokens[0]
+ if not new_line in linesSet:
+ linesSet.add(new_line)
+ return linesSet
+
+def main(args):
+ if len(args) <= 3:
+ sys.exit(0)
+
+ nm = args[1]
+ staticlib = args[2]
+ pc = subprocess.run([nm, "-P", "-g", staticlib], stdout=subprocess.PIPE)
+ if pc.returncode != 0:
+ sys.exit(-1)
+ lines_set_left = filter_lines_set(pc.stdout)
+
+ shared_modules = args[3:]
+ pc = subprocess.run([nm, "-P", "-g"] + shared_modules, stdout=subprocess.PIPE)
+ if pc.returncode != 0:
+ sys.exit(-1)
+ lines_set_right = filter_lines_set(pc.stdout, False)
+ lines = []
+ for line in sorted(list(lines_set_right)):
+ if line in lines_set_left:
+ lines.append(line)
+ sys.stdout.write(b'\n'.join(lines).decode())
+
+if __name__ == "__main__":
+ main(sys.argv)
diff --git a/scripts/undefsym.sh b/scripts/undefsym.sh
deleted file mode 100755
index b9ec332e95..0000000000
--- a/scripts/undefsym.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#! /usr/bin/env bash
-
-# Before a shared module's DSO is produced, a static library is built for it
-# and passed to this script. The script generates -Wl,-u options to force
-# the inclusion of symbol from libqemuutil.a if the shared modules need them,
-# This is necessary because the modules may use functions not needed by the
-# executable itself, which would cause the function to not be linked in.
-# Then the DSO loading would fail because of the missing symbol.
-
-if test $# -le 2; then
- exit 0
-fi
-
-NM=$1
-staticlib=$2
-shift 2
-# Find symbols defined in static libraries and undefined in shared modules
-comm -12 \
- <( $NM -P -g $staticlib | awk '$2!="U"{print "-Wl,-u," $1}' | sort -u) \
- <( $NM -P -g "$@" | awk '$2=="U"{print "-Wl,-u," $1}' | sort -u)
--
2.27.0.windows.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] configure: Fix include and linkage issue on msys2
2020-08-28 16:22 [PATCH 0/2] Getting qemu building under msys2 properly Yonggang Luo
2020-08-28 16:22 ` [PATCH 1/2] meson: Convert undefsym.sh to undefsym.py Yonggang Luo
@ 2020-08-28 16:22 ` Yonggang Luo
2020-08-28 17:41 ` [PATCH 0/2] Getting qemu building under msys2 properly Paolo Bonzini
2 siblings, 0 replies; 4+ messages in thread
From: Yonggang Luo @ 2020-08-28 16:22 UTC (permalink / raw)
To: qemu-devel; +Cc: Paolo Bonzini, Yonggang Luo
On msys2, the -I/e/path/to/qemu -L/e/path/to/qemu are not recognized by the compiler
Cause $PWD are result posix style path such as /e/path/to/qemu that can not be recognized
by mingw gcc, and `pwd -W` are result Windows style path such as E:/path/to/qemu that can
be recognized by the mingw gcc. So we replace all $PWD with $build_path that can
building qemu under msys2/mingw environment.
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
---
configure | 28 +++++++++++++++++++---------
1 file changed, 19 insertions(+), 9 deletions(-)
diff --git a/configure b/configure
index 6ecaff429b..f7e0b3bc33 100755
--- a/configure
+++ b/configure
@@ -13,8 +13,13 @@ export CCACHE_RECACHE=yes
# make source path absolute
source_path=$(cd "$(dirname -- "$0")"; pwd)
+build_path=$PWD
+if [ "$MSYSTEM" = "MINGW64" -o "$MSYSTEM" = "MINGW32" ]; then
+source_path=$(cd "$(dirname -- "$0")"; pwd -W)
+build_path=`pwd -W`
+fi
-if test "$PWD" = "$source_path"
+if test "$build_path" = "$source_path"
then
echo "Using './build' as the directory for build output"
@@ -346,7 +351,12 @@ ld_has() {
$ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
}
-if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
+check_valid_build_path="[[:space:]:]"
+if [ "$MSYSTEM" = "MINGW64" -o "$MSYSTEM" = "MINGW32" ]; then
+check_valid_build_path="[[:space:]]"
+fi
+
+if printf %s\\n "$source_path" "$build_path" | grep -q "$check_valid_build_path";
then
error_exit "main directory cannot contain spaces nor colons"
fi
@@ -944,7 +954,7 @@ Linux)
linux="yes"
linux_user="yes"
kvm="yes"
- QEMU_INCLUDES="-isystem ${source_path}/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
+ QEMU_INCLUDES="-isystem ${source_path}/linux-headers -I${build_path}/linux-headers $QEMU_INCLUDES"
libudev="yes"
;;
esac
@@ -4284,7 +4294,7 @@ EOF
symlink "$source_path/dtc/Makefile" "dtc/Makefile"
fi
fdt_cflags="-I${source_path}/dtc/libfdt"
- fdt_ldflags="-L$PWD/dtc/libfdt"
+ fdt_ldflags="-L${build_path}/dtc/libfdt"
fdt_libs="$fdt_libs"
elif test "$fdt" = "yes" ; then
# Not a git build & no libfdt found, prompt for system install
@@ -5269,7 +5279,7 @@ case "$capstone" in
else
LIBCAPSTONE=libcapstone.a
fi
- capstone_libs="-L$PWD/capstone -lcapstone"
+ capstone_libs="-L${build_path}/capstone -lcapstone"
capstone_cflags="-I${source_path}/capstone/include"
;;
@@ -6269,8 +6279,8 @@ case "$slirp" in
git_submodules="${git_submodules} slirp"
fi
mkdir -p slirp
- slirp_cflags="-I${source_path}/slirp/src -I$PWD/slirp/src"
- slirp_libs="-L$PWD/slirp -lslirp"
+ slirp_cflags="-I${source_path}/slirp/src -I${build_path}/slirp/src"
+ slirp_libs="-L${build_path}/slirp -lslirp"
if test "$mingw32" = "yes" ; then
slirp_libs="$slirp_libs -lws2_32 -liphlpapi"
fi
@@ -8211,7 +8221,7 @@ fi
mv $cross config-meson.cross
rm -rf meson-private meson-info meson-logs
-NINJA=${ninja:-$PWD/ninjatool} $meson setup \
+NINJA=${ninja:-${build_path}/ninjatool} $meson setup \
--prefix "${pre_prefix}$prefix" \
--libdir "${pre_prefix}$libdir" \
--libexecdir "${pre_prefix}$libexecdir" \
@@ -8231,7 +8241,7 @@ NINJA=${ninja:-$PWD/ninjatool} $meson setup \
-Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
-Dgettext=$gettext -Dxkbcommon=$xkbcommon \
$cross_arg \
- "$PWD" "$source_path"
+ "$build_path" "$source_path"
if test "$?" -ne 0 ; then
error_exit "meson setup failed"
--
2.27.0.windows.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 0/2] Getting qemu building under msys2 properly
2020-08-28 16:22 [PATCH 0/2] Getting qemu building under msys2 properly Yonggang Luo
2020-08-28 16:22 ` [PATCH 1/2] meson: Convert undefsym.sh to undefsym.py Yonggang Luo
2020-08-28 16:22 ` [PATCH 2/2] configure: Fix include and linkage issue on msys2 Yonggang Luo
@ 2020-08-28 17:41 ` Paolo Bonzini
2 siblings, 0 replies; 4+ messages in thread
From: Paolo Bonzini @ 2020-08-28 17:41 UTC (permalink / raw)
To: Yonggang Luo, qemu-devel
On 28/08/20 18:22, Yonggang Luo wrote:
> Convert undefsym.sh to undefsym.py and replace $PWD with $build_dir
>
> Yonggang Luo (2):
> meson: Convert undefsym.sh to undefsym.py
> configure: Fix include and linkage issue on msys2
>
> configure | 28 +++++++++++++++-------
> meson.build | 2 +-
> scripts/undefsym.py | 57 +++++++++++++++++++++++++++++++++++++++++++++
> scripts/undefsym.sh | 20 ----------------
> 4 files changed, 77 insertions(+), 30 deletions(-)
> create mode 100644 scripts/undefsym.py
> delete mode 100755 scripts/undefsym.sh
>
Thanks Yonggang, I'll queue the first patch.
I'll keep an eye on your patch but I prefer to first have the rest of
the build (tests and possibly pc-bios) moved to meson.build. This way
most of the references to source and build paths from Make (where spaces
are problematic) should go away and it's easier to understand the effect
of the patch.
Paolo
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2020-08-28 17:41 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-08-28 16:22 [PATCH 0/2] Getting qemu building under msys2 properly Yonggang Luo
2020-08-28 16:22 ` [PATCH 1/2] meson: Convert undefsym.sh to undefsym.py Yonggang Luo
2020-08-28 16:22 ` [PATCH 2/2] configure: Fix include and linkage issue on msys2 Yonggang Luo
2020-08-28 17:41 ` [PATCH 0/2] Getting qemu building under msys2 properly Paolo Bonzini
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).