blob: c36cdf56f92afc129b124fa08c0e2c49c54e9e6c [file] [log] [blame]
# Copyright 2017 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//build/fuzzing/fuzzer.gni")
import("//build/package.gni")
import("//build/test/test_package.gni")
import("BUILD.generated.gni")
import("BUILD.generated_tests.gni")
################################################################################
# Public targets
group("boringssl") {
public_deps = [
":crypto",
":ssl",
]
}
if (current_cpu == "arm64" && (is_fuchsia || is_linux)) {
crypto_sources += crypto_sources_linux_aarch64
} else if (current_cpu == "x64" && (is_fuchsia || is_linux)) {
crypto_sources += crypto_sources_linux_x86_64
} else if (current_cpu == "x64" && is_mac) {
crypto_sources += crypto_sources_mac_x86_64
} else {
assert(false, "unsupported OS or CPU: {{current_os}}/{{current_cpu}}")
}
################
# libcrypto.so #
################
target(default_library_type, "crypto") {
sources = crypto_sources
public = crypto_headers
public_configs = [ ":boringssl_config" ]
is_fuzzer = false
foreach(config, configs) {
if (config == "//build/config/sanitizers:fuzzer") {
is_fuzzer = true
}
}
if (is_fuzzer) {
configs += [ ":fuzz_config" ]
}
configs += [ ":internal_config" ]
if (is_fuchsia) {
configs += [ "//build/config/fuchsia:static_cpp_standard_library" ]
} else {
configs += [ ":host_config" ]
}
}
target(default_library_type, "ssl") {
sources = ssl_sources
public = ssl_headers
public_configs = [ ":boringssl_config" ]
configs += [ ":internal_config" ]
deps = [
":crypto",
]
if (is_fuchsia) {
configs += [ "//build/config/fuchsia:static_cpp_standard_library" ]
}
}
##########################
# bssl command line tool #
##########################
if (is_fuchsia) {
package("boringssl_tool") {
deps = [
":bssl",
]
binaries = [
{
name = "bssl"
shell = true
},
]
}
} else {
group("boringssl_tool") {
deps = [
":bssl_tool",
]
}
}
# See //third_party/boringssl/tool/CMakeLists.txt
executable("bssl") {
visibility = [ ":*" ]
sources = [
"src/tool/args.cc",
"src/tool/ciphers.cc",
"src/tool/client.cc",
"src/tool/const.cc",
"src/tool/digest.cc",
"src/tool/file.cc",
"src/tool/generate_ed25519.cc",
"src/tool/genrsa.cc",
"src/tool/pkcs12.cc",
"src/tool/rand.cc",
"src/tool/server.cc",
"src/tool/sign.cc",
"src/tool/speed.cc",
"src/tool/tool.cc",
"src/tool/transport_common.cc",
]
configs += [ "//third_party/boringssl:internal_config" ]
deps = [
":crypto",
":ssl",
]
}
##############
# Unit tests #
##############
if (is_fuchsia) {
unittest_package("boringssl_tests") {
deps = [
":crypto_test",
":ssl_test",
]
tests = [
{
name = "crypto_test"
# This test takes a long time to run, and it is included in every subset
# of the Fuchsia build.
# TODO(bgoldman): Find a way to skip this test when runtests is set to
# skip "large" tests.
disabled = true
},
{
name = "ssl_test"
},
]
}
} else {
group("tests") {
testonly = true
deps = [
":crypto_test",
":ssl_test",
]
}
}
executable("crypto_test") {
testonly = true
visibility = [ ":*" ]
sources = crypto_test_sources + test_support_sources
configs += [ ":test_config" ]
deps = [
":crypto",
"//third_party/googletest:gtest",
]
}
executable("ssl_test") {
testonly = true
visibility = [ ":*" ]
sources = ssl_test_sources + test_support_sources
configs += [ ":test_config" ]
deps = [
":crypto",
":ssl",
"//third_party/googletest:gtest",
]
}
################################################################################
# Fuzzers
# Explicitly remove the arm_cpuinfo fuzzer, which tests Linux-specific routines
if (is_fuchsia) {
fuzzers -= [ "arm_cpuinfo" ]
}
foreach(fuzzer, fuzzers) {
fuzz_target("${fuzzer}_fuzzer") {
visibility = [ ":*" ]
sources = [
"src/fuzz/${fuzzer}.cc",
]
configs += [ ":fuzz_config" ]
deps = [
":crypto",
":ssl",
]
}
}
fuzz_package("boringssl_fuzzers") {
targets = []
foreach(fuzzer, fuzzers) {
targets += [ ":${fuzzer}_fuzzer" ]
}
sanitizers = [
"asan",
"ubsan",
]
}
################################################################################
# Configs
config("boringssl_config") {
include_dirs = [ "src/include" ]
if (is_fuchsia) {
# rand_fuchsia uses a system call
libs = [ "zircon" ]
}
}
config("internal_config") {
visibility = [ ":*" ]
defines = [
"BORINGSSL_ALLOW_CXX_RUNTIME",
"BORINGSSL_IMPLEMENTATION",
"BORINGSSL_NO_STATIC_INITIALIZER",
"BORINGSSL_SHARED_LIBRARY",
"OPENSSL_SMALL",
]
cflags = [ "-Wno-unused-function" ]
configs = [
":boringssl_config",
"//build/config:shared_library_config",
]
}
config("host_config") {
visibility = [ ":*" ]
# pthread_rwlock_t on host requires a feature flag.
defines = [ "_XOPEN_SOURCE=700" ]
}
config("test_config") {
visibility = [ ":*" ]
include_dirs = [
"src/crypto/test",
"src/ssl/test",
]
configs = [ ":internal_config" ]
# TODO(INTK-682): Newer googletest's are spamming about an API rename, but
# BoringSSL hasn't updated yet.
cflags = [ "-Wno-deprecated-declarations" ]
}
config("fuzz_config") {
visibility = [ ":*" ]
# BoringSSL explicitly decided against using the common LLVM fuzzing macro:
# https://boringssl-review.googlesource.com/c/boringssl/+/31244
defines = [ "BORINGSSL_UNSAFE_DETERMINISTIC_MODE" ]
configs = [ ":internal_config" ]
}