# 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 (current_cpu == "arm64") {
      asmflags += ["-Wa,-march=armv8-a+crypto"]
    }
  }

  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" ]
}
