
The "//rtc_base:rtc_base" build target has historically been one of the biggest targets in the WebRTC build. Big targets are the main source of circular dependencies and non-API types leakage. This CL is a step forward into splitting "//rtc_base:rtc_base" into smaller targets (as originally started in 2018). The only non-automated changes are (like re-wiring the build system): * The creation of //rtc_base/async_resolver.{h,cc} which allows to break a circular dependency (is has been extracted from //rtc_base/net_helpers.{h,cc}). * The creation of //rtc_base/internal/default_socket_server.{h,cc} to break another circular dependency. Bug: webrtc:9987 Change-Id: I0c8f5e7efe2c8fd8e6bffa0d6dd2dd494cf3df02 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/196903 Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org> Reviewed-by: Harald Alvestrand <hta@webrtc.org> Cr-Commit-Position: refs/heads/master@{#32941}
How to write code in the api/
directory
Mostly, just follow the regular style guide, but:
- Note that
api/
code is not exempt from the “.h
and.cc
files come in pairs” rule, so if you declare something inapi/path/to/foo.h
, it should be defined inapi/path/to/foo.cc
. - Headers in
api/
should, if possible, not#include
headers outsideapi/
. It’s not always possible to avoid this, but be aware that it adds to a small mountain of technical debt that we’re trying to shrink. .cc
files inapi/
, on the other hand, are free to#include
headers outsideapi/
.
That is, the preferred way for api/
code to access non-api/
code is to call
it from a .cc
file, so that users of our API headers won’t transitively
#include
non-public headers.
For headers in api/
that need to refer to non-public types, forward
declarations are often a lesser evil than including non-public header files. The
usual rules still apply, though.
.cc
files in api/
should preferably be kept reasonably small. If a
substantial implementation is needed, consider putting it with our non-public
code, and just call it from the api/
.cc
file.