# Copyright (c) 2013 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/allocator.gni")
import("//build/config/chrome_build.gni")
import("//build/config/crypto.gni")
import("//build/config/features.gni")
import("//build/config/ui.gni")
import("//build/module_args/v8.gni")

declare_args() {
  # When set, turns off the (normally-on) iterator debugging and related stuff
  # that is normally turned on for Debug builds. These are generally useful for
  # catching bugs but in some cases may cause conflicts or excessive slowness.
  disable_iterator_debugging = false

  # Set to true to not store any build metadata, e.g. ifdef out all __DATE__
  # and __TIME__. Set to 0 to reenable the use of these macros in the code
  # base. See http://crbug.com/314403.
  #
  # Continue to embed build meta data in Official builds, basically the
  # time it was built.
  # TODO(maruel): This decision should be revisited because having an
  # official deterministic build has high value too but MSVC toolset can't
  # generate anything deterministic with WPO enabled AFAIK.
  dont_embed_build_metadata = !is_official_build

  # Set to true to enable dcheck in Release builds.
  dcheck_always_on = false

  # Set to true to compile with the OpenGL ES 2.0 conformance tests.
  internal_gles2_conform_tests = false
}

# TODO(brettw) Most of these should be removed. Instead of global feature
# flags, we should have more modular flags that apply only to a target and its
# dependents. For example, depending on the "x11" meta-target should define
# USE_X11 for all dependents so that everything that could use X11 gets the
# define, but anything that doesn't depend on X11 doesn't see it.
#
# For now we define these globally to match the current GYP build.
config("feature_flags") {
  # TODO(brettw) this probably needs to be parameterized.
  defines = [ "V8_DEPRECATION_WARNINGS" ]  # Don't use deprecated V8 APIs anywhere.

  if (cld_version > 0) {
    defines += [ "CLD_VERSION=$cld_version" ]
  }
  if (enable_mdns) {
    defines += [ "ENABLE_MDNS=1" ]
  }
  if (enable_notifications) {
    defines += [ "ENABLE_NOTIFICATIONS" ]
  }
  if (enable_pepper_cdms) {
    # TODO(brettw) should probably be "=1"
    defines += [ "ENABLE_PEPPER_CDMS" ]
  }
  if (enable_browser_cdms) {
    # TODO(brettw) should probably be "=1"
    defines += [ "ENABLE_BROWSER_CDMS" ]
  }
  if (enable_plugins) {
    defines += [ "ENABLE_PLUGINS=1" ]
  }
  if (enable_basic_printing || enable_print_preview) {
    # Convenience define for ENABLE_BASIC_PRINTING || ENABLE_PRINT_PREVIEW.
    defines += [ "ENABLE_PRINTING=1" ]
    if (enable_basic_printing) {
      # Enable basic printing support and UI.
      defines += [ "ENABLE_BASIC_PRINTING=1" ]
    }
    if (enable_print_preview) {
      # Enable printing with print preview.
      # Can be defined without ENABLE_BASIC_PRINTING.
      defines += [ "ENABLE_PRINT_PREVIEW=1" ]
    }
  }
  if (enable_spellcheck) {
    defines += [ "ENABLE_SPELLCHECK=1" ]
  }
  if (dont_embed_build_metadata) {
    defines += [ "DONT_EMBED_BUILD_METADATA" ]
  }
  if (dcheck_always_on) {
    defines += [ "DCHECK_ALWAYS_ON=1" ]
  }
  if (use_udev) {
    # TODO(brettw) should probably be "=1".
    defines += [ "USE_UDEV" ]
  }
  if (toolkit_views) {
    defines += [ "TOOLKIT_VIEWS=1" ]
  }
  if (ui_compositor_image_transport) {
    # TODO(brettw) should probably be "=1".
    defines += [ "UI_COMPOSITOR_IMAGE_TRANSPORT" ]
  }
  if (use_ash) {
    defines += [ "USE_ASH=1" ]
  }
  if (use_aura) {
    defines += [ "USE_AURA=1" ]
  }
  if (use_pango) {
    defines += [ "USE_PANGO=1" ]
  }
  if (use_cairo) {
    defines += [ "USE_CAIRO=1" ]
  }
  if (use_clipboard_aurax11) {
    defines += [ "USE_CLIPBOARD_AURAX11=1" ]
  }
  if (use_default_render_theme) {
    defines += [ "USE_DEFAULT_RENDER_THEME=1" ]
  }
  if (use_glib) {
    defines += [ "USE_GLIB=1" ]
  }
  if (use_openssl) {
    defines += [ "USE_OPENSSL=1" ]
  }
  if (use_openssl_certs) {
    defines += [ "USE_OPENSSL_CERTS=1" ]
  }
  if (use_nss_certs) {
    defines += [ "USE_NSS_CERTS=1" ]
  }
  if (use_ozone) {
    defines += [ "USE_OZONE=1" ]
  }
  if (use_x11) {
    defines += [ "USE_X11=1" ]
  }
  if (use_allocator != "tcmalloc") {
    defines += [ "NO_TCMALLOC" ]
  }
  if (is_asan || is_lsan || is_tsan || is_msan) {
    defines += [
      "MEMORY_TOOL_REPLACES_ALLOCATOR",
      "MEMORY_SANITIZER_INITIAL_SIZE",
    ]
  }
  if (is_asan) {
    defines += [ "ADDRESS_SANITIZER" ]
  }
  if (is_lsan) {
    defines += [
      "LEAK_SANITIZER",
      "WTF_USE_LEAK_SANITIZER=1",
    ]
  }
  if (is_tsan) {
    defines += [
      "THREAD_SANITIZER",
      "DYNAMIC_ANNOTATIONS_EXTERNAL_IMPL=1",
      "WTF_USE_DYNAMIC_ANNOTATIONS_NOIMPL=1",
    ]
  }
  if (is_msan) {
    defines += [ "MEMORY_SANITIZER" ]
  }
  if (enable_webrtc) {
    defines += [ "ENABLE_WEBRTC=1" ]
  }
  if (disable_ftp_support) {
    defines += [ "DISABLE_FTP_SUPPORT=1" ]
  }
  if (!enable_nacl) {
    defines += [ "DISABLE_NACL" ]
  }
  if (enable_extensions) {
    defines += [ "ENABLE_EXTENSIONS=1" ]
  }
  if (enable_configuration_policy) {
    defines += [ "ENABLE_CONFIGURATION_POLICY" ]
  }
  if (enable_task_manager) {
    defines += [ "ENABLE_TASK_MANAGER=1" ]
  }
  if (enable_themes) {
    defines += [ "ENABLE_THEMES=1" ]
  }
  if (enable_captive_portal_detection) {
    defines += [ "ENABLE_CAPTIVE_PORTAL_DETECTION=1" ]
  }
  if (enable_session_service) {
    defines += [ "ENABLE_SESSION_SERVICE=1" ]
  }
  if (enable_rlz) {
    defines += [ "ENABLE_RLZ" ]
  }
  if (enable_plugin_installation) {
    defines += [ "ENABLE_PLUGIN_INSTALLATION=1" ]
  }
  if (enable_app_list) {
    defines += [ "ENABLE_APP_LIST=1" ]
  }
  if (enable_settings_app) {
    defines += [ "ENABLE_SETTINGS_APP=1" ]
  }
  if (enable_supervised_users) {
    defines += [ "ENABLE_SUPERVISED_USERS=1" ]
  }
  if (enable_service_discovery) {
    defines += [ "ENABLE_SERVICE_DISCOVERY=1" ]
  }
  if (enable_autofill_dialog) {
    defines += [ "ENABLE_AUTOFILL_DIALOG=1" ]
  }
  if (enable_wifi_bootstrapping) {
    defines += [ "ENABLE_WIFI_BOOTSTRAPPING=1" ]
  }
  if (enable_image_loader_extension) {
    defines += [ "IMAGE_LOADER_EXTENSION=1" ]
  }
  if (enable_remoting) {
    defines += [ "ENABLE_REMOTING=1" ]
  }
  if (enable_google_now) {
    defines += [ "ENABLE_GOOGLE_NOW=1" ]
  }
  if (enable_one_click_signin) {
    defines += [ "ENABLE_ONE_CLICK_SIGNIN" ]
  }
  if (enable_hidpi) {
    defines += [ "ENABLE_HIDPI=1" ]
  }
  if (enable_topchrome_md) {
    defines += [ "ENABLE_TOPCHRME_MD=1" ]
  }
  if (proprietary_codecs) {
    defines += [ "USE_PROPRIETARY_CODECS" ]
  }
  if (enable_hangout_services_extension) {
    defines += [ "ENABLE_HANGOUT_SERVICES_EXTENSION=1" ]
  }
  if (v8_use_external_startup_data) {
    defines += [ "V8_USE_EXTERNAL_STARTUP_DATA" ]
  }
  if (enable_background) {
    defines += [ "ENABLE_BACKGROUND=1" ]
  }
  if (enable_pre_sync_backup) {
    defines += [ "ENABLE_PRE_SYNC_BACKUP" ]
  }
  if (enable_video_hole) {
    defines += [ "VIDEO_HOLE=1" ]
  }
  if (safe_browsing_mode == 1) {
    defines += [ "FULL_SAFE_BROWSING" ]
    defines += [ "SAFE_BROWSING_CSD" ]
    defines += [ "SAFE_BROWSING_DB_LOCAL" ]
    defines += [ "SAFE_BROWSING_SERVICE" ]
  } else if (safe_browsing_mode == 2) {
    defines += [ "MOBILE_SAFE_BROWSING" ]
    defines += [ "SAFE_BROWSING_SERVICE" ]
  } else if (safe_browsing_mode == 3) {
    defines += [ "MOBILE_SAFE_BROWSING" ]
    defines += [ "SAFE_BROWSING_DB_REMOTE" ]
    defines += [ "SAFE_BROWSING_SERVICE" ]
  }
  if (is_official_build) {
    defines += [ "OFFICIAL_BUILD" ]
  }
  if (is_chrome_branded) {
    defines += [ "GOOGLE_CHROME_BUILD" ]
  } else {
    defines += [ "CHROMIUM_BUILD" ]
  }
  if (enable_media_router) {
    defines += [ "ENABLE_MEDIA_ROUTER=1" ]
  }
}

# Debug/release ----------------------------------------------------------------

config("debug") {
  defines = [
    "_DEBUG",
    "DYNAMIC_ANNOTATIONS_ENABLED=1",
    "WTF_USE_DYNAMIC_ANNOTATIONS=1",
  ]

  if (is_nacl) {
    defines += [ "DYNAMIC_ANNOTATIONS_PREFIX=NACL_" ]
  }

  if (is_win) {
    if (disable_iterator_debugging) {
      # Iterator debugging is enabled by the compiler on debug builds, and we
      # have to tell it to turn it off.
      defines += [ "_HAS_ITERATOR_DEBUGGING=0" ]
    }
  } else if (is_linux && !is_android && current_cpu == "x64" &&
             !disable_iterator_debugging) {
    # Enable libstdc++ debugging facilities to help catch problems early, see
    # http://crbug.com/65151 .
    # TODO(phajdan.jr): Should we enable this for all of POSIX?
    defines += [ "_GLIBCXX_DEBUG=1" ]
  }
}

config("release") {
  defines = [ "NDEBUG" ]

  # Sanitizers.
  # TODO(GYP) The GYP build has "release_valgrind_build == 0" for this
  # condition. When Valgrind is set up, we need to do the same here.
  if (is_tsan) {
    defines += [
      "DYNAMIC_ANNOTATIONS_ENABLED=1",
      "WTF_USE_DYNAMIC_ANNOTATIONS=1",
    ]
  } else {
    defines += [ "NVALGRIND" ]
    if (!is_nacl) {
      # NaCl always enables dynamic annotations. Currently this value is set to
      # 1 for all .nexes.
      defines += [ "DYNAMIC_ANNOTATIONS_ENABLED=0" ]
    }
  }
}

# Default libraries ------------------------------------------------------------

# This config defines the default libraries applied to all targets.
config("default_libs") {
  if (is_win) {
    # TODO(brettw) this list of defaults should probably be smaller, and
    # instead the targets that use the less common ones (e.g. wininet or
    # winspool) should include those explicitly.
    libs = [
      "advapi32.lib",
      "comdlg32.lib",
      "dbghelp.lib",
      "delayimp.lib",
      "dnsapi.lib",
      "gdi32.lib",
      "kernel32.lib",
      "msimg32.lib",
      "odbc32.lib",
      "odbccp32.lib",
      "ole32.lib",
      "oleaut32.lib",
      "psapi.lib",
      "shell32.lib",
      "shlwapi.lib",
      "user32.lib",
      "usp10.lib",
      "uuid.lib",
      "version.lib",
      "wininet.lib",
      "winmm.lib",
      "winspool.lib",
      "ws2_32.lib",

      # Please don't add more stuff here. We should actually be making this
      # list smaller, since all common things should be covered. If you need
      # some extra libraries, please just add a libs = [ "foo.lib" ] to your
      # target that needs it.
    ]
  } else if (is_android) {
    # Android uses -nostdlib so we need to add even libc here.
    libs = [
      # TODO(brettw) write a version of this, hopefully we can express this
      # without forking out to GCC just to get the library name. The android
      # toolchain directory should probably be extracted into a .gni file that
      # this file and the android toolchain .gn file can share.
      #   # Manually link the libgcc.a that the cross compiler uses.
      #   '<!(<(android_toolchain)/*-gcc -print-libgcc-file-name)',
      "c",
      "dl",
      "m",
    ]
  } else if (is_mac) {
    libs = [
      "AppKit.framework",
      "ApplicationServices.framework",
      "Carbon.framework",
      "CoreFoundation.framework",
      "Foundation.framework",
      "IOKit.framework",
      "Security.framework",
    ]
  } else if (is_ios) {
    libs = [
      "CoreFoundation.framework",
      "CoreGraphics.framework",
      "CoreText.framework",
      "Foundation.framework",
      "UIKit.framework",
    ]
  } else if (is_linux) {
    libs = [ "dl" ]
  }
}
