# 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/features.gni")
import("//build/config/ui.gni")
import("//testing/test.gni")
import("//third_party/WebKit/Source/build/scripts/scripts.gni")
import("//third_party/WebKit/Source/config.gni")
import("//third_party/WebKit/Source/platform/platform.gni")
import("//third_party/WebKit/Source/platform/platform_generated.gni")

# Most targets in this file are private actions so use that as the default.
visibility = [ ":*" ]

heap_gypi = exec_script("//build/gypi_to_gn.py",
                        [ rebase_path("heap/blink_heap.gypi") ],
                        "scope",
                        [ "heap/blink_heap.gypi" ])

blink_platform_neon_files = [ "graphics/cpu/arm/WebGLImageConversionNEON.h" ]

blink_platform_sse_files = [ "graphics/cpu/x86/WebGLImageConversionSSE.h" ]

# blink_common in blink_platform.gyp
component("blink_common") {
  visibility = []  # Allow re-assignment of list.
  visibility = [ "//third_party/WebKit/*" ]
  sources = [
    "../web/WebInputEvent.cpp",
    "exported/FilePathConversion.cpp",
    "exported/URLConversion.cpp",
    "exported/WebCString.cpp",
    "exported/WebString.cpp",
    "exported/linux/WebFontRenderStyle.cpp",
  ]
  if (is_android) {
    set_sources_assignment_filter([])
    sources += [ "exported/linux/WebFontRenderStyle.cpp" ]
  }

  defines = [
    "BLINK_COMMON_IMPLEMENTATION=1",
    "INSIDE_BLINK",
  ]

  configs += [
    "//build/config/compiler:wexit_time_destructors",
    "//third_party/WebKit/Source:config",
    "//third_party/WebKit/Source:non_test_config",
  ]

  deps = [
    "//base",
    "//third_party/WebKit/Source/wtf",
    "//url",
  ]

  public_deps = [
    "//skia",
  ]
}

# FontFamilyNames action in make_platform_generated in
# platform_generated.gyp
action("font_family_names") {
  script = "../build/scripts/make_names.py"

  font_family_names_in = "fonts/FontFamilyNames.in"
  inputs = make_names_files + [ font_family_names_in ]

  outputs = [
    "$blink_platform_output_dir/FontFamilyNames.cpp",
    "$blink_platform_output_dir/FontFamilyNames.h",
  ]

  args = [
    rebase_path(font_family_names_in, root_build_dir),
    "--output_dir",
    rebase_path(blink_platform_output_dir, root_build_dir),
  ]
}

# HTTPNames action in make_platform_generated in
# platform_generated.gyp
action("http_names") {
  script = "../build/scripts/make_names.py"

  http_names_in = "network/HTTPNames.in"
  inputs = make_names_files + [ http_names_in ]

  outputs = [
    "$blink_platform_output_dir/HTTPNames.cpp",
    "$blink_platform_output_dir/HTTPNames.h",
  ]

  args = [
    rebase_path(http_names_in, root_build_dir),
    "--output_dir",
    rebase_path(blink_platform_output_dir, root_build_dir),
  ]
}

# RuntimeEnabledFeatures action in make_platform_generated in
# platform_generated.gyp
action("runtime_enabled_features") {
  script = "../build/scripts/make_runtime_features.py"

  runtime_enabled_features_in = "RuntimeEnabledFeatures.in"
  inputs = scripts_for_in_files + [
             runtime_enabled_features_in,
             "../build/scripts/templates/RuntimeEnabledFeatures.cpp.tmpl",
             "../build/scripts/templates/RuntimeEnabledFeatures.h.tmpl",
           ]

  outputs = [
    "$blink_platform_output_dir/RuntimeEnabledFeatures.cpp",
    "$blink_platform_output_dir/RuntimeEnabledFeatures.h",
  ]

  args = [
    rebase_path(runtime_enabled_features_in, root_build_dir),
    "--output_dir",
    rebase_path(blink_platform_output_dir, root_build_dir),
  ]
}

# ColorData action in make_platform_generated in platform_generated.gyp
action("color_data") {
  script = "../build/scripts/gperf.py"

  color_data_gperf = "ColorData.gperf"
  inputs = [
    color_data_gperf,
  ]

  output_file = "$blink_platform_output_dir/ColorData.cpp"
  outputs = [
    output_file,
  ]

  args = [
    gperf_exe,
    "--key-positions=*",
    "-D",
    "-s",
    "2",
    rebase_path(color_data_gperf, root_build_dir),
    "--output-file=" + rebase_path(output_file, root_build_dir),
  ]
}

action("character_data") {
  script = "../build/scripts/gperf.py"
  deps = [
    ":character_data_generator($host_toolchain)",
  ]
  output_file = "$blink_platform_output_dir/CharacterPropertyData.cpp"
  outputs = [
    output_file,
  ]

  # Find character_data_generator, which is generated in a different directory
  # when cross-compile.
  generator = "./" + rebase_path(
                  get_label_info(":character_data_generator($host_toolchain)",
                                 "root_out_dir") + "/character_data_generator",
                  root_build_dir)
  args = [
    generator,
    rebase_path(output_file, root_build_dir),
  ]
}

executable("character_data_generator") {
  sources = [
    "text/CharacterPropertyDataGenerator.cpp",
    "text/CharacterPropertyDataGenerator.h",
  ]
  configs += [ "//third_party/WebKit/Source:config" ]
  deps = [
    "//build/config/sanitizers:deps",

    # Default manifest on Windows (a no-op elsewhere).
    "//build/win:default_exe_manifest",
    "//third_party/icu",
  ]
}

# Inspector protocol

action("inspector_protocol_sources") {
  script = "inspector_protocol/CodeGenerator.py"
  deps = [
    ":inspector_protocol_version",
  ]
  sources = [
    "inspector_protocol/CodeGenerator.py",
    "inspector_protocol/TypeBuilder_cpp.template",
    "inspector_protocol/TypeBuilder_h.template",
  ]
  inputs = [
    "v8_inspector/js_protocol.json",
  ]
  outputs = [
    "$blink_platform_output_dir/v8_inspector/protocol/Console.cpp",
    "$blink_platform_output_dir/v8_inspector/protocol/Console.h",
    "$blink_platform_output_dir/v8_inspector/protocol/Debugger.cpp",
    "$blink_platform_output_dir/v8_inspector/protocol/Debugger.h",
    "$blink_platform_output_dir/v8_inspector/protocol/HeapProfiler.cpp",
    "$blink_platform_output_dir/v8_inspector/protocol/HeapProfiler.h",
    "$blink_platform_output_dir/v8_inspector/protocol/Profiler.cpp",
    "$blink_platform_output_dir/v8_inspector/protocol/Profiler.h",
    "$blink_platform_output_dir/v8_inspector/protocol/Runtime.cpp",
    "$blink_platform_output_dir/v8_inspector/protocol/Runtime.h",
  ]

  args = [
    "--protocol",
    rebase_path("v8_inspector/js_protocol.json", root_build_dir),
    "--string_type",
    "String16",
    "--export_macro",
    "PLATFORM_EXPORT",
    "--output_dir",
    rebase_path(blink_platform_output_dir + "/v8_inspector/protocol",
                root_build_dir),
    "--output_package",
    "platform/v8_inspector/protocol",
  ]
}

action("inspector_protocol_version") {
  script = "inspector_protocol/generate-inspector-protocol-version"

  inputs = [
    "v8_inspector/js_protocol.json",
  ]
  output_file =
      "$blink_platform_output_dir/v8_inspector/protocol/v8inspector.json"
  outputs = [
    output_file,
  ]

  args = [
    "--o",
    rebase_path(output_file, root_build_dir),
    rebase_path("v8_inspector/js_protocol.json", root_build_dir),
  ]
}

action("inspector_injected_script") {
  script = "v8_inspector/build/xxd.py"
  inputs = [
    "v8_inspector/InjectedScriptSource.js",
  ]
  outputs = [
    "$blink_platform_output_dir/v8_inspector/InjectedScriptSource.h",
  ]
  args = [
    "InjectedScriptSource_js",
    rebase_path("v8_inspector/InjectedScriptSource.js", root_build_dir),
    rebase_path(
        "$blink_platform_output_dir/v8_inspector/InjectedScriptSource.h",
        root_build_dir),
  ]
}

action("inspector_debugger_script") {
  script = "v8_inspector/build/xxd.py"
  inputs = [
    "v8_inspector/DebuggerScript.js",
  ]
  outputs = [
    "$blink_platform_output_dir/v8_inspector/DebuggerScript.h",
  ]
  args = [
    "DebuggerScript_js",
    rebase_path("v8_inspector/DebuggerScript.js", root_build_dir),
    rebase_path("$blink_platform_output_dir/v8_inspector/DebuggerScript.h",
                root_build_dir),
  ]
}

# This isn't strictly necessary since we can just add the deps to "platform",
# but it helps to have the targets match the GYP build.
group("make_platform_generated") {
  visibility = []  # Allow re-assignment of list.
  visibility = [ "//third_party/WebKit/Source/*" ]
  public_deps = [
    ":blink_common",
    ":character_data",
    ":color_data",
    ":font_family_names",
    ":http_names",
    ":inspector_debugger_script",
    ":inspector_injected_script",
    ":inspector_protocol_sources",
    ":runtime_enabled_features",
  ]
}

# TODO(brettw) Objective C Renaming postbuild steps on Mac.
# blink_platform target in blink_platform.gyp
component("platform") {
  visibility = []  # Allow re-assignment of list.
  visibility = [
    "//third_party/WebKit/*",
    "//url/mojo:url_mojom_origin_blink_cpp_sources",
    "//url/mojo:url_mojom_gurl_blink_cpp_sources",
  ]
  output_name = "blink_platform"

  sources = platform_files
  sources -= blink_platform_neon_files
  sources -= blink_platform_sse_files

  # Add in the generated files.
  sources += get_target_outputs(":character_data") +
             get_target_outputs(":color_data") +
             get_target_outputs(":font_family_names") +
             get_target_outputs(":http_names") +
             get_target_outputs(":inspector_debugger_script") +
             get_target_outputs(":inspector_injected_script") +
             get_target_outputs(":inspector_protocol_sources") +
             get_target_outputs(":runtime_enabled_features")

  configs += [
    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    "//build/config/compiler:no_size_t_to_int_warning",
    "//third_party/WebKit/Source:config",
    "//third_party/WebKit/Source:non_test_config",
  ]

  defines = [
    "BLINK_PLATFORM_IMPLEMENTATION=1",
    "INSIDE_BLINK",
  ]

  include_dirs = [
    #"$angle_path/include",
    "$root_gen_dir/blink",
  ]

  public_deps = [
    ":make_platform_generated",
    "//base",
    "//cc",
    "//gpu/command_buffer/client:gles2_c_lib",
    "//gpu/command_buffer/client:gles2_interface",
    "//gpu/command_buffer/common:common",
    "//net",
    "//skia",
    "//third_party:jpeg",
    "//third_party/WebKit/Source/wtf",
    "//third_party/iccjpeg",
    "//third_party/libpng",
    "//third_party/libwebp",
    "//third_party/ots",
    "//third_party/qcms",
    "//url",
    "//v8",
  ]
  deps = [
    ":blink_common",
    "//components/link_header_util:link_header_util",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/bindings:wtf_support",
    "//third_party/WebKit/Source/platform/heap",
    "//third_party/WebKit/public:mojo_bindings_blink",
    "//third_party/ced",
    "//third_party/harfbuzz-ng",
    "//third_party/icu",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]

  if (is_mac) {
    sources -= [
      # Uses KillRingMac.mm instead.
      "KillRingNone.cpp",
      "fonts/skia/FontCacheSkia.cpp",
      "scroll/ScrollAnimator.cpp",
      "scroll/ScrollAnimator.h",

      # Uses LocaleMac instead.
      "text/LocaleICU.cpp",
      "text/LocaleICU.h",
    ]

    configs += [ "//third_party/WebKit/Source:mac_precompiled_headers" ]
    libs = [
      "AppKit.framework",
      "Accelerate.framework",
      "Carbon.framework",
      "Foundation.framework",
    ]
  } else {
    sources -= [
      "geometry/cg/FloatPointCG.cpp",
      "geometry/cg/FloatRectCG.cpp",
      "geometry/cg/FloatSizeCG.cpp",
      "geometry/cg/IntPointCG.cpp",
      "geometry/cg/IntRectCG.cpp",
      "geometry/cg/IntSizeCG.cpp",
    ]
  }

  if (is_win) {
    sources -= [
      "clipboard/ClipboardUtilitiesPosix.cpp",

      # Uses LocaleWin instead.
      "text/LocaleICU.cpp",
      "text/LocaleICU.h",
    ]
    cflags = [
      "/wd4334",  # Result of 32-bit shift implicitly converted to 64 bits.
      "/wd4724",  # Modulo by 0.
    ]
  } else {
    sources -= [
      "clipboard/ClipboardUtilitiesWin.cpp",
      "text/LocaleWin.cpp",
    ]
  }

  if (is_android) {
    # Add in some Linux files also shared with Android.
    set_sources_assignment_filter([])
    sources += [
      "fonts/linux/FontPlatformDataLinux.cpp",
      "fonts/linux/FontRenderStyle.cpp",
      "fonts/linux/FontRenderStyle.h",
    ]
    set_sources_assignment_filter(sources_assignment_filter)
  } else {
    sources -= [ "scroll/ScrollbarThemeAndroid.cpp" ]
  }

  if (use_minikin_hyphenation) {
    sources += [
      "text/hyphenation/HyphenationMinikin.cpp",
      "text/hyphenation/HyphenatorAOSP.cpp",
      "text/hyphenation/HyphenatorAOSP.h",
    ]
  }

  if (!use_default_render_theme) {
    sources -= [
      "scroll/ScrollbarThemeAura.cpp",
      "scroll/ScrollbarThemeAura.h",
    ]
  }

  if (current_cpu == "arm") {
    deps += [ ":blink_arm_neon" ]
  }

  if (current_cpu == "x86" || current_cpu == "x64") {
    deps += [ ":blink_x86_sse" ]
  }

  if (use_webaudio_ffmpeg) {
    include_dirs += [ "//third_party/ffmpeg" ]
    deps += [ "//third_party/ffmpeg" ]
  }
  if (use_openmax_dl_fft) {
    include_dirs += [ "//third_party/openmax_dl" ]
    deps += [ "//third_party/openmax_dl/dl" ]
  }

  if (remove_webcore_debug_symbols) {
    configs -= [ "//build/config/compiler:default_symbols" ]
    configs += [ "//build/config/compiler:no_symbols" ]
  }
}

static_library("test_support") {
  sources = platform_test_support_files
  visibility += [ "//third_party/WebKit/*" ]
  testonly = true

  configs += [
    "//third_party/WebKit/Source:config",
    "//third_party/WebKit/Source:inside_blink",
    "//third_party/WebKit/Source:non_test_config",
  ]

  public_deps = [
    ":platform",
    "//cc",
    "//cc:test_support",
    "//cc/blink",
    "//testing/gmock",
    "//testing/gtest:gtest",
  ]

  deps = [
    "//base/test:test_support",
    "//mojo/edk/system",
    "//third_party/qcms",
  ]

  if (is_win) {
    cflags = [ "/wd4267" ]  # Truncation from size_t to int.
  }
}

# GYP: blink_heap_unittests
test("blink_heap_unittests") {
  visibility = []  # Allow re-assignment of list.
  visibility = [ "*" ]

  sources = rebase_path(heap_gypi.platform_heap_test_files, ".", "heap")
  sources += [ "heap/RunAllTests.cpp" ]

  configs += [
    "//third_party/WebKit/Source/wtf:wtf_config",
    "//third_party/WebKit/Source:config",
  ]

  defines = [ "INSIDE_BLINK" ]

  deps = [
    ":platform",
    ":test_support",
    "//base",
    "//base/test:test_support",
    "//content/test:test_support",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/WebKit/Source/wtf",
  ]
  if (is_android) {
    deps += [
      "//base:base_java",
      "//content/shell/android:content_shell_assets",
      "//net/android:net_java",
    ]
  }
}

test("blink_platform_unittests") {
  visibility = []  # Allow re-assignment of list.
  visibility = [ "*" ]

  sources = platform_test_files

  if (is_win) {
    sources += [ "text/LocaleWinTest.cpp" ]
  } else if (is_mac) {
    sources += [ "text/LocaleMacTest.cpp" ]
  } else if (is_posix) {
    sources += [ "text/LocaleICUTest.cpp" ]
  }

  if (!is_mac) {
    sources += [ "scroll/ScrollAnimatorTest.cpp" ]
  }

  if (use_default_render_theme) {
    sources += [ "scroll/ScrollbarThemeAuraTest.cpp" ]
  }

  sources += [ "testing/RunAllTests.cpp" ]

  configs += [
    "//third_party/WebKit/Source/wtf:wtf_config",
    "//third_party/WebKit/Source:config",
  ]

  deps = [
    ":blink_common",
    ":platform",
    ":test_support",
    "//base",
    "//base/test:test_support",
    "//cc",
    "//cc:test_support",
    "//cc/blink",
    "//mojo/edk/embedder:headers",
    "//mojo/edk/test:test_support",
    "//mojo/public/cpp/bindings/tests:for_blink_tests",
    "//skia",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/WebKit/Source/wtf",
    "//third_party/harfbuzz-ng",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//url",
    "//url/mojo:test_url_mojom_gurl_blink",
  ]

  data_deps = [
    ":blink_platform_unittests_data",
  ]

  defines = [ "INSIDE_BLINK" ]

  include_dirs = [ "$root_gen_dir/blink" ]
}

group("blink_platform_unittests_data") {
  data = [
    "testing/data/",

    # Required by some image decoder tests.
    "image-decoders/testing/",
    "../../LayoutTests/fast/images/resources/",
  ]
}

if (current_cpu == "arm") {
  source_set("blink_arm_neon") {
    sources = blink_platform_neon_files

    # The *NEON.cpp files fail to compile when -mthumb is passed. Force
    # them to build in ARM mode.
    # See https://bugs.webkit.org/show_bug.cgi?id=62916.
    # TODO(GYP)
    #'cflags': ['-marm'],
    #    'conditions': [
    #      ['OS=="android"', {
    #        'cflags!': ['-mthumb'],
    #      }],
    #    ],

    deps = [
      ":blink_common",
    ]
  }
}

if (current_cpu == "x86" || current_cpu == "x64") {
  source_set("blink_x86_sse") {
    sources = blink_platform_sse_files
    deps = [
      ":blink_common",
    ]
  }
}
