blob: 6fb2195921b4f38a1e0486bc35d3d73e8d0bf3e1 [file] [log] [blame]
Name: Protocol Buffers
Short Name: protobuf
License: BSD
License File: LICENSE
Version: 3.3.0
Revision: 040f56e61b379e92dfdf107b12244a7580f60823
Security Critical: yes
Steps used to create the current version:
1. Pull the release from
2. Add build files (, proto_library.gni).
Be sure to update the list of source files, as additional .cc files and
headers might have been added -- you need to find the transitive closure of
include files required by targets.
Other things to care about are defines required by protobuf on various
platforms, warnings generated by compilers, and new dependencies introduced.
3. Add DEPS and OWNERS.
4. Add and
5. Get open-source library from and add
it to protobuf/third_party/six/
6. Apply patches in patches/ (see the description below):
$ for patch in patches/*; do patch -s -p1 < $patch; done
For future releases, it will be worth looking into which patches still need
to be applied. In case of conflict, update those patches accordingly and save
them back in place (i.e. in patches directory).
7. Generate and using something like
the following steps. Make sure you've regenerated your buildfiles and will
build js_embed then protoc from the newly-modified sources above.
$ cd $SRC_DIR
$ gn gen out/Debug
$ ninja -C out/Debug js_embed
$ cd third_party/protobuf/src/google/protobuf/compiler/js
$ $SRC_DIR/out/Debug/js_embed \
./well_known_types/any.js ./well_known_types/struct.js \
./well_known_types/timestamp.js >
$ cd $SRC_DIR
$ ninja -C out/Debug protoc
$ cd third_party/protobuf/src
$ $SRC_DIR/out/Debug/protoc --python_out=../python google/protobuf/descriptor.proto
8. Add an to protobuf/ that adds third_party/six/ to Python path.
9. Update README.chromium.
Note about libmirclient:
On Ubuntu, Chromium has an indirect dependency on the system
libprotobuf-lite through libmirclient (through GTK). The symbols in
the system library conflict with Chromium's libprotobuf-lite used on
component builds.
mirclient.* are added to stub out to prevent loading
the system libprotobuf-lite. Chromium's replacement libmirclient will
get loaded, but its symbols will never be used directly or indirectly.
Description of the patches:
- 0003-remove-static-initializers.patch
This patch removes all static initializers from Chromium. The change in Status
class is not completely compatible with upstream, but it's compatible enough
to work in Chromium, which doesn't use this functionality yet. The work on
upstreaming the removal of static initializers is in progress:
- 0004-fix-integer-types-and-shared-library-exports.patch
This patch makes protobuf int64 to be int64_t (as opposed to long long in
upstream), and similarly for other integer types. It also allows exporting
protobuf symbols in Linux .so libraries, so that protobuf can be built as a
component (see
- 0007-uninline_googleonce.patch
- 0008-uninline_get_empty_string.patch
- 0009-uninline-arenastring.patch
- 0010-uninline-generated-code.patch
These patches uninline some functions, resulting in a significant reduction
(somewhere between 500 KB and 1 MB) of binary size.
- 0012-fixes-for-js-embed-cc.patch
Fixed in
- 0013-fixes-expansion-to-defined.patch
Fixes a macro whose expansion has a defined() in it. This is
results in undefined behavior and some compilers will warn/error
when seeing this.
- 0014-truncate-uint8-constants.patch
Fixed upstream in CL 161573822
- 0015-fixes-forcing-value-to-bool.patch
Fixes an MSVC error that forbids conversion from int to bool. Needs
to be upstreamed.
- 0014-truncate-uint8-constants.patch
Fixed upstream in CL 163270735
- 0017-constexpr-for-vs-2017.patch
Define PROTOBUF_CONSTEXPR_VAR as constexpr for VS 2017, also landed upstream
- 0018-fallthrough.patch
Cherry-picks upstream
- 0019-rename-a-shadowed-variable.patch
Cherry-picks upstream
- 0020-Add-support-for-libc-on-Windows.patch
Cherry-picks upstream
-- patches/0023-php_generator.patch
Cherry-picks upstream