# Copyright 2016 Google Inc.
#
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

declare_args() {
  extra_asmflags = []
  extra_cflags = []
  extra_cflags_c = []
  extra_cflags_cc = []
  extra_ldflags = []

  malloc = ""
}

is_clang = is_android || is_ios || is_mac || (cc == "clang" && cxx == "clang++")
if (!is_clang && !is_win) {
  is_clang = exec_script("is_clang.py",
                         [
                           cc,
                           cxx,
                         ],
                         "value")
}

if (is_ios) {
  if (is_tvos) {
    sdk = "appletvos"
    if (target_cpu == "x86" || target_cpu == "x64") {
      sdk = "appletvsimulator"
    }
  } else {
    sdk = "iphoneos"
    if (target_cpu == "x86" || target_cpu == "x64") {
      sdk = "iphonesimulator"
    }
  }
  ios_sysroot = exec_script("find_ios_sysroot.py", [ sdk ], "trim string")
}

config("default") {
  asmflags = []
  cflags = []
  cflags_c = []
  cflags_cc = []
  defines = []
  ldflags = []
  libs = []

  if (is_win) {
    cflags += [
      "/FS",  # Preserve previous PDB behavior.
      "/bigobj",  # Some of our files are bigger than the regular limits.
      "/WX",  # Treat warnings as errors.
      "/utf-8",  # Set Source and Executable character sets to UTF-8.
    ]
    defines += [
      "_CRT_SECURE_NO_WARNINGS",  # Disables warnings about sscanf().
      "_HAS_EXCEPTIONS=0",  # Disables exceptions in MSVC STL.
      "WIN32_LEAN_AND_MEAN",
      "NOMINMAX",
    ]
    include_dirs = [
      #2017
      "$windk/VC/Tools/MSVC/14.10.25017/include",

      #2015
      "$windk/VC/include",

      # For local builds.
      # 2017
      "$windk/../../../Windows Kits/10/Include/10.0.14393.0/shared",
      "$windk/../../../Windows Kits/10/Include/10.0.14393.0/ucrt",
      "$windk/../../../Windows Kits/10/Include/10.0.14393.0/um",
      "$windk/../../../Windows Kits/10/Include/10.0.14393.0/winrt",

      # 2015
      "$windk/../Windows Kits/8.1/Include/shared",
      "$windk/../Windows Kits/10/Include/10.0.10150.0/ucrt",
      "$windk/../Windows Kits/8.1/Include/um",
      "$windk/../Windows Kits/8.1/Include/winrt",

      # For builds using win_toolchain asset.
      "$windk/win_sdk/Include/10.0.14393.0/shared",
      "$windk/win_sdk/Include/10.0.14393.0/ucrt",
      "$windk/win_sdk/Include/10.0.14393.0/um",
      "$windk/win_sdk/Include/10.0.14393.0/winrt",
    ]
    lib_dirs = [
      # For local builds.
      # 2017
      "$windk/../../../Windows Kits/10/Lib/10.0.14393.0/ucrt/$target_cpu",
      "$windk/../../../Windows Kits/10/Lib/10.0.14393.0/um/$target_cpu",

      #2015
      "$windk/../Windows Kits/10/Lib/10.0.10150.0/ucrt/$target_cpu",
      "$windk/../Windows Kits/8.1/Lib/winv6.3/um/$target_cpu",

      # For builds using win_toolchain asset.
      "$windk/win_sdk/Lib/10.0.14393.0/ucrt/$target_cpu",
      "$windk/win_sdk/Lib/10.0.14393.0/um/$target_cpu",
    ]

    #2017
    lib_dirs += [ "$windk/VC/Tools/MSVC/14.10.25017/lib/$target_cpu" ]

    #2015
    if (target_cpu == "x86") {
      lib_dirs += [ "$windk/VC/lib" ]
    } else {
      lib_dirs += [ "$windk/VC/lib/amd64" ]
    }
  } else {
    cflags += [
      "-fstrict-aliasing",
      "-fPIC",
      "-Werror",
    ]
    cflags_cc += [ "-std=c++11" ]

    # The main idea is to slim the exported API, but these flags also improve link time on Mac.
    # These would make stack traces worse on Linux, so we don't just set them willy-nilly.
    if (is_component_build || is_ios || is_mac) {
      cflags += [ "-fvisibility=hidden" ]
      cflags_cc += [ "-fvisibility-inlines-hidden" ]
    }
  }

  if (current_cpu == "arm") {
    cflags += [
      "-march=armv7-a",
      "-mfpu=neon",
      "-mthumb",
    ]
  } else if (current_cpu == "mipsel") {
    cflags += [ "-march=mips32r2" ]
  } else if (current_cpu == "mips64el") {
    asmflags += [ "-integrated-as" ]
    cflags += [ "-integrated-as" ]
  } else if (current_cpu == "x86" && !is_win) {
    asmflags += [ "-m32" ]
    cflags += [
      "-m32",
      "-msse2",
      "-mfpmath=sse",
    ]
    ldflags += [ "-m32" ]
  }

  if (malloc != "" && !is_win) {
    cflags += [
      "-fno-builtin-malloc",
      "-fno-builtin-calloc",
      "-fno-builtin-realloc",
      "-fno-builtin-free",
    ]
    libs += [ malloc ]
  }

  if (is_android) {
    asmflags += [ "--target=$ndk_target" ]
    cflags += [
      "--sysroot=$ndk/sysroot",
      "-isystem$ndk/sysroot/usr/include/$ndk_target",
      "-D__ANDROID_API__=$ndk_api",
      "--target=$ndk_target",
    ]
    cflags_cc += [
      "-isystem$ndk/sources/android/support/include",
      "-isystem$ndk/sources/cxx-stl/gnu-libstdc++/4.9/include",
      "-isystem$ndk/sources/cxx-stl/gnu-libstdc++/4.9/libs/$ndk_stdlib/include",
    ]
    ldflags += [
      "--sysroot=$ndk/platforms/$ndk_platform",
      "--target=$ndk_target",
      "-B$ndk/toolchains/$ndk_gccdir-4.9/prebuilt/$ndk_host/$ndk_target/bin",
    ]
    lib_dirs = [
      "$ndk/sources/cxx-stl/gnu-libstdc++/4.9/libs/$ndk_stdlib",
      "$ndk/toolchains/$ndk_gccdir-4.9/prebuilt/$ndk_host/lib/gcc/$ndk_target/4.9.x",
    ]

    if (current_cpu == "mips64el") {
      # The r15b NDK deployed on our bots fails to find /usr/lib64 in  the
      # MIPS64 sysroots, so we must point Clang at /usr/lib64 manually.
      lib_dirs += [ "$ndk/platforms/$ndk_platform/usr/lib64" ]
      ldflags += [ "-B$ndk/platforms/$ndk_platform/usr/lib64" ]
    }

    libs += [ "gnustl_static" ]
  }

  if (is_ios) {
    _target = target_cpu
    if (target_cpu == "arm") {
      _target = "armv7"
    } else if (target_cpu == "x86") {
      _target = "i386"
    } else if (target_cpu == "x64") {
      _target = "x86_64"
    }
    asmflags += [
      "-isysroot",
      ios_sysroot,
      "-arch",
      _target,
    ]
    cflags += [
      "-isysroot",
      ios_sysroot,
      "-arch",
      _target,
    ]
    cflags_cc += [ "-stdlib=libc++" ]
    ldflags += [
      "-isysroot",
      ios_sysroot,
      "-arch",
      _target,
      "-stdlib=libc++",
    ]
    libs += [ "objc" ]
  }

  if (is_linux) {
    libs += [ "pthread" ]
  }

  if (sanitize != "") {
    # You can either pass the sanitizers directly, e.g. "address,undefined",
    # or pass one of the couple common aliases used by the bots.
    sanitizers = sanitize
    if (sanitize == "ASAN") {
      sanitizers = "address,bool,function,integer-divide-by-zero,nonnull-attribute,null,object-size,return,returns-nonnull-attribute,shift,signed-integer-overflow,unreachable,vla-bound,vptr"
    } else if (sanitize == "TSAN") {
      sanitizers = "thread"
    } else if (sanitize == "MSAN") {
      sanitizers = "memory"
    }

    cflags += [
      "-fsanitize=$sanitizers",
      "-fno-sanitize-recover=$sanitizers",
      "-fsanitize-blacklist=" + rebase_path("../tools/xsan.blacklist"),
    ]
    ldflags += [ "-fsanitize=$sanitizers" ]
    if (sanitizers == "memory") {
      cflags += [ "-fsanitize-memory-track-origins" ]
      cflags_cc += [ "-stdlib=libc++" ]
      ldflags += [ "-stdlib=libc++" ]
    }
  }
}

config("no_exceptions") {
  # Exceptions are disabled by default on Windows.  (Use /EHsc to enable them.)
  if (!is_win) {
    cflags_cc = [ "-fno-exceptions" ]
  }
}

config("warnings") {
  cflags = []
  cflags_cc = []
  cflags_objc = []
  cflags_objcc = []
  if (is_win) {
    cflags += [
      "/W3",  # Turn on lots of warnings.

      # Disable a bunch of warnings:
      "/wd4244",  # conversion from 'float' to 'int', possible loss of data
      "/wd4267",  # conversion from 'size_t' to 'int', possible loss of data
      "/wd4800",  # forcing value to bool 'true' or 'false' (performance warning)

      # Probably only triggers when /EHsc is enabled.
      "/wd4291",  # no matching operator delete found;
                  # memory will not be freed if initialization throws an exception
    ]
  } else {
    cflags += [
      "-Wall",
      "-Wextra",
      "-Winit-self",
      "-Wpointer-arith",
      "-Wsign-compare",
      "-Wvla",

      "-Wno-deprecated-declarations",
      "-Wno-maybe-uninitialized",
    ]
    cflags_cc += [ "-Wnon-virtual-dtor" ]

    if (is_clang) {
      cflags += [
        "-Weverything",
        "-Wno-unknown-warning-option",  # Let older Clangs ignore newer Clangs' warnings.
      ]

      if ((target_cpu == "x86" && is_android) ||
          (target_cpu == "arm" && is_ios)) {
        # Clang seems to think new/malloc will only be 4-byte aligned on x86 Android and 32-bit iOS.
        # We're pretty sure it's actually 8-byte alignment.
        cflags += [ "-Wno-over-aligned" ]
      }

      cflags += [
        "-Wno-cast-align",
        "-Wno-conditional-uninitialized",
        "-Wno-conversion",
        "-Wno-disabled-macro-expansion",
        "-Wno-documentation",
        "-Wno-documentation-unknown-command",
        "-Wno-double-promotion",
        "-Wno-exit-time-destructors",  # TODO: OK outside libskia
        "-Wno-float-conversion",
        "-Wno-float-equal",
        "-Wno-format-nonliteral",
        "-Wno-global-constructors",  # TODO: OK outside libskia
        "-Wno-gnu-zero-variadic-macro-arguments",
        "-Wno-missing-prototypes",
        "-Wno-missing-variable-declarations",
        "-Wno-pedantic",
        "-Wno-reserved-id-macro",
        "-Wno-shadow",
        "-Wno-shift-sign-overflow",
        "-Wno-sign-conversion",
        "-Wno-signed-enum-bitfield",
        "-Wno-switch-enum",
        "-Wno-undef",
        "-Wno-unreachable-code",
        "-Wno-unreachable-code-break",
        "-Wno-unreachable-code-return",
        "-Wno-unused-macros",
        "-Wno-unused-member-function",
      ]
      cflags_cc += [
        "-Wno-abstract-vbase-init",
        "-Wno-weak-vtables",
      ]

      # We are unlikely to want to fix these.
      cflags += [
        "-Wno-covered-switch-default",
        "-Wno-deprecated",
        "-Wno-implicit-fallthrough",
        "-Wno-missing-noreturn",
        "-Wno-old-style-cast",
        "-Wno-padded",
      ]
      cflags_cc += [
        "-Wno-c++98-compat",
        "-Wno-c++98-compat-pedantic",
        "-Wno-undefined-func-template",
      ]
      cflags_objc += [
        "-Wno-direct-ivar-access",
        "-Wno-objc-interface-ivars",
      ]
      cflags_objcc += [
        "-Wno-direct-ivar-access",
        "-Wno-objcc-interface-ivars",
      ]
    }
  }
}
config("warnings_except_public_headers") {
  if (!is_win) {
    cflags = [ "-Wno-unused-parameter" ]
  }
}

config("extra_flags") {
  asmflags = extra_asmflags
  cflags = extra_cflags
  cflags_c = extra_cflags_c
  cflags_cc = extra_cflags_cc
  ldflags = extra_ldflags
}

config("debug_symbols") {
  # It's annoying to wait for full debug symbols to push over
  # to Android devices.  -gline-tables-only is a lot slimmer.
  if (is_android) {
    cflags = [ "-gline-tables-only" ]
  } else if (is_win) {
    cflags = [ "/Zi" ]
    ldflags = [ "/DEBUG" ]
  } else {
    cflags = [ "-g" ]
  }
}

config("no_rtti") {
  if (sanitize != "ASAN") {  # -fsanitize=vptr requires RTTI
    if (is_win) {
      cflags_cc = [ "/GR-" ]
    } else {
      cflags_cc = [ "-fno-rtti" ]
    }
  }
}

config("release") {
  if (is_win) {
    cflags = [
      "/O2",
      "/Zc:inline",
      "/GS-",
    ]
    ldflags = [
      "/OPT:ICF",
      "/OPT:REF",
    ]
  } else {
    cflags = [
      "-O3",
      "-fdata-sections",
      "-ffunction-sections",
    ]
    if (is_mac || is_ios) {
      ldflags = [ "-dead_strip" ]
    } else {
      ldflags = [ "-Wl,--gc-sections" ]
    }
  }
  defines = [ "NDEBUG" ]
}

config("executable") {
  if (is_android) {
    ldflags = [ "-pie" ]
  } else if (is_mac) {
    ldflags = [ "-Wl,-rpath,@loader_path/." ]
  } else if (is_linux) {
    ldflags = [
      "-rdynamic",
      "-Wl,-rpath,\$ORIGIN",
    ]
  } else if (is_win) {
    ldflags = [
      "/SUBSYSTEM:CONSOLE",  # Quiet "no subsystem specified; CONSOLE assumed".
      "/INCREMENTAL:NO",  # Quiet warnings about failing to incrementally link by never trying to.
    ]
  }
}
