diff options
author | DexesTTP <dexes.ttp@gmail.com> | 2022-04-30 12:50:51 +0200 |
---|---|---|
committer | Linus Groh <mail@linusgroh.de> | 2022-05-13 09:59:02 +0200 |
commit | b37379d489168e4a7b6cf38644af64548aa461f0 (patch) | |
tree | 3fb518cbd27c1b2e9e5a45c0db3082855d5abe40 /Meta/CMake | |
parent | 9035d9e8451288c240f8f1720ae5eab286bd46d2 (diff) | |
download | serenity-b37379d489168e4a7b6cf38644af64548aa461f0.zip |
Meta: Move LibWeb's CMake generation script to its own file
This patch has no functional changes, but prepares the CMake script to
be able to handle LibWeb on Lagom.
Diffstat (limited to 'Meta/CMake')
-rw-r--r-- | Meta/CMake/libweb_generators.cmake | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/Meta/CMake/libweb_generators.cmake b/Meta/CMake/libweb_generators.cmake new file mode 100644 index 0000000000..2296cdde9e --- /dev/null +++ b/Meta/CMake/libweb_generators.cmake @@ -0,0 +1,160 @@ +function (generate_css_implementation) + + set(LIBWEB_INPUT_FOLDER "${CMAKE_CURRENT_SOURCE_DIR}") + set(LIBWEB_OUTPUT_FOLDER "") + set(LIBWEB_META_PREFIX "") + + invoke_generator( + "Enums.cpp" + Lagom::GenerateCSSEnums + "${LIBWEB_INPUT_FOLDER}/CSS/Enums.json" + "${LIBWEB_META_PREFIX}" + "${LIBWEB_OUTPUT_FOLDER}CSS/Enums.h" + "${LIBWEB_OUTPUT_FOLDER}CSS/Enums.cpp" + arguments -j "${LIBWEB_INPUT_FOLDER}/CSS/Enums.json" + ) + + invoke_generator( + "MediaFeatureID.cpp" + Lagom::GenerateCSSMediaFeatureID + "${LIBWEB_INPUT_FOLDER}/CSS/MediaFeatures.json" + "${LIBWEB_META_PREFIX}" + "${LIBWEB_OUTPUT_FOLDER}CSS/MediaFeatureID.h" + "${LIBWEB_OUTPUT_FOLDER}CSS/MediaFeatureID.cpp" + arguments -j "${LIBWEB_INPUT_FOLDER}/CSS/MediaFeatures.json" + ) + + invoke_generator( + "PropertyID.cpp" + Lagom::GenerateCSSPropertyID + "${LIBWEB_INPUT_FOLDER}/CSS/Properties.json" + "${LIBWEB_META_PREFIX}" + "${LIBWEB_OUTPUT_FOLDER}CSS/PropertyID.h" + "${LIBWEB_OUTPUT_FOLDER}CSS/PropertyID.cpp" + arguments -j "${LIBWEB_INPUT_FOLDER}/CSS/Properties.json" + ) + + invoke_generator( + "TransformFunctions.cpp" + Lagom::GenerateCSSTransformFunctions + "${LIBWEB_INPUT_FOLDER}/CSS/TransformFunctions.json" + "${LIBWEB_META_PREFIX}" + "${LIBWEB_OUTPUT_FOLDER}CSS/TransformFunctions.h" + "${LIBWEB_OUTPUT_FOLDER}CSS/TransformFunctions.cpp" + arguments -j "${LIBWEB_INPUT_FOLDER}/CSS/TransformFunctions.json" + ) + + invoke_generator( + "ValueID.cpp" + Lagom::GenerateCSSValueID + "${LIBWEB_INPUT_FOLDER}/CSS/Identifiers.json" + "${LIBWEB_META_PREFIX}" + "${LIBWEB_OUTPUT_FOLDER}CSS/ValueID.h" + "${LIBWEB_OUTPUT_FOLDER}CSS/ValueID.cpp" + arguments -j "${LIBWEB_INPUT_FOLDER}/CSS/Identifiers.json" + ) + + add_custom_command( + OUTPUT ${LIBWEB_OUTPUT_FOLDER}CSS/DefaultStyleSheetSource.cpp + COMMAND "${CMAKE_COMMAND}" -E make_directory ${LIBWEB_OUTPUT_FOLDER}CSS + COMMAND "${LIBWEB_INPUT_FOLDER}/Scripts/GenerateStyleSheetSource.sh" default_stylesheet_source "${LIBWEB_INPUT_FOLDER}/CSS/Default.css" > ${LIBWEB_OUTPUT_FOLDER}CSS/DefaultStyleSheetSource.cpp.tmp + COMMAND "${CMAKE_COMMAND}" -E copy_if_different ${LIBWEB_OUTPUT_FOLDER}CSS/DefaultStyleSheetSource.cpp.tmp ${LIBWEB_OUTPUT_FOLDER}CSS/DefaultStyleSheetSource.cpp + COMMAND "${CMAKE_COMMAND}" -E remove ${LIBWEB_OUTPUT_FOLDER}CSS/DefaultStyleSheetSource.cpp.tmp + VERBATIM + DEPENDS "${LIBWEB_INPUT_FOLDER}/Scripts/GenerateStyleSheetSource.sh" + MAIN_DEPENDENCY ${LIBWEB_INPUT_FOLDER}/CSS/Default.css + ) + add_custom_target(generate_${LIBWEB_META_PREFIX}DefaultStyleSheetSource.cpp DEPENDS ${LIBWEB_OUTPUT_FOLDER}CSS/DefaultStyleSheetSource.cpp) + add_dependencies(all_generated generate_${LIBWEB_META_PREFIX}DefaultStyleSheetSource.cpp) + + add_custom_command( + OUTPUT ${LIBWEB_OUTPUT_FOLDER}CSS/QuirksModeStyleSheetSource.cpp + COMMAND "${CMAKE_COMMAND}" -E make_directory ${LIBWEB_OUTPUT_FOLDER}CSS + COMMAND "${LIBWEB_INPUT_FOLDER}/Scripts/GenerateStyleSheetSource.sh" quirks_mode_stylesheet_source "${LIBWEB_INPUT_FOLDER}/CSS/QuirksMode.css" > ${LIBWEB_OUTPUT_FOLDER}CSS/QuirksModeStyleSheetSource.cpp.tmp + COMMAND "${CMAKE_COMMAND}" -E copy_if_different ${LIBWEB_OUTPUT_FOLDER}CSS/QuirksModeStyleSheetSource.cpp.tmp ${LIBWEB_OUTPUT_FOLDER}CSS/QuirksModeStyleSheetSource.cpp + COMMAND "${CMAKE_COMMAND}" -E remove ${LIBWEB_OUTPUT_FOLDER}CSS/QuirksModeStyleSheetSource.cpp.tmp + VERBATIM + DEPENDS "${LIBWEB_INPUT_FOLDER}/Scripts/GenerateStyleSheetSource.sh" + MAIN_DEPENDENCY ${LIBWEB_INPUT_FOLDER}/CSS/Default.css + ) + add_custom_target(generate_${LIBWEB_META_PREFIX}QuirksModeStyleSheetSource.cpp DEPENDS ${LIBWEB_OUTPUT_FOLDER}CSS/QuirksModeStyleSheetSource.cpp) + add_dependencies(all_generated generate_${LIBWEB_META_PREFIX}QuirksModeStyleSheetSource.cpp) + +endfunction() + +function (generate_js_wrappers target) + + set(LIBWEB_INPUT_FOLDER "${CMAKE_CURRENT_SOURCE_DIR}") + set(LIBWEB_OUTPUT_FOLDER "") + set(LIBWEB_META_PREFIX "") + + function(libweb_js_wrapper class) + cmake_parse_arguments(PARSE_ARGV 1 LIBWEB_WRAPPER "ITERABLE" "" "") + get_filename_component(basename "${class}" NAME) + set(BINDINGS_SOURCES + "${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Wrapper.h" + "${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Wrapper.cpp" + "${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Constructor.h" + "${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Constructor.cpp" + "${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Prototype.h" + "${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Prototype.cpp" + ) + set(BINDINGS_TYPES + header + implementation + constructor-header + constructor-implementation + prototype-header + prototype-implementation + ) + # FIXME: Instead of requiring a manual declaration of iterable wrappers, we should ask WrapperGenerator if it's iterable + if(LIBWEB_WRAPPER_ITERABLE) + list(APPEND BINDINGS_SOURCES + "${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}IteratorWrapper.h" + "${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}IteratorWrapper.cpp" + "${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}IteratorPrototype.h" + "${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}IteratorPrototype.cpp" + ) + list(APPEND BINDINGS_TYPES + iterator-header + iterator-implementation + iterator-prototype-header + iterator-prototype-implementation + ) + endif() + target_sources(${target} PRIVATE ${BINDINGS_SOURCES}) + # FIXME: cmake_minimum_required(3.17) for ZIP_LISTS + list(LENGTH BINDINGS_SOURCES num_bindings) + math(EXPR bindings_end "${num_bindings} - 1") + foreach(iter RANGE "${bindings_end}") + list(GET BINDINGS_SOURCES ${iter} bindings_src) + list(GET BINDINGS_TYPES ${iter} bindings_type) + get_property(include_paths DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES) + list(TRANSFORM include_paths PREPEND -i) + add_custom_command( + OUTPUT "${bindings_src}" + COMMAND "$<TARGET_FILE:Lagom::WrapperGenerator>" "--${bindings_type}" ${include_paths} "${LIBWEB_INPUT_FOLDER}/${class}.idl" "${LIBWEB_INPUT_FOLDER}" > "${bindings_src}.tmp" + COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${bindings_src}.tmp" "${bindings_src}" + COMMAND "${CMAKE_COMMAND}" -E remove "${bindings_src}.tmp" + VERBATIM + DEPENDS Lagom::WrapperGenerator + MAIN_DEPENDENCY ${LIBWEB_INPUT_FOLDER}/${class}.idl + ) + endforeach() + add_custom_target(generate_${basename}Wrapper.h DEPENDS ${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Wrapper.h) + add_dependencies(all_generated generate_${basename}Wrapper.h) + add_custom_target(generate_${basename}Wrapper.cpp DEPENDS ${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Wrapper.cpp) + add_dependencies(all_generated generate_${basename}Wrapper.cpp) + add_custom_target(generate_${basename}Constructor.h DEPENDS ${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Constructor.h) + add_dependencies(all_generated generate_${basename}Constructor.h) + add_custom_target(generate_${basename}Constructor.cpp DEPENDS ${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Constructor.cpp) + add_dependencies(all_generated generate_${basename}Constructor.cpp) + add_custom_target(generate_${basename}Prototype.h DEPENDS ${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Prototype.h) + add_dependencies(all_generated generate_${basename}Prototype.h) + add_custom_target(generate_${basename}Prototype.cpp DEPENDS ${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Prototype.cpp) + add_dependencies(all_generated generate_${basename}Prototype.cpp) + endfunction() + + include("${LIBWEB_INPUT_FOLDER}/idl_files.cmake") + +endfunction() |