mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
This space breaks when upgrading bazelisk on Windows. Somehow, a space inside the argument messes up some argument-parsin somewhere. Porbably due to Windows argument parsing being not well-defined in how it splits a string into argv. Removing the space works around the problem. If the space is included, cmake suddenly can't find the bazelisk binary anymore, despite happily executing `info output_base` earlier.
70 lines
2.6 KiB
CMake
70 lines
2.6 KiB
CMake
option(BUILD_SHARED_LIBS "Build and use shared libraries" 0)
|
|
option(CREATE_COMPILATION_DATABASE_LINK "Create compilation database link. Implies CMAKE_EXPORT_COMPILE_COMMANDS" 1)
|
|
|
|
if (CREATE_COMPILATION_DATABASE_LINK)
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
|
|
endif ()
|
|
|
|
if (NOT DEFINED BAZEL_BIN)
|
|
set(BAZEL_BIN "bazelisk")
|
|
endif ()
|
|
|
|
if (NOT DEFINED CODEQL_BAZEL_WORKSPACE)
|
|
set(CODEQL_BAZEL_WORKSPACE "codeql")
|
|
endif ()
|
|
|
|
macro(bazel)
|
|
execute_process(COMMAND ${BAZEL_BIN} ${BAZEL_STARTUP_OPTIONS} ${ARGN}
|
|
COMMAND_ERROR_IS_FATAL ANY
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
|
|
endmacro()
|
|
|
|
macro(bazel_even_if_failing)
|
|
execute_process(COMMAND ${BAZEL_BIN} ${BAZEL_STARTUP_OPTIONS} ${ARGN}
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
|
|
endmacro()
|
|
|
|
bazel(info workspace OUTPUT_VARIABLE BAZEL_WORKSPACE)
|
|
bazel(info output_base OUTPUT_VARIABLE BAZEL_OUTPUT_BASE)
|
|
set(BAZEL_EXEC_ROOT ${BAZEL_OUTPUT_BASE}/execroot/_main)
|
|
set(BAZEL_BUILD_OPTIONS --nocheck_visibility --keep_going)
|
|
|
|
macro(include_generated BAZEL_TARGET)
|
|
bazel(build ${BAZEL_TARGET} ${BAZEL_BUILD_OPTIONS})
|
|
string(REPLACE "@" "/external/" BAZEL_TARGET_PATH ${BAZEL_TARGET})
|
|
string(REPLACE "//" "/" BAZEL_TARGET_PATH ${BAZEL_TARGET_PATH})
|
|
string(REPLACE ":" "/" BAZEL_TARGET_PATH ${BAZEL_TARGET_PATH})
|
|
include(${BAZEL_WORKSPACE}/bazel-bin${BAZEL_TARGET_PATH}.cmake)
|
|
endmacro()
|
|
|
|
macro(generate_and_include)
|
|
file(REMOVE "${BAZEL_WORKSPACE}/.bazel-cmake/BUILD.bazel")
|
|
# use aquery to only get targets compatible with the current platform
|
|
bazel_even_if_failing(aquery "kind(\"cc_test|cc_binary\",${ARGN})" ${BAZEL_BUILD_OPTIONS} --output=jsonproto OUTPUT_VARIABLE BAZEL_AQUERY_RESULT)
|
|
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")
|
|
foreach(IDX RANGE ${LAST_IDX})
|
|
string(JSON CUR_BAZEL_TARGET GET "${BAZEL_JSON_TARGETS}" ${IDX} label)
|
|
string(APPEND BAZEL_TARGETS " '${CUR_BAZEL_TARGET}',\n")
|
|
endforeach ()
|
|
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\
|
|
\n\
|
|
generate_cmake(\n\
|
|
name = 'cmake',\n\
|
|
testonly = True,\n\
|
|
targets = [\n\
|
|
${BAZEL_TARGETS}\
|
|
],\n\
|
|
)\n")
|
|
include_generated(//.bazel-cmake:cmake)
|
|
endmacro()
|
|
|
|
if (CREATE_COMPILATION_DATABASE_LINK)
|
|
file(CREATE_LINK ${PROJECT_BINARY_DIR}/compile_commands.json ${PROJECT_SOURCE_DIR}/compile_commands.json SYMBOLIC)
|
|
endif ()
|