blob: 8768a05b89aec76f87270340fc7c9ca322d66e2d [file] [log] [blame] [view]
zhangkun8365858d52015-03-30 10:51:13 -07001# Build scripts that publish pre-compiled protoc artifacts
2``protoc`` is the compiler for ``.proto`` files. It generates language bindings
3for the messages and/or RPC services from ``.proto`` files.
4
5Because ``protoc`` is a native executable, the scripts under this directory
6build and publish a ``protoc`` executable (a.k.a. artifact) to Maven
zhangkun839f4d9c62015-03-30 10:57:00 -07007repositories. The artifact can be used by build automation tools so that users
8would not need to compile and install ``protoc`` for their systems.
9
10## Versioning
11The version of the ``protoc`` artifact must be the same as the version of the
12Protobuf project.
zhangkun8365858d52015-03-30 10:51:13 -070013
14## Artifact name
15The name of a published ``protoc`` artifact is in the following format:
16``protoc-<version>-<os>-<arch>.exe``, e.g., ``protoc-3.0.0-alpha-3-windows-x86_64.exe``.
17
zhangkun83f162ee52015-03-30 11:02:02 -070018## System requirement
Kun Zhange4999562015-04-01 12:06:24 -070019Install [Apache Maven](http://maven.apache.org/) if you don't have it.
20
21The scripts only work under Unix-like environments, e.g., Linux, MacOSX, and
zhangkun83f162ee52015-03-30 11:02:02 -070022Cygwin or MinGW for Windows. Please see ``README.md`` of the Protobuf project
23for how to set up the build environment.
24
zhangkun8365858d52015-03-30 10:51:13 -070025## To install artifacts locally
26The following command will install the ``protoc`` artifact to your local Maven repository.
27```
Kun Zhange4999562015-04-01 12:06:24 -070028$ mvn install
zhangkun8365858d52015-03-30 10:51:13 -070029```
30
Kun Zhang74c4b642015-04-01 16:32:21 -070031## Cross-compilation
32The Maven script will try to detect the OS and the architecture from Java
Kun Zhang0556bf42015-04-02 10:25:13 -070033system properties. It's possible to build a protoc binary for an architecture
Kun Zhang74c4b642015-04-01 16:32:21 -070034that is different from what Java has detected, as long as you have the proper
Kun Zhangb00a5d72015-04-02 13:14:29 -070035compilers installed.
36
37You can override the Maven properties ``os.detected.name`` and
38``os.detected.arch`` to force the script to generate binaries for a specific OS
39and/or architecture. Valid values are defined as the return values of
40``normalizeOs()`` and ``normalizeArch()`` of ``Detector`` from
41[os-maven-plugin](https://github.com/trustin/os-maven-plugin/blob/master/src/main/java/kr/motd/maven/os/Detector.java).
42Frequently used values are:
43- ``os.detected.name``: ``linux``, ``osx``, ``windows``.
44- ``os.detected.arch``: ``x86_32``, ``x86_64``
45
46For example, MingGW32 only ships with 32-bit compilers, but you can still build
4732-bit protoc under 64-bit Windows, with the following command:
Kun Zhang74c4b642015-04-01 16:32:21 -070048```
49$ mvn install -Dos.detected.arch=x86_32
50```
51
zhangkun8365858d52015-03-30 10:51:13 -070052## To push artifacts to Maven Central
Kun Zhange4999562015-04-01 12:06:24 -070053Before you can upload artifacts to Maven Central repository, make sure you have
54read [this page](http://central.sonatype.org/pages/apache-maven.html) on how to
Kun Zhang0556bf42015-04-02 10:25:13 -070055configure GPG and Sonatype account.
zhangkun8365858d52015-03-30 10:51:13 -070056
Kun Zhangc5a2a7c2015-04-06 14:31:29 -070057You need to perform the deployment for every platform that you want to
58suppport. DO NOT close the staging repository until you have done the
59deployment for all platforms.
60
61Remove any ``SNAPSHOT`` or ``pre`` suffix from the version string before
62deploying.
63
64Use the following command to deploy artifacts for the host platform to a
65staging repository.
zhangkun8365858d52015-03-30 10:51:13 -070066```
Kun Zhange4999562015-04-01 12:06:24 -070067$ mvn clean deploy -P release
zhangkun8365858d52015-03-30 10:51:13 -070068```
Kun Zhangc5a2a7c2015-04-06 14:31:29 -070069It creates a new staging repository. Go to
70https://oss.sonatype.org/#stagingRepositories and find the repository, usually
71in the name like ``comgoogle-123``.
72
73You will want to run this command on a different platform. Remember, in
74subsequent deployments you will need to provide the repository name that you
75have found in the first deployment so that all artifacts go to the same
76repository:
77```
78$ mvn clean deploy -P release -Dstaging.repository=comgoogle-123
79```
80
81A 32-bit artifact can be deployed from a 64-bit host with
82``-Dos.detected.arch=x86_32``
83
84When you have done deployment for all platforms, go to
85https://oss.sonatype.org/#stagingRepositories, verify that the staging
86repository has all the binaries, close and release this repository.
87
88### Tips for deploying on Windows
89Under Windows the following error may occur: ``gpg: cannot open tty `no tty':
90No such file or directory``. This can be fixed by configuring gpg through an
91active profile in ``.m2\settings.xml`` where also the Sonatype password is
92stored:
93```xml
94<settings>
95 <servers>
96 <server>
97 <id>ossrh</id>
98 <username>[username]</username>
99 <password>[password]</password>
100 </server>
101 </servers>
102 <profiles>
103 <profile>
104 <id>gpg</id>
105 <properties>
106 <gpg.executable>gpg</gpg.executable>
107 <gpg.passphrase>[password]</gpg.passphrase>
108 </properties>
109 </profile>
110 </profiles>
111 <activeProfiles>
112 <activeProfile>gpg</activeProfile>
113 </activeProfiles>
114</settings>
115```