code_generators.cmake 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #
  2. # Functions for generating sources using host tools
  3. #
  4. function(compile_gml source output string_name)
  5. set(source ${CMAKE_CURRENT_SOURCE_DIR}/${source})
  6. add_custom_command(
  7. OUTPUT ${output}
  8. COMMAND ${SerenityOS_SOURCE_DIR}/Meta/text-to-cpp-string.sh ${string_name} ${source} > ${output}.tmp
  9. COMMAND "${CMAKE_COMMAND}" -E copy_if_different ${output}.tmp ${output}
  10. COMMAND "${CMAKE_COMMAND}" -E remove ${output}.tmp
  11. VERBATIM
  12. DEPENDS ${SerenityOS_SOURCE_DIR}/Meta/text-to-cpp-string.sh
  13. MAIN_DEPENDENCY ${source}
  14. )
  15. get_filename_component(output_name ${output} NAME)
  16. add_custom_target(generate_${output_name} DEPENDS ${output})
  17. add_dependencies(all_generated generate_${output_name})
  18. endfunction()
  19. function(compile_ipc source output)
  20. set(source ${CMAKE_CURRENT_SOURCE_DIR}/${source})
  21. add_custom_command(
  22. OUTPUT ${output}
  23. COMMAND $<TARGET_FILE:Lagom::IPCCompiler> ${source} > ${output}.tmp
  24. COMMAND "${CMAKE_COMMAND}" -E copy_if_different ${output}.tmp ${output}
  25. COMMAND "${CMAKE_COMMAND}" -E remove ${output}.tmp
  26. VERBATIM
  27. DEPENDS Lagom::IPCCompiler
  28. MAIN_DEPENDENCY ${source}
  29. )
  30. get_filename_component(output_name ${output} NAME)
  31. add_custom_target(generate_${output_name} DEPENDS ${output})
  32. add_dependencies(all_generated generate_${output_name})
  33. endfunction()
  34. function(generate_state_machine source header)
  35. get_filename_component(header_name ${header} NAME)
  36. set(target_name "generate_${header_name}")
  37. # Note: This function is called twice with the same header, once in the kernel
  38. # and once in Userland/LibVT, this check makes sure that only one target
  39. # is generated for that header.
  40. if(NOT TARGET ${target_name})
  41. set(source ${CMAKE_CURRENT_SOURCE_DIR}/${source})
  42. set(output ${CMAKE_CURRENT_BINARY_DIR}/${header})
  43. add_custom_command(
  44. OUTPUT ${output}
  45. COMMAND $<TARGET_FILE:Lagom::StateMachineGenerator> ${source} > ${output}.tmp
  46. COMMAND "${CMAKE_COMMAND}" -E copy_if_different ${output}.tmp ${output}
  47. COMMAND "${CMAKE_COMMAND}" -E remove ${output}.tmp
  48. VERBATIM
  49. DEPENDS Lagom::StateMachineGenerator
  50. MAIN_DEPENDENCY ${source}
  51. )
  52. add_custom_target(${target_name} DEPENDS ${output})
  53. add_dependencies(all_generated ${target_name})
  54. endif()
  55. endfunction()