使用 Bazel 为 Android 编译 OpenSSL

Ghi*_*ADJ 5 c android openssl bazel

我正在使用 bazel 为我的 Android 应用程序构建一个本机库。

我想像这样使用一些OpenSSL函数:

#include <jni.h>
#include <openssl/aes.h>
...
AES_encrypt(in, out, key);
Run Code Online (Sandbox Code Playgroud)

如何将 openssl 库添加到 bazel build ?

附属问题:我应该使用哪个存档?

openssl-1.1.0c.tar.gz
openssl-1.0.2j.tar.gz
openssl-1.0.1u.tar.gz
openssl-fips-2.0.13.tar.gz
openssl-fips-ecp-2.0.13.tar.gz
Run Code Online (Sandbox Code Playgroud)

我试过的

我下载了openssl-1.0.2j存档。并cc_library在我的BUILD文件中添加了一个条目。

cc_library(
    name = "openssl",
    srcs = glob([
         "openssl-1.0.2j/crypto/**/*.h",
         "openssl-1.0.2j/crypto/**/*.c"
         ]),
    includes = [
        "openssl-1.0.2j",
        "openssl-1.0.2j/crypto/",
        ],
    visibility = ["//visibility:public"],
)
Run Code Online (Sandbox Code Playgroud)

我有这个错误:

openssl-1.0.2j/crypto/dh/p512.c:60:24: fatal error: openssl/bn.h: No such file or directory
 #include <openssl/bn.h>
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么这个代码试图包括文件,从openssl而它在openssl-1.0.2j/crypto/

openssl-1.1.0c

openssl-1.1.0c/include/openssl/e_os2.h:13:34: fatal error: openssl/opensslconf.h: No such file or directory
 # include <openssl/opensslconf.h>
Run Code Online (Sandbox Code Playgroud)

即使我运行Configure命令,也不会opensslconf.h生成文件。

Ghi*_*ADJ 3

根据 @Ulf Adams 的回答,我放弃了尝试OpenSSL使用 bazel 进行编译。我用BoringSSL的是。

BoringSSL是 OpenSSL 的一个分支,可以通过执行以下操作轻松合并到 bazel 项目中:

git_repository(
    name = "boringssl",
    commit = "_some commit_",
    remote = "https://boringssl.googlesource.com/boringssl",
)
Run Code Online (Sandbox Code Playgroud)