CMakeLists.txt revision 12391:ceeca8b41e4b
12623SN/A# CMakeLists.txt -- Build system for the pybind11 modules 210596Sgabeblack@google.com# 312276Sanouk.vanlaer@arm.com# Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch> 47725SAli.Saidi@ARM.com# 57725SAli.Saidi@ARM.com# All rights reserved. Use of this source code is governed by a 67725SAli.Saidi@ARM.com# BSD-style license that can be found in the LICENSE file. 77725SAli.Saidi@ARM.com 87725SAli.Saidi@ARM.comcmake_minimum_required(VERSION 2.8.12) 97725SAli.Saidi@ARM.com 107725SAli.Saidi@ARM.comif (POLICY CMP0048) 117725SAli.Saidi@ARM.com # cmake warns if loaded from a min-3.0-required parent dir, so silence the warning: 127725SAli.Saidi@ARM.com cmake_policy(SET CMP0048 NEW) 137725SAli.Saidi@ARM.comendif() 147725SAli.Saidi@ARM.com 152623SN/A# CMake versions < 3.4.0 do not support try_compile/pthread checks without C as active language. 162623SN/Aif(CMAKE_VERSION VERSION_LESS 3.4.0) 172623SN/A project(pybind11) 182623SN/Aelse() 192623SN/A project(pybind11 CXX) 202623SN/Aendif() 212623SN/A 222623SN/A# Check if pybind11 is being used directly or via add_subdirectory 232623SN/Aset(PYBIND11_MASTER_PROJECT OFF) 242623SN/Aif (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) 252623SN/A set(PYBIND11_MASTER_PROJECT ON) 262623SN/Aendif() 272623SN/A 282623SN/Aoption(PYBIND11_INSTALL "Install pybind11 header files?" ${PYBIND11_MASTER_PROJECT}) 292623SN/Aoption(PYBIND11_TEST "Build pybind11 test suite?" ${PYBIND11_MASTER_PROJECT}) 302623SN/A 312623SN/Alist(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/tools") 322623SN/A 332623SN/Ainclude(pybind11Tools) 342623SN/A 352623SN/A# Cache variables so pybind11_add_module can be used in parent projects 362623SN/Aset(PYBIND11_INCLUDE_DIR "${CMAKE_CURRENT_LIST_DIR}/include" CACHE INTERNAL "") 372623SN/Aset(PYTHON_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS} CACHE INTERNAL "") 382623SN/Aset(PYTHON_LIBRARIES ${PYTHON_LIBRARIES} CACHE INTERNAL "") 392623SN/Aset(PYTHON_MODULE_PREFIX ${PYTHON_MODULE_PREFIX} CACHE INTERNAL "") 402665Ssaidi@eecs.umich.eduset(PYTHON_MODULE_EXTENSION ${PYTHON_MODULE_EXTENSION} CACHE INTERNAL "") 412665Ssaidi@eecs.umich.edu 422623SN/A# NB: when adding a header don't forget to also add it to setup.py 432623SN/Aset(PYBIND11_HEADERS 4411793Sbrandon.potter@amd.com include/pybind11/detail/class.h 4511793Sbrandon.potter@amd.com include/pybind11/detail/common.h 463170Sstever@eecs.umich.edu include/pybind11/detail/descr.h 478105Sgblack@eecs.umich.edu include/pybind11/detail/init.h 482623SN/A include/pybind11/detail/internals.h 496658Snate@binkert.org include/pybind11/detail/typeid.h 502623SN/A include/pybind11/attr.h 518232Snate@binkert.org include/pybind11/buffer_info.h 529152Satgutier@umich.edu include/pybind11/cast.h 538232Snate@binkert.org include/pybind11/chrono.h 5411793Sbrandon.potter@amd.com include/pybind11/common.h 558232Snate@binkert.org include/pybind11/complex.h 563348Sbinkertn@umich.edu include/pybind11/options.h 573348Sbinkertn@umich.edu include/pybind11/eigen.h 584762Snate@binkert.org include/pybind11/embed.h 597678Sgblack@eecs.umich.edu include/pybind11/eval.h 608779Sgblack@eecs.umich.edu include/pybind11/functional.h 612901Ssaidi@eecs.umich.edu include/pybind11/numpy.h 622623SN/A include/pybind11/operators.h 632623SN/A include/pybind11/pybind11.h 642623SN/A include/pybind11/pytypes.h 652623SN/A include/pybind11/stl.h 662623SN/A include/pybind11/stl_bind.h 672623SN/A) 682623SN/Astring(REPLACE "include/" "${CMAKE_CURRENT_SOURCE_DIR}/include/" 6911147Smitch.hayenga@arm.com PYBIND11_HEADERS "${PYBIND11_HEADERS}") 702623SN/A 712623SN/Aif (PYBIND11_TEST) 722623SN/A add_subdirectory(tests) 738707Sandreas.hansson@arm.comendif() 742948Ssaidi@eecs.umich.edu 752948Ssaidi@eecs.umich.eduinclude(GNUInstallDirs) 765606Snate@binkert.orginclude(CMakePackageConfigHelpers) 772948Ssaidi@eecs.umich.edu 782948Ssaidi@eecs.umich.edu# extract project version from source 795529Snate@binkert.orgfile(STRINGS "${PYBIND11_INCLUDE_DIR}/pybind11/detail/common.h" pybind11_version_defines 808707Sandreas.hansson@arm.com REGEX "#define PYBIND11_VERSION_(MAJOR|MINOR|PATCH) ") 819179Sandreas.hansson@arm.comforeach(ver ${pybind11_version_defines}) 8212085Sspwilson2@wisc.edu if (ver MATCHES "#define PYBIND11_VERSION_(MAJOR|MINOR|PATCH) +([^ ]+)$") 832623SN/A set(PYBIND11_VERSION_${CMAKE_MATCH_1} "${CMAKE_MATCH_2}" CACHE INTERNAL "") 842623SN/A endif() 852623SN/Aendforeach() 862623SN/Aset(${PROJECT_NAME}_VERSION ${PYBIND11_VERSION_MAJOR}.${PYBIND11_VERSION_MINOR}.${PYBIND11_VERSION_PATCH}) 872623SN/Amessage(STATUS "pybind11 v${${PROJECT_NAME}_VERSION}") 8810030SAli.Saidi@ARM.com 892623SN/Aoption (USE_PYTHON_INCLUDE_DIR "Install pybind11 headers in Python include directory instead of default installation prefix" OFF) 902623SN/Aif (USE_PYTHON_INCLUDE_DIR) 912623SN/A file(RELATIVE_PATH CMAKE_INSTALL_INCLUDEDIR ${CMAKE_INSTALL_PREFIX} ${PYTHON_INCLUDE_DIRS}) 922623SN/Aendif() 9310913Sandreas.sandberg@arm.com 9410913Sandreas.sandberg@arm.comif(NOT (CMAKE_VERSION VERSION_LESS 3.0)) # CMake >= 3.0 952798Sktlim@umich.edu # Build an interface library target: 9612276Sanouk.vanlaer@arm.com add_library(pybind11 INTERFACE) 9712276Sanouk.vanlaer@arm.com add_library(pybind11::pybind11 ALIAS pybind11) # to match exported target 9812276Sanouk.vanlaer@arm.com target_include_directories(pybind11 INTERFACE $<BUILD_INTERFACE:${PYBIND11_INCLUDE_DIR}> 999448SAndreas.Sandberg@ARM.com $<BUILD_INTERFACE:${PYTHON_INCLUDE_DIRS}> 10010913Sandreas.sandberg@arm.com $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>) 1019448SAndreas.Sandberg@ARM.com target_compile_options(pybind11 INTERFACE $<BUILD_INTERFACE:${PYBIND11_CPP_STANDARD}>) 1029342SAndreas.Sandberg@arm.com 1039448SAndreas.Sandberg@ARM.com add_library(module INTERFACE) 1049442SAndreas.Sandberg@ARM.com add_library(pybind11::module ALIAS module) 10511147Smitch.hayenga@arm.com if(NOT MSVC) 10610913Sandreas.sandberg@arm.com target_compile_options(module INTERFACE -fvisibility=hidden) 1072798Sktlim@umich.edu endif() 10811147Smitch.hayenga@arm.com target_link_libraries(module INTERFACE pybind11::pybind11) 1099442SAndreas.Sandberg@ARM.com if(WIN32 OR CYGWIN) 1109442SAndreas.Sandberg@ARM.com target_link_libraries(module INTERFACE $<BUILD_INTERFACE:${PYTHON_LIBRARIES}>) 1119442SAndreas.Sandberg@ARM.com elseif(APPLE) 1129442SAndreas.Sandberg@ARM.com target_link_libraries(module INTERFACE "-undefined dynamic_lookup") 1139448SAndreas.Sandberg@ARM.com endif() 1149648Sdam.sunwoo@arm.com 1159442SAndreas.Sandberg@ARM.com add_library(embed INTERFACE) 11610913Sandreas.sandberg@arm.com add_library(pybind11::embed ALIAS embed) 1172798Sktlim@umich.edu target_link_libraries(embed INTERFACE pybind11::pybind11 $<BUILD_INTERFACE:${PYTHON_LIBRARIES}>) 1182623SN/Aendif() 1192623SN/A 1202623SN/Aif (PYBIND11_INSTALL) 1219342SAndreas.Sandberg@arm.com install(DIRECTORY ${PYBIND11_INCLUDE_DIR}/pybind11 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) 1222623SN/A # GNUInstallDirs "DATADIR" wrong here; CMake search path wants "share". 1239442SAndreas.Sandberg@ARM.com set(PYBIND11_CMAKECONFIG_INSTALL_DIR "share/cmake/${PROJECT_NAME}" CACHE STRING "install path for pybind11Config.cmake") 1249448SAndreas.Sandberg@ARM.com 1259448SAndreas.Sandberg@ARM.com configure_package_config_file(tools/${PROJECT_NAME}Config.cmake.in 1269442SAndreas.Sandberg@ARM.com "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" 1275221Ssaidi@eecs.umich.edu INSTALL_DESTINATION ${PYBIND11_CMAKECONFIG_INSTALL_DIR}) 1289523SAndreas.Sandberg@ARM.com # Remove CMAKE_SIZEOF_VOID_P from ConfigVersion.cmake since the library does 1293201Shsul@eecs.umich.edu # not depend on architecture specific settings or libraries. 1309448SAndreas.Sandberg@ARM.com set(_PYBIND11_CMAKE_SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P}) 1319448SAndreas.Sandberg@ARM.com unset(CMAKE_SIZEOF_VOID_P) 13211147Smitch.hayenga@arm.com write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake 13311147Smitch.hayenga@arm.com VERSION ${${PROJECT_NAME}_VERSION} 13411147Smitch.hayenga@arm.com COMPATIBILITY AnyNewerVersion) 13511147Smitch.hayenga@arm.com set(CMAKE_SIZEOF_VOID_P ${_PYBIND11_CMAKE_SIZEOF_VOID_P}) 13611147Smitch.hayenga@arm.com install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake 13711147Smitch.hayenga@arm.com ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake 13811147Smitch.hayenga@arm.com tools/FindPythonLibsNew.cmake 13911147Smitch.hayenga@arm.com tools/pybind11Tools.cmake 14011147Smitch.hayenga@arm.com DESTINATION ${PYBIND11_CMAKECONFIG_INSTALL_DIR}) 14111147Smitch.hayenga@arm.com 14211147Smitch.hayenga@arm.com if(NOT (CMAKE_VERSION VERSION_LESS 3.0)) 14311147Smitch.hayenga@arm.com if(NOT PYBIND11_EXPORT_NAME) 14411147Smitch.hayenga@arm.com set(PYBIND11_EXPORT_NAME "${PROJECT_NAME}Targets") 14511147Smitch.hayenga@arm.com endif() 14611147Smitch.hayenga@arm.com 14711147Smitch.hayenga@arm.com install(TARGETS pybind11 module embed 14811147Smitch.hayenga@arm.com EXPORT "${PYBIND11_EXPORT_NAME}") 1492623SN/A if(PYBIND11_MASTER_PROJECT) 15011147Smitch.hayenga@arm.com install(EXPORT "${PYBIND11_EXPORT_NAME}" 15112276Sanouk.vanlaer@arm.com NAMESPACE "${PROJECT_NAME}::" 15212276Sanouk.vanlaer@arm.com DESTINATION ${PYBIND11_CMAKECONFIG_INSTALL_DIR}) 15312276Sanouk.vanlaer@arm.com endif() 15411147Smitch.hayenga@arm.com endif() 1559442SAndreas.Sandberg@ARM.comendif() 1562798Sktlim@umich.edu