This folder is where we put
BUILD.bazel files for external (e.g. third party) dependencies.
If a dependency supports Bazel, we should use those rules, but if the dependency does not, we need to create our own rules in a subdirectory.
We generally compile third_party deps from source. If we do, we clone the repository and use the given BUILD.bazel file to build it. This is specified in the
new_git_repository) and we refer to those targets using labels like
Some third_party deps we only link against prebuilt versions. For those, we do not involve WORKSPACE.bazel and link to them directly, e.g.
strip_include_prefix causes the header path for the library to be added to the compiler include search path with
-I, which means Clang will treat it like a file in Skia proper. This means if those headers have issues that Clang's diagnostic warnings catch (e.g. missing
override), we will see those warnings and the build will fail.
Generally, we do not want to have to fix third_party code's warnings, so instead of using
includes instead. This is more ergonomic, as it can let us expose header files from multiple locations (e.g.
freetype has its API in
includes and the customization headers in
builds) and adds these to the search path with
-isystem. Clang ignores warnings in these “system” headers, which means our warnings will be focused to the Skia code base.