CMakeLists.txt 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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. # The next line ensures that the installed openfhe module can find its shared library dependencies
  63. # in the 'lib/' subdirectory relative to itself without requiring LD_LIBRARY_PATH.
  64. target_link_options(openfhe PRIVATE "-Wl,-rpath=$ORIGIN/lib" "-Wl,--disable-new-dtags")
  65. ### Python installation
  66. # Allow the user to specify the path to Python executable (if not provided, find it)
  67. option(PYTHON_EXECUTABLE_PATH "Path to Python executable" "")
  68. if(PYTHON_EXECUTABLE_PATH)
  69. set(Python_EXECUTABLE "${PYTHON_EXECUTABLE_PATH}")
  70. endif()
  71. find_package(Python REQUIRED COMPONENTS Interpreter Development)
  72. # Check Python version
  73. if(${Python_VERSION_MAJOR} EQUAL 3 AND ${Python_VERSION_MINOR} GREATER_EQUAL 10)
  74. execute_process(
  75. COMMAND "${Python_EXECUTABLE}" -c "from sys import exec_prefix; print(exec_prefix)"
  76. OUTPUT_VARIABLE PYTHON_SITE_PACKAGES
  77. OUTPUT_STRIP_TRAILING_WHITESPACE
  78. )
  79. else()
  80. execute_process(
  81. COMMAND "${Python_EXECUTABLE}" -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"
  82. OUTPUT_VARIABLE PYTHON_SITE_PACKAGES
  83. OUTPUT_STRIP_TRAILING_WHITESPACE
  84. )
  85. endif()
  86. message(STATUS "Python site packages directory: ${PYTHON_SITE_PACKAGES}")
  87. if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
  88. set(Python_Install_Location "${PYTHON_SITE_PACKAGES}")
  89. else()
  90. set(Python_Install_Location "${CMAKE_INSTALL_PREFIX}")
  91. endif()
  92. message("***** INSTALL IS AT ${Python_Install_Location}; to change, run cmake with -DCMAKE_INSTALL_PREFIX=/your/path")
  93. install(TARGETS openfhe LIBRARY DESTINATION ${Python_Install_Location})
  94. install(FILES ${CMAKE_SOURCE_DIR}/src/__init__.py DESTINATION ${Python_Install_Location})