# 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 = "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 = "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-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" ]
    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 -= [ "//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" ]
}
