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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  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. file(GLOB_RECURSE SOURCES_LITE src/*.cpp src/*.cc lite-c/*.cpp)
  21. if(MGE_WITH_MINIMUM_SIZE)
  22. set(LITE_ENABLE_LOGGING OFF)
  23. set(LITE_ENABLE_EXCEPTION OFF)
  24. endif()
  25. # Write out lite_build_config.h It defines macros needed by lite
  26. configure_file(src/lite_build_config.h.in
  27. ${CMAKE_CURRENT_BINARY_DIR}/genfiles/lite_build_config.h)
  28. install(FILES ${CMAKE_CURRENT_BINARY_DIR}/genfiles/lite_build_config.h
  29. DESTINATION ${CMAKE_INSTALL_PREFIX}/lite/include)
  30. # begin config lite
  31. if(LITE_BUILD_WITH_MGE
  32. AND LITE_WITH_CUDA
  33. AND NOT WIN32)
  34. # FXIME third_party cpp redis do not support build with clang-cl
  35. list(APPEND SOURCES_LITE ${CPP_REDIS_SRCS})
  36. endif()
  37. add_library(lite_static STATIC ${SOURCES_LITE})
  38. add_dependencies(lite_static lite_fbs_generate)
  39. include_directories($<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/genfiles>)
  40. if(LITE_BUILD_WITH_MGE)
  41. target_link_libraries(lite_static PRIVATE megbrain megdnn ${MGE_CUDA_LIBS})
  42. add_compile_definitions(LITE_BUILD_WITH_MGE=1)
  43. message(STATUS "build lite with MegEngine.")
  44. else()
  45. target_link_libraries(lite_static PUBLIC flatbuffers)
  46. endif()
  47. include_directories(
  48. PUBLIC
  49. $<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/lite/include>
  50. PUBLIC
  51. $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/lite/include>
  52. PUBLIC
  53. $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/lite/include/lite>
  54. PUBLIC
  55. $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/lite/lite-c/include>
  56. PUBLIC
  57. $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/lite/src>
  58. PUBLIC
  59. $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/third_party/Json/include>)
  60. # end config lite
  61. # define a shared lib
  62. add_library(lite_shared SHARED $<TARGET_OBJECTS:lite_static>)
  63. if(LITE_BUILD_WITH_MGE)
  64. target_link_libraries(lite_shared PRIVATE megbrain megdnn ${MGE_CUDA_LIBS})
  65. endif()
  66. if(ANDROID)
  67. link_libraries(log)
  68. target_link_libraries(lite_static PRIVATE log)
  69. target_link_libraries(lite_shared PRIVATE log)
  70. endif()
  71. # define a shared lib for whl
  72. add_library(lite_shared_whl SHARED $<TARGET_OBJECTS:lite_static>)
  73. if(LITE_BUILD_WITH_MGE)
  74. if(IOS)
  75. target_link_libraries(lite_shared_whl PRIVATE megbrain megdnn ${MGE_CUDA_LIBS})
  76. else()
  77. target_link_libraries(lite_shared_whl PRIVATE megengine_shared)
  78. endif()
  79. endif()
  80. if(ANDROID)
  81. target_link_libraries(lite_shared_whl PRIVATE log)
  82. endif()
  83. # add lite_static_all_in_one same name build by BUILD please do not change
  84. # flatbuffers/cpuinfo/clog/lite_static order, if change!, cmake can not gen
  85. # flatbuffers/cpuinfo/clog OBJs to lite_static_all_in_one, this may cmake issue NOTICE:
  86. # this target always use to separate build with lite, if build lite via include
  87. # MegEngine/megbrain ROOT_DIR/CMakeLists.txt, just depends lite_static or lite_shared
  88. # TODO: need refine lite_static_all_in_one depend objects, but now cmake do not support
  89. # define a add_library which OBJECTS args is a set or list or string
  90. if(MGE_ENABLE_CPUINFO AND MGE_WITH_OPENCL)
  91. add_library(
  92. lite_static_all_in_one STATIC
  93. $<TARGET_OBJECTS:flatbuffers> $<TARGET_OBJECTS:cpuinfo> $<TARGET_OBJECTS:clog>
  94. $<TARGET_OBJECTS:OpenCL> $<TARGET_OBJECTS:lite_static>)
  95. elseif(MGE_ENABLE_CPUINFO AND NOT MGE_WITH_OPENCL)
  96. add_library(
  97. lite_static_all_in_one STATIC
  98. $<TARGET_OBJECTS:flatbuffers> $<TARGET_OBJECTS:cpuinfo> $<TARGET_OBJECTS:clog>
  99. $<TARGET_OBJECTS:lite_static>)
  100. elseif(NOT MGE_ENABLE_CPUINFO AND MGE_WITH_OPENCL)
  101. add_library(
  102. lite_static_all_in_one STATIC
  103. $<TARGET_OBJECTS:flatbuffers> $<TARGET_OBJECTS:OpenCL>
  104. $<TARGET_OBJECTS:lite_static>)
  105. else()
  106. add_library(lite_static_all_in_one STATIC $<TARGET_OBJECTS:flatbuffers>
  107. $<TARGET_OBJECTS:lite_static>)
  108. endif()
  109. if(LITE_BUILD_WITH_MGE)
  110. target_link_libraries(lite_static_all_in_one PRIVATE megbrain megdnn ${MGE_CUDA_LIBS})
  111. endif()
  112. if(LITE_BUILD_WITH_MGE
  113. AND LITE_WITH_CUDA
  114. AND NOT WIN32)
  115. # FXIME third_party cpp redis do not support build with clang-cl
  116. target_include_directories(lite_static PRIVATE ${CPP_REDIS_INCLUDES})
  117. target_include_directories(lite_shared PRIVATE ${CPP_REDIS_INCLUDES})
  118. target_include_directories(lite_shared_whl PRIVATE ${CPP_REDIS_INCLUDES})
  119. target_include_directories(lite_static_all_in_one PRIVATE ${CPP_REDIS_INCLUDES})
  120. endif()
  121. set(LITE_VERSION_SCRIPT
  122. ${PROJECT_SOURCE_DIR}/lite/src/version_lite.ld
  123. CACHE INTERNAL "Path to linker version script")
  124. add_custom_target(_lite_version_ld SOURCES ${LITE_VERSION_SCRIPT})
  125. if(NOT MSVC AND NOT WIN32)
  126. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
  127. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
  128. endif()
  129. # TODO: implemente version script for other OS
  130. if(UNIX AND NOT APPLE)
  131. target_link_options(lite_shared PRIVATE -Wl,--version-script=${LITE_VERSION_SCRIPT})
  132. set_target_properties(lite_shared PROPERTIES LINK_DEPENDS ${LITE_VERSION_SCRIPT})
  133. target_link_options(lite_shared_whl PRIVATE
  134. -Wl,--version-script=${LITE_VERSION_SCRIPT})
  135. set_target_properties(lite_shared_whl PROPERTIES LINK_DEPENDS ${LITE_VERSION_SCRIPT})
  136. endif()
  137. # config install
  138. install(
  139. TARGETS lite_static
  140. LIBRARY DESTINATION lite/lib/${MGE_ARCH}
  141. FRAMEWORK DESTINATION lite/lib/${MGE_ARCH}
  142. ARCHIVE DESTINATION lite/lib/${MGE_ARCH})
  143. install(
  144. TARGETS lite_shared
  145. LIBRARY DESTINATION lite/lib/${MGE_ARCH}
  146. FRAMEWORK DESTINATION lite/lib/${MGE_ARCH}
  147. ARCHIVE DESTINATION lite/lib/${MGE_ARCH})
  148. install(
  149. TARGETS lite_static_all_in_one
  150. LIBRARY DESTINATION lite/lib/${MGE_ARCH}
  151. FRAMEWORK DESTINATION lite/lib/${MGE_ARCH}
  152. ARCHIVE DESTINATION lite/lib/${MGE_ARCH})
  153. install(FILES ${PROJECT_SOURCE_DIR}/lite/include/lite/common_enum_c.h
  154. DESTINATION ${CMAKE_INSTALL_PREFIX}/lite/include/lite-c)
  155. install(
  156. DIRECTORY ${PROJECT_SOURCE_DIR}/lite/include
  157. DESTINATION ${CMAKE_INSTALL_PREFIX}/lite
  158. FILES_MATCHING
  159. PATTERN "*.h")
  160. install(
  161. DIRECTORY ${PROJECT_SOURCE_DIR}/lite/lite-c/include
  162. DESTINATION ${CMAKE_INSTALL_PREFIX}/lite
  163. FILES_MATCHING
  164. PATTERN "*.h")
  165. add_subdirectory(example)
  166. if(MGE_WITH_TEST)
  167. add_subdirectory(test)
  168. endif()
  169. # load_and_run
  170. add_subdirectory(load_and_run)
  171. # tools and example
  172. add_executable(rc4_encryptor tools/rc4_encrypt.cpp)
  173. target_link_libraries(rc4_encryptor lite_static)
  174. if(LITE_BUILD_WITH_MGE AND MGE_WITH_ROCM)
  175. # FIXME: hip obj can not find cpp obj only through lite_static
  176. target_link_libraries(rc4_encryptor megdnn)
  177. endif()
  178. target_include_directories(rc4_encryptor
  179. PRIVATE {PROJECT_SOURCE_DIR}/lite/src/decryption)
  180. install(
  181. TARGETS rc4_encryptor
  182. EXPORT ${LITE_EXPORT_TARGETS}
  183. RUNTIME DESTINATION lite/tools)