SDL中文论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 8460|回复: 0
打印 上一主题 下一主题

[Discuss] 编译boringssl

[复制链接]

149

主题

331

帖子

2445

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2445
跳转到指定楼层
楼主
发表于 2017-1-3 09:57:54 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ancientcc 于 2020-12-24 19:46 编辑

boringssl源码树中的BUILDING.md专门有说如何编译,但它写的是用cmake。我们目的是要用IDE编译,即Windows下的Visual Studio,iOS下的XCode,Android下的NDK。

不管哪平台,编译boringssl需两部分文件,一部分从直接下载的源码包中就能得到,另一部分需要用configure生成。configure生成的又分若干汇编文件和err_data.c,好在至少Windows、iOS、Android,err_data.c内容是一样的。

为此要实现各平台在IDE下编译,终归是要解决两个问题:1)如何得到configure生成的文件,2)如何知道要编译哪些源文件。

Windows
需要预安装的应用
  • Perl,像activeperl。如果已安装depot_tools,但它自带的Perl版本有可能较老,最好到官网下载最新版本。老版本在把*.py转成汇编时会有问题。
  • Go。
  • CMake。

编译
运行CMake。
Where is the source code: 设置boringssl的源码树路径,像c:/ddksmaple/boringssl。
Where to build the binaries: 设置要生成的二进制文件存放路径,像c:/ddksmaple/boringssl/output。

单击“Configure”,如果是Visual Studio 2015,选择Visual Studio 14 2015。如果出现不能找到Go,那在Value手动设置go.exe路径。
以上都已成功,单击“Generate”。

至此在指定的“output”目录下就会有BoringSSL.sln,打开它,编译。
一旦编译结束,“output”下就会生成那些扩展名是.asm汇编文件,以及err_data.c。根据生成的*.o,就能得出Windows平台要编译哪些源文件。
在windows,额外预定宏OPENSSL_NO_ASM(后面升级时或许可以先去掉,没问题就建议不要定义它)。定义该宏后是不是意味不需要编译那些*.asm了?——还没有确定答案,但至少不能编译bn-586.asm、co-586.asm,否则会出同一个函数有多个实现。

iOS
iOS不需要汇编文件,configure生成的就须要err_data.c,而这文件可直接从Windows复制。

Andorid
以下编译是在Mac OS X。
需要预安装的应用
  • Go。
  • CMake。
  • Andorid NDK for Mac OS X。最好用最新版本。

安装好CMake后,双击CMake执行是图形界面,编译boringssl需要在命令行。在图形界面的CMake执行菜单命令,“Tools”---“How to Install For Command Line Use”,会弹出个窗口,告诉你如何把cmake融入命令行。如下图。

运行“终端”,输入类似以下命令就可完成编译。
  1. $ PATH="/Applications/CMake.app/Contents/bin":"$PATH"
  2. $ cd boringssl
  3. $ mkdir build
  4. $ cd build
  5. $ cmake -DCMAKE_TOOLCHAIN_FILE=../third_party/android-cmake/android.toolchain.cmake -DANDROID_NDK=/Users/ancientcc/android-ndk-r13b -DANDROID_NATIVE_API_LEVEL=18 -DCMAKE_BUILD_TYPE=Release -DANDROID_ABI="armeabi-v7a with NEON" ..
  6. $ cmake --build .
复制代码
<boringssl>/third_party/android-cmake/README.md有关于cmake命令中涉及到的几个宏的详细说明,这里再补充几点。

  • ANDROID_NDK:NDK路径,这个路径建议用绝对路径,相对路径时可能会找不到NDK错误。
  • ANDROID_NATIVE_API_LEVEL:要使用的API Level。新版boringssl需要用较新版本的NDK,像r10都是不行的,而较新NDK可能已经不支持较低的Level版本,像Level 8,可cmake默认的Level可能就是Level 8,这使得用最新NDK编译时会报找不到Level错。为此要显示定义ANDROID_NATIVE_API_LEVEL。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|丽谷软件|libsdl.cn

GMT+8, 2025-5-2 00:12 , Processed in 0.063576 second(s), 23 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表