1f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch#!/usr/bin/env python
2f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch# Copyright 2016 The Chromium Authors. All rights reserved.
3f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch# Use of this source code is governed by a BSD-style license that can be
4f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch# found in the LICENSE file.
5f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch
6f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochimport json
7f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochimport os
8f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochimport subprocess
9f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch
10f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch
11f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochdef GenerateWithNinja(path):
12f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  """Generates a compile database using ninja.
13f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch
14f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  Args:
15f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch    path: The build directory to generate a compile database for.
16f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  """
17f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  # TODO(dcheng): Incorporate Windows-specific compile DB munging from
18f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  # https://codereview.chromium.org/718873004
19f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  print 'Generating compile database in %s...' % path
20f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  args = ['ninja', '-C', path, '-t', 'compdb', 'cc', 'cxx', 'objc', 'objcxx']
21f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  output = subprocess.check_output(args)
22f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  with file(os.path.join(path, 'compile_commands.json'), 'w') as f:
23f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch    f.write(output)
24f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch
25f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch
26f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochdef Read(path):
27f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  """Reads a compile database into memory.
28f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch
29f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  Args:
30f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch    path: Directory that contains the compile database.
31f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  """
32f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  with open(os.path.join(path, 'compile_commands.json'), 'rb') as db:
33f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch    return json.load(db)
34