github.com/westcoastroms/westcoastroms-build@v0.0.0-20190928114312-2350e5a73030/build/blueprint/bootstrap/config.go (about) 1 // Copyright 2014 Google Inc. All rights reserved. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package bootstrap 16 17 import ( 18 "os" 19 "path/filepath" 20 "runtime" 21 "strings" 22 23 "github.com/google/blueprint" 24 ) 25 26 func bootstrapVariable(name string, value func() string) blueprint.Variable { 27 return pctx.VariableFunc(name, func(config interface{}) (string, error) { 28 return value(), nil 29 }) 30 } 31 32 var ( 33 // These variables are the only configuration needed by the boostrap 34 // modules. 35 srcDir = bootstrapVariable("srcDir", func() string { 36 return SrcDir 37 }) 38 buildDir = bootstrapVariable("buildDir", func() string { 39 return BuildDir 40 }) 41 ninjaBuildDir = bootstrapVariable("ninjaBuildDir", func() string { 42 return NinjaBuildDir 43 }) 44 goRoot = bootstrapVariable("goRoot", func() string { 45 goroot := runtime.GOROOT() 46 // Prefer to omit absolute paths from the ninja file 47 if cwd, err := os.Getwd(); err == nil { 48 if relpath, err := filepath.Rel(cwd, goroot); err == nil { 49 if !strings.HasPrefix(relpath, "../") { 50 goroot = relpath 51 } 52 } 53 } 54 return goroot 55 }) 56 compileCmd = bootstrapVariable("compileCmd", func() string { 57 return "$goRoot/pkg/tool/" + runtime.GOOS + "_" + runtime.GOARCH + "/compile" 58 }) 59 linkCmd = bootstrapVariable("linkCmd", func() string { 60 return "$goRoot/pkg/tool/" + runtime.GOOS + "_" + runtime.GOARCH + "/link" 61 }) 62 ) 63 64 type ConfigInterface interface { 65 // GeneratingPrimaryBuilder should return true if this build invocation is 66 // creating a .bootstrap/build.ninja file to be used to build the 67 // primary builder 68 GeneratingPrimaryBuilder() bool 69 } 70 71 type ConfigRemoveAbandonedFilesUnder interface { 72 // RemoveAbandonedFilesUnder should return a slice of path prefixes that 73 // will be cleaned of files that are no longer active targets, but are 74 // listed in the .ninja_log. 75 RemoveAbandonedFilesUnder() []string 76 } 77 78 type ConfigBlueprintToolLocation interface { 79 // BlueprintToolLocation can return a path name to install blueprint tools 80 // designed for end users (bpfmt, bpmodify, and anything else using 81 // blueprint_go_binary). 82 BlueprintToolLocation() string 83 } 84 85 type StopBefore int 86 87 const ( 88 StopBeforePrepareBuildActions StopBefore = 1 89 ) 90 91 type ConfigStopBefore interface { 92 StopBefore() StopBefore 93 } 94 95 type Stage int 96 97 const ( 98 StagePrimary Stage = iota 99 StageMain 100 ) 101 102 type Config struct { 103 stage Stage 104 105 topLevelBlueprintsFile string 106 107 runGoTests bool 108 moduleListFile string 109 }