[llvm-dev] [RFC] Handling cmake policies

Don Hinton via llvm-dev llvm-dev at lists.llvm.org
Thu Jan 25 10:06:37 PST 2018


+cfe-dev since this change would affect all projects

On Wed, Jan 24, 2018 at 8:30 PM, Don Hinton <hintonda at gmail.com> wrote:

> 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.
>
> Somewhat surprisingly, these sets are local to each project and
> independent of each other -- even for in-tree builds containing multiple
> sub-projects.  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.
>
> In order to solve this problem, as well as improve maintainability, I'd
> like to propose the following:
>
> * 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.
>
> * 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.
>
> 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.
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180125/f864cc30/attachment.html>


More information about the llvm-dev mailing list