func getBackendPathInSourceDir(g generatorBackend, elems ...string) string {
	return filepath.Join(append([]string{g.sourceDir()}, elems...)...)
}
Construct a path to a file within the source directory to be used
in backend output files.
package core
import (
	"fmt"
	"path/filepath"
	"reflect"
	"strings"
	"github.com/google/blueprint"
	"github.com/google/blueprint/proptools"
	"github.com/ARM-software/bob-build/internal/utils"
)
type phonyInterface interface {
	outputs() []string
	implicitOutputs() []string
	shortName() string
}
type moduleWithBuildProps interface {
	build() *Build
}
type TargetSpecific struct {
	Features
	BlueprintEmbed interface{}
}
func (t *TargetSpecific) init(properties *configProperties, list ...interface{}) {
	if len(list) == 0 {
		panic("List can't be empty")
	}
	propsType := coalesceTypes(typesOf(list...)...)
	t.BlueprintEmbed = reflect.New(propsType).Interface()
	t.Features.Init(properties, list...)
}
func (t *TargetSpecific) getTargetSpecificProps() interface{} {
	return t.BlueprintEmbed
}
type dependentInterface interface {
	phonyInterface
	outputDir() string
}
type dependencyTag struct {
	blueprint.BaseDependencyTag
	name string
}
func getBackend(ctx blueprint.BaseModuleContext) generatorBackend {
	return getConfig(ctx).Generator
}
type generatorBackend interface {
	aliasActions(*alias, blueprint.ModuleContext)
	binaryActions(*binary, blueprint.ModuleContext)
	generateSourceActions(*generateSource, blueprint.ModuleContext)
	transformSourceActions(*transformSource, blueprint.ModuleContext)
	genSharedActions(*generateSharedLibrary, blueprint.ModuleContext)
	genStaticActions(*generateStaticLibrary, blueprint.ModuleContext)
	genBinaryActions(*generateBinary, blueprint.ModuleContext)
	kernelModuleActions(m *kernelModule, ctx blueprint.ModuleContext)
	sharedActions(*sharedLibrary, blueprint.ModuleContext)
	staticActions(*staticLibrary, blueprint.ModuleContext)
	resourceActions(*resource, blueprint.ModuleContext)
	buildDir() string
	sourceDir() string
	bobScriptsDir() string
	sharedLibsDir(tgt tgtType) string
	escapeFlag(string) string
	init(*blueprint.Context, *bobConfig)
	getToolchain(tgt tgtType) toolchain
}
type bobConfig struct {
	Generator  generatorBackend
	Properties configProperties
}
type AndroidProps struct {
	Tags []string
	Owner *string
}
func (p *AndroidProps) isProprietary() bool {
	return p.Owner != nil
}
type AndroidPGOProps struct {
	Pgo struct {
		Benchmarks         []string
		Profile_file       *string
		Enable_profile_use *bool
		Cflags             []string
	}
}
type AndroidMTEProps struct {
	Mte struct {
		Memtag_heap      *bool
		Diag_memtag_heap *bool
	}
}
func getBobScriptsDir() string {
	return filepath.Join(getBobDir(), "scripts")
}
func getPathInBuildDir(elems ...string) string {
	return filepath.Join(append([]string{getBuildDir()}, elems...)...)
}
func getPathInSourceDir(elems ...string) string {
	return filepath.Join(append([]string{getSourceDir()}, elems...)...)
}
func getPathsInSourceDir(filelist []string) []string {
	return utils.PrefixDirs(filelist, getSourceDir())
}
func getBackendPathInBuildDir(g generatorBackend, elems ...string) string {
	return filepath.Join(append([]string{g.buildDir()}, elems...)...)
}