# 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/arm.gni")
import("//build/config/android/config.gni")
import("//build/config/sanitizers/sanitizers.gni")
import("//third_party/libvpx/libvpx_srcs.gni")
import("//third_party/yasm/yasm_assemble.gni")

# Sets the architecture name for building libvpx.
if (current_cpu == "x86") {
  cpu_arch_full = "ia32"
} else if (current_cpu == "x64") {
  if (is_msan) {
    cpu_arch_full = "generic"
  } else {
    cpu_arch_full = "x64"
  }
} else if (current_cpu == "arm") {
  if (arm_use_neon) {
    cpu_arch_full = "arm-neon"
  } else if (is_android) {
    cpu_arch_full = "arm-neon-cpu-detect"
  } else {
    cpu_arch_full = "arm"
  }
} else {
  cpu_arch_full = current_cpu
}

if (is_nacl) {
  platform_include_dir = "//third_party/libvpx/source/config/nacl"
} else {
  # The mac configurations are currently a relic. They were useful when
  # x86inc.asm did not work for MACH_O but now the build is identical to the
  # linux config. iOS for arm on the other hand needs an apple-specific twist in
  # vpx_config.asm
  if (is_ios && current_cpu == "arm") {
    os_category = current_os
  } else if (is_posix) {  # Should cover linux, mac, and the ios simulator.
    os_category = "linux"
  } else {  # This should only match windows.
    os_category = current_os
  }
  platform_include_dir =
      "//third_party/libvpx/source/config/$os_category/$cpu_arch_full"
}

config("libvpx_config") {
  include_dirs = [
    "//third_party/libvpx/source/config",
    platform_include_dir,
    "//third_party/libvpx/source/libvpx",
    "$root_gen_dir/third_party/libvpx",  # Provides vpx_rtcd.h.
  ]
}

# gn orders flags on a target before flags from configs. The default config
# adds -Wall, and these flags have to be after -Wall -- so they need to come
# from a config and can't be on the target directly.
config("libvpx_warnings") {
  if (is_clang) {
    cflags = [
      # libvpx heavily relies on implicit enum casting.
      "-Wno-conversion",

      # libvpx does `if ((a == b))` in some places.
      "-Wno-parentheses-equality",

      # libvpx has many static functions in header, which trigger this warning.
      "-Wno-unused-function",
    ]
  } else if (!is_win) {
    cflags = [
      "-Wno-unused-function",
      "-Wno-sign-compare",
    ]
  }
}

# This config is applied to targets that depend on libvpx.
config("libvpx_external_config") {
  include_dirs = [ "//third_party/libvpx/source/libvpx" ]
}

if (current_cpu == "x86" || (current_cpu == "x64" && !is_msan)) {
  yasm_assemble("libvpx_yasm") {
    if (current_cpu == "x86") {
      sources = libvpx_srcs_x86_assembly
    } else if (current_cpu == "x64") {
      sources = libvpx_srcs_x86_64_assembly
    }

    defines = [ "CHROMIUM" ]
    if (is_android) {
      # On Android, define __ANDROID__ to use alternative standard library
      # functions.
      defines += [ "__ANDROID__" ]
    }
    include_dirs = [
      platform_include_dir,
      "//third_party/libvpx/source/config",
      "//third_party/libvpx/source/libvpx",
      target_gen_dir,
    ]
  }
}

if (current_cpu == "x86" || (current_cpu == "x64" && !is_msan)) {
  # The following targets are deliberately source_set rather than
  # static_library. The :libvpx target exposes these intrinsic implementations
  # via global function pointer symbols, which hides the object dependency at
  # link time. On Mac, this results in undefined references to the intrinsic
  # symbols.

  source_set("libvpx_intrinsics_mmx") {
    configs += [ ":libvpx_config" ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    configs += [ ":libvpx_warnings" ]
    if (!is_win) {
      cflags = [ "-mmmx" ]
    }
    if (current_cpu == "x86") {
      sources = libvpx_srcs_x86_mmx
    } else if (current_cpu == "x64") {
      sources = libvpx_srcs_x86_64_mmx
    }
  }

  source_set("libvpx_intrinsics_sse2") {
    configs += [ ":libvpx_config" ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    configs += [ ":libvpx_warnings" ]
    if (!is_win || is_clang) {
      cflags = [ "-msse2" ]
    }
    if (current_cpu == "x86") {
      sources = libvpx_srcs_x86_sse2
    } else if (current_cpu == "x64") {
      sources = libvpx_srcs_x86_64_sse2
    }
  }

  source_set("libvpx_intrinsics_ssse3") {
    configs += [ ":libvpx_config" ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    configs += [ ":libvpx_warnings" ]
    if (!is_win || is_clang) {
      cflags = [ "-mssse3" ]
    }
    if (current_cpu == "x86") {
      sources = libvpx_srcs_x86_ssse3
    } else if (current_cpu == "x64") {
      sources = libvpx_srcs_x86_64_ssse3
    }
  }

  source_set("libvpx_intrinsics_sse4_1") {
    configs += [ ":libvpx_config" ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    configs += [ ":libvpx_warnings" ]
    if (!is_win || is_clang) {
      cflags = [ "-msse4.1" ]
    }
    if (current_cpu == "x86") {
      sources = libvpx_srcs_x86_sse4_1
    } else if (current_cpu == "x64") {
      sources = libvpx_srcs_x86_64_sse4_1
    }
  }

  source_set("libvpx_intrinsics_avx") {
    configs += [ ":libvpx_config" ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    configs += [ ":libvpx_warnings" ]
    if (is_win) {
      cflags = [ "/arch:AVX" ]
    } else {
      cflags = [ "-mavx" ]
    }
    if (current_cpu == "x86") {
      sources = libvpx_srcs_x86_avx
    } else if (current_cpu == "x64") {
      sources = libvpx_srcs_x86_64_avx
    }
  }

  source_set("libvpx_intrinsics_avx2") {
    configs += [ ":libvpx_config" ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    configs += [ ":libvpx_warnings" ]
    if (is_win) {
      cflags = [ "/arch:AVX2" ]
    } else {
      cflags = [ "-mavx2" ]
    }
    if (current_cpu == "x86") {
      sources = libvpx_srcs_x86_avx2
    } else if (current_cpu == "x64") {
      sources = libvpx_srcs_x86_64_avx2
    }
  }
}

if (cpu_arch_full == "arm-neon-cpu-detect") {
  static_library("libvpx_intrinsics_neon") {
    configs -= [ "//build/config/compiler:compiler_arm_fpu" ]
    configs += [ ":libvpx_config" ]
    configs += [ ":libvpx_warnings" ]
    cflags = [ "-mfpu=neon" ]
    sources = libvpx_srcs_arm_neon_cpu_detect_neon
  }
}

if (current_cpu == "arm") {
  if (cpu_arch_full == "arm-neon") {
    arm_assembly_sources = libvpx_srcs_arm_neon_assembly
  } else if (cpu_arch_full == "arm-neon-cpu-detect") {
    arm_assembly_sources = libvpx_srcs_arm_neon_cpu_detect_assembly
  } else {
    arm_assembly_sources = libvpx_srcs_arm_assembly
  }
}

# Converts ARM assembly files to GAS style.
if (current_cpu == "arm" && arm_assembly_sources != []) {
  action_foreach("convert_arm_assembly") {
    script = "//third_party/libvpx/run_perl.py"
    sources = arm_assembly_sources
    gen_file =
        get_label_info("//third_party/libvpx/source/libvpx", "root_gen_dir") +
        "/{{source_root_relative_dir}}/{{source_file_part}}.S"
    outputs = [
      gen_file,
    ]
    if (is_ios) {
      ads2gas_script =
          "//third_party/libvpx/source/libvpx/build/make/ads2gas_apple.pl"
    } else {
      ads2gas_script =
          "//third_party/libvpx/source/libvpx/build/make/ads2gas.pl"
    }
    args = [
      "-s",
      rebase_path(ads2gas_script, root_build_dir),
      "-i",
      "{{source}}",
      "-o",
      rebase_path(gen_file),
    ]
  }

  static_library("libvpx_assembly_arm") {
    sources = get_target_outputs(":convert_arm_assembly")
    configs -= [ "//build/config/compiler:compiler_arm_fpu" ]
    configs += [ ":libvpx_config" ]
    configs += [ ":libvpx_warnings" ]
    if (cpu_arch_full == "arm-neon" || cpu_arch_full == "arm-neon-cpu-detect") {
      asmflags = [ "-mfpu=neon" ]

      # allow asm files to include generated sources which match the source
      # tree layout, e.g., vpx_dsp/arm/...
      include_dirs = [ get_label_info("//third_party/libvpx/source/libvpx",
                                      "target_gen_dir") ]
    }
    deps = [
      ":convert_arm_assembly",
    ]
  }
}

static_library("libvpx") {
  if (!is_debug && is_win) {
    configs -= [ "//build/config/compiler:default_optimization" ]
    configs += [ "//build/config/compiler:optimize_max" ]
  }

  if (is_nacl) {
    sources = libvpx_srcs_generic
  } else if (current_cpu == "x86") {
    sources = libvpx_srcs_x86
  } else if (current_cpu == "x64") {
    if (is_msan) {
      sources = libvpx_srcs_generic
    } else {
      sources = libvpx_srcs_x86_64
    }
  } else if (current_cpu == "mipsel" || current_cpu == "mips64el") {
    sources = libvpx_srcs_mips
  } else if (current_cpu == "arm") {
    if (arm_use_neon) {
      sources = libvpx_srcs_arm_neon
    } else if (is_android) {
      sources = libvpx_srcs_arm_neon_cpu_detect
    } else {
      sources = libvpx_srcs_arm
    }
  } else if (current_cpu == "arm64") {
    sources = libvpx_srcs_arm64
  }

  configs += [ ":libvpx_config" ]
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [ "//build/config/compiler:no_chromium_code" ]
  configs += [ ":libvpx_warnings" ]
  deps = []
  if (current_cpu == "x86" || (current_cpu == "x64" && !is_msan)) {
    deps += [
      ":libvpx_intrinsics_avx",
      ":libvpx_intrinsics_avx2",
      ":libvpx_intrinsics_mmx",
      ":libvpx_intrinsics_sse2",
      ":libvpx_intrinsics_sse4_1",
      ":libvpx_intrinsics_ssse3",
      ":libvpx_yasm",
    ]
  }
  if (cpu_arch_full == "arm-neon-cpu-detect") {
    deps += [ ":libvpx_intrinsics_neon" ]
  }
  if (is_android) {
    deps += [ "//third_party/android_tools:cpu_features" ]
  }
  if (current_cpu == "arm" && arm_assembly_sources != []) {
    deps += [ ":libvpx_assembly_arm" ]
  }

  public_configs = [ ":libvpx_external_config" ]
}
