# Copyright 2014 The Chromium 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/config/android/config.gni")
import("//build/config/sanitizers/sanitizers.gni")
import("BUILD.generated.gni")

# Config for us and everybody else depending on BoringSSL.
config("external_config") {
  include_dirs = [ "src/include" ]
  if (is_component_build) {
    defines = [ "BORINGSSL_SHARED_LIBRARY" ]
  }
}

# Config internal to this build file, shared by boringssl and boringssl_fuzzer.
config("internal_config") {
  visibility = [ ":*" ]  # Only targets in this file can depend on this.
  defines = [
    "BORINGSSL_IMPLEMENTATION",
    "BORINGSSL_NO_STATIC_INITIALIZER",
    "OPENSSL_SMALL",
  ]
  if (is_posix) {
    cflags_c = [ "-std=c99" ]
    defines += [
      "_BSD_SOURCE",  # Needed for broken uclibc headers.
      "_XOPEN_SOURCE=700"
    ]
  }
}

config("no_asm_config") {
  visibility = [ ":*" ]  # Only targets in this file can depend on this.
  defines = [ "OPENSSL_NO_ASM" ]
}

all_sources = crypto_sources + ssl_sources

# This has no sources on some platforms so must be a source_set.
source_set("boringssl_asm") {
  visibility = [ ":*" ]  # Only targets in this file can depend on this.

  defines = []
  sources = []
  include_dirs = [ "src/include" ]

  if ((current_cpu == "arm" || current_cpu == "arm64") && is_android && is_clang) {
    # Disable the integrated assembler and use the one shipped with the NDK.
    import("//build/config/android/config.gni")
    rebased_android_toolchain_root =
        rebase_path(android_toolchain_root, root_build_dir)
    asmflags = [
      "-fno-integrated-as",
      "-B${rebased_android_toolchain_root}/bin",
    ]
  }

  if (is_msan) {
    public_configs = [ ":no_asm_config" ]
  } else if (current_cpu == "x64") {
    if (is_mac) {
      sources += crypto_sources_mac_x86_64
    } else if (is_linux || is_android) {
      sources += crypto_sources_linux_x86_64
    } else {
      public_configs = [ ":no_asm_config" ]
    }
  } else if (current_cpu == "x86") {
    if (is_mac) {
      sources += crypto_sources_mac_x86
    } else if (is_linux || is_android) {
      sources += crypto_sources_linux_x86
    } else {
      public_configs = [ ":no_asm_config" ]
    }
  } else if (current_cpu == "arm" && (is_linux || is_android)) {
    sources += crypto_sources_linux_arm
  } else if (current_cpu == "arm64" && (is_linux || is_android)) {
    sources += crypto_sources_linux_aarch64
  } else {
    public_configs = [ ":no_asm_config" ]
  }
}

component("boringssl") {
  sources = all_sources
  if (is_win) {
    configs += [ ":no_asm_config" ]
  } else {
    deps = [
      ":boringssl_asm",
    ]
  }

  public_configs = [ ":external_config" ]
  configs += [ ":internal_config" ]

  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [ "//build/config/compiler:no_chromium_code" ]
}
