1*9bb1b549SSpandan Das// Copyright 2018 The Bazel Authors. All rights reserved. 2*9bb1b549SSpandan Das// 3*9bb1b549SSpandan Das// Licensed under the Apache License, Version 2.0 (the "License"); 4*9bb1b549SSpandan Das// you may not use this file except in compliance with the License. 5*9bb1b549SSpandan Das// You may obtain a copy of the License at 6*9bb1b549SSpandan Das// 7*9bb1b549SSpandan Das// http://www.apache.org/licenses/LICENSE-2.0 8*9bb1b549SSpandan Das// 9*9bb1b549SSpandan Das// Unless required by applicable law or agreed to in writing, software 10*9bb1b549SSpandan Das// distributed under the License is distributed on an "AS IS" BASIS, 11*9bb1b549SSpandan Das// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*9bb1b549SSpandan Das// See the License for the specific language governing permissions and 13*9bb1b549SSpandan Das// limitations under the License. 14*9bb1b549SSpandan Das 15*9bb1b549SSpandan Das// builder implements most of the actions for Bazel to compile and link 16*9bb1b549SSpandan Das// go code. We use a single binary for most actions, since this reduces 17*9bb1b549SSpandan Das// the number of inputs needed for each action and allows us to build 18*9bb1b549SSpandan Das// multiple related files in a single action. 19*9bb1b549SSpandan Das 20*9bb1b549SSpandan Daspackage main 21*9bb1b549SSpandan Das 22*9bb1b549SSpandan Dasimport ( 23*9bb1b549SSpandan Das "log" 24*9bb1b549SSpandan Das "os" 25*9bb1b549SSpandan Das) 26*9bb1b549SSpandan Das 27*9bb1b549SSpandan Dasfunc main() { 28*9bb1b549SSpandan Das log.SetFlags(0) 29*9bb1b549SSpandan Das log.SetPrefix("builder: ") 30*9bb1b549SSpandan Das 31*9bb1b549SSpandan Das args, _, err := expandParamsFiles(os.Args[1:]) 32*9bb1b549SSpandan Das if err != nil { 33*9bb1b549SSpandan Das log.Fatal(err) 34*9bb1b549SSpandan Das } 35*9bb1b549SSpandan Das if len(args) == 0 { 36*9bb1b549SSpandan Das log.Fatalf("usage: %s verb options...", os.Args[0]) 37*9bb1b549SSpandan Das } 38*9bb1b549SSpandan Das verb, rest := args[0], args[1:] 39*9bb1b549SSpandan Das 40*9bb1b549SSpandan Das var action func(args []string) error 41*9bb1b549SSpandan Das switch verb { 42*9bb1b549SSpandan Das case "compilepkg": 43*9bb1b549SSpandan Das action = compilePkg 44*9bb1b549SSpandan Das case "filterbuildid": 45*9bb1b549SSpandan Das action = filterBuildID 46*9bb1b549SSpandan Das case "gentestmain": 47*9bb1b549SSpandan Das action = genTestMain 48*9bb1b549SSpandan Das case "link": 49*9bb1b549SSpandan Das action = link 50*9bb1b549SSpandan Das case "gennogomain": 51*9bb1b549SSpandan Das action = genNogoMain 52*9bb1b549SSpandan Das case "stdlib": 53*9bb1b549SSpandan Das action = stdlib 54*9bb1b549SSpandan Das case "stdliblist": 55*9bb1b549SSpandan Das action = stdliblist 56*9bb1b549SSpandan Das default: 57*9bb1b549SSpandan Das log.Fatalf("unknown action: %s", verb) 58*9bb1b549SSpandan Das } 59*9bb1b549SSpandan Das log.SetPrefix(verb + ": ") 60*9bb1b549SSpandan Das 61*9bb1b549SSpandan Das if err := action(rest); err != nil { 62*9bb1b549SSpandan Das log.Fatal(err) 63*9bb1b549SSpandan Das } 64*9bb1b549SSpandan Das} 65