# Copyright 2016 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.

################################################################################
# DEFAULT BUILD CONFIGURATION
################################################################################

import("compiler.gni")
import("platform.gni")
import("sysroot.gni")

if (mini_chromium_is_mac) {
  declare_args() {
    # The minimum runtime macOS version that built products are expected to run
    # on. If empty, the toolchain will choose its own default, typically the
    # older of the SDK version and the build host’s OS version.
    mac_deployment_target = "10.9"
  }
} else if (mini_chromium_is_ios) {
  import("ios/ios_sdk.gni")
} else if (mini_chromium_is_linux) {
  declare_args() {
    # Path to the Clang toolchain. If unset, uses the system-installed Clang.
    clang_path = ""

    # If set, link against libstdc++ statically.
    link_libstdcpp_statically = false
  }
} else if (mini_chromium_is_fuchsia) {
  declare_args() {
    # Path to the Fuchsia Clang toolchain.
    clang_path = "//third_party/fuchsia/clang/" + host_os + "-amd64"
  }
} else if (mini_chromium_is_win) {
  declare_args() {
    # Path to the Windows toolchain. If "<autodetect>", discovery of the
    # system-installed toolchain will be attempted. Otherwise,
    # win_sdk\bin\SetEnv.cmd inside this path will be used to configure the
    # Windows toolchain.
    win_toolchain_path = "<autodetect>"
  }
}

declare_args() {
  # Extra flags passed to the C compiler.
  # Space-separated string of flags.
  # "cflags" are passed to all invocations of the C, C++, Objective-C, and
  # Objective-C++ compilers.
  extra_cflags = ""

  # Extra flags passed to the C compiler.
  # Space-separated string of flags.
  extra_cflags_c = ""

  # Extra flags passed to the C++ compiler.
  # Space-separated string of flags.
  extra_cflags_cc = ""

  # Extra flags passed to the Objective-C compiler.
  # Space-separated string of flags.
  extra_cflags_objc = ""

  # Extra flags passed to the Objective-C++ compiler.
  # Space-separated string of flags.
  extra_cflags_objcc = ""

  # Extra flags passed to the linker.
  # Space-separated string of flags.
  # These flags are passed on the command-line to the linker and generally
  # specify various linking options.
  extra_ldflags = ""

  # Extra arguments passed to static_library archiver
  # Space-separated string of flags.
  # A list of flags passed to the archive/lib command that creates static
  # libraries.
  extra_arflags = ""
}

config("debug") {
  if (!mini_chromium_is_win) {
    cflags = [ "-g" ]
  }
}

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

  if (mini_chromium_is_posix || mini_chromium_is_fuchsia) {
    cflags = [ "-O3" ]
    if (mini_chromium_is_mac || mini_chromium_is_ios) {
      ldflags = [ "-Wl,-dead_strip" ]
    } else {
      cflags += [
        "-fdata-sections",
        "-ffunction-sections",
      ]
      ldflags = [
        "-Wl,-O1",
        "-Wl,--gc-sections",
      ]
    }
  } else if (mini_chromium_is_win) {
    cflags = [
      "/GL",  # LTCG.
      "/O2",
      "/Ob2",  # Both explicit and auto inlining.
      "/Oy-",  # Disable omitting frame pointers, must be after /O2.
      "/Zc:inline",  # Remove unreferenced COMDAT (faster links).
      "/d2Zi+",  # Improve debugging of optimized code.
    ]
    ldflags = [
      "/OPT:ICF",
      "/OPT:REF",
      "/LTCG",
    ]
    arflags = [ "/LTCG" ]
  }
}

config("default") {
  common_flags = []

  asmflags = []
  ldflags = []
  if (mini_chromium_is_posix || mini_chromium_is_fuchsia) {
    cflags = [
      "-Wall",
      "-Wendif-labels",
      "-Werror",
      "-Wextra",
      "-Wextra-semi",
      "-Wno-missing-field-initializers",
      "-Wno-unused-parameter",
      "-Wsign-compare",
      "-fno-exceptions",
      "-fno-rtti",
      "-fno-strict-aliasing",  # See https://crbug.com/32204
      "-fobjc-call-cxx-cdtors",
      "-fstack-protector-all",  # Implies -fstack-protector
      "-fvisibility-inlines-hidden",
      "-fvisibility=hidden",
    ]

    cflags_c = [ "-std=c11" ]
    cflags_cc = [ "-std=c++14" ]
    cflags_objc = cflags_c
    cflags_objcc = cflags_cc

    cflags += [
      "-Wheader-hygiene",
      "-Wnewline-eof",
      "-Wstring-conversion",
    ]

    if (sysroot != "") {
      if (sysroot == rebase_path(sysroot)) {
        # If it’s already system-absolute, leave it alone.
        sysroot_path = sysroot
      } else {
        sysroot_path = rebase_path(sysroot, root_build_dir)
      }
      if (mini_chromium_is_mac || mini_chromium_is_ios) {
        common_flags += [
          "-isysroot",
          sysroot_path,
        ]
      } else {
        common_flags += [ "--sysroot=" + sysroot_path ]
      }
    }

    if (mini_chromium_is_mac || mini_chromium_is_ios) {
      if (current_cpu == "x86") {
        common_flags += [
          "-arch",
          "i386",
        ]
      } else if (current_cpu == "x64") {
        common_flags += [
          "-arch",
          "x86_64",
        ]
      } else if (current_cpu == "arm64") {
        common_flags += [
          "-arch",
          "arm64",
        ]
      }
    }

    if (mini_chromium_is_fuchsia) {
      common_flags += [
        # The Fuchsia SDK no longer dumps everything in the sysroot, preferring
        # the layout described in
        # https://fuchsia.googlesource.com/docs/+/master/development/sdk/layout.md.
        # Eventually /sysroot will be replaced by /pkg/system, but this work is
        # not yet complete.
        "-isystem",
        rebase_path(fuchsia_sdk + "/pkg/fdio/include", root_build_dir),
      ]

      lib_dirs = [ fuchsia_sdk + "/arch/$target_cpu/lib" ]
    }
  }

  if (mini_chromium_is_mac) {
    if (mac_deployment_target != "") {
      common_flags += [ "-mmacosx-version-min=" + mac_deployment_target ]
    }
  }

  if (mini_chromium_is_ios) {
    if (ios_deployment_target != "") {
      if (current_cpu == "x64") {
        common_flags +=
            [ "-mios-simulator-version-min=" + ios_deployment_target ]
      } else if (current_cpu == "arm64") {
        common_flags += [ "-mios-version-min=" + ios_deployment_target ]
      }
    }
  }

  if (mini_chromium_is_win) {
    cflags = [
      "/DNOMINMAX",
      "/DUNICODE",
      "/DWIN32_LEAN_AND_MEAN",
      "/D_CRT_SECURE_NO_WARNINGS",
      "/D_HAS_EXCEPTIONS=0",
      "/D_UNICODE",
      "/FS",
      "/W4",
      "/WX",
      "/Zi",
      "/bigobj",  # Support larger number of sections in obj file.
      "/wd4100",  # Unreferenced formal parameter.
      "/wd4127",  # Conditional expression is constant.
      "/wd4324",  # Structure was padded due to alignment specifier.
      "/wd4351",  # New behavior: elements of array will be default initialized.
      "/wd4577",  # 'noexcept' used with no exception handling mode specified.
      "/wd4996",  # 'X' was declared deprecated.
    ]

    ldflags += [ "/DEBUG" ]

    libs = [ "kernel32.lib" ]
  }

  if (mini_chromium_is_linux) {
    defines = [ "_FILE_OFFSET_BITS=64" ]
    common_flags += [ "-pthread" ]

    # This is currently required by the clang toolchain build that DEPS uses
    # from the Fuchsia team. Only a static libc++ is provided, and it requires
    # both -ldl and -pthread. (-pthread was already needed by mini_chromium and
    # Crashpad). Eventually, the clang build should automatically add these
    # when needed, but it does not do that yet, so manually add libdl here for
    # now.
    libs = [ "dl" ]

    if (link_libstdcpp_statically) {
      # The sysroot being built against is based on Stretch, which is newer than
      # the libstdc++ that's on Trusty (14.04) which is the Chromium minspec.
      # This minspec determines what the available buildbots are. Chromium
      # doesn't have a problem with libstdc++ despite this, because it links
      # against a local copy of libc++ instead. As this build file only affects
      # the standalone Crashpad build, when this flag is set link libstdc++
      # statically to avoid the problem on the bots.
      cflags += [ "-stdlib=libstdc++" ]
      ldflags += [
        "-rtlib=libgcc",
        "-static-libstdc++",
        "-stdlib=libstdc++",
      ]
    }
  }

  if (mini_chromium_is_fuchsia) {
    if (target_cpu == "arm64") {
      common_flags += [ "--target=aarch64-fuchsia" ]
    } else if (target_cpu == "x64") {
      common_flags += [ "--target=x86_64-fuchsia" ]
    } else {
      assert(false, "Unsupported architecture")
    }

    # fdio is listed in ldflags instead of libs because it’s important for it to
    # be loaded in Fuchsia processes that expect POSIX-like file descriptor
    # semantics, even if they don’t explicitly reference anything in the fdio
    # library. To avoid inadvertently losing the runtime dependency, it must
    # come before -Wl,--as-needed below. fdio needs zircon (and zircon needs to
    # be in every process anyway).
    ldflags += [
      "-lfdio",
      "-lzircon",
    ]
  }

  if ((mini_chromium_is_posix && !mini_chromium_is_mac &&
       !mini_chromium_is_ios) || mini_chromium_is_fuchsia) {
    cflags += [ "-fPIC" ]
    ldflags += [
      # This must follow Fuchsia’s fdio library above.
      "-Wl,--as-needed",

      "-Wl,-z,noexecstack",
    ]
  }

  cflags += common_flags
  asmflags += common_flags
  ldflags += common_flags

  if (is_debug) {
    configs = [ ":debug" ]
  } else {
    configs = [ ":release" ]
  }
}

config("executable") {
  if (mini_chromium_is_linux) {
    ldflags = [ "-pie" ]
  }
}

config("ios_enable_arc") {
  if (mini_chromium_is_ios) {
    common_flags = [ "-fobjc-arc" ]
    cflags_objc = common_flags
    cflags_objcc = common_flags
  }
}

config("Wexit_time_destructors") {
  if (mini_chromium_is_clang) {
    cflags = [ "-Wexit-time-destructors" ]
  }
}

config("Wimplicit_fallthrough") {
  if (mini_chromium_is_clang) {
    cflags = [ "-Wimplicit-fallthrough" ]
  }
}

config("win_console") {
  if (mini_chromium_is_win) {
    ldflags = [ "/SUBSYSTEM:CONSOLE" ]
  }
}

config("win_windowed") {
  if (mini_chromium_is_win) {
    ldflags = [ "/SUBSYSTEM:WINDOWS" ]
  }
}

################################################################################
# TOOLCHAIN DEFINITIONS
################################################################################

toolchain("gcc_like_toolchain") {
  lib_switch = "-l"
  lib_dir_switch = "-L"

  if ((mini_chromium_is_linux || mini_chromium_is_fuchsia) && clang_path != "") {
    cc = rebase_path(clang_path, root_build_dir) + "/bin/clang"
    cxx = rebase_path(clang_path, root_build_dir) + "/bin/clang++"
    asm = cxx
    ar = rebase_path(clang_path, root_build_dir) + "/bin/llvm-ar"
    ld = cxx
  } else {
    cc = "clang"
    cxx = "clang++"
    asm = cxx
    ld = cxx

    if (!mini_chromium_is_mac && !mini_chromium_is_ios) {
      # macOS uses libtool instead of ar.
      ar = "ar"
    }
  }

  if (defined(extra_cflags) && extra_cflags != "") {
    extra_cflags = " " + extra_cflags
  } else {
    extra_cflags = ""
  }
  if (defined(extra_cflags_c) && extra_cflags_c != "") {
    extra_cflags_c = " " + extra_cflags_c
  } else {
    extra_cflags_c = ""
  }
  if (defined(extra_cflags_cc) && extra_cflags_cc != "") {
    extra_cflags_cc = " " + extra_cflags_cc
  } else {
    extra_cflags_cc = ""
  }
  if (defined(extra_ldflags) && extra_ldflags != "") {
    extra_ldflags = " " + extra_ldflags
  } else {
    extra_ldflags = ""
  }
  if (defined(extra_arflags) && extra_arflags != "") {
    extra_arflags = " " + extra_arflags
  } else {
    extra_arflags = ""
  }

  tool("cc") {
    depfile = "{{output}}.d"
    command = "$cc -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} {{cflags_c}}${extra_cflags}${extra_cflags_c} -c {{source}} -o {{output}}"
    depsformat = "gcc"
    description = "CC {{output}}"
    outputs = [
      "{{source_out_dir}}/{{label_name}}.{{source_name_part}}.o",
    ]
  }

  tool("cxx") {
    depfile = "{{output}}.d"
    command = "$cxx -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} {{cflags_cc}}${extra_cflags}${extra_cflags_cc} -c {{source}} -o {{output}}"
    depsformat = "gcc"
    description = "CXX {{output}}"
    outputs = [
      "{{source_out_dir}}/{{label_name}}.{{source_name_part}}.o",
    ]
  }

  if (mini_chromium_is_mac || mini_chromium_is_ios) {
    if (defined(extra_cflags_objc) && extra_cflags_objc != "") {
      extra_cflags_objc = " " + extra_cflags_objc
    } else {
      extra_cflags_objc = ""
    }
    if (defined(extra_cflags_objcc) && extra_cflags_objcc != "") {
      extra_cflags_objcc = " " + extra_cflags_objcc
    } else {
      extra_cflags_objcc = ""
    }

    tool("objc") {
      depfile = "{{output}}.d"
      command = "$cc -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} {{cflags_objc}}${extra_cflags}${extra_cflags_objc} -c {{source}} -o {{output}}"
      depsformat = "gcc"
      description = "OBJC {{output}}"
      outputs = [
        "{{source_out_dir}}/{{label_name}}.{{source_name_part}}.o",
      ]
    }

    tool("objcxx") {
      depfile = "{{output}}.d"
      command = "$cxx -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} {{cflags_objcc}}${extra_cflags}${extra_cflags_objcc} -c {{source}} -o {{output}}"
      depsformat = "gcc"
      description = "OBJCXX {{output}}"
      outputs = [
        "{{source_out_dir}}/{{label_name}}.{{source_name_part}}.o",
      ]
    }

    tool("copy_bundle_data") {
      _copydir = "mkdir -p {{output}} && cd {{source}} && " +
                 "pax -rwl . \"\$OLDPWD\"/{{output}}"
      copy_command = "ln -f {{source}} {{output}} 2>/dev/null || (rm -rf {{output}} && cp -af {{source}} {{output}})"
      command = "rm -rf {{output}} && if [[ -d {{source}} ]]; then " +
                _copydir + "; else " + copy_command + "; fi"

      description = "COPY_BUNDLE_DATA {{source}} {{output}}"
    }

    tool("compile_xcassets") {
      command = "/bin/true"
    }
  }

  tool("asm") {
    depfile = "{{output}}.d"
    command = "$asm -MMD -MF $depfile {{defines}} {{include_dirs}} {{asmflags}} -c {{source}} -o {{output}}"
    depsformat = "gcc"
    description = "ASM {{output}}"
    outputs = [
      "{{source_out_dir}}/{{label_name}}.{{source_name_part}}.o",
    ]
  }

  tool("alink") {
    if (mini_chromium_is_mac || mini_chromium_is_ios) {
      command = "libtool -static -no_warning_for_no_symbols {{arflags}}${extra_arflags} -o {{output}} {{inputs}}"
    } else {
      command = "rm -f {{output}}; $ar rcsD {{arflags}}${extra_arflags} {{output}} {{inputs}}"
    }
    description = "AR {{output}}"
    default_output_dir = "{{target_out_dir}}"
    default_output_extension = ".a"
    output_prefix = "lib"
    outputs = [
      "{{output_dir}}/{{target_output_name}}{{output_extension}}",
    ]
  }

  tool("solink_module") {
    # TODO(scottmg): This will need to do -framework, etc. for macOS.
    soname = "{{target_output_name}}{{output_extension}}"  # e.g. "libfoo.so".
    sofile = "{{output_dir}}/$soname"

    soname_flag = ""
    start_whole_flag = ""
    end_whole_flag = ""
    if (mini_chromium_is_mac || mini_chromium_is_ios) {
      soname_flag = "-Wl,-install_name,\"$soname\""
    } else {
      soname_flag = "-Wl,-soname=\"$soname\""
      start_whole_flag = "-Wl,--whole-archive"
      end_whole_flag = "-Wl,--no-whole-archive "
    }
    command = "$ld -shared {{ldflags}}${extra_ldflags} -o \"$sofile\" $soname_flag $start_whole_flag {{inputs}} {{solibs}} $end_whole_flag {{libs}}"
    description = "SOLINK_MODULE $sofile"

    default_output_dir = "{{root_out_dir}}"
    default_output_extension = ".so"

    outputs = [
      sofile,
    ]
  }

  tool("link") {
    exename = "{{target_output_name}}{{output_extension}}"
    outfile = "{{output_dir}}/$exename"

    start_group_flag = ""
    end_group_flag = ""
    if (!mini_chromium_is_mac && !mini_chromium_is_ios) {
      start_group_flag = "-Wl,--start-group"
      end_group_flag = "-Wl,--end-group"
    }
    command = "$ld {{ldflags}}${extra_ldflags} -o \"$outfile\" $start_group_flag {{inputs}} {{solibs}} $end_group_flag {{libs}}"
    description = "LINK $outfile"

    default_output_dir = "{{root_out_dir}}"
    default_output_extension = ""
    outputs = [
      outfile,
    ]
  }

  tool("stamp") {
    command = "touch {{output}}"
    description = "STAMP {{output}}"
  }
}

if (mini_chromium_is_win) {
  helper_path = rebase_path("win_helper.py")
  toolchain_data = exec_script(helper_path,
                               [
                                 "get-visual-studio-data",
                                 rebase_path(root_build_dir),
                                 rebase_path(win_toolchain_path),
                               ],
                               "scope")

  # Required arguments:
  # - environment_file: Path to saved environment file (see win_helper.py).
  # - current_cpu: The cpu to target with this toolchain.
  template("msvc_toolchain") {
    toolchain("msvc_toolchain_$target_name") {
      # @rsp files are not used for simplicity, and because mini_chromium and
      # Crashpad shouldn't require them in any configurations.
      cc = "cl.exe"
      cxx = "cl.exe"
      ar = "lib.exe"
      ld = "link.exe"
      lib_switch = ""
      lib_dir_switch = "/LIBPATH:"
      env = invoker.environment_file

      if (defined(invoker.extra_cflags) && invoker.extra_cflags != "") {
        extra_cflags = " " + invoker.extra_cflags
      } else {
        extra_cflags = ""
      }
      if (defined(invoker.extra_cflags_c) && invoker.extra_cflags_c != "") {
        extra_cflags_c = " " + invoker.extra_cflags_c
      } else {
        extra_cflags_c = ""
      }
      if (defined(invoker.extra_cflags_cc) && invoker.extra_cflags_cc != "") {
        extra_cflags_cc = " " + invoker.extra_cflags_cc
      } else {
        extra_cflags_cc = ""
      }
      if (defined(invoker.extra_ldflags) && invoker.extra_ldflags != "") {
        extra_ldflags = " " + invoker.extra_ldflags
      } else {
        extra_ldflags = ""
      }
      if (defined(invoker.extra_arflags) && invoker.extra_arflags != "") {
        extra_arflags = " " + invoker.extra_arflags
      } else {
        extra_arflags = ""
      }

      tool("cc") {
        depfile = "{{output}}.d"
        pdbname = "{{target_out_dir}}/{{label_name}}_c.pdb"
        command = "ninja -t msvc -e $env -- $cc /nologo /showIncludes {{defines}} {{include_dirs}} {{cflags}} {{cflags_c}}${extra_cflags}${extra_cflags_c} /c {{source}} /Fo{{output}} /Fd\"$pdbname\""
        depsformat = "msvc"
        description = "CC {{output}}"
        outputs = [
          "{{source_out_dir}}/{{label_name}}.{{source_name_part}}.obj",
        ]
      }

      tool("cxx") {
        depfile = "{{output}}.d"
        pdbname = "{{target_out_dir}}/{{label_name}}_cc.pdb"
        command = "ninja -t msvc -e $env -- $cxx /nologo /showIncludes {{defines}} {{include_dirs}} {{cflags}} {{cflags_c}}${extra_cflags}${extra_cflags_cc} /c {{source}} /Fo{{output}} /Fd\"$pdbname\""
        depsformat = "msvc"
        description = "CXX {{output}}"
        outputs = [
          "{{source_out_dir}}/{{label_name}}.{{source_name_part}}.obj",
        ]
      }

      tool("alink") {
        command = "$python_path $helper_path link-wrapper $env $ar /nologo /out:{{output}} {{arflags}}${extra_arflags} {{inputs}}"
        description = "AR {{output}}"
        outputs = [
          "{{output_dir}}/{{target_output_name}}{{output_extension}}",
        ]
        default_output_dir = "{{target_out_dir}}"
        default_output_extension = ".lib"
        output_prefix = ""
      }

      tool("solink_module") {
        outputs = [
          "{{output_dir}}/{{target_output_name}}{{output_extension}}",
        ]
        command = "$python_path $helper_path link-wrapper $env $ld /nologo /DLL /OUT:{{output}} {{ldflags}}${extra_ldflags} {{inputs}} {{solibs}} {{libs}}"
        description = "SOLINK_MODULE {{output}}"
        default_output_dir = "{{root_out_dir}}"
        default_output_extension = ".dll"
      }

      tool("link") {
        outputs = [
          "{{output_dir}}/{{target_output_name}}{{output_extension}}",
        ]
        command = "$python_path $helper_path link-wrapper $env $ld /nologo /OUT:{{output}} {{ldflags}}${extra_ldflags} {{inputs}} {{solibs}} {{libs}}"
        description = "LINK {{output}}"
        default_output_dir = "{{root_out_dir}}"
        default_output_extension = ".exe"
      }

      tool("asm") {
        if (invoker.current_cpu == "arm64") {
          ml = "armasm64.exe"
          command = "$python_path $helper_path asm-wrapper $env $ml {{include_dirs}} {{asmflags}} -o {{output}} {{source}}"
        } else {
          if (invoker.current_cpu == "x86") {
            ml = "ml.exe"
          } else {
            ml = "ml64.exe"
          }
          command = "$python_path $helper_path asm-wrapper $env $ml {{defines}} {{include_dirs}} {{asmflags}} /c /Fo{{output}} {{source}}"
        }
        description = "ASM {{output}}"
        outputs = [
          "{{source_out_dir}}/{{label_name}}.{{source_name_part}}.obj",
        ]
      }

      tool("stamp") {
        command = "$python_path $helper_path stamp {{output}}"
        description = "STAMP {{output}}"
      }

      tool("copy") {
        command = "cmd /c copy /y {{source}} {{output}} >nul"
        description = "COPY {{source}} {{output}}"
      }
    }
  }

  msvc_toolchain("x64") {
    environment_file = toolchain_data.x64_environment_file
    current_cpu = "x64"
  }

  msvc_toolchain("x86") {
    environment_file = toolchain_data.x86_environment_file
    current_cpu = "x86"
  }

  msvc_toolchain("arm64") {
    environment_file = toolchain_data.arm64_environment_file
    current_cpu = "arm64"
  }
}
