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