CMakeLists.txt 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. cmake_minimum_required(VERSION 3.10)
  2. project(pocketpy)
  3. set(CMAKE_CXX_STANDARD 17)
  4. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  5. # if cmake < 3.12, find_package(Python3) will not work, we directly use python3
  6. if (CMAKE_VERSION VERSION_LESS 3.12)
  7. set(Python3_EXECUTABLE python3)
  8. else()
  9. find_package(Python3 COMPONENTS Interpreter)
  10. endif()
  11. execute_process(
  12. COMMAND ${Python3_EXECUTABLE} prebuild.py
  13. WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
  14. RESULT_VARIABLE PREBUILD_RESULT
  15. )
  16. if(NOT ${PREBUILD_RESULT} EQUAL 0)
  17. message(FATAL_ERROR "prebuild.py: ${PREBUILD_RESULT}")
  18. endif()
  19. if(MSVC)
  20. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc /utf-8 /O2")
  21. else()
  22. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexceptions -O2")
  23. # disable -Wshorten-64-to-32 for apple
  24. if(APPLE)
  25. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-shorten-64-to-32")
  26. endif()
  27. endif()
  28. aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src POCKETPY_SRC)
  29. option(PK_USE_CJSON "" OFF)
  30. if(PK_USE_CJSON)
  31. add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/3rd/cjson)
  32. add_definitions(-DPK_USE_CJSON)
  33. endif()
  34. option(PK_ENABLE_OS "" OFF)
  35. if(PK_ENABLE_OS)
  36. add_definitions(-DPK_ENABLE_OS=1)
  37. endif()
  38. option(PK_NO_EXPORT_C_API "" OFF)
  39. if(PK_NO_EXPORT_C_API)
  40. add_definitions(-DPK_NO_EXPORT_C_API)
  41. endif()
  42. # PK_IS_MAIN determines whether the project is being used from root
  43. # or if it is added as a dependency (through add_subdirectory for example).
  44. if ("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
  45. set(PK_IS_MAIN TRUE)
  46. option(PK_BUILD_SHARED_LIB "Build shared library" OFF)
  47. option(PK_BUILD_STATIC_LIB "Build static library" OFF)
  48. else()
  49. set(PK_IS_MAIN FALSE)
  50. option(PK_BUILD_SHARED_LIB "Build shared library" OFF)
  51. option(PK_BUILD_STATIC_LIB "Build static library" ON)
  52. endif()
  53. if(PK_BUILD_SHARED_LIB)
  54. add_library(${PROJECT_NAME} SHARED ${POCKETPY_SRC})
  55. elseif(PK_BUILD_STATIC_LIB)
  56. add_library(${PROJECT_NAME} STATIC ${POCKETPY_SRC})
  57. else()
  58. add_library(${PROJECT_NAME} SHARED ${POCKETPY_SRC})
  59. set(PROJECT_EXE_NAME main)
  60. add_executable(${PROJECT_EXE_NAME} src2/main.cpp)
  61. target_link_libraries(${PROJECT_EXE_NAME} ${PROJECT_NAME})
  62. target_link_libraries(${PROJECT_EXE_NAME} ${CMAKE_DL_LIBS})
  63. endif()
  64. target_include_directories(${PROJECT_NAME} PUBLIC
  65. $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>
  66. $<INSTALL_INTERFACE:include>
  67. )
  68. if(PK_USE_CJSON)
  69. target_link_libraries(${PROJECT_NAME} PRIVATE $<BUILD_INTERFACE:cjson>)
  70. endif()
  71. option(PK_INSTALL "Generate the install target" ON)
  72. if (PK_INSTALL)
  73. install(
  74. TARGETS ${PROJECT_NAME}
  75. EXPORT ${PROJECT_NAME}_target
  76. ARCHIVE DESTINATION lib
  77. LIBRARY DESTINATION lib
  78. RUNTIME DESTINATION bin
  79. )
  80. install(
  81. DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/
  82. DESTINATION include
  83. FILES_MATCHING PATTERN "*.h"
  84. PATTERN "typings" EXCLUDE
  85. )
  86. # generate config.cmake
  87. install(
  88. EXPORT ${PROJECT_NAME}_target
  89. FILE ${PROJECT_NAME}-config.cmake
  90. DESTINATION "share/${PROJECT_NAME}"
  91. )
  92. endif()