From 619200774bc921ffb24fd85ef7f7b24316a802d8 Mon Sep 17 00:00:00 2001 From: Brian Gianforcaro Date: Sun, 29 Aug 2021 19:27:50 -0700 Subject: [PATCH] CMake: Add custom target to build only the generated sources This is needed so all headers and files exist on disk, so that the sonar cloud analyzer can find them when executing the compilation commands contained in compile_commands.json, without actually building. Co-authored-by: Andrew Kaster --- CMakeLists.txt | 3 +++ Meta/CMake/code_generators.cmake | 3 +++ Meta/CMake/unicode_data.cmake | 7 +++++++ Meta/CMake/utils.cmake | 1 + Meta/Lagom/CMakeLists.txt | 6 ++++++ Userland/Libraries/LibWeb/CMakeLists.txt | 12 ++++++++++++ 6 files changed, 32 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index b968e25d5d..16dc2e185c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -45,6 +45,9 @@ option(BUILD_LAGOM "Build parts of the system targeting the host OS for fuzzing/ option(ENABLE_KERNEL_LTO "Build the kernel with link-time optimization" OFF) option(USE_CLANG_TOOLCHAIN "Build the kernel with the experimental Clang toolchain" OFF) +# Meta target to run all code-gen steps in the build. +add_custom_target(all_generated) + add_custom_target(run COMMAND "${CMAKE_COMMAND}" -E env "SERENITY_ARCH=${SERENITY_ARCH}" "${SerenityOS_SOURCE_DIR}/Meta/run.sh" USES_TERMINAL diff --git a/Meta/CMake/code_generators.cmake b/Meta/CMake/code_generators.cmake index 24a4f0f390..9c505a0d18 100644 --- a/Meta/CMake/code_generators.cmake +++ b/Meta/CMake/code_generators.cmake @@ -15,6 +15,7 @@ function(compile_gml source output string_name) ) get_filename_component(output_name ${output} NAME) add_custom_target(generate_${output_name} DEPENDS ${output}) + add_dependencies(all_generated generate_${output_name}) endfunction() function(compile_ipc source output) @@ -30,6 +31,7 @@ function(compile_ipc source output) ) get_filename_component(output_name ${output} NAME) add_custom_target(generate_${output_name} DEPENDS ${output}) + add_dependencies(all_generated generate_${output_name}) endfunction() function(generate_state_machine source header) @@ -51,5 +53,6 @@ function(generate_state_machine source header) MAIN_DEPENDENCY ${source} ) add_custom_target(${target_name} DEPENDS ${output}) + add_dependencies(all_generated ${target_name}) endif() endfunction() diff --git a/Meta/CMake/unicode_data.cmake b/Meta/CMake/unicode_data.cmake index 59c1466ebf..3fac252159 100644 --- a/Meta/CMake/unicode_data.cmake +++ b/Meta/CMake/unicode_data.cmake @@ -121,12 +121,15 @@ if (ENABLE_UNICODE_DATABASE_DOWNLOAD) set(UNICODE_LOCALE_HEADER LibUnicode/UnicodeLocale.h) set(UNICODE_LOCALE_IMPLEMENTATION LibUnicode/UnicodeLocale.cpp) + set(UNICODE_META_TARGET_PREFIX LibUnicode_) + if (CMAKE_CURRENT_BINARY_DIR MATCHES ".*/LibUnicode") # Serenity build. set(UNICODE_DATA_HEADER UnicodeData.h) set(UNICODE_DATA_IMPLEMENTATION UnicodeData.cpp) set(UNICODE_LOCALE_HEADER UnicodeLocale.h) set(UNICODE_LOCALE_IMPLEMENTATION UnicodeLocale.cpp) + set(UNICODE_META_TARGET_PREFIX "") endif() add_custom_command( @@ -135,6 +138,8 @@ if (ENABLE_UNICODE_DATABASE_DOWNLOAD) VERBATIM DEPENDS GenerateUnicodeData ${UNICODE_DATA_PATH} ${SPECIAL_CASING_PATH} ${DERIVED_GENERAL_CATEGORY_PATH} ${PROP_LIST_PATH} ${DERIVED_CORE_PROP_PATH} ${DERIVED_BINARY_PROP_PATH} ${PROP_ALIAS_PATH} ${PROP_VALUE_ALIAS_PATH} ${SCRIPTS_PATH} ${SCRIPT_EXTENSIONS_PATH} ${EMOJI_DATA_PATH} ${NORM_PROPS_PATH} ) + add_custom_target(generate_${UNICODE_META_TARGET_PREFIX}UnicodeData DEPENDS ${UNICODE_DATA_HEADER} ${UNICODE_DATA_IMPLEMENTATION}) + add_dependencies(all_generated generate_${UNICODE_META_TARGET_PREFIX}UnicodeData) add_custom_command( OUTPUT ${UNICODE_LOCALE_HEADER} ${UNICODE_LOCALE_IMPLEMENTATION} @@ -142,6 +147,8 @@ if (ENABLE_UNICODE_DATABASE_DOWNLOAD) VERBATIM DEPENDS GenerateUnicodeLocale ${CLDR_LOCALES_PATH} ${CLDR_NUMBERS_PATH} ) + add_custom_target(generate_${UNICODE_META_TARGET_PREFIX}UnicodeLocale DEPENDS ${UNICODE_LOCALE_HEADER} ${UNICODE_LOCALE_IMPLEMENTATION}) + add_dependencies(all_generated generate_${UNICODE_META_TARGET_PREFIX}UnicodeLocale) set(UNICODE_DATA_SOURCES ${UNICODE_DATA_HEADER} ${UNICODE_DATA_IMPLEMENTATION} ${UNICODE_LOCALE_HEADER} ${UNICODE_LOCALE_IMPLEMENTATION}) endif() diff --git a/Meta/CMake/utils.cmake b/Meta/CMake/utils.cmake index 2c603f3afa..d2e315ffec 100644 --- a/Meta/CMake/utils.cmake +++ b/Meta/CMake/utils.cmake @@ -24,6 +24,7 @@ function(serenity_generated_sources target_name) foreach(generated ${GENERATED_SOURCES}) get_filename_component(generated_name ${generated} NAME) add_dependencies(${target_name} generate_${generated_name}) + add_dependencies(all_generated generate_${generated_name}) endforeach() endif() endfunction() diff --git a/Meta/Lagom/CMakeLists.txt b/Meta/Lagom/CMakeLists.txt index 331e8928e4..eb97b68ea2 100644 --- a/Meta/Lagom/CMakeLists.txt +++ b/Meta/Lagom/CMakeLists.txt @@ -227,6 +227,12 @@ if (NOT ENABLE_OSS_FUZZ AND NOT ENABLE_FUZZER_SANITIZER) endif() if (BUILD_LAGOM) + + if (NOT TARGET all_generated) + # Meta target to run all code-gen steps in the build. + add_custom_target(all_generated) + endif() + # Lagom Libraries # Archive diff --git a/Userland/Libraries/LibWeb/CMakeLists.txt b/Userland/Libraries/LibWeb/CMakeLists.txt index 83cfcf9699..0009eb7c58 100644 --- a/Userland/Libraries/LibWeb/CMakeLists.txt +++ b/Userland/Libraries/LibWeb/CMakeLists.txt @@ -281,11 +281,17 @@ function(libweb_js_wrapper class) ) endforeach() add_custom_target(generate_${basename}Wrapper.h DEPENDS Bindings/${basename}Wrapper.h) + add_dependencies(all_generated generate_${basename}Wrapper.h) add_custom_target(generate_${basename}Wrapper.cpp DEPENDS Bindings/${basename}Wrapper.cpp) + add_dependencies(all_generated generate_${basename}Wrapper.cpp) add_custom_target(generate_${basename}Constructor.h DEPENDS Bindings/${basename}Constructor.h) + add_dependencies(all_generated generate_${basename}Constructor.h) add_custom_target(generate_${basename}Constructor.cpp DEPENDS Bindings/${basename}Constructor.cpp) + add_dependencies(all_generated generate_${basename}Constructor.cpp) add_custom_target(generate_${basename}Prototype.h DEPENDS Bindings/${basename}Prototype.h) + add_dependencies(all_generated generate_${basename}Prototype.h) add_custom_target(generate_${basename}Prototype.cpp DEPENDS Bindings/${basename}Prototype.cpp) + add_dependencies(all_generated generate_${basename}Prototype.cpp) endfunction() libweb_js_wrapper(CSS/CSSStyleDeclaration) @@ -411,6 +417,7 @@ add_custom_command( MAIN_DEPENDENCY CSS/Properties.json ) add_custom_target(generate_PropertyID.h DEPENDS CSS/PropertyID.h) +add_dependencies(all_generated generate_PropertyID.h) add_custom_command( OUTPUT CSS/PropertyID.cpp @@ -423,6 +430,7 @@ add_custom_command( MAIN_DEPENDENCY CSS/Properties.json ) add_custom_target(generate_PropertyID.cpp DEPENDS CSS/PropertyID.cpp) +add_dependencies(all_generated generate_PropertyID.cpp) add_custom_command( OUTPUT CSS/ValueID.h @@ -435,6 +443,7 @@ add_custom_command( MAIN_DEPENDENCY CSS/Identifiers.json ) add_custom_target(generate_ValueID.h DEPENDS CSS/ValueID.h) +add_dependencies(all_generated generate_ValueID.h) add_custom_command( OUTPUT CSS/ValueID.cpp @@ -447,6 +456,7 @@ add_custom_command( MAIN_DEPENDENCY CSS/Identifiers.json ) add_custom_target(generate_ValueID.cpp DEPENDS CSS/ValueID.cpp) +add_dependencies(all_generated generate_ValueID.cpp) add_custom_command( OUTPUT CSS/DefaultStyleSheetSource.cpp @@ -459,6 +469,7 @@ add_custom_command( MAIN_DEPENDENCY CSS/Default.css ) add_custom_target(generate_DefaultStyleSheetSource.cpp DEPENDS CSS/DefaultStyleSheetSource.cpp) +add_dependencies(all_generated generate_DefaultStyleSheetSource.cpp) add_custom_command( OUTPUT CSS/QuirksModeStyleSheetSource.cpp @@ -471,5 +482,6 @@ add_custom_command( MAIN_DEPENDENCY CSS/Default.css ) add_custom_target(generate_QuirksModeStyleSheetSource.cpp DEPENDS CSS/QuirksModeStyleSheetSource.cpp) +add_dependencies(all_generated generate_QuirksModeStyleSheetSource.cpp) add_subdirectory(DumpLayoutTree)