blob: dc5c7f2047c9ad81d295ff0c399263d0fe155dc3 [file] [log] [blame]
# Copyright 2021 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//build/config/clang/clang.gni")
# Runs clang-doc for the requested target. Requires compdb access.
#
# Parameters
#
# stub_file (required)
# The name of the stub file to look for in the compilation database
template("clang_doc") {
assert(defined(invoker.stub_file))
forward_variables_from(invoker, [ "testonly" ])
_main_target_name = target_name
# Creates a compile_commands.json file with just the command line used to
# compile the API stub file.
_filter_compdb_target_name = "${_main_target_name}_filter_compdb"
_stamp_file_filter = "${target_gen_dir}/${_filter_compdb_target_name}.stamp"
_jq = "//prebuilt/third_party/jq/${host_platform}/bin/jq"
_input_compdb = "${root_gen_dir}/compdb/compile_commands.json"
# Output must be a directory because clang-doc can only take a directory
# name as compdb input.
_output_compdb_dir =
"${target_gen_dir}/${_filter_compdb_target_name}.compdb.d"
_output_compdb = "${_output_compdb_dir}/compile_commands.json"
action(_filter_compdb_target_name) {
no_output_dir_leaks = false
script = "//sdk/ctf/plasa/run_jq_on_compdb.sh"
inputs = [
#"${clang_prefix}/clang-doc",
_input_compdb,
_jq,
invoker.stub_file,
]
outputs = [
_output_compdb,
_stamp_file_filter,
]
args = [
rebase_path(_stamp_file_filter, root_build_dir),
rebase_path(_jq, root_build_dir),
rebase_path(_input_compdb, root_build_dir),
rebase_path(_output_compdb, root_build_dir),
rebase_path(invoker.stub_file, target_gen_dir),
]
deps = [ "//sdk/ctf/plasa:filter_compdb" ]
}
# Invokes clang-doc only on the API stub file.
_clang_doc_invocation_target = "${_main_target_name}_clang_doc_invoke"
_stamp_file = "${target_gen_dir}/${_clang_doc_invocation_target}.stamp"
_out_path = "${target_gen_dir}/${_filter_compdb_target_name}.api.d"
_clang_diagnosis_file = "${_output_compdb_dir}/stdout"
action(_clang_doc_invocation_target) {
no_output_dir_leaks = false
script = "//sdk/ctf/plasa/run_clang_doc.sh"
inputs = [
"${clang_prefix}/clang-doc",
_output_compdb,
invoker.stub_file,
]
outputs = [
_stamp_file,
_out_path,
_clang_diagnosis_file,
]
_out_dir = rebase_path(_out_path, root_build_dir)
_compdb_dir = rebase_path(_output_compdb_dir, root_build_dir)
args = [
# run script args
rebase_path(_stamp_file, root_build_dir),
_out_dir,
rebase_path(_clang_diagnosis_file, root_build_dir),
# the actual program to run
"${rebased_clang_prefix}/clang-doc",
"--public",
"--format=yaml",
"-p=${_compdb_dir}",
"--output=${_out_dir}",
# these should be files in the compdb.
rebase_path(invoker.stub_file, root_build_dir),
]
deps = [ ":${_filter_compdb_target_name}" ]
if (defined(invoker.deps)) {
deps += invoker.deps
}
}
group(_main_target_name) {
deps = [ ":${_clang_doc_invocation_target}" ]
}
}