Skip to content

Commit 6ee5a2f

Browse files
committed
patch paddle\fluid\operators\generator\CMakeLists.txt
1 parent d298584 commit 6ee5a2f

File tree

1 file changed

+108
-0
lines changed

1 file changed

+108
-0
lines changed

build/cmake.patch

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,111 @@ index e977207378..e3756a5e1d 100644
5757

5858
add_custom_command(
5959
TARGET ${TARGET_NAME}
60+
diff --git a/paddle/fluid/operators/generator/CMakeLists.txt b/paddle/fluid/operators/generator/CMakeLists.txt
61+
index 7c0fdca05d..2451403e4c 100644
62+
--- a/paddle/fluid/operators/generator/CMakeLists.txt
63+
+++ b/paddle/fluid/operators/generator/CMakeLists.txt
64+
@@ -87,12 +87,19 @@ set(generated_static_argument_mapping_path
65+
set(generated_sparse_argument_mapping_path
66+
${CMAKE_SOURCE_DIR}/paddle/fluid/operators/ops_signature/generated_sparse_sig.cc
67+
)
68+
-execute_process(
69+
- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/paddle/fluid/operators/generator
70+
- COMMAND ${CMAKE_COMMAND} -E make_directory ${parsed_op_dir} RESULTS_VARIABLE
71+
- _result)
72+
-if(${_result})
73+
- message(FATAL_ERROR "Failed to create folder for parsed op yamls, exiting.")
74+
+## NOTE(Windows): 原先使用 execute_process + `${CMAKE_COMMAND} -E make_directory` 在部分 Windows 环境下
75+
+## 由于多 COMMAND 聚合的行为(以及 GitHub Actions pwsh runner 的实现差异)导致子目录未能及时创建,进而
76+
+## parse_op.py 在打开输出文件时报 FileNotFoundError。这里在配置阶段直接使用 `file(MAKE_DIRECTORY ...)`
77+
+## 递归创建所需目录,保证跨平台一致性,避免后续 Python 脚本写文件失败。
78+
+file(MAKE_DIRECTORY
79+
+ ${parsed_op_dir}
80+
+ ${parsed_op_dir}/inconsistent
81+
+ ${parsed_op_dir}/legacy)
82+
+
83+
+if(NOT EXISTS ${parsed_op_dir} OR
84+
+ NOT EXISTS ${parsed_op_dir}/inconsistent OR
85+
+ NOT EXISTS ${parsed_op_dir}/legacy)
86+
+ message(FATAL_ERROR "Failed to create required parsed op yaml directories.")
87+
endif()
88+
89+
message(
90+
@@ -104,42 +111,42 @@ message(
91+
- ${fused_op_yaml_file}
92+
- ${static_op_yaml_file}")
93+
94+
-execute_process(
95+
- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/paddle/fluid/operators/generator
96+
- COMMAND ${CMAKE_COMMAND} -E make_directory ${parsed_op_dir}
97+
- COMMAND ${CMAKE_COMMAND} -E make_directory ${parsed_op_dir}/inconsistent
98+
- COMMAND ${CMAKE_COMMAND} -E make_directory ${parsed_op_dir}/legacy
99+
- COMMAND ${PYTHON_EXECUTABLE} parse_op.py --op_yaml_path ${op_yaml_file}
100+
- --output_path ${parsed_op_dir}/ops.parsed.yaml
101+
- COMMAND ${PYTHON_EXECUTABLE} parse_op.py --op_yaml_path ${legacy_op_yaml_file}
102+
- --output_path ${parsed_op_dir}/inconsistent/dygraph_ops.parsed.yaml
103+
- COMMAND ${PYTHON_EXECUTABLE} parse_op.py --op_yaml_path ${bw_op_yaml_file}
104+
- --output_path ${parsed_op_dir}/backward.parsed.yaml --backward
105+
- COMMAND
106+
- ${PYTHON_EXECUTABLE} parse_op.py --op_yaml_path ${legacy_bw_op_yaml_file}
107+
- --output_path ${parsed_op_dir}/inconsistent/dygraph_backward.parsed.yaml
108+
- --backward
109+
- COMMAND ${PYTHON_EXECUTABLE} parse_op.py --op_yaml_path ${static_op_yaml_file}
110+
- --output_path ${parsed_op_dir}/legacy/static_ops.parsed.yaml
111+
- COMMAND ${PYTHON_EXECUTABLE} parse_op.py --op_yaml_path ${fused_op_yaml_file}
112+
- --output_path ${parsed_op_dir}/fused_ops.parsed.yaml
113+
- COMMAND ${PYTHON_EXECUTABLE} parse_op.py --op_yaml_path ${sparse_op_yaml_file}
114+
- --output_path ${parsed_op_dir}/sparse_ops.parsed.yaml
115+
- COMMAND
116+
- ${PYTHON_EXECUTABLE} parse_op.py --op_yaml_path ${sparse_bw_op_yaml_file}
117+
- --output_path ${parsed_op_dir}/sparse_backward.parsed.yaml --backward
118+
- COMMAND
119+
- ${PYTHON_EXECUTABLE} parse_op.py --op_yaml_path ${static_bw_op_yaml_file}
120+
- --output_path ${parsed_op_dir}/legacy/static_backward.parsed.yaml --backward
121+
- COMMAND
122+
- ${PYTHON_EXECUTABLE} parse_op.py --op_yaml_path ${fused_bw_op_yaml_file}
123+
- --output_path ${parsed_op_dir}/fused_backward.parsed.yaml --backward
124+
- RESULTS_VARIABLE _results)
125+
-foreach(_result in ${_results})
126+
- if(${_result})
127+
- message(FATAL_ERROR "op yaml parsing failed, exiting.")
128+
+## 逐条调用 Python,避免单一 execute_process 聚合时 Windows 下前置目录未必可见的问题
129+
+set(_parse_fail FALSE)
130+
+macro(_RUN_PARSE _yaml _out _is_bwd)
131+
+ if(_is_bwd)
132+
+ execute_process(
133+
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/paddle/fluid/operators/generator
134+
+ COMMAND ${PYTHON_EXECUTABLE} parse_op.py --op_yaml_path ${_yaml}
135+
+ --output_path ${_out} --backward
136+
+ RESULT_VARIABLE _ret)
137+
+ else()
138+
+ execute_process(
139+
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/paddle/fluid/operators/generator
140+
+ COMMAND ${PYTHON_EXECUTABLE} parse_op.py --op_yaml_path ${_yaml}
141+
+ --output_path ${_out}
142+
+ RESULT_VARIABLE _ret)
143+
endif()
144+
-endforeach()
145+
+ if(NOT _ret EQUAL 0)
146+
+ message(WARNING "parse_op failed for ${_yaml} -> ${_out}, code=${_ret}")
147+
+ set(_parse_fail TRUE)
148+
+ endif()
149+
+endmacro()
150+
+
151+
+_RUN_PARSE(${op_yaml_file} ${parsed_op_dir}/ops.parsed.yaml FALSE)
152+
+_RUN_PARSE(${legacy_op_yaml_file} ${parsed_op_dir}/inconsistent/dygraph_ops.parsed.yaml FALSE)
153+
+_RUN_PARSE(${bw_op_yaml_file} ${parsed_op_dir}/backward.parsed.yaml TRUE)
154+
+_RUN_PARSE(${legacy_bw_op_yaml_file} ${parsed_op_dir}/inconsistent/dygraph_backward.parsed.yaml TRUE)
155+
+_RUN_PARSE(${static_op_yaml_file} ${parsed_op_dir}/legacy/static_ops.parsed.yaml FALSE)
156+
+_RUN_PARSE(${fused_op_yaml_file} ${parsed_op_dir}/fused_ops.parsed.yaml FALSE)
157+
+_RUN_PARSE(${sparse_op_yaml_file} ${parsed_op_dir}/sparse_ops.parsed.yaml FALSE)
158+
+_RUN_PARSE(${sparse_bw_op_yaml_file} ${parsed_op_dir}/sparse_backward.parsed.yaml TRUE)
159+
+_RUN_PARSE(${static_bw_op_yaml_file} ${parsed_op_dir}/legacy/static_backward.parsed.yaml TRUE)
160+
+_RUN_PARSE(${fused_bw_op_yaml_file} ${parsed_op_dir}/fused_backward.parsed.yaml TRUE)
161+
+
162+
+if(_parse_fail)
163+
+ message(FATAL_ERROR "op yaml parsing failed, exiting.")
164+
+endif()
165+
166+
# validation of op yamls
167+
message("validate op yaml:

0 commit comments

Comments
 (0)