// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

syntax = "proto3";

package recipes.fuchsia.ffmpeg;

message InputProperties {
  // The git remote containing the jiri manifest.
  string remote = 1;

  // The jiri manifest to check out.
  string manifest = 2;

  // The ffmpeg recipe does multiple builds, one per target architecture. A
  // Build message represents the parameters for a single build.
  message Build {
    // The path to a fint parameters file. All build parameters *must* be
    // specified in the fint parameters file. Any parameters specified as recipe
    // properties are only for informational purposes for the recipe and cannot
    // influence the results of the build.
    string fint_params_path = 1;

    // The target architecture used for the build.
    string target = 2;
    // The variants used for the build.
    repeated string variants = 3;

    // TODO(olivernewman): The remaining fields are encapsulated in the fint
    // params file. Remove them from this message once fint is fully deployed.
    string build_type = 4;
    bool exclude_images = 5;
    string product = 6;
    repeated string ninja_targets = 7;
  }

  repeated Build builds = 3;
}
