xref: /aosp_15_r20/external/conscrypt/BUILDING.md (revision cd0cc2e34ba52cdf454361820a14d744e4bd531d)
1*cd0cc2e3SAndroid Build Coastguard WorkerBuilding Conscrypt
2*cd0cc2e3SAndroid Build Coastguard Worker==================
3*cd0cc2e3SAndroid Build Coastguard Worker
4*cd0cc2e3SAndroid Build Coastguard WorkerBefore you begin, you'll first need to properly configure the [Prerequisites](#Prerequisites) as
5*cd0cc2e3SAndroid Build Coastguard Workerdescribed below.
6*cd0cc2e3SAndroid Build Coastguard Worker
7*cd0cc2e3SAndroid Build Coastguard WorkerThen to build, run:
8*cd0cc2e3SAndroid Build Coastguard Worker
9*cd0cc2e3SAndroid Build Coastguard Worker```bash
10*cd0cc2e3SAndroid Build Coastguard Worker$ ./gradlew build
11*cd0cc2e3SAndroid Build Coastguard Worker```
12*cd0cc2e3SAndroid Build Coastguard Worker
13*cd0cc2e3SAndroid Build Coastguard WorkerTo publish the artifacts to your Maven local repository for use in your own project, run:
14*cd0cc2e3SAndroid Build Coastguard Worker
15*cd0cc2e3SAndroid Build Coastguard Worker```bash
16*cd0cc2e3SAndroid Build Coastguard Worker$ ./gradlew publishToMavenLocal
17*cd0cc2e3SAndroid Build Coastguard Worker```
18*cd0cc2e3SAndroid Build Coastguard Worker
19*cd0cc2e3SAndroid Build Coastguard WorkerPrerequisites
20*cd0cc2e3SAndroid Build Coastguard Worker-------------
21*cd0cc2e3SAndroid Build Coastguard WorkerConscrypt requires that you have __Java__, __BoringSSL__ and the __Android SDK__ configured as
22*cd0cc2e3SAndroid Build Coastguard Workerdescribed below.
23*cd0cc2e3SAndroid Build Coastguard Worker
24*cd0cc2e3SAndroid Build Coastguard Worker#### Java
25*cd0cc2e3SAndroid Build Coastguard WorkerThe build uses a version of Gradle which requires a __Java 11__ JRE to run, however to ensure
26*cd0cc2e3SAndroid Build Coastguard Workerbackward compatibility Conscrypt itself is compiled with a __Java 8__ JDK using Gradle's
27*cd0cc2e3SAndroid Build Coastguard Workerrecent Java toolchain support.  At the least, you will need to install __Java 11__ to run
28*cd0cc2e3SAndroid Build Coastguard WorkerGradle, but if you do not also have __Java 8__ then depending on the OS, Gradle will
29*cd0cc2e3SAndroid Build Coastguard Workertry and install it automatically.
30*cd0cc2e3SAndroid Build Coastguard Worker
31*cd0cc2e3SAndroid Build Coastguard Worker#### Android SDK
32*cd0cc2e3SAndroid Build Coastguard Worker[Download and install](https://developer.android.com/studio/install.html) the latest Android SDK
33*cd0cc2e3SAndroid Build Coastguard Workerand set the `ANDROID_HOME` environment variable to point to the root of the SDK
34*cd0cc2e3SAndroid Build Coastguard Worker(e.g. `export ANDROID_HOME=/usr/local/me/Android/Sdk`).
35*cd0cc2e3SAndroid Build Coastguard Worker
36*cd0cc2e3SAndroid Build Coastguard Worker#### BoringSSL
37*cd0cc2e3SAndroid Build Coastguard WorkerBefore you can build BoringSSL, you'll first need to set up its
38*cd0cc2e3SAndroid Build Coastguard Worker[prerequisites](https://boringssl.googlesource.com/boringssl/+/HEAD/BUILDING.md#Build-Prerequisites).
39*cd0cc2e3SAndroid Build Coastguard Worker
40*cd0cc2e3SAndroid Build Coastguard WorkerOnce the environment is properly configured, follow the steps below for your platform.
41*cd0cc2e3SAndroid Build Coastguard Worker
42*cd0cc2e3SAndroid Build Coastguard Worker##### Download
43*cd0cc2e3SAndroid Build Coastguard WorkerCheckout BoringSSL to a directory of your choice and then build as follows:
44*cd0cc2e3SAndroid Build Coastguard Worker
45*cd0cc2e3SAndroid Build Coastguard Worker```bash
46*cd0cc2e3SAndroid Build Coastguard Workergit clone https://boringssl.googlesource.com/boringssl
47*cd0cc2e3SAndroid Build Coastguard Workercd boringssl
48*cd0cc2e3SAndroid Build Coastguard Worker
49*cd0cc2e3SAndroid Build Coastguard Worker# Also need to set an environment variable to point to the installation location.
50*cd0cc2e3SAndroid Build Coastguard Workerexport BORINGSSL_HOME=$PWD
51*cd0cc2e3SAndroid Build Coastguard Worker```
52*cd0cc2e3SAndroid Build Coastguard Worker
53*cd0cc2e3SAndroid Build Coastguard Worker##### Building on Linux
54*cd0cc2e3SAndroid Build Coastguard WorkerTo build the 64-bit version on a 64-bit machine:
55*cd0cc2e3SAndroid Build Coastguard Worker```bash
56*cd0cc2e3SAndroid Build Coastguard Workermkdir build64
57*cd0cc2e3SAndroid Build Coastguard Workercd build64
58*cd0cc2e3SAndroid Build Coastguard Workercmake -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \
59*cd0cc2e3SAndroid Build Coastguard Worker      -DCMAKE_BUILD_TYPE=Release \
60*cd0cc2e3SAndroid Build Coastguard Worker      -DCMAKE_ASM_FLAGS=-Wa,--noexecstack \
61*cd0cc2e3SAndroid Build Coastguard Worker      -GNinja ..
62*cd0cc2e3SAndroid Build Coastguard Workerninja
63*cd0cc2e3SAndroid Build Coastguard Worker```
64*cd0cc2e3SAndroid Build Coastguard Worker
65*cd0cc2e3SAndroid Build Coastguard Worker##### Building on macOS.
66*cd0cc2e3SAndroid Build Coastguard WorkerWhen building Conscrypt on macOS it will build libraries for both x86 and ARM, and so BoringSSL
67*cd0cc2e3SAndroid Build Coastguard Workermust also be build for each of these.
68*cd0cc2e3SAndroid Build Coastguard Worker
69*cd0cc2e3SAndroid Build Coastguard WorkerTo build the x86_64 version:
70*cd0cc2e3SAndroid Build Coastguard Worker```bash
71*cd0cc2e3SAndroid Build Coastguard Workermkdir build.x86
72*cd0cc2e3SAndroid Build Coastguard Workercd build.x86
73*cd0cc2e3SAndroid Build Coastguard Workercmake -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \
74*cd0cc2e3SAndroid Build Coastguard Worker      -DCMAKE_BUILD_TYPE=Release \
75*cd0cc2e3SAndroid Build Coastguard Worker      -DCMAKE_ASM_FLAGS=-Wa,--noexecstack \
76*cd0cc2e3SAndroid Build Coastguard Worker      -DCMAKE_OSX_ARCHITECTURES=x86_64 \
77*cd0cc2e3SAndroid Build Coastguard Worker      -GNinja ..
78*cd0cc2e3SAndroid Build Coastguard Workerninja
79*cd0cc2e3SAndroid Build Coastguard Worker```
80*cd0cc2e3SAndroid Build Coastguard Worker
81*cd0cc2e3SAndroid Build Coastguard WorkerTo build the arm64 version:
82*cd0cc2e3SAndroid Build Coastguard Worker```bash
83*cd0cc2e3SAndroid Build Coastguard Workermkdir build.arm
84*cd0cc2e3SAndroid Build Coastguard Workercd build.arm
85*cd0cc2e3SAndroid Build Coastguard Workercmake -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \
86*cd0cc2e3SAndroid Build Coastguard Worker      -DCMAKE_BUILD_TYPE=Release \
87*cd0cc2e3SAndroid Build Coastguard Worker      -DCMAKE_ASM_FLAGS=-Wa,--noexecstack \
88*cd0cc2e3SAndroid Build Coastguard Worker      -DCMAKE_OSX_ARCHITECTURES=arm64 \
89*cd0cc2e3SAndroid Build Coastguard Worker      -GNinja ..
90*cd0cc2e3SAndroid Build Coastguard Workerninja
91*cd0cc2e3SAndroid Build Coastguard Worker```
92*cd0cc2e3SAndroid Build Coastguard Worker
93*cd0cc2e3SAndroid Build Coastguard Worker
94*cd0cc2e3SAndroid Build Coastguard Worker##### Building on Windows
95*cd0cc2e3SAndroid Build Coastguard WorkerThis assumes that you have Microsoft Visual Studio 2017 installed along
96*cd0cc2e3SAndroid Build Coastguard Workerwith both the Windows 8.1 and 10 SDKs and that your machine is capable of
97*cd0cc2e3SAndroid Build Coastguard Workercompiling 64-bit.
98*cd0cc2e3SAndroid Build Coastguard Worker
99*cd0cc2e3SAndroid Build Coastguard WorkerUnlike earlier versions, Visual Studio 2017 doesn't appear to set an
100*cd0cc2e3SAndroid Build Coastguard Workerenvironment variable to simplify building from the command line. The
101*cd0cc2e3SAndroid Build Coastguard Workerinstructions below assume the default installation of the community
102*cd0cc2e3SAndroid Build Coastguard Workeredition. To use another edition or a non-standard install path, you'll
103*cd0cc2e3SAndroid Build Coastguard Workerneed to modify the paths below as appropriate.
104*cd0cc2e3SAndroid Build Coastguard Worker
105*cd0cc2e3SAndroid Build Coastguard WorkerTo build in 64-bit mode, set up with this command line:
106*cd0cc2e3SAndroid Build Coastguard Worker
107*cd0cc2e3SAndroid Build Coastguard Worker```bat
108*cd0cc2e3SAndroid Build Coastguard Workercall "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64
109*cd0cc2e3SAndroid Build Coastguard Workermkdir build64
110*cd0cc2e3SAndroid Build Coastguard Workercd build64
111*cd0cc2e3SAndroid Build Coastguard Workercmake -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE ^
112*cd0cc2e3SAndroid Build Coastguard Worker      -DCMAKE_BUILD_TYPE=Release ^
113*cd0cc2e3SAndroid Build Coastguard Worker      -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded ^
114*cd0cc2e3SAndroid Build Coastguard Worker      -GNinja ..
115*cd0cc2e3SAndroid Build Coastguard Workerninja
116*cd0cc2e3SAndroid Build Coastguard Worker```
117*cd0cc2e3SAndroid Build Coastguard Worker
118*cd0cc2e3SAndroid Build Coastguard Worker32-bit mode is no longer supported.
119*cd0cc2e3SAndroid Build Coastguard Worker
120*cd0cc2e3SAndroid Build Coastguard WorkerCoverage
121*cd0cc2e3SAndroid Build Coastguard Worker--------
122*cd0cc2e3SAndroid Build Coastguard WorkerTo see coverage numbers, run the tests and then execute the jacocoTestReport rule
123*cd0cc2e3SAndroid Build Coastguard Worker
124*cd0cc2e3SAndroid Build Coastguard Worker```bash
125*cd0cc2e3SAndroid Build Coastguard Worker./gradlew check jacocoTestReport
126*cd0cc2e3SAndroid Build Coastguard Worker```
127*cd0cc2e3SAndroid Build Coastguard Worker
128*cd0cc2e3SAndroid Build Coastguard WorkerThe report will be placed in `openjdk/build/reports/jacoco/test/html/index.html`
129