functional.cmake 5.69 KB
Newer Older
yuguo's avatar
yuguo committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
function(GENERATE_FUNCTIONAL_API_AND_PYBIND11_CPP SRCS HDRS PYBIND_SRCS ROOT_DIR)
  set(YAML_FILE ${PROJECT_SOURCE_DIR}/oneflow/core/functional/functional_api.yaml)
  set(GENERATED_API_DIR oneflow/core/functional)

  list(APPEND SRCS ${PROJECT_BINARY_DIR}/${GENERATED_API_DIR}/functional_api.yaml.cpp)
  list(APPEND HDRS ${PROJECT_BINARY_DIR}/${GENERATED_API_DIR}/functional_api.yaml.h)

  if(BUILD_PYTHON)
    set(GENERATED_PYBIND_DIR oneflow/api/python/functional)
    list(APPEND PYBIND_SRCS
         ${PROJECT_BINARY_DIR}/${GENERATED_PYBIND_DIR}/functional_api.yaml.pybind.cpp)
  endif(BUILD_PYTHON)

  if(BUILD_PYTHON)

    add_custom_command(
      OUTPUT "${PROJECT_BINARY_DIR}/${GENERATED_API_DIR}/functional_api.yaml.cpp"
             "${PROJECT_BINARY_DIR}/${GENERATED_API_DIR}/functional_api.yaml.h"
             "${PROJECT_BINARY_DIR}/${GENERATED_PYBIND_DIR}/functional_api.yaml.pybind.cpp"
      COMMAND ${CMAKE_COMMAND} ARGS -E make_directory ${GENERATED_API_DIR}
      COMMAND ${CMAKE_COMMAND} ARGS -E make_directory ${GENERATED_PYBIND_DIR}
      COMMAND ${CODEGEN_PYTHON_EXECUTABLE} ARGS
              ${PROJECT_SOURCE_DIR}/tools/functional/generate_functional_api.py --project_source_dir
              ${PROJECT_SOURCE_DIR} --export_pybind
      DEPENDS ${CODEGEN_PYTHON_EXECUTABLE}
              ${PROJECT_SOURCE_DIR}/tools/functional/generate_functional_api.py
              ${PROJECT_SOURCE_DIR}/tools/functional/generator.py ${YAML_FILE}
      VERBATIM)

  else() # build_python

    add_custom_command(
      OUTPUT "${PROJECT_BINARY_DIR}/${GENERATED_API_DIR}/functional_api.yaml.cpp"
             "${PROJECT_BINARY_DIR}/${GENERATED_API_DIR}/functional_api.yaml.h"
      COMMAND ${CMAKE_COMMAND} ARGS -E make_directory ${GENERATED_API_DIR}
      COMMAND ${CODEGEN_PYTHON_EXECUTABLE} ARGS
              ${PROJECT_SOURCE_DIR}/tools/functional/generate_functional_api.py --project_source_dir
              ${PROJECT_SOURCE_DIR}
      DEPENDS ${CODEGEN_PYTHON_EXECUTABLE}
              ${PROJECT_SOURCE_DIR}/tools/functional/generate_functional_api.py
              ${PROJECT_SOURCE_DIR}/tools/functional/generator.py ${YAML_FILE}
      VERBATIM)

  endif(BUILD_PYTHON)

  set_source_files_properties(${${SRCS}} ${${HDRS}} PROPERTIES GENERATED TRUE)
  set(${SRCS} ${${SRCS}} PARENT_SCOPE)
  set(${HDRS} ${${HDRS}} PARENT_SCOPE)

  if(BUILD_PYTHON)
    set_source_files_properties(${${PYBIND_SRCS}} PROPERTIES GENERATED TRUE)
    set(${PYBIND_SRCS} ${${PYBIND_SRCS}} PARENT_SCOPE)
  endif(BUILD_PYTHON)

endfunction()

function(GENERATE_FUNCTIONAL_TENSOR_API_AND_PYBIND11_CPP SRCS HDRS PYBIND_SRCS ROOT_DIR)
  set(YAML_FILE ${PROJECT_SOURCE_DIR}/oneflow/api/python/functional/tensor_api.yaml)
  set(GENERATED_API_DIR oneflow/api/python/functional)
  set(GENERATED_PYBIND_DIR oneflow/api/python/functional)

  list(APPEND SRCS ${PROJECT_BINARY_DIR}/${GENERATED_API_DIR}/tensor_api.yaml.cpp)
  list(APPEND HDRS ${PROJECT_BINARY_DIR}/${GENERATED_API_DIR}/tensor_api.yaml.h)
  list(APPEND PYBIND_SRCS ${PROJECT_BINARY_DIR}/${GENERATED_PYBIND_DIR}/tensor_api.yaml.pybind.cpp)

  add_custom_command(
    OUTPUT "${PROJECT_BINARY_DIR}/${GENERATED_API_DIR}/tensor_api.yaml.cpp"
           "${PROJECT_BINARY_DIR}/${GENERATED_API_DIR}/tensor_api.yaml.h"
           "${PROJECT_BINARY_DIR}/${GENERATED_PYBIND_DIR}/tensor_api.yaml.pybind.cpp"
    COMMAND ${CMAKE_COMMAND} ARGS -E make_directory ${GENERATED_API_DIR}
    COMMAND ${CMAKE_COMMAND} ARGS -E make_directory ${GENERATED_PYBIND_DIR}
    COMMAND ${CODEGEN_PYTHON_EXECUTABLE} ARGS
            ${PROJECT_SOURCE_DIR}/tools/functional/generate_tensor_api.py --project_source_dir
            ${PROJECT_SOURCE_DIR}
    DEPENDS ${CODEGEN_PYTHON_EXECUTABLE}
            ${PROJECT_SOURCE_DIR}/tools/functional/generate_tensor_api.py
            ${PROJECT_SOURCE_DIR}/tools/functional/generator.py ${YAML_FILE}
    VERBATIM)

  set_source_files_properties(${${SRCS}} ${${HDRS}} ${${PYBIND_SRCS}} PROPERTIES GENERATED TRUE)
  set(${SRCS} ${${SRCS}} PARENT_SCOPE)
  set(${HDRS} ${${HDRS}} PARENT_SCOPE)
  set(${PYBIND_SRCS} ${${PYBIND_SRCS}} PARENT_SCOPE)

endfunction()

function(GENERATE_FUNCTIONAL_DISPATCH_STATEFUL_OPS_AND_PYBIND11_CPP SRCS HDRS PYBIND_SRCS ROOT_DIR)
  set(YAML_FILE ${PROJECT_SOURCE_DIR}/oneflow/api/python/functional/dispatch_stateful_ops.yaml)
  set(GENERATED_API_DIR oneflow/api/python/functional)
  set(GENERATED_PYBIND_DIR oneflow/api/python/functional)

  list(APPEND SRCS ${PROJECT_BINARY_DIR}/${GENERATED_API_DIR}/dispatch_stateful_ops.yaml.cpp)
  list(APPEND HDRS ${PROJECT_BINARY_DIR}/${GENERATED_API_DIR}/dispatch_stateful_ops.yaml.h)
  list(APPEND PYBIND_SRCS
       ${PROJECT_BINARY_DIR}/${GENERATED_PYBIND_DIR}/dispatch_stateful_ops.yaml.pybind.cpp)

  add_custom_command(
    OUTPUT "${PROJECT_BINARY_DIR}/${GENERATED_API_DIR}/dispatch_stateful_ops.yaml.cpp"
           "${PROJECT_BINARY_DIR}/${GENERATED_API_DIR}/dispatch_stateful_ops.yaml.h"
           "${PROJECT_BINARY_DIR}/${GENERATED_PYBIND_DIR}/dispatch_stateful_ops.yaml.pybind.cpp"
    COMMAND ${CMAKE_COMMAND} ARGS -E make_directory ${GENERATED_API_DIR}
    COMMAND ${CMAKE_COMMAND} ARGS -E make_directory ${GENERATED_PYBIND_DIR}
    COMMAND ${CODEGEN_PYTHON_EXECUTABLE} ARGS
            ${PROJECT_SOURCE_DIR}/tools/functional/generate_dispatch_stateful_ops.py
            --project_source_dir ${PROJECT_SOURCE_DIR}
    DEPENDS ${CODEGEN_PYTHON_EXECUTABLE}
            ${PROJECT_SOURCE_DIR}/tools/functional/generate_dispatch_stateful_ops.py
            ${PROJECT_SOURCE_DIR}/tools/functional/generator.py ${YAML_FILE}
    VERBATIM)

  set_source_files_properties(${${SRCS}} ${${HDRS}} ${${PYBIND_SRCS}} PROPERTIES GENERATED TRUE)
  set(${SRCS} ${${SRCS}} PARENT_SCOPE)
  set(${HDRS} ${${HDRS}} PARENT_SCOPE)
  set(${PYBIND_SRCS} ${${PYBIND_SRCS}} PARENT_SCOPE)

endfunction()