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 6.6 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. option(LITE_BUILD_WITH_MGE "Build lite with MegEngine." ON)
  2. # config lite_build_config.h.in
  3. set(LITE_WITH_OPENCL ${MGE_WITH_OPENCL})
  4. set(LITE_WITH_CUDA ${MGE_WITH_CUDA})
  5. set(LITE_ENABLE_LOGGING ${MGE_ENABLE_LOGGING})
  6. set(LITE_ENABLE_EXCEPTION ${MGE_ENABLE_EXCEPTIONS})
  7. set(LITE_ASSERT_LOC ${MGB_ASSERT_LOC})
  8. if(NOT MGB_WITH_FLATBUFFERS)
  9. include(../cmake/flatbuffers.cmake)
  10. endif()
  11. file(GLOB_RECURSE SRC_FBS src/**/*.fbs)
  12. build_flatbuffers(
  13. "${SRC_FBS}"
  14. ""
  15. lite_fbs_generate
  16. ""
  17. "${CMAKE_CURRENT_BINARY_DIR}"
  18. ""
  19. ""
  20. )
  21. file(GLOB_RECURSE SOURCES_LITE src/*.cpp src/*.cc lite-c/*.cpp)
  22. if(MGE_WITH_MINIMUM_SIZE)
  23. set(LITE_ENABLE_LOGGING OFF)
  24. set(LITE_ENABLE_EXCEPTION OFF)
  25. endif()
  26. # Write out lite_build_config.h
  27. # It defines macros needed by lite
  28. configure_file(src/lite_build_config.h.in ${CMAKE_CURRENT_BINARY_DIR}/genfiles/lite_build_config.h)
  29. install(FILES ${CMAKE_CURRENT_BINARY_DIR}/genfiles/lite_build_config.h DESTINATION ${CMAKE_INSTALL_PREFIX}/lite/include)
  30. # begin config lite
  31. add_library(lite_static STATIC ${SOURCES_LITE})
  32. add_dependencies(lite_static lite_fbs_generate)
  33. include_directories($<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/genfiles>)
  34. if(LITE_BUILD_WITH_MGE)
  35. target_link_libraries(lite_static PRIVATE megbrain megdnn ${MGE_CUDA_LIBS})
  36. add_compile_definitions(LITE_BUILD_WITH_MGE=1)
  37. message(STATUS "build lite with MegEngine.")
  38. else()
  39. target_link_libraries(lite_static PUBLIC flatbuffers)
  40. endif()
  41. include_directories(
  42. PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/lite/include>
  43. PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/lite/include>
  44. PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/lite/include/lite>
  45. PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/lite/lite-c/include>
  46. PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/lite/src>
  47. PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/third_party/Json/include>
  48. )
  49. # end config lite
  50. # define a shared lib
  51. add_library(lite_shared SHARED $<TARGET_OBJECTS:lite_static>)
  52. if(LITE_BUILD_WITH_MGE)
  53. target_link_libraries(lite_shared PRIVATE megbrain megdnn ${MGE_CUDA_LIBS})
  54. endif()
  55. if(ANDROID)
  56. link_libraries(log)
  57. target_link_libraries(lite_static PRIVATE log)
  58. target_link_libraries(lite_shared PRIVATE log)
  59. endif()
  60. # define a shared lib for whl
  61. add_library(lite_shared_whl SHARED $<TARGET_OBJECTS:lite_static>)
  62. if(LITE_BUILD_WITH_MGE)
  63. if (MSVC OR WIN32 OR IOS)
  64. # TODO: this will lead whl size increase on Windows, caused by
  65. # Windows does not support implicitly importing data members from DLL.
  66. target_link_libraries(lite_shared_whl PRIVATE megbrain megdnn ${MGE_CUDA_LIBS})
  67. else()
  68. target_link_libraries(lite_shared_whl PRIVATE megengine_export)
  69. endif()
  70. endif()
  71. if(ANDROID)
  72. target_link_libraries(lite_shared_whl PRIVATE log)
  73. endif()
  74. # add lite_static_all_in_one same name build by BUILD
  75. # please do not change flatbuffers/cpuinfo/clog/lite_static order, if change!, cmake
  76. # can not gen flatbuffers/cpuinfo/clog OBJs to lite_static_all_in_one, this may cmake issue
  77. # NOTICE: this target always use to separate build with lite, if build lite via include
  78. # MegEngine/megbrain ROOT_DIR/CMakeLists.txt, just depends lite_static or lite_shared
  79. #TODO: need refine lite_static_all_in_one depend objects, but now cmake do not support
  80. # define a add_library which OBJECTS args is a set or list or string
  81. if (MGE_ENABLE_CPUINFO AND MGE_WITH_OPENCL)
  82. add_library(lite_static_all_in_one STATIC $<TARGET_OBJECTS:flatbuffers> $<TARGET_OBJECTS:cpuinfo> $<TARGET_OBJECTS:clog> $<TARGET_OBJECTS:OpenCL> $<TARGET_OBJECTS:lite_static>)
  83. elseif (MGE_ENABLE_CPUINFO AND NOT MGE_WITH_OPENCL)
  84. add_library(lite_static_all_in_one STATIC $<TARGET_OBJECTS:flatbuffers> $<TARGET_OBJECTS:cpuinfo> $<TARGET_OBJECTS:clog> $<TARGET_OBJECTS:lite_static>)
  85. elseif (NOT MGE_ENABLE_CPUINFO AND MGE_WITH_OPENCL)
  86. add_library(lite_static_all_in_one STATIC $<TARGET_OBJECTS:flatbuffers> $<TARGET_OBJECTS:OpenCL> $<TARGET_OBJECTS:lite_static>)
  87. else()
  88. add_library(lite_static_all_in_one STATIC $<TARGET_OBJECTS:flatbuffers> $<TARGET_OBJECTS:lite_static>)
  89. endif()
  90. if(LITE_BUILD_WITH_MGE)
  91. target_link_libraries(lite_static_all_in_one PRIVATE megbrain megdnn ${MGE_CUDA_LIBS})
  92. endif()
  93. set(LITE_VERSION_SCRIPT ${PROJECT_SOURCE_DIR}/lite/src/version_lite.ld CACHE INTERNAL "Path to linker version script")
  94. add_custom_target(_lite_version_ld SOURCES ${LITE_VERSION_SCRIPT})
  95. if(NOT MSVC AND NOT WIN32)
  96. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
  97. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
  98. endif()
  99. #TODO: implemente version script for other OS
  100. if (UNIX AND NOT APPLE)
  101. target_link_options(lite_shared PRIVATE -Wl,--version-script=${LITE_VERSION_SCRIPT})
  102. set_target_properties(lite_shared PROPERTIES LINK_DEPENDS ${LITE_VERSION_SCRIPT})
  103. target_link_options(lite_shared_whl PRIVATE -Wl,--version-script=${LITE_VERSION_SCRIPT})
  104. set_target_properties(lite_shared_whl PROPERTIES LINK_DEPENDS ${LITE_VERSION_SCRIPT})
  105. endif()
  106. # config install
  107. install(TARGETS lite_static
  108. LIBRARY DESTINATION lite/lib/${MGE_ARCH}
  109. FRAMEWORK DESTINATION lite/lib/${MGE_ARCH}
  110. ARCHIVE DESTINATION lite/lib/${MGE_ARCH})
  111. install(TARGETS lite_shared
  112. LIBRARY DESTINATION lite/lib/${MGE_ARCH}
  113. FRAMEWORK DESTINATION lite/lib/${MGE_ARCH}
  114. ARCHIVE DESTINATION lite/lib/${MGE_ARCH}
  115. )
  116. install(TARGETS lite_static_all_in_one
  117. LIBRARY DESTINATION lite/lib/${MGE_ARCH}
  118. FRAMEWORK DESTINATION lite/lib/${MGE_ARCH}
  119. ARCHIVE DESTINATION lite/lib/${MGE_ARCH})
  120. install(FILES ${PROJECT_SOURCE_DIR}/lite/include/lite/common_enum_c.h
  121. DESTINATION ${CMAKE_INSTALL_PREFIX}/lite/include/lite-c)
  122. install(DIRECTORY ${PROJECT_SOURCE_DIR}/lite/include
  123. DESTINATION ${CMAKE_INSTALL_PREFIX}/lite FILES_MATCHING PATTERN "*.h")
  124. install(DIRECTORY ${PROJECT_SOURCE_DIR}/lite/lite-c/include
  125. DESTINATION ${CMAKE_INSTALL_PREFIX}/lite FILES_MATCHING PATTERN "*.h")
  126. add_subdirectory(example)
  127. if(MGE_WITH_TEST)
  128. add_subdirectory(test)
  129. endif()
  130. # tools and example
  131. add_executable(rc4_encryptor tools/rc4_encrypt.cpp)
  132. target_link_libraries(rc4_encryptor lite_static)
  133. if(LITE_BUILD_WITH_MGE AND MGE_WITH_ROCM)
  134. # FIXME: hip obj can not find cpp obj only through lite_static
  135. target_link_libraries(rc4_encryptor megdnn)
  136. endif()
  137. target_include_directories(rc4_encryptor PRIVATE
  138. {PROJECT_SOURCE_DIR}/lite/src/decryption)
  139. install (TARGETS rc4_encryptor
  140. EXPORT ${LITE_EXPORT_TARGETS}
  141. RUNTIME DESTINATION lite/tools)

MegEngine 安装包中集成了使用 GPU 运行代码所需的 CUDA 环境,不用区分 CPU 和 GPU 版。 如果想要运行 GPU 程序,请确保机器本身配有 GPU 硬件设备并安装好驱动。 如果你想体验在云端 GPU 算力平台进行深度学习开发的感觉,欢迎访问 MegStudio 平台