<div dir="ltr">+cfe-dev since this change would affect all projects<div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jan 24, 2018 at 8:30 PM, Don Hinton <span dir="ltr"><<a href="mailto:hintonda@gmail.com" target="_blank">hintonda@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><font face="arial, helvetica, sans-serif">Currently, cmake policies are manually maintained by each project.  This is done via a set of `cmake_policy()` commands following the initial `cmake_minimum_required()` command at the top of each CMakeLists.txt project file.  </font></div><div><span style="font-family:arial,helvetica,sans-serif"><br></span></div><div><span style="font-family:arial,helvetica,sans-serif">Somewhat surprisingly, t</span><span style="font-family:arial,helvetica,sans-serif">hese sets are local to each project and independent of each other -- even for in-tree builds containing multiple sub-projects.  </span><span style="font-family:arial,helvetica,sans-serif">This is because cmake policies are reset whenever `cmake_minimum_required()` is called, which is the first command in each of our CMakeLists.txt project files.  </span></div><div><span style="font-family:arial,helvetica,sans-serif"><br></span></div><div><font face="arial, helvetica, sans-serif">In order to solve this problem, as well as improve maintainability</font><span style="font-family:arial,helvetica,sans-serif">, </span><span style="font-family:arial,helvetica,sans-serif">I'd like to propose the following:</span><br></div><div><div><font face="arial, helvetica, sans-serif"><br></font></div><div>* For all projects except llvm, move `cmake_minimum_required()` inside the standalone build if-branch, i.e., `if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)`, at the top of the CMakeLists.txt project file.  This will prevent unnecessary calls `cmake_minimum_required()` for in-tree builds, and allow all sub-projects to use the same policies set by llvm.</div><div><br></div><div>* Move all `cmake_policy()` commands out of llvm/CMakeLists.txt and into a separate file, e.g., AddLLVM.cmake, which is always included in each project.  This will guarantee all projects use the same set of policies even when built as a standalone or external project, e.g., runtimes.<br></div></div><div><br></div><div>Sub-projects can still override policies as needed by setting them after including AddLLVM.cmake, or by using `cmake_policy(PUSH|POP)` for local changes.</div><div><br></div></div>
</blockquote></div><br></div></div>