CMakeLists.txt 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. cmake_minimum_required (VERSION 3.16.3)
  2. project (OpenFHE-Python)
  3. set(OPENFHE_PYTHON_VERSION_MAJOR 1)
  4. set(OPENFHE_PYTHON_VERSION_MINOR 3)
  5. set(OPENFHE_PYTHON_VERSION_PATCH 1)
  6. set(OPENFHE_PYTHON_VERSION_TWEAK 0)
  7. set(OPENFHE_PYTHON_VERSION ${OPENFHE_PYTHON_VERSION_MAJOR}.${OPENFHE_PYTHON_VERSION_MINOR}.${OPENFHE_PYTHON_VERSION_PATCH}.${OPENFHE_PYTHON_VERSION_TWEAK})
  8. # OpenFHE version can be specified externally (-DOPENFHE_REQUIRED_VERSION=1.3.1)
  9. if(NOT DEFINED OPENFHE_REQUIRED_VERSION)
  10. set(OPENFHE_REQUIRED_VERSION "1.3.1" CACHE STRING "Required OpenFHE version")
  11. else()
  12. # User provided OPENFHE_REQUIRED_VERSION via -D
  13. message(STATUS "Using user-specified OpenFHE version: ${OPENFHE_REQUIRED_VERSION}")
  14. endif()
  15. set(CMAKE_CXX_STANDARD 17)
  16. option( BUILD_STATIC "Set to ON to include static versions of the library" OFF)
  17. if(APPLE)
  18. set(CMAKE_CXX_VISIBILITY_PRESET default)
  19. endif()
  20. find_package(OpenFHE ${OPENFHE_REQUIRED_VERSION} REQUIRED)
  21. message(STATUS "Building with OpenFHE version: ${OPENFHE_REQUIRED_VERSION}")
  22. set(PYBIND11_FINDPYTHON ON)
  23. find_package(pybind11 REQUIRED)
  24. # "CMAKE_INTERPROCEDURAL_OPTIMIZATION ON" (ON is the default value) causes link failure. see
  25. # https://github.com/openfheorg/openfhe-python/actions/runs/11492843373/job/31987579944
  26. set(CMAKE_INTERPROCEDURAL_OPTIMIZATION OFF)
  27. set( OpenFHE_Py_SOURCES src/lib)
  28. set( OpenFHE_Py_INCLUDES src/include)
  29. include_directories( ${OPENMP_INCLUDES} )
  30. include_directories( ${OpenFHE_INCLUDE} )
  31. include_directories( ${OpenFHE_INCLUDE}/third-party/include )
  32. include_directories( ${OpenFHE_INCLUDE}/core )
  33. include_directories( ${OpenFHE_INCLUDE}/pke )
  34. include_directories( ${OpenFHE_INCLUDE}/binfhe )
  35. # include_directories( ${OpenFHE_Py_SOURCES} )
  36. include_directories( ${OpenFHE_Py_INCLUDES}/pke )
  37. include_directories( ${OpenFHE_Py_INCLUDES}/binfhe )
  38. include_directories( ${OpenFHE_Py_INCLUDES}/docstrings )
  39. include_directories( ${OpenFHE_Py_INCLUDES} )
  40. ### add directories for other OpenFHE modules as needed for your project
  41. link_directories( ${OpenFHE_LIBDIR} )
  42. link_directories( ${OPENMP_LIBRARIES} )
  43. if(BUILD_STATIC)
  44. set( CMAKE_EXE_LINKER_FLAGS "${OpenFHE_EXE_LINKER_FLAGS} -static")
  45. link_libraries( ${OpenFHE_STATIC_LIBRARIES} )
  46. else()
  47. set( CMAKE_EXE_LINKER_FLAGS ${OpenFHE_EXE_LINKER_FLAGS} )
  48. link_libraries( ${OpenFHE_SHARED_LIBRARIES} )
  49. endif()
  50. ### ADD YOUR EXECUTABLE(s) HERE
  51. ### add_executable( EXECUTABLE-NAME SOURCES )
  52. ###
  53. ### EXAMPLE:
  54. ### add_executable( test demo-simple-example.cpp )
  55. ### Pybind Modules
  56. pybind11_add_module(openfhe
  57. src/lib/bindings.cpp
  58. src/lib/binfhe_bindings.cpp
  59. src/lib/binfhe/binfhecontext_wrapper.cpp
  60. src/lib/pke/serialization.cpp
  61. )
  62. ### Python installation
  63. # Allow the user to specify the path to Python executable (if not provided, find it)
  64. option(PYTHON_EXECUTABLE_PATH "Path to Python executable" "")
  65. if(PYTHON_EXECUTABLE_PATH)
  66. set(Python_EXECUTABLE "${PYTHON_EXECUTABLE_PATH}")
  67. endif()
  68. find_package(Python REQUIRED COMPONENTS Interpreter Development)
  69. # Check Python version
  70. if(${Python_VERSION_MAJOR} EQUAL 3 AND ${Python_VERSION_MINOR} GREATER_EQUAL 10)
  71. execute_process(
  72. COMMAND "${Python_EXECUTABLE}" -c "from sys import exec_prefix; print(exec_prefix)"
  73. OUTPUT_VARIABLE PYTHON_SITE_PACKAGES
  74. OUTPUT_STRIP_TRAILING_WHITESPACE
  75. )
  76. else()
  77. execute_process(
  78. COMMAND "${Python_EXECUTABLE}" -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"
  79. OUTPUT_VARIABLE PYTHON_SITE_PACKAGES
  80. OUTPUT_STRIP_TRAILING_WHITESPACE
  81. )
  82. endif()
  83. message(STATUS "Python site packages directory: ${PYTHON_SITE_PACKAGES}")
  84. if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
  85. set(Python_Install_Location "${PYTHON_SITE_PACKAGES}")
  86. else()
  87. set(Python_Install_Location "${CMAKE_INSTALL_PREFIX}")
  88. endif()
  89. message("***** INSTALL IS AT ${Python_Install_Location}; to change, run cmake with -DCMAKE_INSTALL_PREFIX=/your/path")
  90. install(TARGETS openfhe LIBRARY DESTINATION ${Python_Install_Location})
  91. install(FILES ${CMAKE_SOURCE_DIR}/__init__.py DESTINATION ${Python_Install_Location})