# Copyright 2017 The Fuchsia Authors. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
#    * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#    * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following disclaimer
# in the documentation and/or other materials provided with the
# distribution.
#    * Neither the name of Google Inc. nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

import("JavaScriptCore.gni")
import("JavaScriptCoreDerivedSources.gni")
import("JavaScriptCore_inspectorDerivedSources.gni")
import("MiniBrowser.gni")
import("WebCore.gni")
import("WebCoreDerivedSources.gni")
import("WebKit.gni")
import("wtf.gni")

config("webkit_config") {
  include_dirs = [ "Source/WebKit/fuchsia" ]
}

shared_library("webkit") {
  deps = [
    ":WebKit_source_set",
  ]
  public_configs = [ ":webkit_config" ]
}

config("features") {
  # Target configuration - what OS we are building for, what libraries we use.
  defines = [
    "OS_FUCHSIA=1",
    "USE_CAIRO=1",
    "USE_CURL=1",
    "USE_HARFBUZZ=1",
    "BUILDING_WITH_CMAKE",  # A lie, but we are using cmakeconfig.h
  ]

  # Features of our build.
  defines += [
    "HAVE_ACCESSIBILITY=1",
    "HAVE_CONFIG_H=1",
    "HAVE_FEATURES_H=1",

    #"NDEBUG",
  ]

  # Where we put cmakeconfig.h
  include_dirs = [ "Source/config" ]
}

config("flags") {
  cflags = [
    "-fno-sanitize=safe-stack",
    # TODO(phosek): This is consistent with how we were building WebKit before
    # the default flags changed. However, it is likely that using
    # stack-protector-strong is just fine. We should drop -fno-stack-protector
    # here after it's been thoroughly tested.
    "-fno-stack-protector",
    "-Wall",
    "-Wcast-align",
    "-Wextra",
    "-Wformat-security",
    "-Wmissing-format-attribute",
    "-Wno-deprecated-register",
    "-Wno-expansion-to-defined",
    "-Wno-format",
    "-Wno-max-unsigned-zero",
    "-Wno-null-pointer-arithmetic",
    "-Wno-parentheses-equality",
    "-Wno-pessimizing-move",
    "-Wno-tautological-compare",
    "-Wno-unused-function",
    "-Wno-unused-label",
    "-Wno-unused-lambda-capture",
    "-Wno-unused-parameter",
    "-Wno-unused-private-field",
    "-Wno-unused-variable",
    "-Wpointer-arith",
    "-Wundef",
    "-Wwrite-strings",
  ]
}

source_set("WebKit_source_set") {
  sources = WebKit_sources

  deps = [
    ":JavaScriptCore",
    ":WebCore",
    ":wtf",
    "//zircon/public/lib/hid",
  ]

  configs += [
    ":features",
    ":flags",
  ]
  configs -= [
    "//build/config:symbol_visibility_hidden",
  ]

  defines = [ "BUILDING_WebKit" ]

  include_dirs = [
    ".",
    "DerivedSources",
    "DerivedSources/ForwardingHeaders",
    "DerivedSources/ForwardingHeaders/JavaScriptCore",
    "DerivedSources/ForwardingHeaders/WebCore",
    "DerivedSources/ForwardingHeaders/WebKitLegacy",
    "DerivedSources/JavaScriptCore",
    "DerivedSources/WebCore",
    "DerivedSources/WebKitLegacy",
    "Source",
    "Source/WebKit/Storage",
    "Source/WebKit/WebCoreSupport",
    "Source/WebKit/fuchsia",
    "Source/WebKit/fuchsia/WebCoreSupport",
  ]
  cflags = [ "-includeWebKitPrefix.h" ]
}

config("WebCore_config") {
  include_dirs = [
    ".",
    "DerivedSources",
    "DerivedSources/WebCore",
    "Source/ThirdParty/ANGLE",
    "Source/ThirdParty/ANGLE/include/KHR",
    "Source/WebCore/Modules/airplay",
    "Source/WebCore/Modules/applepay",
    "Source/WebCore/Modules/battery",
    "Source/WebCore/Modules/encryptedmedia",
    "Source/WebCore/Modules/fetch",
    "Source/WebCore/Modules/geolocation",
    "Source/WebCore/Modules/indexeddb",
    "Source/WebCore/Modules/indexeddb/client",
    "Source/WebCore/Modules/indexeddb/server",
    "Source/WebCore/Modules/indexeddb/shared",
    "Source/WebCore/Modules/indieui",
    "Source/WebCore/Modules/mediacontrols",
    "Source/WebCore/Modules/mediasession",
    "Source/WebCore/Modules/mediasource",
    "Source/WebCore/Modules/mediastream",
    "Source/WebCore/Modules/navigatorcontentutils",
    "Source/WebCore/Modules/notifications",
    "Source/WebCore/Modules/plugins",
    "Source/WebCore/Modules/proximity",
    "Source/WebCore/Modules/quota",
    "Source/WebCore/Modules/speech",
    "Source/WebCore/Modules/streams",
    "Source/WebCore/Modules/vibration",
    "Source/WebCore/Modules/webaudio",
    "Source/WebCore/Modules/webdatabase",
    "Source/WebCore/Modules/websockets",
    "Source/WebCore/accessibility",
    "Source/WebCore/animation",
    "Source/WebCore/bindings",
    "Source/WebCore/bindings/generic",
    "Source/WebCore/bindings/js",
    "Source/WebCore/bridge",
    "Source/WebCore/bridge/c",
    "Source/WebCore/bridge/jsc",
    "Source/WebCore/contentextensions",
    "Source/WebCore/crypto",
    "Source/WebCore/crypto/algorithms",
    "Source/WebCore/crypto/keys",
    "Source/WebCore/crypto/parameters",
    "Source/WebCore/css",
    "Source/WebCore/css/parser",
    "Source/WebCore/cssjit",
    "Source/WebCore/dom",
    "Source/WebCore/dom/default",
    "Source/WebCore/editing",
    "Source/WebCore/fileapi",
    "Source/WebCore/history",
    "Source/WebCore/html",
    "Source/WebCore/html/canvas",
    "Source/WebCore/html/forms",
    "Source/WebCore/html/parser",
    "Source/WebCore/html/shadow",
    "Source/WebCore/html/track",
    "Source/WebCore/inspector",
    "Source/WebCore/loader",
    "Source/WebCore/loader/appcache",
    "Source/WebCore/loader/archive",
    "Source/WebCore/loader/archive/mhtml",
    "Source/WebCore/loader/cache",
    "Source/WebCore/loader/icon",
    "Source/WebCore/mathml",
    "Source/WebCore/page",
    "Source/WebCore/page/animation",
    "Source/WebCore/page/csp",
    "Source/WebCore/page/scrolling",
    "Source/WebCore/platform",
    "Source/WebCore/platform/animation",
    "Source/WebCore/platform/audio",
    "Source/WebCore/platform/cairo",
    "Source/WebCore/platform/crypto",
    "Source/WebCore/platform/gamepad",
    "Source/WebCore/platform/gamepad/deprecated",
    "Source/WebCore/platform/gamepad/linux",
    "Source/WebCore/platform/graphics",
    "Source/WebCore/platform/graphics/cairo",
    "Source/WebCore/platform/graphics/cpu/arm",
    "Source/WebCore/platform/graphics/cpu/arm/filters",
    "Source/WebCore/platform/graphics/displaylists",
    "Source/WebCore/platform/graphics/filters",
    "Source/WebCore/platform/graphics/freetype",
    "Source/WebCore/platform/graphics/harfbuzz",
    "Source/WebCore/platform/graphics/harfbuzz/ng",
    "Source/WebCore/platform/graphics/opengl",
    "Source/WebCore/platform/graphics/opentype",
    "Source/WebCore/platform/graphics/transforms",
    "Source/WebCore/platform/image-decoders",
    "Source/WebCore/platform/image-decoders/bmp",
    "Source/WebCore/platform/image-decoders/gif",
    "Source/WebCore/platform/image-decoders/ico",
    "Source/WebCore/platform/image-decoders/jpeg",
    "Source/WebCore/platform/image-decoders/png",
    "Source/WebCore/platform/image-decoders/webp",
    "Source/WebCore/platform/mediastream",
    "Source/WebCore/platform/mock",
    "Source/WebCore/platform/mock/mediasource",
    "Source/WebCore/platform/network",
    "Source/WebCore/platform/network/curl",
    "Source/WebCore/platform/sql",
    "Source/WebCore/platform/text",
    "Source/WebCore/platform/text/icu",
    "Source/WebCore/plugins",
    "Source/WebCore/rendering",
    "Source/WebCore/rendering/line",
    "Source/WebCore/rendering/mathml",
    "Source/WebCore/rendering/shapes",
    "Source/WebCore/rendering/style",
    "Source/WebCore/rendering/svg",
    "Source/WebCore/replay",
    "Source/WebCore/storage",
    "Source/WebCore/style",
    "Source/WebCore/svg",
    "Source/WebCore/svg/animation",
    "Source/WebCore/svg/graphics",
    "Source/WebCore/svg/graphics/filters",
    "Source/WebCore/svg/properties",
    "Source/WebCore/testing",
    "Source/WebCore/websockets",
    "Source/WebCore/workers",
    "Source/WebCore/xml",
    "Source/WebCore/xml/parser",
    "Source/WebCore",
  ]
  defines = []
}

source_set("WebCore") {
  sources = WebCore_sources + WebCoreDerivedSources_sources

  public_deps = [
    ":JavaScriptCore",
    ":wtf",
    "//third_party/boringssl",
    "//third_party/cairo",
    "//third_party/curl:libcurl",
    "//third_party/freetype2",
    "//third_party/harfbuzz",
    "//third_party/icu:icui18n",
    "//third_party/icu:icuuc",
    "//third_party/libjpeg-turbo:libjpeg",
    "//third_party/libpng",
    "//third_party/libxml2",
    "//third_party/sqlite",
    "//third_party/zlib",
  ]

  public_configs = [ ":WebCore_config" ]

  configs += [
    ":features",
    ":flags",
  ]
}

config("JavaScriptCore_config") {
  include_dirs = [
    "Source/JavaScriptCore",
    "Source/JavaScriptCore/..",
    "Source/JavaScriptCore/API",
    "Source/JavaScriptCore/ForwardingHeaders",
    "Source/JavaScriptCore/assembler",
    "Source/JavaScriptCore/b3",
    "Source/JavaScriptCore/b3/air",
    "Source/JavaScriptCore/bindings",
    "Source/JavaScriptCore/builtins",
    "Source/JavaScriptCore/bytecode",
    "Source/JavaScriptCore/bytecompiler",
    "Source/JavaScriptCore/dfg",
    "Source/JavaScriptCore/disassembler",
    "Source/JavaScriptCore/disassembler/udis86",
    "Source/JavaScriptCore/ftl",
    "Source/JavaScriptCore/heap",
    "Source/JavaScriptCore/debugger",
    "Source/JavaScriptCore/inspector",
    "Source/JavaScriptCore/inspector/agents",
    "Source/JavaScriptCore/inspector/augmentable",
    "Source/JavaScriptCore/inspector/remote",
    "Source/JavaScriptCore/interpreter",
    "Source/JavaScriptCore/jit",
    "Source/JavaScriptCore/llint",
    "Source/JavaScriptCore/parser",
    "Source/JavaScriptCore/profiler",
    "Source/JavaScriptCore/replay",
    "Source/JavaScriptCore/runtime",
    "Source/JavaScriptCore/tools",
    "Source/JavaScriptCore/wasm",
    "Source/JavaScriptCore/yarr",
    "DerivedSources/JavaScriptCore",
    "DerivedSources/JavaScriptCore/inspector",
    "DerivedSources/ForwardingHeaders",
  ]
  if (is_debug) {
    include_dirs += [ "DerivedSources/JavaScriptCore/Debug" ]
  } else {
    include_dirs += [ "DerivedSources/JavaScriptCore/Release" ]
  }
}

source_set("JavaScriptCore") {
  sources = JavaScriptCore_sources + JavaScriptCoreDerivedSources_sources +
            JavaScriptCore_inspectorDerivedSources_sources

  public_configs = [ ":JavaScriptCore_config" ]
  configs += [
    ":features",
    ":flags",
  ]

  public_deps = [
    ":wtf",
  ]

  defines = [
    "BUILDING_JavaScriptCore",
    "STATICALLY_LINKED_WITH_WTF",
  ]
}

config("wtf_config") {
  include_dirs = [ "Source/WTF" ]
}

config("wtf_private_config") {
  # WTF has Source/WTF/wtf/unicode/UTF8.h and Source/WTF/wtf on the include
  # path. The ICU library, which WTF depends on, has <unicode/utf8.h> in its
  # include path. This means on case-insensitive filesystems, #includes for
  # <unicode/utf8.h> will match Soruce/WTF/wtf/unicode/UTF8.h, which will
  # internally include ICU's <unicode/utf8.h>.

  # To get around all this, we manually add ICU's include path to our
  # include_dirs before adding the WTF headers so includes for
  # <unicode/utf8.h> match ICU regardless of the case sensitivity of the
  # filesystem. As it turns out, all of the includes of UTF8.h (uppercase) are
  # written <wtf/unicode/UTF8.h> so they will unambiguously resolve to
  # Source/WTF/wtf/unicode/UTF8.h even with this include path first.
  include_dirs = [ "//third_party/icu/source/common" ]

  include_dirs += [
    "Source/WTF/wtf",
    "Source/WTF/wtf/dtoa",
    "Source/WTF/wtf/text",
    "Source/WTF/wtf/text/icu",
    "Source/WTF/wtf/threads",
    "Source/WTF/wtf/unicode",
  ]
}

source_set("wtf") {
  sources = wtf_sources

  public_configs = [ ":wtf_config" ]
  public_deps = [
    "//third_party/icu:icui18n",
    "//third_party/icu:icuuc",
  ]
  configs += [
    ":features",
    ":flags",
    ":wtf_private_config",
  ]

  defines = [ "BUILDING_WTF" ]
}
