[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 02/47] trace: switch io/ directory to modular
From: |
Daniel P. Berrange |
Subject: |
Re: [Qemu-devel] [PATCH v2 02/47] trace: switch io/ directory to modular trace.h file |
Date: |
Tue, 10 Jan 2017 18:36:30 +0000 |
User-agent: |
Mutt/1.7.1 (2016-10-04) |
On Tue, Jan 10, 2017 at 06:45:23PM +0100, Paolo Bonzini wrote:
>
>
> On 10/01/2017 17:51, Daniel P. Berrange wrote:
> > It doesn't work with builddir != srcdir builds, because -I. is resolved
> > to the srcdir, but the trace.h is in builddir.
>
> This is a bug then. The toplevel builddir (or for that matter srcdir)
> is not meant to be in the search path: only the toplevel include/, the
> subdirectory builddir, and the subdirectory srcdir.
So what's happening is this...
During build of, for example, hw/scsi/esp-pci.o we have this
explicit include search path passed to GCC:
-I/home/berrange/src/virt/qemu/tcg
-I/home/berrange/src/virt/qemu/tcg/i386
-I/home/berrange/src/virt/qemu/linux-headers
-I/home/berrange/src/virt/qemu-build/linux-headers
-I.
-I/home/berrange/src/virt/qemu
-I/home/berrange/src/virt/qemu/include
-I/home/berrange/src/virt/qemu/hw/scsi
-Ihw/scsi
Here -I. refers to the $BUILDDIR, since although the source file is in
hw/scsi/, the compiler is invoked from $BUILDDIR as its working directory.
The compiler also has an implicit search dir which is the directory where
the source file being compiled lives, and that is searched first AFAICT.
So when doing non-vpath build:
srcdir=/home/berrange/src/virt/qemu
builddir=/home/berrange/src/virt/qemu
we have this effective search order:
-I/home/berrange/src/virt/qemu/hw/scsi
-I/home/berrange/src/virt/qemu/tcg
-I/home/berrange/src/virt/qemu/tcg/i386
-I/home/berrange/src/virt/qemu/linux-headers
-I/home/berrange/src/virt/qemu/linux-headers
-I/home/berrange/src/virt/qemu
-I/home/berrange/src/virt/qemu
-I/home/berrange/src/virt/qemu/include
-I/home/berrange/src/virt/qemu/hw/scsi
-I/home/berrange/src/virt/qemu/hw/scsi
Thus, #include "trace.h" picks up $builddir/hw/scsi/trace.h correctly.
5782 execve("/usr/bin/as", ["as", "-I", "/home/berrange/src/virt/qemu/tcg",
"-I", "/home/berrange/src/virt/qemu/tcg/i386", "-I",
"/home/berrange/src/virt/qemu/linux-headers", "-I",
"/home/berrange/src/virt/qemu/linux-headers", "-I", ".", "-I",
"/home/berrange/src/virt/qemu", "-I", "/home/berrange/src/virt/qemu/include",
"-I", "hw/scsi", "-I", "hw/scsi", "-I", "/usr/include/pixman-1", "-I",
"/usr/include/glib-2.0", "-I", "/usr/lib64/glib-2.0/include", "-I",
"/usr/include/p11-kit-1", "-I", "/usr/include/libpng16", "-I",
"/usr/include/spice-server", "-I", "/usr/include/cacard", "-I",
"/usr/include/nss3", "-I", "/usr/include/nspr4", "-I", "/usr/include/glib-2.0",
"-I", "/usr/lib64/glib-2.0/include", "-I", "/usr/include/pixman-1", "-I",
"/usr/include/spice-1", "-I", "/usr/include/cacard", "-I", "/usr/include/nss3",
"-I", "/usr/include/nspr4", "-I", "/usr/include/glib-2.0", "-I",
"/usr/lib64/glib-2.0/include", "-I", "/usr/include/libusb-1.0", "-I",
"/home/berrange/src/virt/qemu/tests", "--64", "-o", "hw/scsi/esp-pci.o",
"/tmp/cccr6Zf8.s"], [/* 63 vars */] <unfinished ...>
...
5781 open("hw/scsi/trace.h", O_RDONLY|O_NOCTTY) = 14
but when doing a vpath build
srcdir=/home/berrange/src/virt/qemu
builddir=/home/berrange/src/virt/qemu-build
we have this effective search order:
-I/home/berrange/src/virt/qemu/hw/scsi
-I/home/berrange/src/virt/qemu/tcg
-I/home/berrange/src/virt/qemu/tcg/i386
-I/home/berrange/src/virt/qemu/linux-headers
-I/home/berrange/src/virt/qemu-build/linux-headers
-I/home/berrange/src/virt/qemu-build
-I/home/berrange/src/virt/qemu
-I/home/berrange/src/virt/qemu/include
-I/home/berrange/src/virt/qemu/hw/scsi
-I/home/berrange/src/virt/qemu-build/hw/scsi
Thus #include "trace.h" picks up $builddir/trace.h incorrectly.
3138 execve("/usr/libexec/gcc/x86_64-redhat-linux/6.2.1/cc1",
["/usr/libexec/gcc/x86_64-redhat-linux/6.2.1/cc1", "-quiet", "-I",
"/home/berrange/src/virt/qemu/tcg", "-I",
"/home/berrange/src/virt/qemu/tcg/i386", "-I",
"/home/berrange/src/virt/qemu/linux-headers", "-I",
"/home/berrange/src/virt/qemu-build/linux-headers", "-I", ".", "-I",
"/home/berrange/src/virt/qemu", "-I", "/home/berrange/src/virt/qemu/include",
"-I", "/home/berrange/src/virt/qemu/hw/scsi", "-I", "hw/scsi", "-I",
"/usr/include/pixman-1", "-I", "/usr/include/glib-2.0", "-I",
"/usr/lib64/glib-2.0/include", "-I", "/usr/include/p11-kit-1", "-I",
"/usr/include/libpng16", "-I", "/usr/include/spice-server", "-I",
"/usr/include/cacard", "-I", "/usr/include/nss3", "-I", "/usr/include/nspr4",
"-I", "/usr/include/glib-2.0", "-I", "/usr/lib64/glib-2.0/include", "-I",
"/usr/include/pixman-1", "-I", "/usr/include/spice-1", "-I",
"/usr/include/cacard", "-I", "/usr/include/nss3", "-I", "/usr/include/nspr4",
"-I", "/usr/include/glib-2.0", "-I", "/usr/lib64/glib-2.0/include", "-I",
"/usr/include/libusb-1.0", "-I", "/home/berrange/src/virt/qemu/tests", "-MMD",
"hw/scsi/esp-pci.d", "-MF", "hw/scsi/esp-pci.d", "-MP", "-MT",
"hw/scsi/esp-pci.o", "-D_REENTRANT", "-D", "HAS_LIBSSH2_SFTP_FSYNC", "-D",
"_GNU_SOURCE", "-D", "PIE", "-D", "_GNU_SOURCE", "-D", "_FILE_OFFSET_BITS=64",
"-D", "_LARGEFILE_SOURCE", "-U", "_FORTIFY_SOURCE", "-D", "_FORTIFY_SOURCE=2",
"/home/berrange/src/virt/qemu/hw/scsi/esp-pci.c", "-quiet", "-dumpbase",
"esp-pci.c", "-m64", "-mcx16", "-mtune=generic", "-march=x86-64",
"-auxbase-strip", "hw/scsi/esp-pci.o", "-g", "-O2", "-Werror",
"-Wstrict-prototypes", "-Wredundant-decls", "-Wall", "-Wundef",
"-Wwrite-strings", "-Wmissing-prototypes", "-Wendif-labels",
"-Wno-shift-negative-value", "-Wmissing-include-dirs", "-Wempty-body",
"-Wnested-externs", "-Wformat-security", "-Wformat-y2k", "-Winit-self",
"-Wignored-qualifiers", "-Wold-style-declaration", "-Wold-style-definition",
"-Wtype-limits", "-fPIE", "-fno-strict-aliasing", "-fno-common", "-fwrapv",
"-fstack-protector-strong", "-o", "/tmp/ccH7yXaj.s"], [/* 63 vars */]
<unfinished ...>
...
3138 open("/home/berrange/src/virt/qemu/hw/scsi/trace.h", O_RDONLY|O_NOCTTY) =
-1 ENOENT (No such file or directory)
3138 open("/home/berrange/src/virt/qemu/tcg/trace.h", O_RDONLY|O_NOCTTY) = -1
ENOENT (No such file or directory)
3138 open("/home/berrange/src/virt/qemu/tcg/i386/trace.h", O_RDONLY|O_NOCTTY)
= -1 ENOENT (No such file or directory)
3138 open("/home/berrange/src/virt/qemu/linux-headers/trace.h",
O_RDONLY|O_NOCTTY) = -1 ENOENT (No such file or directory)
3138 open("/home/berrange/src/virt/qemu-build/linux-headers/trace.h",
O_RDONLY|O_NOCTTY) = -1 ENOENT (No such file or directory)
3138 open("./trace.h", O_RDONLY|O_NOCTTY) = 14
3138 open("./trace.h", O_RDONLY) = 14
For a consistent search order, we would need to have this be the
explicit args:
-I/home/berrange/src/virt/qemu/hw/scsi
-Ihw/scsi
-I/home/berrange/src/virt/qemu/tcg
-I/home/berrange/src/virt/qemu/tcg/i386
-I/home/berrange/src/virt/qemu/linux-headers
-I/home/berrange/src/virt/qemu-build/linux-headers
-I.
-I/home/berrange/src/virt/qemu
-I/home/berrange/src/virt/qemu/include
It seems you're saying we should also trim the top level dirs, so
we in fact get:
-I/home/berrange/src/virt/qemu/hw/scsi
-Ihw/scsi
-I/home/berrange/src/virt/qemu/tcg
-I/home/berrange/src/virt/qemu/tcg/i386
-I/home/berrange/src/virt/qemu/linux-headers
-I/home/berrange/src/virt/qemu-build/linux-headers
-I/home/berrange/src/virt/qemu/include
Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://entangle-photo.org -o- http://search.cpan.org/~danberr/ :|
- [Qemu-devel] [PATCH v2 00/47] Switch all subdirs over to modular trace.h file, Daniel P. Berrange, 2017/01/06
- [Qemu-devel] [PATCH v2 02/47] trace: switch io/ directory to modular trace.h file, Daniel P. Berrange, 2017/01/06
- Re: [Qemu-devel] [PATCH v2 02/47] trace: switch io/ directory to modular trace.h file, Stefan Hajnoczi, 2017/01/10
- Re: [Qemu-devel] [PATCH v2 02/47] trace: switch io/ directory to modular trace.h file, Daniel P. Berrange, 2017/01/10
- Re: [Qemu-devel] [PATCH v2 02/47] trace: switch io/ directory to modular trace.h file, Paolo Bonzini, 2017/01/10
- Re: [Qemu-devel] [PATCH v2 02/47] trace: switch io/ directory to modular trace.h file,
Daniel P. Berrange <=
- Re: [Qemu-devel] [PATCH v2 02/47] trace: switch io/ directory to modular trace.h file, Paolo Bonzini, 2017/01/10
- Re: [Qemu-devel] [PATCH v2 02/47] trace: switch io/ directory to modular trace.h file, Daniel P. Berrange, 2017/01/11
- Re: [Qemu-devel] [PATCH v2 02/47] trace: switch io/ directory to modular trace.h file, Daniel P. Berrange, 2017/01/11
- Re: [Qemu-devel] [PATCH v2 02/47] trace: switch io/ directory to modular trace.h file, Paolo Bonzini, 2017/01/11
- Re: [Qemu-devel] [PATCH v2 02/47] trace: switch io/ directory to modular trace.h file, Eric Blake, 2017/01/10
- Re: [Qemu-devel] [PATCH v2 02/47] trace: switch io/ directory to modular trace.h file, Paolo Bonzini, 2017/01/10
- Re: [Qemu-devel] [PATCH v2 02/47] trace: switch io/ directory to modular trace.h file, Stefan Hajnoczi, 2017/01/11
- Re: [Qemu-devel] [PATCH v2 02/47] trace: switch io/ directory to modular trace.h file, Daniel P. Berrange, 2017/01/11
- Re: [Qemu-devel] [PATCH v2 02/47] trace: switch io/ directory to modular trace.h file, Paolo Bonzini, 2017/01/11
- Re: [Qemu-devel] [PATCH v2 02/47] trace: switch io/ directory to modular trace.h file, Daniel P. Berrange, 2017/01/11