platform_build_blueprint/bootstrap/config.go
Dan Willemsen 1e72321e58 Use microfactory to build the bootstrap minibp
This duplicates building common blueprint go packages between minibp and
the primary builder, but drastically simplifies the first stage,
removing the need to check in a generated build.ninja.in.

Change-Id: I639a9637f1ed36d4210823ef276c0f7a064a83bd
2017-07-24 14:02:51 -07:00

82 lines
2.3 KiB
Go

// Copyright 2014 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package bootstrap
import (
"runtime"
"github.com/google/blueprint"
)
func bootstrapVariable(name string, value func() string) blueprint.Variable {
return pctx.VariableFunc(name, func(config interface{}) (string, error) {
return value(), nil
})
}
var (
// These variables are the only configuration needed by the boostrap
// modules.
srcDir = bootstrapVariable("srcDir", func() string {
return SrcDir
})
buildDir = bootstrapVariable("buildDir", func() string {
return BuildDir
})
goRoot = bootstrapVariable("goRoot", func() string {
return runtime.GOROOT()
})
compileCmd = bootstrapVariable("compileCmd", func() string {
return "$goRoot/pkg/tool/" + runtime.GOOS + "_" + runtime.GOARCH + "/compile"
})
linkCmd = bootstrapVariable("linkCmd", func() string {
return "$goRoot/pkg/tool/" + runtime.GOOS + "_" + runtime.GOARCH + "/link"
})
)
type ConfigInterface interface {
// GeneratingPrimaryBuilder should return true if this build invocation is
// creating a .bootstrap/build.ninja file to be used to build the
// primary builder
GeneratingPrimaryBuilder() bool
}
type ConfigRemoveAbandonedFiles interface {
// RemoveAbandonedFiles should return true if files listed in the
// .ninja_log but not the output build.ninja file should be deleted.
RemoveAbandonedFiles() bool
}
type ConfigBlueprintToolLocation interface {
// BlueprintToolLocation can return a path name to install blueprint tools
// designed for end users (bpfmt, bpmodify, and anything else using
// blueprint_go_binary).
BlueprintToolLocation() string
}
type Stage int
const (
StagePrimary Stage = iota
StageMain
)
type Config struct {
stage Stage
topLevelBlueprintsFile string
runGoTests bool
}