write_vcsrevision.gni 1.38 KB
# This file introduces a templates for calling write_vcsrevision.py.
#
# Parameters:
#
#   header (required) [string]
#
#   names (optional) [list of strings]
#       Writes "$foo_REVISION" and "$foo_REPOSITORY" for each foo in names.
#       Defaults to [ "LLVM" ]

declare_args() {
  # If this set to false, VCSRevision.h is updated after every git commit.
  # That's technically correct, but results in rebuilds after every commit.
  # If it's true (default), VCSRevision.h will usually be somewhat
  # out-of-date, but builds will be faster.
  llvm_allow_tardy_revision = true
}

template("write_vcsrevision") {
  assert(defined(invoker.header), "must set 'header' in $target_name")

  action("write_vcsrevision") {
    script = "//llvm/utils/gn/build/write_vcsrevision.py"
    header = invoker.header
    if (defined(invoker.names)) {
      names = invoker.names
    } else {
      names = [ "LLVM" ]
    }

    args = [ rebase_path(header, root_build_dir) ]
    if (!llvm_allow_tardy_revision) {
      depfile = "$header.d"
      args += [
        "-d",
        rebase_path(depfile, root_build_dir),
      ]
    }

    foreach(name, names) {
      args += [ "--name=$name" ]
    }

    outputs = [
      header,
    ]

    forward_variables_from(invoker,
                           [
                             "public_configs",
                             "visibility",
                           ])
  }
}