Skip to content

Commit 84443e1

Browse files
committed
Meta: Add ability for code generator to output one extra header
1 parent 408bbea commit 84443e1

File tree

1 file changed

+34
-6
lines changed

1 file changed

+34
-6
lines changed

Meta/CMake/utils.cmake

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,18 +41,38 @@ function(remove_path_if_version_changed version version_file cache_path)
4141
endfunction()
4242

4343
function(invoke_generator_impl name generator primary_source header implementation)
44-
cmake_parse_arguments(invoke_generator_impl "" "" "command;arguments;dependencies" ${ARGN})
44+
cmake_parse_arguments(invoke_generator_impl "" "extra_header" "command;arguments;dependencies" ${ARGN})
45+
46+
set(extra_outputs)
47+
set(extra_commands)
48+
49+
if (invoke_generator_impl_extra_header)
50+
set(extra_outputs "${invoke_generator_impl_extra_header}")
51+
list(APPEND extra_commands
52+
COMMAND "${CMAKE_COMMAND}" -E copy_if_different
53+
"${invoke_generator_impl_extra_header}.tmp"
54+
"${invoke_generator_impl_extra_header}"
55+
COMMAND "${CMAKE_COMMAND}" -E remove
56+
"${invoke_generator_impl_extra_header}.tmp"
57+
)
58+
endif()
59+
4560
add_custom_command(
46-
OUTPUT "${header}" "${implementation}"
47-
COMMAND ${invoke_generator_impl_command} ${generator} -h "${header}.tmp" -c "${implementation}.tmp" ${invoke_generator_impl_arguments}
61+
OUTPUT "${header}" "${implementation}" ${extra_outputs}
62+
COMMAND ${invoke_generator_impl_command} ${generator}
63+
-h "${header}.tmp"
64+
-c "${implementation}.tmp"
65+
${invoke_generator_impl_arguments}
4866
COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${header}.tmp" "${header}"
4967
COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${implementation}.tmp" "${implementation}"
5068
COMMAND "${CMAKE_COMMAND}" -E remove "${header}.tmp" "${implementation}.tmp"
69+
${extra_commands}
5170
VERBATIM
5271
DEPENDS ${generator} ${invoke_generator_impl_dependencies} "${primary_source}"
5372
)
5473

55-
add_custom_target("generate_${name}" DEPENDS "${header}" "${implementation}")
74+
add_custom_target("generate_${name}" DEPENDS
75+
"${header}" "${implementation}" ${extra_outputs})
5676
add_dependencies(ladybird_codegen_accumulator "generate_${name}")
5777
list(APPEND CURRENT_LIB_GENERATED "${name}")
5878
set(CURRENT_LIB_GENERATED ${CURRENT_LIB_GENERATED} PARENT_SCOPE)
@@ -72,16 +92,24 @@ function(invoke_cpp_generator name generator primary_source header implementatio
7292
endfunction()
7393

7494
function(invoke_py_generator name script primary_source header implementation)
75-
cmake_parse_arguments(invoke_py_generator "" "" "arguments" ${ARGN})
95+
cmake_parse_arguments(invoke_py_generator "" "EXTRA_HEADER" "arguments" ${ARGN})
7696
find_package(Python3 REQUIRED COMPONENTS Interpreter)
97+
98+
set(py_generator_arguments ${invoke_py_generator_arguments})
99+
if (invoke_py_generator_EXTRA_HEADER)
100+
list(APPEND py_generator_arguments
101+
-x "${invoke_py_generator_EXTRA_HEADER}.tmp")
102+
endif()
103+
77104
invoke_generator_impl(
78105
${name}
79106
"${LADYBIRD_PROJECT_ROOT}/Meta/${script}"
80107
${primary_source}
81108
${header}
82109
${implementation}
83110
command ${Python3_EXECUTABLE}
84-
arguments ${invoke_py_generator_arguments}
111+
arguments ${py_generator_arguments}
112+
extra_header "${invoke_py_generator_EXTRA_HEADER}"
85113
)
86114
endfunction()
87115

0 commit comments

Comments
 (0)