• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
15package main
16
17import (
18	"flag"
19	"fmt"
20	"os"
21	"path/filepath"
22
23	"github.com/google/blueprint/bootstrap"
24
25	"android/soong/android"
26)
27
28var (
29	docFile string
30)
31
32func init() {
33	flag.StringVar(&docFile, "soong_docs", "", "build documentation file to output")
34}
35
36func 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
52func 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