<div dir="ltr"><div class="gmail_extra">Hi Brad,</div><div class="gmail_extra"><br></div><div class="gmail_extra">Thanks for investigating this. Do you think it makes sense to land my ExternalProject_Add patch</div><div class="gmail_extra">
so that others can experiment with it? I can add quit with a fatal_error/warning if the build tree rules</div><div class="gmail_extra">are generated with Ninja. However, there is a problem with Unix Makefiles as well: parallelism doesn't</div>
<div class="gmail_extra">work when I run "make check-compiler-rt -j8" in the original build tree, presumably because we call</div><div class="gmail_extra">"cd /path/to/compiler-rt/build/tree && make check-all" there.</div>
<div class="gmail_extra"><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Feb 25, 2014 at 7:02 PM, Brad King <span dir="ltr"><<a href="mailto:brad.king@kitware.com" target="_blank">brad.king@kitware.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="">On 02/25/2014 03:28 AM, Alexey Samsonov wrote:<br>
> Then I run<br>
> $ ninja compiler-rt<br>
> twice. The first run builds the libraries, the second shows only:<br>
> "ninja: no work to do." message.<br>
<br>
</div>I'm able to reproduce that, thanks.  This is a subtle interaction<br>
between always-out-of-date rules and order-only dependencies.<br>
<br>
The problem is that the build.ninja file has the rule:<br>
<br>
 build projects/compiler-rt/src/compiler-rt-stamp/compiler-rt-force-reconfigure: phony || bin/clang bin/llvm-config<br>
<br>
to express the always-out-of-date force-reconfigure rule.  The Ninja<br>
documentation says:<br>
<br>
 "If a phony build statement is written without any dependencies,<br>
  the target will be considered out of date if it does not exist."<br>
<br>
However, the rule has dependencies because the Ninja generator implements<br>
add_dependencies by adding order-only dependencies to every individual<br>
rule in the dependent target on all dependencies.<br>
<br>
It looks like the Ninja generator needs to write a rule is always out<br>
of date but still has order-only dependencies.  I think this will work:<br>
<br>
 build projects/compiler-rt/src/compiler-rt-stamp/compiler-rt-force-reconfigure: phony | always || bin/clang bin/llvm-config<br>
 build always: phony<br>
<br>
I've recorded this issue in the CMake issue tracker:<br>
<br>
 <a href="http://www.cmake.org/Bug/view.php?id=14771" target="_blank">http://www.cmake.org/Bug/view.php?id=14771</a><br>
<span class="HOEnZb"><font color="#888888"><br>
-Brad<br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br><div>Alexey Samsonov, MSK</div>
</div></div>