mirror of
https://github.com/fergalmoran/ladybird.git
synced 2026-01-07 00:56:14 +00:00
compile_gml, compile_ipc, and generate_state_machine all use host tools to generate sources for the target build. As part of trying to organize host tools into a common area, let's move these helper rules to a common file that we can add other host tools to later. And, keep the host tool helpers separate from the CMake target helpers for apps and libraries.
56 lines
2.2 KiB
CMake
56 lines
2.2 KiB
CMake
#
|
|
# Functions for generating sources using host tools
|
|
#
|
|
|
|
function(compile_gml source output string_name)
|
|
set(source ${CMAKE_CURRENT_SOURCE_DIR}/${source})
|
|
add_custom_command(
|
|
OUTPUT ${output}
|
|
COMMAND ${SerenityOS_SOURCE_DIR}/Meta/text-to-cpp-string.sh ${string_name} ${source} > ${output}.tmp
|
|
COMMAND "${CMAKE_COMMAND}" -E copy_if_different ${output}.tmp ${output}
|
|
COMMAND "${CMAKE_COMMAND}" -E remove ${output}.tmp
|
|
VERBATIM
|
|
DEPENDS ${SerenityOS_SOURCE_DIR}/Meta/text-to-cpp-string.sh
|
|
MAIN_DEPENDENCY ${source}
|
|
)
|
|
get_filename_component(output_name ${output} NAME)
|
|
add_custom_target(generate_${output_name} DEPENDS ${output})
|
|
endfunction()
|
|
|
|
function(compile_ipc source output)
|
|
set(source ${CMAKE_CURRENT_SOURCE_DIR}/${source})
|
|
add_custom_command(
|
|
OUTPUT ${output}
|
|
COMMAND $<TARGET_FILE:IPCCompiler> ${source} > ${output}.tmp
|
|
COMMAND "${CMAKE_COMMAND}" -E copy_if_different ${output}.tmp ${output}
|
|
COMMAND "${CMAKE_COMMAND}" -E remove ${output}.tmp
|
|
VERBATIM
|
|
DEPENDS IPCCompiler
|
|
MAIN_DEPENDENCY ${source}
|
|
)
|
|
get_filename_component(output_name ${output} NAME)
|
|
add_custom_target(generate_${output_name} DEPENDS ${output})
|
|
endfunction()
|
|
|
|
function(generate_state_machine source header)
|
|
get_filename_component(header_name ${header} NAME)
|
|
set(target_name "generate_${header_name}")
|
|
# Note: This function is called twice with the same header, once in the kernel
|
|
# and once in Userland/LibVT, this check makes sure that only one target
|
|
# is generated for that header.
|
|
if(NOT TARGET ${target_name})
|
|
set(source ${CMAKE_CURRENT_SOURCE_DIR}/${source})
|
|
set(output ${CMAKE_CURRENT_BINARY_DIR}/${header})
|
|
add_custom_command(
|
|
OUTPUT ${output}
|
|
COMMAND $<TARGET_FILE:StateMachineGenerator> ${source} > ${output}.tmp
|
|
COMMAND "${CMAKE_COMMAND}" -E copy_if_different ${output}.tmp ${output}
|
|
COMMAND "${CMAKE_COMMAND}" -E remove ${output}.tmp
|
|
VERBATIM
|
|
DEPENDS StateMachineGenerator
|
|
MAIN_DEPENDENCY ${source}
|
|
)
|
|
add_custom_target(${target_name} DEPENDS ${output})
|
|
endif()
|
|
endfunction()
|