Skip to content

link time optimization disabled due to OLD behaviour of CMake policy 0069 #1903

Description

@Xeverous

Pybind11 requires CMake of version 2.8.12 or newer. Because this is lower than 3.9, it sets the OLD behaviour of the policy 0069.

https://cmake.org/cmake/help/latest/policy/CMP0069.html#policy:CMP0069

With the OLD behaviour, LTO is not applied and this is warning displayed during the build:

-- Configuring done
CMake Warning (dev) at [...]/pybind11/tools/pybind11Tools.cmake:131 (add_library):
  Policy CMP0069 is not set: INTERPROCEDURAL_OPTIMIZATION is enforced when
  enabled.  Run "cmake --help-policy CMP0069" for policy details.  Use the
  cmake_policy command to set the policy and suppress this warning.

  INTERPROCEDURAL_OPTIMIZATION property will be ignored for target [...]

Pybind11 explicitly states in the documentation that it needs LTO to make good binary code so I think this is important.

I think this would be a good solution:

if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.9)
  cmake_policy(SET CMP0069 NEW)
endif()

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions