1This folder is where we put `BUILD.bazel` files for external (e.g. third party) dependencies. 2 3If a dependency supports Bazel, we should use those rules, but if the dependency does not, we 4need to create our own rules in a subdirectory. 5 6We generally compile third_party deps from source. If we do, we clone the repository and use 7the given BUILD.bazel file to build it. This is specified in the `WORKSPACE.bazel` (e.g. 8`new_local_repository` or `new_git_repository`) and we refer to those targets using labels like 9`@freetype`, or `@libpng`. 10 11Some third_party deps we only link against prebuilt versions. For those, we do not involve 12WORKSPACE.bazel and link to them directly, e.g. `//bazel/external/fontconfig`. 13 14Notes 15----- 16 17Avoid strip_include_prefix 18========================== 19[strip_include_prefix](https://docs.bazel.build/versions/main/be/c-cpp.html#cc_library.strip_include_prefix) 20causes the header path for the library to be added to the compiler include search path with `-I`, 21which means Clang will treat it like a file in Skia proper. This means if those headers have 22issues that Clang's diagnostic warnings catch (e.g. missing `override`), we will see those warnings 23and the build will fail. 24 25Generally, we do not want to have to fix third_party code's warnings, so instead of 26using `strip_include_prefix`, use `includes` instead. This is more ergonomic, as it can let us 27expose header files from multiple locations (e.g. `freetype` has its API in `includes` and the 28customization headers in `builds`) and adds these to the search path with `-isystem`. Clang ignores 29warnings in these "system" headers, which means our warnings will be focused to the Skia code base.