diff --git a/misc/bazel/cmake/setup.cmake b/misc/bazel/cmake/setup.cmake index 0079c480b607..fc77d6168bbe 100644 --- a/misc/bazel/cmake/setup.cmake +++ b/misc/bazel/cmake/setup.cmake @@ -14,6 +14,9 @@ if (NOT DEFINED CODEQL_BAZEL_WORKSPACE) endif () macro(bazel) + message(STATUS "================================================================================") + message(STATUS "Running: ${BAZEL_BIN} ${BAZEL_STARTUP_OPTIONS} ${ARGN}") + message(STATUS "================================================================================") execute_process(COMMAND ${BAZEL_BIN} ${BAZEL_STARTUP_OPTIONS} ${ARGN} COMMAND_ERROR_IS_FATAL ANY OUTPUT_STRIP_TRAILING_WHITESPACE @@ -21,6 +24,9 @@ macro(bazel) endmacro() macro(bazel_even_if_failing) + message(STATUS "================================================================================") + message(STATUS "Running: ${BAZEL_BIN} ${BAZEL_STARTUP_OPTIONS} ${ARGN}") + message(STATUS "================================================================================") execute_process(COMMAND ${BAZEL_BIN} ${BAZEL_STARTUP_OPTIONS} ${ARGN} OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) @@ -46,10 +52,24 @@ macro(generate_and_include) string(JSON BAZEL_JSON_TARGETS GET "${BAZEL_AQUERY_RESULT}" targets) string(JSON LAST_IDX LENGTH "${BAZEL_JSON_TARGETS}") math(EXPR LAST_IDX "${LAST_IDX} - 1") + set(BAZEL_TARGETS_LIST "") foreach(IDX RANGE ${LAST_IDX}) string(JSON CUR_BAZEL_TARGET GET "${BAZEL_JSON_TARGETS}" ${IDX} label) string(APPEND BAZEL_TARGETS " '${CUR_BAZEL_TARGET}',\n") + list(APPEND BAZEL_TARGETS_LIST ${CUR_BAZEL_TARGET}) endforeach () + # Find and build targets that generate source files + if(NOT "${BAZEL_TARGETS_LIST}" STREQUAL "") + string(REPLACE ";" " " BAZEL_TARGETS_QUERY "${BAZEL_TARGETS_LIST}") + bazel_even_if_failing(cquery "filter(\"\\\\.\\(h\\|c\\|cpp\\|hpp\\)$\", kind(\"generated file\", deps(set(${BAZEL_TARGETS_QUERY}))))" --output=label OUTPUT_VARIABLE GENERATED_SOURCE_TARGETS) + # Build only the generator targets (strip configuration hashes) + if(NOT "${GENERATED_SOURCE_TARGETS}" STREQUAL "") + string(REGEX REPLACE " \\([^)]+\\)" "" GENERATED_SOURCE_TARGETS "${GENERATED_SOURCE_TARGETS}") + string(REPLACE "\n" ";" GENERATED_SOURCE_TARGETS_LIST "${GENERATED_SOURCE_TARGETS}") + list(REMOVE_DUPLICATES GENERATED_SOURCE_TARGETS_LIST) + bazel(build ${GENERATED_SOURCE_TARGETS_LIST} ${BAZEL_BUILD_OPTIONS}) + endif() + endif() file(WRITE "${BAZEL_WORKSPACE}/.bazel-cmake/BUILD.bazel" "\ # this file was generated by cmake load('@${CODEQL_BAZEL_WORKSPACE}//misc/bazel/cmake:cmake.bzl', 'generate_cmake')\n\