You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

CMakeLists.txt 5.4 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. find_package(NumPy REQUIRED)
  2. set(PACKAGE_NAME megengine)
  3. set(PACKAGE_NAME
  4. ${PACKAGE_NAME}
  5. PARENT_SCOPE)
  6. set(MODULE_NAME _imperative_rt)
  7. set(MODULE_NAME
  8. ${MODULE_NAME}
  9. PARENT_SCOPE)
  10. file(GLOB_RECURSE SRCS src/impl/*.cpp src/include/*.h python/src/*.cpp python/src/*.h)
  11. set(SRCS ${SRCS} ${CPP_REDIS_SRCS})
  12. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMGB_WITH_IMPERATIVE=1")
  13. file(GLOB_RECURSE PYTHON_SRCS python/${PACKAGE_NAME}/*.py)
  14. file(
  15. GLOB_RECURSE
  16. ALL_HEADERS
  17. src/cpp/megbrain_pubapi.h
  18. ${PROJECT_SOURCE_DIR}/src/core/include/*
  19. ${PROJECT_SOURCE_DIR}/src/opr/include/*
  20. ${PROJECT_SOURCE_DIR}/src/serialization/include/*
  21. ${PROJECT_SOURCE_DIR}/src/plugin/include/*
  22. ${PROJECT_SOURCE_DIR}/dnn/include/*)
  23. set(MEGENGINE_DIR ${CMAKE_CURRENT_BINARY_DIR}/python/)
  24. add_subdirectory(tablegen)
  25. add_custom_target(_version_ld SOURCES ${MGE_VERSION_SCRIPT})
  26. add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/pybind11
  27. ${PROJECT_BINARY_DIR}/third_party/pybind11)
  28. pybind11_add_module(${MODULE_NAME} NO_EXTRAS ${SRCS})
  29. if(APPLE)
  30. target_link_libraries(${MODULE_NAME} PRIVATE megengine_shared)
  31. elseif(MSVC OR WIN32)
  32. target_link_libraries(${MODULE_NAME} PRIVATE megengine_shared)
  33. message(STATUS "CMAKE_MSVC_RUNTIME_LIBRARY: ${CMAKE_MSVC_RUNTIME_LIBRARY}")
  34. set_target_properties(${MODULE_NAME} PROPERTIES MSVC_RUNTIME_LIBRARY
  35. "${CMAKE_MSVC_RUNTIME_LIBRARY}")
  36. else()
  37. # use to fix runtime crash when build both mgb(MGE_WITH_PYTHON_MODULE) and
  38. # imperative(MGE_BUILD_IMPERATIVE_RT)
  39. target_link_libraries(
  40. ${MODULE_NAME} PRIVATE megengine_shared -Wl,--version-script=${MGE_VERSION_SCRIPT})
  41. endif()
  42. if(ANDROID)
  43. target_link_libraries(${MODULE_NAME} PRIVATE ${PYTHON_LIBRARIES})
  44. endif()
  45. add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/range-v3
  46. ${PROJECT_BINARY_DIR}/third_party/range-v3)
  47. target_link_libraries(${MODULE_NAME} PRIVATE range-v3)
  48. add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/Json
  49. ${PROJECT_BINARY_DIR}/third_party/Json)
  50. target_link_libraries(${MODULE_NAME} PRIVATE nlohmann_json::nlohmann_json)
  51. target_include_directories(
  52. ${MODULE_NAME}
  53. PUBLIC src/include
  54. PRIVATE ${PYTHON_INCLUDE_DIRS} ${NUMPY_INCLUDE_DIR} ${MGB_OPDEF_OUT_DIR}
  55. ${CPP_REDIS_INCLUDES})
  56. target_compile_definitions(${MODULE_NAME} PRIVATE MODULE_NAME=${MODULE_NAME})
  57. target_compile_options(${MODULE_NAME} PRIVATE -Wno-unused-parameter)
  58. if(CXX_SUPPORT_WCLASS_MEMACCESS)
  59. target_compile_options(${MODULE_NAME} PRIVATE "-Wno-class-memaccess")
  60. endif()
  61. set_target_properties(
  62. ${MODULE_NAME}
  63. PROPERTIES SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX}
  64. LIBRARY_OUTPUT_DIRECTORY ${MEGENGINE_DIR}/${PACKAGE_NAME}/core)
  65. if(APPLE
  66. OR MSVC
  67. OR WIN32)
  68. message(
  69. VERBOSE
  70. "overwriting SUFFIX at macos and windows before config by set_target_properties")
  71. pybind11_extension(${MODULE_NAME})
  72. endif()
  73. add_dependencies(${MODULE_NAME} mgb_opdef _version_ld)
  74. if(MGE_WITH_TEST AND MGE_ENABLE_RTTI)
  75. add_subdirectory(test)
  76. endif()
  77. add_custom_command(
  78. TARGET ${MODULE_NAME}
  79. POST_BUILD
  80. COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/LICENSE
  81. ${PROJECT_SOURCE_DIR}/ACKNOWLEDGMENTS ${PROJECT_BINARY_DIR}
  82. COMMAND
  83. ${CMAKE_COMMAND} -E remove -f
  84. ${CMAKE_CURRENT_SOURCE_DIR}/python/megengine/core/$<TARGET_FILE_NAME:${MODULE_NAME}> # clean
  85. # develop
  86. COMMAND ${CMAKE_COMMAND} -E remove -f
  87. ${CMAKE_CURRENT_SOURCE_DIR}/python/megengine/version.py # clean develop
  88. COMMAND ${CMAKE_COMMAND} -E remove -f
  89. ${CMAKE_CURRENT_SOURCE_DIR}/python/megengine/core/include # clean develop
  90. COMMAND ${CMAKE_COMMAND} -E remove -f
  91. ${CMAKE_CURRENT_SOURCE_DIR}/python/megengine/core/lib # clean develop
  92. COMMAND
  93. ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/python/megengine
  94. ${CMAKE_CURRENT_BINARY_DIR}/python/megengine
  95. COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/python/test
  96. ${CMAKE_CURRENT_BINARY_DIR}/python/test
  97. COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/src/custom/include
  98. ${CMAKE_CURRENT_BINARY_DIR}/python/megengine/core/include
  99. COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/python/setup.py
  100. ${CMAKE_CURRENT_BINARY_DIR}/python/setup.py
  101. COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/python/requires.txt
  102. ${CMAKE_CURRENT_BINARY_DIR}/python/requires.txt
  103. COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/python/requires-style.txt
  104. ${CMAKE_CURRENT_BINARY_DIR}/python/requires-style.txt
  105. COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/python/requires-test.txt
  106. ${CMAKE_CURRENT_BINARY_DIR}/python/requires-test.txt)
  107. if(DEFINED MGB_VER_MAJOR)
  108. set(IS_INTERNAL "--internal")
  109. else()
  110. set(IS_INTERNAL "")
  111. endif(DEFINED MGB_VER_MAJOR)
  112. if(DEFINED MGE_EXTRA_NAME)
  113. set(RC_NAME "--rc=${MGE_EXTRA_NAME}")
  114. else()
  115. set(RC_NAME "")
  116. endif(DEFINED MGE_EXTRA_NAME)
  117. add_custom_command(
  118. TARGET ${MODULE_NAME}
  119. POST_BUILD
  120. COMMAND
  121. "${PYTHON_EXECUTABLE}" ${CMAKE_CURRENT_SOURCE_DIR}/python/gen_version.py --output
  122. ${CMAKE_CURRENT_BINARY_DIR}/python/megengine/version.py --major ${MGE_VER_MAJOR}
  123. --minor ${MGE_VER_MINOR} --patch ${MGE_VER_PATCH} ${RC_NAME} ${IS_INTERNAL})