# Copyright 2019 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/ios/deployment_target.gni")

template("ios_toolchain") {
  toolchain(target_name) {
    assert(defined(invoker.toolchain_args),
           "Toolchains must declare toolchain_args")

    toolchain_args = {
      forward_variables_from(invoker.toolchain_args, "*")
    }

    _sdk_info = exec_script("//build/config/ios/scripts/sdk_info.py",
                            [
                              "--target-cpu",
                              current_cpu,
                              "--deployment-target",
                              ios_deployment_target,
                            ],
                            "json")

    cc = "clang -target ${_sdk_info.target} -isysroot ${_sdk_info.sdk_path}"
    cxx = "clang++ -target ${_sdk_info.target} -isysroot ${_sdk_info.sdk_path}"

    tool("link") {
      output = "{{output_dir}}/{{target_output_name}}{{output_extension}}"
      rspfile = output + ".rsp"
      rspfile_content = "{{inputs_newline}}"

      outputs = [ output ]
      command = "$cxx {{ldflags}} -o $output -Wl,-filelist,$rspfile {{libs}} {{solibs}} {{frameworks}}"
      description = "LINK {{output}}"

      default_output_dir = "{{root_out_dir}}"
      default_output_extension = ""
      output_prefix = ""
    }

    tool("solink") {
      dylib = "{{output_dir}}/{{target_output_name}}{{output_extension}}"
      rspfile = dylib + ".rsp"
      rspfile_content = "{{inputs_newline}}"

      outputs = [ dylib ]
      command = "$cxx -dynamiclib {{ldflags}} -o $dylib -Wl,-filelist,$rspfile {{libs}} {{solibs}} {{frameworks}}"
      description = "SOLINK {{output}}"

      default_output_dir = "{{root_out_dir}}"
      default_output_extension = ".dylib"
      output_prefix = "lib"
    }

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

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

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

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

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

    tool("copy_bundle_data") {
      command = "rm -rf {{output}} && cp -a {{source}} {{output}}"
      description = "COPY_BUNDLE_DATA {{output}}"
    }
  }
}

ios_toolchain("clang_x86") {
  toolchain_args = {
    current_cpu = "x86"
    current_os = "ios"
  }
}

ios_toolchain("clang_x64") {
  toolchain_args = {
    current_cpu = "x64"
    current_os = "ios"
  }
}

ios_toolchain("clang_arm") {
  toolchain_args = {
    current_cpu = "arm"
    current_os = "ios"
  }
}

ios_toolchain("clang_arm64") {
  toolchain_args = {
    current_cpu = "arm64"
    current_os = "ios"
  }
}
