[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] x86emul: fix test harness and fuzzer build dependencies
Jan Beulich writes ("Re: [PATCH] x86emul: fix test harness and fuzzer build dependencies"): > On 20.12.18 at 15:46, <ian.jackson@xxxxxxxxxx> wrote: > > I think this introduces a `make -j' hazard ? The problem is that this > > branch of the Makefiles tree might enter tools/include while > > another branch is also doing so, resulting in two simultaneous > > executions in the same directory. > > What is "another branch" here? So far I was under the impression > that the ability of building x86 emulator fuzzer and test harness > independently is an exception, and that all other parts of the > tools/ subtree are supposed to be built by going through the top > level. Otherwise further dependency issues might arise, due to > top level Makefile's %-tools-public-headers rule. > > Hence whether there's a "make -j" hazard here depends on what > that top level rule's purpose is. I don't follow. The top-level %-tools-public-headers rule is there to be something that you can write in the dependencies of other subdirs, to arrange that $(MAKE) -C tools/include is run before that other subdir. Ie, it is there to satisfy the requirement I mention above, that the dependency directory is built first. If one wants to be build the x86 emulator fuzzer but not rebuild other things, it is OK to run make in just that subdirectory. That is a general rule with recursive make: you can run make in a subdirectory, at the cost of perhaps not rebuilding everything that was changed. But when one does that, one must have built the rest of the things already because otherwise the x86emul directory has to $(MAKE) -C back to tools/include, rentering tools/include. In the general case if one is changing things in different places and rebuilding frequently, one may have to make -C place1 && make -C place2 in one's ad-hoc command line. On that basis, On 14/12/2018 08:49, Jan Beulich wrote: > Commit fd35f32b4b ("tools/x86emul: Use struct cpuid_policy in > the userspace test harnesses") didn't account for the > dependencies of cpuid-autogen.h to potentially change between > incremental builds. Putting the make invocation to produce the > header together with the directory tree creation therefore does > not work. Introduce a separate goal. I think that may have been a misconceived attempt to improve on the usual UI rule for recursive make, which I describe above. I wrote: (It is possible to violate this rule without creating races but it is tricky and inadvisable.) If we are determined that it must be possible to run make in the x86 emulator fuzzer directory *without having previously built the rest of the tree normally*, then perhaps it is necessary to do this $(MAKE) -C thing. But in that case we need to make sure that either: A. 1. The top-level Makefiles ensure that *a* build of tools/include completes *before* starting to enter tools/fuzz/x86_instruction_emulator. (Which I think is the case.) AND 2. make -C tools/include is definitely completely read-only if the thing has already been built. (This is somewhat hard to check and maintain, and would need a comment in that Makefile to ensure that this property is preserved.) OR B. The tools/include Makefile gains explicit synchronisation; it would have to re-invoke itself. I have never tries this, but it seems like it would be possible. We would gain a new built-time dependency on a shell synchronisation/locking utility which would perhaps not be available on ten-year-old enterprise Linuces. Ian. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |