# 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 += [ "_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" ]
  asmflags = []

  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
    asmflags += [ "-march=armv8-a+crypto" ]
  } 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" ]
}
