// This file was auto-generated by the vanadium vdl tool.
// Source: profile.vdl

// Package profile contains implementation and internal interfaces and
// types used by the implementation of Veyron profiles.
package profile

import (
	// VDL system imports
	"v.io/v23/vdl"

	// VDL user imports
	"v.io/v23/services/mgmt/build"
)

// Library describes a shared library that applications may use.
type Library struct {
	// Name is the name of the library.
	Name string
	// MajorVersion is the major version of the library.
	MajorVersion string
	// MinorVersion is the minor version of the library.
	MinorVersion string
}

func (Library) __VDLReflect(struct {
	Name string "v.io/x/ref/services/mgmt/profile.Library"
}) {
}

// Specification is how we represent a profile internally. It should
// provide enough information to allow matching of binaries to devices.
type Specification struct {
	// Label is a human-friendly concise label for the profile,
	// e.g. "linux-media".
	Label string
	// Description is a human-friendly description of the profile.
	Description string
	// Arch is the target hardware architecture of the profile.
	Arch build.Architecture
	// OS is the target operating system of the profile.
	OS build.OperatingSystem
	// Format is the file format supported by the profile.
	Format build.Format
	// Libraries is a set of libraries the profile requires.
	Libraries map[Library]struct{}
}

func (Specification) __VDLReflect(struct {
	Name string "v.io/x/ref/services/mgmt/profile.Specification"
}) {
}

func init() {
	vdl.Register((*Library)(nil))
	vdl.Register((*Specification)(nil))
}
