xref: /aosp_15_r20/external/cronet/third_party/abseil-cpp/README.md (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker# Abseil - C++ Common Libraries
2*6777b538SAndroid Build Coastguard Worker
3*6777b538SAndroid Build Coastguard WorkerThe repository contains the Abseil C++ library code. Abseil is an open-source
4*6777b538SAndroid Build Coastguard Workercollection of C++ code (compliant to C++14) designed to augment the C++
5*6777b538SAndroid Build Coastguard Workerstandard library.
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Worker## Table of Contents
8*6777b538SAndroid Build Coastguard Worker
9*6777b538SAndroid Build Coastguard Worker- [About Abseil](#about)
10*6777b538SAndroid Build Coastguard Worker- [Quickstart](#quickstart)
11*6777b538SAndroid Build Coastguard Worker- [Building Abseil](#build)
12*6777b538SAndroid Build Coastguard Worker- [Support](#support)
13*6777b538SAndroid Build Coastguard Worker- [Codemap](#codemap)
14*6777b538SAndroid Build Coastguard Worker- [Releases](#releases)
15*6777b538SAndroid Build Coastguard Worker- [License](#license)
16*6777b538SAndroid Build Coastguard Worker- [Links](#links)
17*6777b538SAndroid Build Coastguard Worker
18*6777b538SAndroid Build Coastguard Worker<a name="about"></a>
19*6777b538SAndroid Build Coastguard Worker## About Abseil
20*6777b538SAndroid Build Coastguard Worker
21*6777b538SAndroid Build Coastguard WorkerAbseil is an open-source collection of C++ library code designed to augment
22*6777b538SAndroid Build Coastguard Workerthe C++ standard library. The Abseil library code is collected from Google's
23*6777b538SAndroid Build Coastguard Workerown C++ code base, has been extensively tested and used in production, and
24*6777b538SAndroid Build Coastguard Workeris the same code we depend on in our daily coding lives.
25*6777b538SAndroid Build Coastguard Worker
26*6777b538SAndroid Build Coastguard WorkerIn some cases, Abseil provides pieces missing from the C++ standard; in
27*6777b538SAndroid Build Coastguard Workerothers, Abseil provides alternatives to the standard for special needs
28*6777b538SAndroid Build Coastguard Workerwe've found through usage in the Google code base. We denote those cases
29*6777b538SAndroid Build Coastguard Workerclearly within the library code we provide you.
30*6777b538SAndroid Build Coastguard Worker
31*6777b538SAndroid Build Coastguard WorkerAbseil is not meant to be a competitor to the standard library; we've
32*6777b538SAndroid Build Coastguard Workerjust found that many of these utilities serve a purpose within our code
33*6777b538SAndroid Build Coastguard Workerbase, and we now want to provide those resources to the C++ community as
34*6777b538SAndroid Build Coastguard Workera whole.
35*6777b538SAndroid Build Coastguard Worker
36*6777b538SAndroid Build Coastguard Worker<a name="quickstart"></a>
37*6777b538SAndroid Build Coastguard Worker## Quickstart
38*6777b538SAndroid Build Coastguard Worker
39*6777b538SAndroid Build Coastguard WorkerIf you want to just get started, make sure you at least run through the
40*6777b538SAndroid Build Coastguard Worker[Abseil Quickstart](https://abseil.io/docs/cpp/quickstart). The Quickstart
41*6777b538SAndroid Build Coastguard Workercontains information about setting up your development environment, downloading
42*6777b538SAndroid Build Coastguard Workerthe Abseil code, running tests, and getting a simple binary working.
43*6777b538SAndroid Build Coastguard Worker
44*6777b538SAndroid Build Coastguard Worker<a name="build"></a>
45*6777b538SAndroid Build Coastguard Worker## Building Abseil
46*6777b538SAndroid Build Coastguard Worker
47*6777b538SAndroid Build Coastguard Worker[Bazel](https://bazel.build) and [CMake](https://cmake.org/) are the official
48*6777b538SAndroid Build Coastguard Workerbuild systems for Abseil.
49*6777b538SAndroid Build Coastguard WorkerSee the [quickstart](https://abseil.io/docs/cpp/quickstart) for more information
50*6777b538SAndroid Build Coastguard Workeron building Abseil using the Bazel build system.
51*6777b538SAndroid Build Coastguard WorkerIf you require CMake support, please check the [CMake build
52*6777b538SAndroid Build Coastguard Workerinstructions](CMake/README.md) and [CMake
53*6777b538SAndroid Build Coastguard WorkerQuickstart](https://abseil.io/docs/cpp/quickstart-cmake).
54*6777b538SAndroid Build Coastguard Worker
55*6777b538SAndroid Build Coastguard Worker<a name="support"></a>
56*6777b538SAndroid Build Coastguard Worker## Support
57*6777b538SAndroid Build Coastguard Worker
58*6777b538SAndroid Build Coastguard WorkerAbseil follows Google's [Foundational C++ Support
59*6777b538SAndroid Build Coastguard WorkerPolicy](https://opensource.google/documentation/policies/cplusplus-support). See
60*6777b538SAndroid Build Coastguard Worker[this
61*6777b538SAndroid Build Coastguard Workertable](https://github.com/google/oss-policies-info/blob/main/foundational-cxx-support-matrix.md)
62*6777b538SAndroid Build Coastguard Workerfor a list of currently supported versions compilers, platforms, and build
63*6777b538SAndroid Build Coastguard Workertools.
64*6777b538SAndroid Build Coastguard Worker
65*6777b538SAndroid Build Coastguard Worker<a name="codemap"></a>
66*6777b538SAndroid Build Coastguard Worker## Codemap
67*6777b538SAndroid Build Coastguard Worker
68*6777b538SAndroid Build Coastguard WorkerAbseil contains the following C++ library components:
69*6777b538SAndroid Build Coastguard Worker
70*6777b538SAndroid Build Coastguard Worker* [`base`](absl/base/)
71*6777b538SAndroid Build Coastguard Worker  <br /> The `base` library contains initialization code and other code which
72*6777b538SAndroid Build Coastguard Worker  all other Abseil code depends on. Code within `base` may not depend on any
73*6777b538SAndroid Build Coastguard Worker  other code (other than the C++ standard library).
74*6777b538SAndroid Build Coastguard Worker* [`algorithm`](absl/algorithm/)
75*6777b538SAndroid Build Coastguard Worker  <br /> The `algorithm` library contains additions to the C++ `<algorithm>`
76*6777b538SAndroid Build Coastguard Worker  library and container-based versions of such algorithms.
77*6777b538SAndroid Build Coastguard Worker* [`cleanup`](absl/cleanup/)
78*6777b538SAndroid Build Coastguard Worker  <br /> The `cleanup` library contains the control-flow-construct-like type
79*6777b538SAndroid Build Coastguard Worker  `absl::Cleanup` which is used for executing a callback on scope exit.
80*6777b538SAndroid Build Coastguard Worker* [`container`](absl/container/)
81*6777b538SAndroid Build Coastguard Worker  <br /> The `container` library contains additional STL-style containers,
82*6777b538SAndroid Build Coastguard Worker  including Abseil's unordered "Swiss table" containers.
83*6777b538SAndroid Build Coastguard Worker* [`crc`](absl/crc/) The `crc` library contains code for
84*6777b538SAndroid Build Coastguard Worker  computing error-detecting cyclic redundancy checks on data.
85*6777b538SAndroid Build Coastguard Worker* [`debugging`](absl/debugging/)
86*6777b538SAndroid Build Coastguard Worker  <br /> The `debugging` library contains code useful for enabling leak
87*6777b538SAndroid Build Coastguard Worker  checks, and stacktrace and symbolization utilities.
88*6777b538SAndroid Build Coastguard Worker* [`flags`](absl/flags/)
89*6777b538SAndroid Build Coastguard Worker  <br /> The `flags` library contains code for handling command line flags for
90*6777b538SAndroid Build Coastguard Worker  libraries and binaries built with Abseil.
91*6777b538SAndroid Build Coastguard Worker* [`hash`](absl/hash/)
92*6777b538SAndroid Build Coastguard Worker  <br /> The `hash` library contains the hashing framework and default hash
93*6777b538SAndroid Build Coastguard Worker  functor implementations for hashable types in Abseil.
94*6777b538SAndroid Build Coastguard Worker* [`log`](absl/log/)
95*6777b538SAndroid Build Coastguard Worker  <br /> The `log` library contains `LOG` and `CHECK` macros and facilities
96*6777b538SAndroid Build Coastguard Worker  for writing logged messages out to disk, `stderr`, or user-extensible
97*6777b538SAndroid Build Coastguard Worker  destinations.
98*6777b538SAndroid Build Coastguard Worker* [`memory`](absl/memory/)
99*6777b538SAndroid Build Coastguard Worker  <br /> The `memory` library contains memory management facilities that augment
100*6777b538SAndroid Build Coastguard Worker  C++'s `<memory>` library.
101*6777b538SAndroid Build Coastguard Worker* [`meta`](absl/meta/)
102*6777b538SAndroid Build Coastguard Worker  <br /> The `meta` library contains compatible versions of type checks
103*6777b538SAndroid Build Coastguard Worker  available within C++14 and C++17 versions of the C++ `<type_traits>` library.
104*6777b538SAndroid Build Coastguard Worker* [`numeric`](absl/numeric/)
105*6777b538SAndroid Build Coastguard Worker  <br /> The `numeric` library contains 128-bit integer types as well as
106*6777b538SAndroid Build Coastguard Worker  implementations of C++20's bitwise math functions.
107*6777b538SAndroid Build Coastguard Worker* [`profiling`](absl/profiling/)
108*6777b538SAndroid Build Coastguard Worker  <br /> The `profiling` library contains utility code for profiling C++
109*6777b538SAndroid Build Coastguard Worker  entities.  It is currently a private dependency of other Abseil libraries.
110*6777b538SAndroid Build Coastguard Worker* [`random`](absl/random/)
111*6777b538SAndroid Build Coastguard Worker  <br /> The `random` library contains functions for generating psuedorandom
112*6777b538SAndroid Build Coastguard Worker  values.
113*6777b538SAndroid Build Coastguard Worker* [`status`](absl/status/)
114*6777b538SAndroid Build Coastguard Worker  <br /> The `status` library contains abstractions for error handling,
115*6777b538SAndroid Build Coastguard Worker  specifically `absl::Status` and `absl::StatusOr<T>`.
116*6777b538SAndroid Build Coastguard Worker* [`strings`](absl/strings/)
117*6777b538SAndroid Build Coastguard Worker  <br /> The `strings` library contains a variety of strings routines and
118*6777b538SAndroid Build Coastguard Worker  utilities, including a C++14-compatible version of the C++17
119*6777b538SAndroid Build Coastguard Worker  `std::string_view` type.
120*6777b538SAndroid Build Coastguard Worker* [`synchronization`](absl/synchronization/)
121*6777b538SAndroid Build Coastguard Worker  <br /> The `synchronization` library contains concurrency primitives (Abseil's
122*6777b538SAndroid Build Coastguard Worker  `absl::Mutex` class, an alternative to `std::mutex`) and a variety of
123*6777b538SAndroid Build Coastguard Worker  synchronization abstractions.
124*6777b538SAndroid Build Coastguard Worker* [`time`](absl/time/)
125*6777b538SAndroid Build Coastguard Worker  <br /> The `time` library contains abstractions for computing with absolute
126*6777b538SAndroid Build Coastguard Worker  points in time, durations of time, and formatting and parsing time within
127*6777b538SAndroid Build Coastguard Worker  time zones.
128*6777b538SAndroid Build Coastguard Worker* [`types`](absl/types/)
129*6777b538SAndroid Build Coastguard Worker  <br /> The `types` library contains non-container utility types, like a
130*6777b538SAndroid Build Coastguard Worker  C++14-compatible version of the C++17 `std::optional` type.
131*6777b538SAndroid Build Coastguard Worker* [`utility`](absl/utility/)
132*6777b538SAndroid Build Coastguard Worker  <br /> The `utility` library contains utility and helper code.
133*6777b538SAndroid Build Coastguard Worker
134*6777b538SAndroid Build Coastguard Worker<a name="releases"></a>
135*6777b538SAndroid Build Coastguard Worker## Releases
136*6777b538SAndroid Build Coastguard Worker
137*6777b538SAndroid Build Coastguard WorkerAbseil recommends users "live-at-head" (update to the latest commit from the
138*6777b538SAndroid Build Coastguard Workermaster branch as often as possible). However, we realize this philosophy doesn't
139*6777b538SAndroid Build Coastguard Workerwork for every project, so we also provide [Long Term Support
140*6777b538SAndroid Build Coastguard WorkerReleases](https://github.com/abseil/abseil-cpp/releases) to which we backport
141*6777b538SAndroid Build Coastguard Workerfixes for severe bugs. See our [release
142*6777b538SAndroid Build Coastguard Workermanagement](https://abseil.io/about/releases) document for more details.
143*6777b538SAndroid Build Coastguard Worker
144*6777b538SAndroid Build Coastguard Worker<a name="license"></a>
145*6777b538SAndroid Build Coastguard Worker## License
146*6777b538SAndroid Build Coastguard Worker
147*6777b538SAndroid Build Coastguard WorkerThe Abseil C++ library is licensed under the terms of the Apache
148*6777b538SAndroid Build Coastguard Workerlicense. See [LICENSE](LICENSE) for more information.
149*6777b538SAndroid Build Coastguard Worker
150*6777b538SAndroid Build Coastguard Worker<a name="links"></a>
151*6777b538SAndroid Build Coastguard Worker## Links
152*6777b538SAndroid Build Coastguard Worker
153*6777b538SAndroid Build Coastguard WorkerFor more information about Abseil:
154*6777b538SAndroid Build Coastguard Worker
155*6777b538SAndroid Build Coastguard Worker* Consult our [Abseil Introduction](https://abseil.io/about/intro)
156*6777b538SAndroid Build Coastguard Worker* Read [Why Adopt Abseil](https://abseil.io/about/philosophy) to understand our
157*6777b538SAndroid Build Coastguard Worker  design philosophy.
158*6777b538SAndroid Build Coastguard Worker* Peruse our
159*6777b538SAndroid Build Coastguard Worker  [Abseil Compatibility Guarantees](https://abseil.io/about/compatibility) to
160*6777b538SAndroid Build Coastguard Worker  understand both what we promise to you, and what we expect of you in return.
161