set(fusion_pass_file
    ${PADDLE_BINARY_DIR}/paddle/cinn/hlir/pass/use_general_pass.h)
file(
  WRITE ${fusion_pass_file}
  "#include \"paddle/cinn/common/macros.h\" // Generated by the paddle/cinn/hlir/pass/CMakeLists.txt. DO NOT EDIT!\n\n#pragma once\n\n"
)

function(find_fusion_pass_register FILENAME ADD_PATH PATTERN)
  # set op_name to OUTPUT
  file(READ ${FILENAME} CONTENT)
  string(REGEX MATCHALL "${PATTERN}\\([a-zA-Z0-9_]*," fusion_pass_patterns
               "${CONTENT}")
  if(NOT fusion_pass_patterns STREQUAL "")
    foreach(pass_pattern ${fusion_pass_patterns})
      string(REPLACE "${PATTERN}(" "" pass_pattern "${pass_pattern}")
      string(REPLACE "," "" pass_pattern "${pass_pattern}")
      file(APPEND ${ADD_PATH} "USE_FUSION_PASS(${pass_pattern});\n")
    endforeach()
  endif()
endfunction()

file(GLOB_RECURSE FUSION_PASS_HEADER ./*.cc)
foreach(file ${FUSION_PASS_HEADER})
  find_fusion_pass_register("${file}" ${fusion_pass_file}
                            "CINN_REGISTER_FUSION_PASS")
endforeach()

core_gather_headers()

gather_srcs(
  cinnapi_src SRCS default_horizontal_fuse_pass.cc default_input_fuse_pass.cc
  default_vertical_fuse_pass.cc default_recompute_fuse_pass.cc)
