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