Add a SkyQueryEnvironment which runs queries by examining the Skyframe graph.

This environment eagerly preloads the transitive closure of a specified query "universe", and so may not be as efficient as the standard query for limited-scope queries. It is activated when the universe is specified and ordered results are not requested (since it is currently unable to order results).

Tests were modified/added to exercise this environment where deemed interesting. Some ugly hacks were done to add coverage in AbstractQueryTest and friends, because currently even if the full depot is loaded (using //...), individual target patterns most likely won't be present in the graph. A better way to deal with this situation, suggested by felly, is probably to extract target pattern resolution logic to an auxiliary function so that query is able to resolve target patterns without mutating the graph, and then call into the read-only graph with the resolved patterns. That may be done in a follow-up, in which case the "scope" of every query could be //... .

--
MOS_MIGRATED_REVID=87257028
15 files changed
tree: 1bfc8fdc221e9669c4dbf315be6a90eacdf7521e
  1. base_workspace/
  2. docs/
  3. src/
  4. third_party/
  5. tools/
  6. .gitignore
  7. .travis.yml
  8. base_workspace_test.sh
  9. bootstrap_test.sh
  10. compile.sh
  11. FAQ.md
  12. LICENSE.txt
  13. README.md
  14. README.windows
  15. WORKSPACE
README.md

Bazel is very much a work in progress. We'd love if you tried it out, but there are many rough edges. Please feel free to give us feedback!

Bazel

{Fast, Correct} - Choose two

Bazel is an build tool that builds code quickly and reliably. It executes as few build steps as possible by tracking dependencies and outputs, controls the build environment to keep builds hermetic, and uses its knowledge of dependencies to parallelize builds.

This README file contains instructions for building and running Bazel.

System Requirements

Supported platforms:

  • Ubuntu Linux
  • Mac OS X (experimental only)

Java:

  • Java JDK 8 or later

Getting Bazel

  1. Clone the Bazel repo from GitHub:

     $ cd $HOME
     $ git clone https://github.com/google/bazel/
    

Building Bazel

Building Bazel on Ubuntu

To build Bazel on Ubuntu:

  1. Install required package:

     $ sudo apt-get install libarchive-dev
    
  2. Build Bazel:

     $ cd bazel
     $ ./compile.sh
    

Building Bazel on OS X (experimental)

Using Bazel on Mac OS X requires:

  • Xcode and Xcode command line tools
  • MacPorts or Homebrew for installing required packages

To build Bazel on Mac OS X:

  1. Install required packages:

     $ port install protobuf-cpp libarchive
    

    or

     $ brew install protobuf libarchive
    
  2. Build Bazel:

     $ cd bazel
     $ ./compile.sh
    

Running Bazel

The Bazel executable is located at <bazel_home>/output/bazel.

You must run Bazel from within a workspace directory. Bazel provides a default workspace directory with sample BUILD files and source code in <bazel_home>/base_workspace. The default workspace contains files and directories that must be present in order for Bazel to work. If you want to build from source outside the default workspace directory, copy the entire base_workspace directory to the new location before adding your BUILD and source files.

Build a sample Java application:

    $ cp -R $HOME/bazel/base_workspace $HOME/my_workspace
    $ cd $HOME/my_workspace
    $ $HOME/bazel/output/bazel build //examples/java:hello-world

Note: on OS X, you must specify --cpu=darwin to build Java programs (e.g., bazel build --cpu=darwin //examples/java:hello-world).

The build output is located in $HOME/my_workspace/bazel-bin/examples/java/.

Run the sample application:

$ $HOME/my_workspace/bazel-bin/examples/java/hello-world