blob: 1fc7b2768bba909d444e91d749303ab932b9126c [file] [log] [blame] [view]
## Indexing Verible C++ Source Code using Kythe
If you are looking for a searchable/indexed interface into Verible's source
code, this is already deployed at https://cs.opensource.google/verible/verible.
If you would like to learn how manually index the source code yourself, perhaps
for offline work, then read on. The steps mentioned here can be generalized for
indexing Bazel-based projects.
More information about indexing Bazel-based projects using Kythe
[here](https://github.com/kythe/kythe/tree/master/kythe/cxx/extractor#bazel-c-extractor).
### Initializing Kythe
Download the latest Kythe release from https://github.com/kythe/kythe/releases
and then unpack it for a snapshot of Kythe’s toolset.
```bash
tar xzf kythe-v*.tar.gz
rm -rf /opt/kythe
mv kythe-v*/ /opt/kythe
```
More information can be found
[here](https://github.com/kythe/kythe#getting-started).
Clone Kythe from [here](https://github.com/kythe/kythe). Then from within the
Kythe clone, build the web frontend and copy its files into /opt/kythe/
```bash
bazel build //kythe/web/ui
mkdir -p /opt/kythe/web/ui
cp -r bazel-bin/kythe/web/ui/resources/public/* /opt/kythe/web/ui
cp -r kythe/web/ui/resources/public/* /opt/kythe/web/ui
chmod -R 755 /opt/kythe/web/ui
```
More information can be found
[here](https://github.com/google/haskell-indexer#building-from-source).
### Extracting Compilations for Verible
#### VNames.json File
`vnames.json` file is used for renaming certain filepaths during extraction, but
renaming isn’t needed here but you can add the renaming you find suitable.
#### Run the extractor
```bash
# run on all targets
bazel test --experimental_action_listener=:extract_cxx //...
# run on specific target (e.g. some cc_binary or cc_library)
bazel test --experimental_action_listener=:extract_cxx //verilog/analysis:default_rules
```
Extracted kzip files will be in
bazel-out/local-fastbuild/extra_actions/extractor folder. One kzip file per
target.
```bash
find -L bazel-out -name '*cxx.kzip'
```
More information can be found
[here](https://github.com/kythe/kythe/tree/master/kythe/cxx/extractor).
### Indexing Extracted Kzip Files and Generating GraphStore
For extracting the indexing facts from extracted `kzip` files, run the following
command to apply the indexing for each `kzip` file and generate the result into
`kythe graphstore`.
```bash
for i in $(find -L bazel-out -name '*cxx.kzip'); do
# Indexing C++ compilations
/opt/kythe/indexers/cxx_indexer --ignore_unimplemented "$i" > entries
# Write entry stream into a GraphStore
/opt/kythe/tools/write_entries --graphstore leveldb:.kythe_graphstore < entries
done
```
### Generating Serving Tables
```bash
# Generate corresponding serving tables
/opt/kythe/tools/write_tables --graphstore .kythe_graphstore --out .kythe_serving
```
### Visualizing Cross-References
Run Kythe's `UI` to visualize cross-reference and code navigation.
```bash
# --listen localhost:8080 allows access from only this machine; change to
# --listen 0.0.0.0:8080 to allow access from any machine
/opt/kythe/tools/http_server \
--public_resources /opt/kythe/web/ui \
--listen localhost:8080 \
--serving_table .kythe_serving
```