On 01/09/2020 07:20, Paolo Bonzini wrote: > Right now, the installation of QEMU is not relocatable; there is > a local hack in os_find_datadir() so that Windows binaries look > for ROMs in the executable directory, but that has several limitations: > > - it does not extend to configuration files, icons, etc. > > - it does not allow changing the data directory in any way > > - it does not apply to POSIX platforms > > This series fixes that by making all paths within the installation > prefix relative to the executable. This in practice means all paths > will be relocatable, except for /etc and /var if they're moved > outside the prefix. > > Here is an example of relocatability; before: > > $ make DESTDIR=$PWD/test install > $ cd test/usr/local/bin > $ ./qemu-system-ppc -L help > /usr/local/share/qemu-firmware > /usr/local/share/qemu > > After: > > $ make DESTDIR=$PWD/test install > $ cd test/usr/local/bin > $ ./qemu-system-ppc -L help > > /home/pbonzini/work/upstream/qemu/+build/test/usr/local/bin/../share/qemu-firmware > /home/pbonzini/work/upstream/qemu/+build/test/usr/local/bin/../share/qemu > > The main benefit of this is on Windows, as mentioned above; but it also > makes behavior more consistent across platforms and allows the removal > of the hack that hides the "c:/Program Files/QEMU" prefix from Meson > during cross compilation. > > Paolo
Hi Paolo, I've managed to give this a quick go this evening and I see the same link error reported by Yonggang Luo at https://lists.gnu.org/archive/html/qemu-devel/2020-09/msg00586.html, i.e.: "cc" -o storage-daemon/qemu-storage-daemon.exe version.rc_version.o storage-daemon/qemu-storage-daemon.exe.p/meson-generated_.._qapi_qapi-introspect.c.obj storage-daemon/qemu-storage-daemon.exe.p/meson-generated_.._qapi_qapi-commands.c.obj storage-daemon/qemu-storage-daemon.exe.p/meson-generated_.._qapi_qapi-emit-events.c.obj storage-daemon/qemu-storage-daemon.exe.p/meson-generated_.._qapi_qapi-events.c.obj storage-daemon/qemu-storage-daemon.exe.p/meson-generated_.._qapi_qapi-visit.c.obj storage-daemon/qemu-storage-daemon.exe.p/meson-generated_.._qapi_qapi-init-commands.c.obj storage-daemon/qemu-storage-daemon.exe.p/meson-generated_.._qapi_qapi-types.c.obj storage-daemon/qemu-storage-daemon.exe.p/qemu-storage-daemon.c.obj storage-daemon/qemu-storage-daemon.exe.p/.._iothread.c.obj storage-daemon/qemu-storage-daemon.exe.p/.._blockdev-nbd.c.obj storage-daemon/qemu-storage-daemon.exe.p/.._blockdev.c.obj storage-daemon/qemu-storage-daemon.exe.p/.._job-qmp.c.obj "-L/home/Mark/qemu/build/dtc/libfdt" "-Wl,--allow-shlib-undefined" "-Wl,--whole-archive" "libqmp.fa" "libblock.fa" "crypto/libcrypto.fa" "authz/libauthz.fa" "qom/libqom.fa" "io/libio.fa" "chardev/libchardev.fa" "-Wl,--no-whole-archive" "-Wl,--nxcompat" "-Wl,--no-seh" "-Wl,--dynamicbase" "-Wl,--warn-common" "-m64" "-fstack-protector-strong" "-Wl,--start-group" "libqemuutil.a" "libqmp.fa" "libblock.fa" "crypto/libcrypto.fa" "authz/libauthz.fa" "qom/libqom.fa" "io/libio.fa" "chardev/libchardev.fa" "@block.syms" "-lwinmm" "-LC:/msys64/mingw64/lib" "-lgio-2.0" "-lgobject-2.0" "-lglib-2.0" "-lintl" "-pthread" "-lm" "-LC:/msys64/mingw64/lib" "-lgthread-2.0" "-lglib-2.0" "-lintl" "-lws2_32" "-LC:/msys64/mingw64/lib" "-lzstd" "-LC:/msys64/mingw64/lib" "-lxml2" "-LC:/msys64/mingw64/lib" "-lz" "-lbz2" "-LC:/msys64/mingw64/lib" "-lgthread-2.0" "-lglib-2.0" "-lintl" "-mconsole" "-lkernel32" "-luser32" "-lgdi32" "-lwinspool" "-lshell32" "-lole32" "-loleaut32" "-luuid" "-lcomdlg32" "-ladvapi32" "-Wl,--end-group" C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lfdt C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lcapstone C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lfdt C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lcapstone C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lslirp C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lslirp collect2.exe: error: ld returned 1 exit status make[1]: *** [Makefile.ninja:1405: qemu-system-ppc.exe] Error 1 make[1]: *** Waiting for unfinished jobs.... collect2.exe: error: ld returned 1 exit status make[1]: *** [Makefile.ninja:1407: qemu-system-ppcw.exe] Error 1 make[1]: Leaving directory '/home/Mark/qemu/build' make: *** [GNUmakefile:11: install] Error 2 I think this means that it's missing something from Yonggang Luo's patch here: https://lists.gnu.org/archive/html/qemu-devel/2020-08/msg07668.html. I haven't looked at patch 1 in that series for converting undefsym.sh to undefsym.py yet, although last time I was able to get a working build without it. Also patch 13 wouldn't apply for me to git master: I ended up having to make the changes by hand, so looks like something requiring a rebase has recently snuck in. ATB, Mark.