ADD: added new version of protobuf
This commit is contained in:
161
libs/protobuf/protoc-artifacts/README.md
Normal file
161
libs/protobuf/protoc-artifacts/README.md
Normal file
@@ -0,0 +1,161 @@
|
||||
# Build scripts that publish pre-compiled protoc artifacts
|
||||
``protoc`` is the compiler for ``.proto`` files. It generates language bindings
|
||||
for the messages and/or RPC services from ``.proto`` files.
|
||||
|
||||
Because ``protoc`` is a native executable, the scripts under this directory
|
||||
build and publish a ``protoc`` executable (a.k.a. artifact) to Maven
|
||||
repositories. The artifact can be used by build automation tools so that users
|
||||
would not need to compile and install ``protoc`` for their systems.
|
||||
|
||||
If you would like us to publish protoc artifact for a new platform, please send
|
||||
us a pull request to add support for the new platform. You would need to change
|
||||
the following files:
|
||||
|
||||
* [build-protoc.sh](build-protoc.sh): script to cross-build the protoc for your
|
||||
platform.
|
||||
* [pom.xml](pom.xml): script to upload artifacts to maven.
|
||||
* [build-zip.sh](build-zip.sh): script to package published maven artifacts in
|
||||
our release page.
|
||||
|
||||
## Maven Location
|
||||
The published protoc artifacts are available on Maven here:
|
||||
|
||||
https://repo.maven.apache.org/maven2/com/google/protobuf/protoc/
|
||||
|
||||
## Versioning
|
||||
The version of the ``protoc`` artifact must be the same as the version of the
|
||||
Protobuf project.
|
||||
|
||||
## Artifact name
|
||||
The name of a published ``protoc`` artifact is in the following format:
|
||||
``protoc-<version>-<os>-<arch>.exe``, e.g., ``protoc-3.6.1-linux-x86_64.exe``.
|
||||
|
||||
Note that artifacts for linux/macos also have the `.exe` suffix but they are
|
||||
not windows binaries.
|
||||
|
||||
## System requirement
|
||||
Install [Apache Maven](http://maven.apache.org/) if you don't have it.
|
||||
|
||||
The scripts only work under Unix-like environments, e.g., Linux, MacOSX, and
|
||||
Cygwin or MinGW for Windows. Please see ``README.md`` of the Protobuf project
|
||||
for how to set up the build environment.
|
||||
|
||||
## Building from a freshly checked-out source
|
||||
|
||||
If you just checked out the Protobuf source from github, you need to
|
||||
generate the configure script.
|
||||
|
||||
Under the protobuf project directory:
|
||||
|
||||
|
||||
```
|
||||
$ ./autogen.sh
|
||||
```
|
||||
|
||||
### Build the artifact for each platform
|
||||
|
||||
Run the build-protoc.sh script under this protoc-artifacts directory to build the protoc
|
||||
artifact for each platform. For example:
|
||||
|
||||
```
|
||||
$ cd protoc-artifacts
|
||||
$ ./build-protoc.sh linux x86_64 protoc
|
||||
```
|
||||
|
||||
The above command will produce a `target/linux/x86_64/protoc` binary under the
|
||||
protoc-artifacts directory.
|
||||
|
||||
For a list of supported platforms, see the comments in the build-protoc.sh
|
||||
script. We only use this script to build artifacts on Ubuntu and MacOS (both
|
||||
with x86_64, and do cross-compilation for other platforms.
|
||||
|
||||
### Tips for building for Linux
|
||||
We build on Centos 6.9 to provide a good compatibility for not very new
|
||||
systems. We have provided a ``Dockerfile`` under this directory to build the
|
||||
environment. It has been tested with Docker 1.6.1.
|
||||
|
||||
To build a image:
|
||||
|
||||
```
|
||||
$ docker build -t protoc-artifacts .
|
||||
```
|
||||
|
||||
To run the image:
|
||||
|
||||
```
|
||||
$ docker run -it --rm=true protoc-artifacts bash
|
||||
```
|
||||
|
||||
To checkout protobuf (run within the container):
|
||||
|
||||
```
|
||||
$ # Replace v3.5.1 with the version you want
|
||||
$ wget -O - https://github.com/protocolbuffers/protobuf/archive/v3.5.1.tar.gz | tar xvzp
|
||||
```
|
||||
|
||||
### Windows build
|
||||
We no longer use scripts in this directory to build windows artifacts. Instead,
|
||||
we use Visual Studio 2015 to build our windows release artifacts. See our
|
||||
[kokoro windows build scripts here](../kokoro/release/protoc/windows/build.bat).
|
||||
|
||||
To upload windows artifacts, copy the built binaries into this directory and
|
||||
put it into the target/windows/(x86_64|x86_32) directory the same way as the
|
||||
artifacts for other platforms. That will allow the maven script to find and
|
||||
upload the artifacts to maven.
|
||||
|
||||
## To push artifacts to Maven Central
|
||||
Before you can upload artifacts to Maven Central repository, make sure you have
|
||||
read [this page](http://central.sonatype.org/pages/apache-maven.html) on how to
|
||||
configure GPG and Sonatype account.
|
||||
|
||||
Before you do the deployment, make sure you have built the protoc artifacts for
|
||||
every supported platform and put them under the target directory. Example
|
||||
target directory layout:
|
||||
|
||||
+ pom.xml
|
||||
+ target
|
||||
+ linux
|
||||
+ x86_64
|
||||
protoc.exe
|
||||
+ x86_32
|
||||
protoc.exe
|
||||
+ aarch_64
|
||||
protoc.exe
|
||||
+ ppcle_64
|
||||
protoc.exe
|
||||
+ s390_64
|
||||
protoc.exe
|
||||
+ osx
|
||||
+ x86_64
|
||||
protoc.exe
|
||||
+ x86_32
|
||||
protoc.exe
|
||||
+ windows
|
||||
+ x86_64
|
||||
protoc.exe
|
||||
+ x86_32
|
||||
protoc.exe
|
||||
|
||||
You will need to build the artifacts on multiple machines and gather them
|
||||
together into one place.
|
||||
|
||||
Use the following command to deploy artifacts for the host platform to a
|
||||
staging repository.
|
||||
|
||||
```
|
||||
$ mvn deploy -P release
|
||||
```
|
||||
|
||||
It creates a new staging repository. Go to
|
||||
https://oss.sonatype.org/#stagingRepositories and find the repository, usually
|
||||
in the name like ``comgoogle-123``. Verify that the staging repository has all
|
||||
the binaries, close and release this repository.
|
||||
|
||||
|
||||
## Tested build environments
|
||||
We have successfully built artifacts on the following environments:
|
||||
- Linux x86_32 and x86_64:
|
||||
- Centos 6.9 (within Docker 1.6.1)
|
||||
- Ubuntu 14.04.5 64-bit
|
||||
- Linux aarch_64: Cross compiled with `g++-aarch64-linux-gnu` on Ubuntu 14.04.5 64-bit
|
||||
- Mac OS X x86_32 and x86_64: Mac OS X 10.9.5
|
||||
Reference in New Issue
Block a user