Home | History | Annotate | Download | only in soong_build
      1 // Copyright 2015 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 main
     16 
     17 import (
     18 	"flag"
     19 	"fmt"
     20 	"os"
     21 	"path/filepath"
     22 
     23 	"github.com/google/blueprint/bootstrap"
     24 
     25 	"android/soong/android"
     26 )
     27 
     28 var (
     29 	docFile string
     30 )
     31 
     32 func init() {
     33 	flag.StringVar(&docFile, "soong_docs", "", "build documentation file to output")
     34 }
     35 
     36 func newNameResolver(config android.Config) *android.NameResolver {
     37 	namespacePathsToExport := make(map[string]bool)
     38 
     39 	for _, namespaceName := range config.ExportedNamespaces() {
     40 		namespacePathsToExport[namespaceName] = true
     41 	}
     42 
     43 	namespacePathsToExport["."] = true // always export the root namespace
     44 
     45 	exportFilter := func(namespace *android.Namespace) bool {
     46 		return namespacePathsToExport[namespace.Path]
     47 	}
     48 
     49 	return android.NewNameResolver(exportFilter)
     50 }
     51 
     52 func main() {
     53 	flag.Parse()
     54 
     55 	// The top-level Blueprints file is passed as the first argument.
     56 	srcDir := filepath.Dir(flag.Arg(0))
     57 
     58 	ctx := android.NewContext()
     59 	ctx.Register()
     60 
     61 	configuration, err := android.NewConfig(srcDir, bootstrap.BuildDir)
     62 	if err != nil {
     63 		fmt.Fprintf(os.Stderr, "%s", err)
     64 		os.Exit(1)
     65 	}
     66 
     67 	if docFile != "" {
     68 		configuration.SetStopBefore(bootstrap.StopBeforePrepareBuildActions)
     69 	}
     70 
     71 	ctx.SetNameInterface(newNameResolver(configuration))
     72 
     73 	ctx.SetAllowMissingDependencies(configuration.AllowMissingDependencies())
     74 
     75 	bootstrap.Main(ctx.Context, configuration, configuration.ConfigFileName, configuration.ProductVariablesFileName)
     76 
     77 	if docFile != "" {
     78 		if err := writeDocs(ctx, docFile); err != nil {
     79 			fmt.Fprintf(os.Stderr, "%s", err)
     80 			os.Exit(1)
     81 		}
     82 	}
     83 }
     84