[bazel] Remove outdated docs
These were from a previous attempt. Change-Id: Ia057e5e23d2ba97e33f1bb7fafc785a3ee92d66e No-Try: true Reviewed-on: https://skia-review.googlesource.com/c/skia/+/531096 Auto-Submit: Kevin Lubick <kjlubick@google.com> Reviewed-by: Ben Wagner <bungeman@google.com> Commit-Queue: Ben Wagner <bungeman@google.com>
This commit is contained in:
parent
ffc9dec755
commit
4a6fbd84f4
@ -1,102 +0,0 @@
|
||||
|
||||
---
|
||||
title: "Notes about Bazel Builds"
|
||||
linkTitle: "Notes about Bazel Builds"
|
||||
|
||||
---
|
||||
|
||||
|
||||
Skia cannot be built with Bazel yet.
|
||||
|
||||
But you should be able to build and run the trivial `tools/bazel_test.cc`:
|
||||
|
||||
$ bazel test ...
|
||||
|
||||
Dependencies
|
||||
------------
|
||||
|
||||
`WORKSPACE.bazel` acts like `DEPS`, listing external dependencies and how to
|
||||
fetch them. You can call `bazel sync`, or just let `bazel {build,test,run}`
|
||||
handle it as needed on its own. The easiest way to add a new dependency is to
|
||||
start using `tag="..."` or `branch="..."` and then follow the advice of Bazel
|
||||
to pin that to the `commit` and `shallow_since` it suggests.
|
||||
|
||||
We must provide Bazel build configuration for dependencies like `libpng` that
|
||||
don't provide their own. For `libpng` that's `bazel/libpng.bazel`, linked by
|
||||
the `new_git_repository()` `build_file` argument, written relative to that
|
||||
fetched Git repo's root. Its resemblance to `third_party/libpng/BUILD.gn` is
|
||||
no coincidence... it's pretty much a 1:1 translation between GN and Bazel.
|
||||
|
||||
Everything that's checked in builds external dependencies from source. I've
|
||||
not written an integrated system for substituting prebuilt versions of these
|
||||
dependencies (e.g. `/usr/include/png.h` and `/usr/lib/libpng.so`), instead
|
||||
leaving that up to users who want it. The process is not exactly trivial, but
|
||||
closer to tedious than difficult. Here's an example, overriding `libpng` to
|
||||
point to prebuilts from Homebrew in ~/brew:
|
||||
|
||||
Each overridden dependency will need its own directory with a few files.
|
||||
|
||||
$ find overrides
|
||||
overrides
|
||||
overrides/libpng
|
||||
overrides/libpng/include
|
||||
overrides/libpng/WORKSPACE.bazel
|
||||
overrides/libpng/BUILD.bazel
|
||||
|
||||
`WORKSPACE.bazel` must be present, but in this case can be empty.
|
||||
|
||||
$ cat overrides/libpng/WORKSPACE.bazel
|
||||
|
||||
`BUILD.bazel` is where it all happens:
|
||||
|
||||
$ cat overrides/libpng/BUILD.bazel
|
||||
cc_library(
|
||||
name = "libpng",
|
||||
hdrs = ["include/png.h"],
|
||||
srcs = ["include/pngconf.h", "include/pnglibconf.h"],
|
||||
includes = ["include"],
|
||||
linkopts = ["-lpng", "-L/Users/mtklein/brew/lib"],
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
||||
|
||||
`include` is a symlink I've made to `~/brew/include` because Bazel doesn't like
|
||||
absolute paths in `hdrs` or `includes`. On the other hand, a symlink to
|
||||
`~/brew/lib` doesn't work here, though `-L/Users/mtklein/brew/lib` works fine.
|
||||
|
||||
$ readlink overrides/libpng/include
|
||||
/Users/mtklein/brew/include/
|
||||
|
||||
Finally, we point Bazel at all that using `--override_repository`:
|
||||
|
||||
$ bazel test ... --override_repository libpng=/Users/mtklein/overrides/libpng
|
||||
|
||||
I expect building from source to be the most common use case, and it's more or
|
||||
less enough to simply know that we can substitute prebuilts this way. The most
|
||||
interesting part to me is that we don't need to provide this mechanism... it's
|
||||
all there in stock Bazel. This plan may all want some rethinking in the future
|
||||
if we want to add the option to trim the dependency entirely and make this
|
||||
tristate (build it, use it prebuilt, or trim).
|
||||
|
||||
.bazelrc
|
||||
--------
|
||||
|
||||
I have not (yet?) checked in a .bazelrc to the Skia repo, but have found it
|
||||
handy to write my own in ~/.bazelrc:
|
||||
|
||||
$ cat ~/.bazelrc
|
||||
# Print more information on failures.
|
||||
build --verbose_failures
|
||||
test --test_output errors
|
||||
|
||||
# Create an ASAN config, try `bazel test --config asan ...`.
|
||||
build:asan --copt -fsanitize=address
|
||||
build:asan --copt -Wno-macro-redefined # (_FORTIFY_SOURCE redefined.)
|
||||
build:asan --linkopt -fsanitize=address
|
||||
|
||||
# Flip on and off prebuilt overrides easily.
|
||||
build --override_repository libpng=/Users/mtklein/overrides/libpng
|
||||
|
||||
I'm impressed by how much you can configure via bazelrc, and I think this
|
||||
should let our Bazel build configuration stay mostly focused on the structure
|
||||
of the project, less cluttered by build settings.
|
||||
|
Loading…
Reference in New Issue
Block a user