编译Conscrypt
- 进入服务器“/home”目录,下载Conscrypt源码。
1 2
cd /home wget https://github.com/google/conscrypt/archive/2.1.0.zip --no-check-certificate
- 解压Conscrypt源码包。
1
unzip 2.1.0.zip
- 将“conscrypt-2.1.0”更名为“conscrypt”。
1
mv conscrypt-2.1.0 conscrypt
- 拉取Conscrypt依赖包。
该步骤会自动下载gradle-4.8.1-all,Gradle的默认的下载路径是“/root/.gradle/wrapper/dists”。
1 2
cd /home/conscrypt ./gradlew
若使用代理,执行如下命令。请根据实际的代理环境配置代理的主机名、端口号、用户名和密码。
./gradlew -Dhttp.proxyHost=proxysg.huawei.com -Dhttp.proxyPort=8080 -Dhttps.proxyHost=proxysg.huawei.com -Dhttps.proxyPort=8080 -Dhttps.proxyUser= -Dhttps.proxyPassword= -Dhttp.proxyUser= -Dhttp.proxyPassword=
如果执行./gradlew时,报错如下:
通过如下方法解决:
- 进入“/root/.gradle/wrapper/dists/gradle-4.8.1-all/6fmj4nezasjg1b7kkmy10xgo2”目录。
cd /root/.gradle/wrapper/dists/gradle-4.8.1-all/6fmj4nezasjg1b7kkmy10xgo2
注意:6fmj4nezasjg1b7kkmy10xgo2目录有可能不同,根据实际情况修改。
- 下载Gradle源码。
1
wget https://services.gradle.org/distributions/gradle-4.8.1-all.zip --no-check-certificate
- 解压缩gradle-4.8.1-all.zip文件。
1
unzip gradle-4.8.1-all.zip
- 进入
1
cd /home/conscrypt
目录。
- 重新执行编译(代理主机、端口、用户和密码,请根据实际情况填写)。
./gradlew -Dhttp.proxyHost=proxysg.huawei.com -Dhttp.proxyPort=8080 -Dhttps.proxyHost=proxysg.huawei.com -Dhttps.proxyPort=8080 -Dhttps.proxyUser= -Dhttps.proxyPassword= -Dhttp.proxyUser= -Dhttp.proxyPassword=
- 进入“/root/.gradle/wrapper/dists/gradle-4.8.1-all/6fmj4nezasjg1b7kkmy10xgo2”目录。
- 将9中编译成功的gradle-platform-native-4.8.1.jar包,替换到本地仓目录下。
1
cp /home/gradle/subprojects/platform-native/build/libs/gradle-platform-native-4.8.1.jar /root/.gradle/wrapper/dists/gradle-4.8.1-all/6fmj4nezasjg1b7kkmy10xgo2/gradle-4.8.1/lib/plugins
- 重启服务器。Gradle编译完成后,使用的依然是旧的Gradle,重启服务器后,才能使编译后的Gradle生效。
1
reboot
- 定位到“conscrypt”目录并删除子模块openjdk-integ-tests。
1 2
cd /home/conscrypt rm -rf openjdk-integ-tests
- 定位到“openjdk”目录。
1
cd openjdk
- 修改“openjdk”目录下的build.gradle文件。
- 打开build.gradle文件。
1
vim build.gradle
- 按“i”进入编辑模式,将原有编译64位文件后缀增加“aarch64”。
- 在第12行添加代码。
arm64 = 'aarch64'
- 修改第21行。
nativeClassifier64Bit = classifierFor(osName, arm64)
- 在第12行添加代码。
- 在第291行增加platform配置。
linux_aarch64 { architecture "aarch64" operatingSystem "linux" }
- 将构建jni-library时64位架构改为linux_aarch64。
- Clang或GCC编译时args增加指定头文件地址。
CentOS修改如下:
"-I$jniSourceDir/main/include", "-I$jniSourceDir/unbundled/include", "-I/usr/include/c++/4.8.2", "-I/usr/include/c++/4.8.2/aarch64-redhat-linux",
openEuler修改如下:
"-I$jniSourceDir/main/include", "-I$jniSourceDir/unbundled/include", "-I/usr/include/c++/7.3.0", "-I/usr/include/c++/7.3.0/aarch64-linux-gnu",
- 修改生成库信息代码。
- 修改第419行到第428行。
def archName = binary.targetPlatform.architecture.name def archNameR = archName if(archName == 'aarch64'){ archNameR = 'aarch_64' } archName = archName.replaceAll('-','_') def classifier = classifierFor(osName, archName) def classifierR = classifierFor(osName,archNameR) def sourceSetName = sourceSetName("$classifier") def source = binary.sharedLibraryFile
- 修改第435行和第437行内容为classifierR。
- 修改第419行到第428行。
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 打开build.gradle文件。
- 返回到上一级目录,修改“conscrypt”目录下的build.gradle文件。
- 打开build.gradle文件。
1
vim build.gradle
- 按“i”进入编辑模式,修改第39行,并增加40行~43行。
gcc(Gcc){ target("linux_aarch64") { cppCompiler.executable = "/usr/bin/gcc" } }
- 在第160~162行增加代码。
dependencies { errorprone("com.google.errorprone:error_prone_core:2.3.3") }
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 打开build.gradle文件。
- 配置Gradle网络代理。
- 创建gradle.properties文件。
1
touch gradle.properties
- 添加如下内容后,保存并退出文件。请根据实际的代理环境配置代理的主机名、端口号、用户名和密码。
org.gradle.jvmargs=-Xmx2500m -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 org.gradle.parallel=true systemProp.http.auth.ntlm.domain=CHINA systemProp.http.proxyHost=proxysg.huawei.com systemProp.http.proxyUser=实际代理用户名 systemProp.http.proxyPassword=实际代理用户密码 systemProp.http.proxyPort=8080 systemProp.http.nonProxyHosts=*.huawei.com|localhost|127.0.0.1 systemProp.https.proxyHost=proxysg.huawei.com systemProp.https.proxyUser=实际代理用户名 systemProp.https.proxyPassword=实际代理用户密码 systemProp.https.proxyPort=8080 systemProp.https.nonProxyHosts=*.huawei.com|localhost|127.0.0.1 systemProp.javax.net.ssl.trustStore=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-7.oe1.aarch64/jre/lib/security/cacerts systemProp.javax.net.ssl.trustStorePassword=changeit
- 创建gradle.properties文件。
- 构建Conscrypt。
1 2
cd /home/conscrypt ./gradlew clean build --stacktrace -x :conscrypt-openjdk:linux_aarch64Test -Dorg.conscrypt.openjdk.buildUberJar=true
- 进入“openjdk-uber/build/libs”目录。
1
cd openjdk-uber/build/libs
- 解压conscrypt-openjdk-uber-2.1.0.jar包。
1
jar xvf conscrypt-openjdk-uber-2.1.0.jar
- 将“/home/conscrypt/openjdk/build/linux_aarch_64/native-resources/META-INF/native\”目录下的libconscrypt_openjdk_jni-linux-aarch_64.so文件放入conscrypt-open-uber-2.1.0.jar包中的“META-INF/native”目录下。
1
cp /home/conscrypt/openjdk/build/linux_aarch_64/native-resources/META-INF/native/libconscrypt_openjdk_jni-linux-aarch_64.so META-INF/native
- 打包JAR,移植结束。
1
jar cvf conscrypt-openjdk-uber-2.1.0.jar META-INF/ org
父主题: 编译安装