<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">From what I see reproducing offline, it is the order of dependencies that is changing (I bet they iterate over an unordered container):</div><div class=""><br class=""></div><div class="">Example:</div><div class=""><br class=""></div><div class="">< build cmake_order_depends_target_llvm-profdata: phony || lib/libLLVMSupport.a lib/libLLVMCore.a lib/libLLVMBitReader.a lib/libLLVMMC.a lib/libLLVMMCParser.a lib/libLLVMObject.a lib/libLLVMProfileData.a<br class="">---<br class="">> build cmake_order_depends_target_llvm-profdata: phony || lib/libLLVMProfileData.a lib/libLLVMSupport.a lib/libLLVMCore.a lib/libLLVMBitReader.a lib/libLLVMMC.a lib/libLLVMMCParser.a lib/libLLVMObject.a<br class=""><br class=""></div><div class=""><br class=""></div><div class="">The consequence is the order of the libraries is not the same on the command line.</div><div class="">Have you seen other differences?</div><div class=""><br class=""></div><div class="">You may want to update the bug report with these information if you think it could be useful.</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">-- </div><div class="">Mehdi</div><div class=""><br class=""></div><div class=""><br class=""></div><br class=""><div><blockquote type="cite" class=""><div class="">On Feb 10, 2016, at 10:01 AM, Chris Bieneman via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">It is with great sadness that I must tell everyone CMake’s Ninja generator is non-deterministic (<a href="https://public.kitware.com/Bug/view.php?id=15968" class="">https://public.kitware.com/Bug/view.php?id=15968</a>).<div class=""><br class=""></div><div class="">I’m not sure if this impacts all versions of CMake, but it certainly impacts all the recent releases. You might ask why this matters? Sadly the non-determinism *does* impact determinism in the final builds. I haven’t fully dug into the extent of the differences, but I was seeing non-reproducibility in LTO builds. Whatever Ninja is doing differently causes LTO to make different optimization decisions. I have verified that this does not impact CMake’s makefile generator.</div><div class=""><br class=""></div><div class="">The important takeaway from this is that if you are building for a purpose where non-determinism can impact your results, don’t use Ninja. For most engineering tasks building and testing locally Ninja, as always, works great. For incremental bots testing correctness, no problem.</div><div class=""><br class=""></div><div class="">Any bots testing performance need to move to a deterministic generator (i.e. Unix Makefiles). Anyone building or testing a release of LLVM or clang for packaging purposes should also use a deterministic generator.</div><div class=""><br class=""></div><div class="">Sorry to be the bearer of bad news…</div><div class=""><br class=""></div><div class="">-Chris</div></div>_______________________________________________<br class="">LLVM Developers mailing list<br class=""><a href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a><br class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev<br class=""></div></blockquote></div><br class=""></body></html>