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

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. set(MGB_OPDEF_OUT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/generated)
  2. set(MGB_OPDEF_OPS_SRC ${CMAKE_SOURCE_DIR}/src/core/include/megbrain/ir/ops.td)
  3. set(MGB_OPDEF_PARAMS_SRC ${CMAKE_SOURCE_DIR}/dnn/scripts/opr_param_defs.py)
  4. # we set CMAKE_CONFIGURE_DEPENDS so that when source files or hash.txt was modified,
  5. # cmake configure would be triggered to update ${MD5_MISMATCH}
  6. execute_process(
  7. COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/checkhash.cmake
  8. WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
  9. ERROR_QUIET
  10. RESULT_VARIABLE MD5_MISMATCH)
  11. if(${MD5_MISMATCH})
  12. # mgb tablegen executable
  13. set(TABLE_TARGET mgb-mlir-autogen)
  14. file(GLOB_RECURSE SRCS ${CMAKE_CURRENT_SOURCE_DIR}/*.h
  15. ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
  16. add_executable(${TABLE_TARGET} ${SRCS})
  17. target_include_directories(${TABLE_TARGET} PRIVATE ${MLIR_LLVM_INCLUDE_DIR})
  18. target_link_libraries(${TABLE_TARGET} PRIVATE LLVMTableGen MLIRTableGen LLVMSupport)
  19. set(MGB_TABLEGEN_EXE ${TABLE_TARGET})
  20. # generate megbrain opdef c header and python bindings basically same as
  21. # third_party/llvm-project/llvm/cmake/modules/TableGen.cmake but change output folder
  22. # and add extra dependency
  23. set(LLVM_SOURCE_DIR ${CMAKE_SOURCE_DIR}/third_party/llvm-project/llvm)
  24. set(LLVM_BINARY_DIR ${CMAKE_BINARY_DIR}/third_party/llvm-project/llvm)
  25. set(MLIR_SOURCE_DIR ${CMAKE_SOURCE_DIR}/third_party/llvm-project/mlir)
  26. set(MLIR_BINARY_DIR ${CMAKE_BINARY_DIR}/third_party/llvm-project/mlir)
  27. set(MGB_TABLEGEN_INCLUDES
  28. -I${LLVM_SOURCE_DIR}/include
  29. -I${LLVM_BINARY_DIR}/include
  30. -I${MLIR_SOURCE_DIR}/include
  31. -I${MLIR_BINARY_DIR}/include
  32. -I${CMAKE_SOURCE_DIR}/src/core/include/megbrain/ir
  33. -I${CMAKE_BINARY_DIR}/src/core/include/megbrain/ir)
  34. set(MGB_TABLEGEN_FLAGS --write-if-changed)
  35. set(MGB_TABLEGEN_TARGETS)
  36. function(tablegen_opdef target output)
  37. add_custom_target(
  38. mgb_opdef_${target}
  39. COMMAND
  40. ${MGB_TABLEGEN_EXE} ${MGB_TABLEGEN_INCLUDES} --gen-${target}
  41. ${MGB_OPDEF_OPS_SRC} ${MGB_TABLEGEN_FLAGS} -o ${MGB_OPDEF_OUT_DIR}/${output}
  42. DEPENDS param_defs_tblgen)
  43. set(MGB_TABLEGEN_TARGETS
  44. ${MGB_TABLEGEN_TARGETS} mgb_opdef_${target}
  45. PARENT_SCOPE)
  46. endfunction()
  47. tablegen_opdef(cpp-header opdef.h.inl)
  48. tablegen_opdef(cpp-body opdef.cpp.inl)
  49. tablegen_opdef(python-binding opdef.py.inl)
  50. tablegen_opdef(python-c-extension opdef.cpy.inl)
  51. tablegen_opdef(enum-list-macro enum_macro.h)
  52. add_custom_target(
  53. mgb_opdef_genhash
  54. ${CMAKE_COMMAND} -P genhash.cmake
  55. DEPENDS ${MGB_TABLEGEN_TARGETS}
  56. WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
  57. add_custom_target(mgb_opdef DEPENDS ${MGB_TABLEGEN_TARGETS} mgb_opdef_genhash)
  58. else()
  59. # add extra dependencies for auto reconfiguration
  60. set_property(
  61. DIRECTORY
  62. APPEND
  63. PROPERTY CMAKE_CONFIGURE_DEPENDS
  64. ${MGB_OPDEF_OPS_SRC}
  65. ${MGB_OPDEF_PARAMS_SRC}
  66. generated/opdef.h.inl
  67. generated/opdef.cpp.inl
  68. generated/opdef.py.inl
  69. generated/opdef.cpy.inl
  70. generated/enum_macro
  71. generated/hash.txt)
  72. # additional check for safety
  73. add_custom_target(
  74. mgb_opdef_checkhash
  75. ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/checkhash.cmake
  76. WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
  77. add_custom_target(mgb_opdef DEPENDS mgb_opdef_checkhash)
  78. endif()
  79. add_library(mgb_opdef_inc INTERFACE)
  80. target_include_directories(mgb_opdef_inc INTERFACE ${MGB_OPDEF_OUT_DIR})
  81. add_dependencies(mgb_opdef_inc mgb_opdef)