# 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/arm.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 (is_chromeos) {
    # ChromeOS gets highbd vp9 but other arm targets do not.
    cpu_arch_full = "arm-neon-highbd"
  } else 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 {
  if (is_chromeos) {
    cpu_arch_full = "arm64-highbd"
  } else {
    cpu_arch_full = current_cpu
  }
}

if (is_nacl) {
  platform_include_dir = "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 || is_fuchsia) {
    # Should cover linux, fuchsia, mac, and the ios simulator.
    os_category = "linux"
  } else {  # This should only match windows.
    os_category = current_os
  }
  platform_include_dir = "source/config/$os_category/$cpu_arch_full"
}

libvpx_include_dirs = [
  "source/config",
  platform_include_dir,
  "source/libvpx",
]

config("libvpx_config") {
  include_dirs = libvpx_include_dirs

  # 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.
  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",
    ]

    # Fixes a mac / ios simulator link error for vpx_scaled_2d:
    # Undefined symbols for architecture x86_64:
    # "_vpx_scaled_2d", referenced from:
    # _vp9_scale_and_extend_frame_c in libvpx.a(vp9_frame_scale.o)
    # (maybe you meant: _vpx_scaled_2d_ssse3)
    # ld: symbol(s) not found for architecture x86_64
    if (is_mac || (is_ios && (current_cpu == "x86" || current_cpu == "x64"))) {
      cflags += [ "-fno-common" ]
    }
  } 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 = [ "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 = libvpx_include_dirs
  }
}

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 -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    configs += [ ":libvpx_config" ]
    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 -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    configs += [ ":libvpx_config" ]
    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 -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    configs += [ ":libvpx_config" ]
    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 -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    configs += [ ":libvpx_config" ]
    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 -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    configs += [ ":libvpx_config" ]
    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 -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    configs += [ ":libvpx_config" ]
    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
    }
  }

  source_set("libvpx_intrinsics_avx512") {
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    configs += [ ":libvpx_config" ]
    if (is_win) {
      # clang-cl does not accept this flag.
      # https://bugs.chromium.org/p/chromium/issues/detail?id=783370
      cflags = [ "/arch:AVX512" ]
    } else {
      cflags = [
        "-mavx512f",
        "-mavx512cd",
        "-mavx512bw",
        "-mavx512dq",
        "-mavx512vl",
      ]
    }
    if (current_cpu == "x86") {
      sources = libvpx_srcs_x86_avx512
    } else if (current_cpu == "x64") {
      sources = libvpx_srcs_x86_64_avx512
    }
  }
}

if (cpu_arch_full == "arm-neon-cpu-detect") {
  static_library("libvpx_intrinsics_neon") {
    configs -= [ "//build/config/compiler:compiler_arm_fpu" ]
    configs += [ ":libvpx_config" ]
    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-highbd") {
    arm_assembly_sources = libvpx_srcs_arm_neon_highbd_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, root_build_dir),
    ]
  }

  static_library("libvpx_assembly_arm") {
    sources = get_target_outputs(":convert_arm_assembly")
    configs -= [ "//build/config/compiler:compiler_arm_fpu" ]
    configs += [ ":libvpx_config" ]
    if (cpu_arch_full == "arm-neon" || cpu_arch_full == "arm-neon-cpu-detect" ||
        cpu_arch_full == "arm-neon-highbd") {
      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 (is_chromeos) {
      sources = libvpx_srcs_arm_neon_highbd
    } else 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") {
    if (is_chromeos || is_win) {
      sources = libvpx_srcs_arm64_highbd
    } else {
      sources = libvpx_srcs_arm64
    }
  }

  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [ "//build/config/compiler:no_chromium_code" ]
  configs += [ ":libvpx_config" ]
  deps = []
  if (current_cpu == "x86" || (current_cpu == "x64" && !is_msan)) {
    deps += [
      ":libvpx_intrinsics_avx",
      ":libvpx_intrinsics_avx2",
      ":libvpx_intrinsics_avx512",
      ":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" ]
}
