Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 86cca748 authored by Michael Merg's avatar Michael Merg
Browse files

Update ide_query script to new format

This includes using a separate (but backward compatible) proto for the cc_analyzer since some of the fields/messages were removed in the new ide_query format.

Tested the ide_query.go with the old and the new cc_analyzer to ensure backward compatibility.

Change-Id: If149f5f9dd88a8f50c184274e8b258dfce117498
parent ac9a2aba
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -58,7 +58,7 @@ cc_library_host_static {
    shared_libs: ["libclang-cpp_host"],
    static_libs: [
        "include_scanner",
        "ide_query_proto",
        "cc_analyzer_proto",
    ],
    defaults: ["ide_query_cc_analyzer_defaults"],
}
@@ -72,7 +72,7 @@ cc_binary_host {
        "libprotobuf-cpp-full",
    ],
    static_libs: [
        "ide_query_proto",
        "cc_analyzer_proto",
        "builtin_headers",
        "include_scanner",
        "analyzer",
+11 −12
Original line number Diff line number Diff line
@@ -20,9 +20,9 @@
#include <utility>
#include <vector>

#include "cc_analyzer.pb.h"
#include "clang/Tooling/CompilationDatabase.h"
#include "clang/Tooling/JSONCompilationDatabase.h"
#include "ide_query.pb.h"
#include "include_scanner.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/StringRef.h"
@@ -48,11 +48,11 @@ llvm::Expected<std::unique_ptr<clang::tooling::CompilationDatabase>> LoadCompDB(
}
}  // namespace

::ide_query::DepsResponse GetDeps(::ide_query::RepoState state) {
  ::ide_query::DepsResponse results;
::cc_analyzer::DepsResponse GetDeps(::cc_analyzer::RepoState state) {
  ::cc_analyzer::DepsResponse results;
  auto db = LoadCompDB(state.comp_db_path());
  if (!db) {
    results.mutable_status()->set_code(::ide_query::Status::FAILURE);
    results.mutable_status()->set_code(::cc_analyzer::Status::FAILURE);
    results.mutable_status()->set_message(llvm::toString(db.takeError()));
    return results;
  }
@@ -63,7 +63,7 @@ llvm::Expected<std::unique_ptr<clang::tooling::CompilationDatabase>> LoadCompDB(
    llvm::sys::path::append(abs_file, active_file);
    auto cmds = db->get()->getCompileCommands(active_file);
    if (cmds.empty()) {
      result.mutable_status()->set_code(::ide_query::Status::FAILURE);
      result.mutable_status()->set_code(::cc_analyzer::Status::FAILURE);
      result.mutable_status()->set_message(
          llvm::Twine("Can't find compile flags for file: ", abs_file).str());
      continue;
@@ -80,11 +80,11 @@ llvm::Expected<std::unique_ptr<clang::tooling::CompilationDatabase>> LoadCompDB(
  return results;
}

::ide_query::IdeAnalysis GetBuildInputs(::ide_query::RepoState state) {
::cc_analyzer::IdeAnalysis GetBuildInputs(::cc_analyzer::RepoState state) {
  auto db = LoadCompDB(state.comp_db_path());
  ::ide_query::IdeAnalysis results;
  ::cc_analyzer::IdeAnalysis results;
  if (!db) {
    results.mutable_status()->set_code(::ide_query::Status::FAILURE);
    results.mutable_status()->set_code(::cc_analyzer::Status::FAILURE);
    results.mutable_status()->set_message(llvm::toString(db.takeError()));
    return results;
  }
@@ -97,7 +97,6 @@ llvm::Expected<std::unique_ptr<clang::tooling::CompilationDatabase>> LoadCompDB(
    genfile_root_abs.push_back('/');
  }

  results.set_build_artifact_root(state.out_dir());
  for (llvm::StringRef active_file : state.active_file_path()) {
    auto& result = *results.add_sources();
    result.set_path(active_file.str());
@@ -106,7 +105,7 @@ llvm::Expected<std::unique_ptr<clang::tooling::CompilationDatabase>> LoadCompDB(
    llvm::sys::path::append(abs_file, active_file);
    auto cmds = db->get()->getCompileCommands(abs_file);
    if (cmds.empty()) {
      result.mutable_status()->set_code(::ide_query::Status::FAILURE);
      result.mutable_status()->set_code(::cc_analyzer::Status::FAILURE);
      result.mutable_status()->set_message(
          llvm::Twine("Can't find compile flags for file: ", abs_file).str());
      continue;
@@ -114,7 +113,7 @@ llvm::Expected<std::unique_ptr<clang::tooling::CompilationDatabase>> LoadCompDB(
    const auto& cmd = cmds.front();
    llvm::StringRef working_dir = cmd.Directory;
    if (!working_dir.consume_front(repo_dir)) {
      result.mutable_status()->set_code(::ide_query::Status::FAILURE);
      result.mutable_status()->set_code(::cc_analyzer::Status::FAILURE);
      result.mutable_status()->set_message("Command working dir " +
                                           working_dir.str() +
                                           " outside repository " + repo_dir);
@@ -127,7 +126,7 @@ llvm::Expected<std::unique_ptr<clang::tooling::CompilationDatabase>> LoadCompDB(
    auto includes =
        ScanIncludes(cmds.front(), llvm::vfs::createPhysicalFileSystem());
    if (!includes) {
      result.mutable_status()->set_code(::ide_query::Status::FAILURE);
      result.mutable_status()->set_code(::cc_analyzer::Status::FAILURE);
      result.mutable_status()->set_message(
          llvm::toString(includes.takeError()));
      continue;
+3 −3
Original line number Diff line number Diff line
@@ -17,17 +17,17 @@
#ifndef _TOOLS_IDE_QUERY_CC_ANALYZER_ANALYZER_H_
#define _TOOLS_IDE_QUERY_CC_ANALYZER_ANALYZER_H_

#include "ide_query.pb.h"
#include "cc_analyzer.pb.h"

namespace tools::ide_query::cc_analyzer {

// Scans the build graph and returns target names from the build graph to
// generate all the dependencies for the active files.
::ide_query::DepsResponse GetDeps(::ide_query::RepoState state);
::cc_analyzer::DepsResponse GetDeps(::cc_analyzer::RepoState state);

// Scans the sources and returns all the source files required for analyzing the
// active files.
::ide_query::IdeAnalysis GetBuildInputs(::ide_query::RepoState state);
::cc_analyzer::IdeAnalysis GetBuildInputs(::cc_analyzer::RepoState state);

}  // namespace tools::ide_query::cc_analyzer

+7 −7
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@

#include "analyzer.h"
#include "google/protobuf/message.h"
#include "ide_query.pb.h"
#include "cc_analyzer.pb.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/TargetSelect.h"
@@ -48,9 +48,9 @@ llvm::cl::opt<OpMode> mode{
    llvm::cl::desc("Print the list of headers to insert and remove"),
};

ide_query::IdeAnalysis ReturnError(llvm::StringRef message) {
  ide_query::IdeAnalysis result;
  result.mutable_status()->set_code(ide_query::Status::FAILURE);
cc_analyzer::IdeAnalysis ReturnError(llvm::StringRef message) {
  cc_analyzer::IdeAnalysis result;
  result.mutable_status()->set_code(cc_analyzer::Status::FAILURE);
  result.mutable_status()->set_message(message.str());
  return result;
}
@@ -61,7 +61,7 @@ int main(int argc, char* argv[]) {
  llvm::InitializeAllTargetInfos();
  llvm::cl::ParseCommandLineOptions(argc, argv);

  ide_query::RepoState state;
  cc_analyzer::RepoState state;
  if (!state.ParseFromFileDescriptor(STDIN_FILENO)) {
    llvm::errs() << "Failed to parse input!\n";
    return 1;
@@ -70,12 +70,12 @@ int main(int argc, char* argv[]) {
  std::unique_ptr<google::protobuf::Message> result;
  switch (mode) {
    case OpMode::DEPS: {
      result = std::make_unique<ide_query::DepsResponse>(
      result = std::make_unique<cc_analyzer::DepsResponse>(
          tools::ide_query::cc_analyzer::GetDeps(std::move(state)));
      break;
    }
    case OpMode::INPUTS: {
      result = std::make_unique<ide_query::IdeAnalysis>(
      result = std::make_unique<cc_analyzer::IdeAnalysis>(
          tools::ide_query::cc_analyzer::GetBuildInputs(std::move(state)));
      break;
    }
+2 −2
Original line number Diff line number Diff line
@@ -19,9 +19,9 @@ package {
}

cc_library_host_static {
    name: "ide_query_proto",
    name: "cc_analyzer_proto",
    srcs: [
        "ide_query.proto",
        "cc_analyzer.proto",
    ],
    proto: {
        export_proto_headers: true,
Loading