#! /usr/bin/env python
# Copyright (c) 2020 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.

# Linker wrapper that performs distributed ThinLTO on Goma.
#
# Usage: Pass the original link command as parameters to this script.
# E.g. original: clang++ -o foo foo.o
# Becomes: goma-ld clang++ -o foo foo.o

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

import goma_link

import os
import re
import sys


class GomaLinkUnix(goma_link.GomaLinkBase):
  # Target-platform-specific constants.
  WL = '-Wl,'
  TLTO = '-plugin-opt=thinlto'
  SEP = '='
  DATA_SECTIONS = '-fdata-sections'
  FUNCTION_SECTIONS = '-ffunction-sections'
  GROUP_RE = re.compile(WL + '--(?:end|start)-group')
  MACHINE_RE = re.compile('-m([0-9]+)')
  OBJ_PATH = '-plugin-opt=obj-path' + SEP
  OBJ_SUFFIX = '.o'
  PREFIX_REPLACE = TLTO + '-prefix-replace' + SEP
  XIR = '-x ir '

  ALLOWLIST = {
      'chrome',
  }

  def analyze_args(self, args, *posargs, **kwargs):
    # TODO(crbug.com/1040196): Builds are unreliable when all targets use
    # distributed ThinLTO, so we only enable it for some targets.
    # For other targets, we fall back to local ThinLTO. We must use ThinLTO
    # because we build with -fsplit-lto-unit, which requires code generation
    # be done for each object and target.
    # Returning None from this function causes the original, non-distributed
    # linker command to be invoked.
    if args.output is None:
      return None
    if not (args.allowlist or os.path.basename(args.output) in self.ALLOWLIST):
      return None
    return super(GomaLinkUnix, self).analyze_args(args, *posargs, **kwargs)

  def process_output_param(self, args, i):
    """
    If args[i] is a parameter that specifies the output file,
    returns (output_name, new_i). Else, returns (None, new_i).
    """
    if args[i] == '-o':
      return (os.path.normpath(args[i + 1]), i + 2)
    else:
      return (None, i + 1)


if __name__ == '__main__':
  sys.exit(GomaLinkUnix().main(sys.argv))
