diff options
author | Colin Cross <ccross@android.com> | 2015-01-30 17:27:36 -0800 |
---|---|---|
committer | Colin Cross <ccross@android.com> | 2015-03-13 20:28:16 -0700 |
commit | 3f40fa460d85b10646d383a3b6b01ea6d569b01b (patch) | |
tree | 542d913a3f0f818042b503948869818a77e99ebc /cmd | |
parent | e441b9df9a68595d0dd7b8ed184aecb27c86054b (diff) | |
download | build_soong-3f40fa460d85b10646d383a3b6b01ea6d569b01b.tar.gz build_soong-3f40fa460d85b10646d383a3b6b01ea6d569b01b.tar.bz2 build_soong-3f40fa460d85b10646d383a3b6b01ea6d569b01b.zip |
Add soong_build primary builder
Initial build logic for building android with soong. It can build
a variety of C and C++ files for arm/arm64 and host.
Change-Id: I10eb37c2c2a50be6af1bb5fd568c0962b9476bf0
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/soong_build/main.go | 68 | ||||
-rw-r--r-- | cmd/soong_glob/soong_glob.go | 56 |
2 files changed, 124 insertions, 0 deletions
diff --git a/cmd/soong_build/main.go b/cmd/soong_build/main.go new file mode 100644 index 00000000..c1999fe2 --- /dev/null +++ b/cmd/soong_build/main.go @@ -0,0 +1,68 @@ +// Copyright 2015 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 main + +import ( + "flag" + "fmt" + "os" + "path/filepath" + + "blueprint" + "blueprint/bootstrap" + + "android/soong/cc" + "android/soong/common" + "android/soong/config" +) + +func main() { + flag.Parse() + + // The top-level Blueprints file is passed as the first argument. + srcDir := filepath.Dir(flag.Arg(0)) + + ctx := blueprint.NewContext() + + // Module types + ctx.RegisterModuleType("cc_library_static", cc.NewCCLibraryStatic) + ctx.RegisterModuleType("cc_library_shared", cc.NewCCLibraryShared) + ctx.RegisterModuleType("cc_library", cc.NewCCLibrary) + ctx.RegisterModuleType("cc_object", cc.NewCCObject) + ctx.RegisterModuleType("cc_binary", cc.NewCCBinary) + + ctx.RegisterModuleType("toolchain_library", cc.NewToolchainLibrary) + + ctx.RegisterModuleType("cc_library_host_static", cc.NewCCLibraryHostStatic) + ctx.RegisterModuleType("cc_library_host_shared", cc.NewCCLibraryHostShared) + ctx.RegisterModuleType("cc_binary_host", cc.NewCCBinaryHost) + + // Mutators + ctx.RegisterEarlyMutator("arch", common.ArchMutator) + ctx.RegisterEarlyMutator("link", cc.LinkageMutator) + + // Singletons + + configuration, err := config.New(srcDir) + if err != nil { + fmt.Fprintf(os.Stderr, "%s", err) + os.Exit(1) + } + + // Temporary hack + //ctx.SetIgnoreUnknownModuleTypes(true) + + bootstrap.Main(ctx, configuration, config.ConfigFileName) +} diff --git a/cmd/soong_glob/soong_glob.go b/cmd/soong_glob/soong_glob.go new file mode 100644 index 00000000..227d7b01 --- /dev/null +++ b/cmd/soong_glob/soong_glob.go @@ -0,0 +1,56 @@ +// Copyright 2015 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. + +// soong_glob is the command line tool that checks if the list of files matching a glob has +// changed, and only updates the output file list if it has changed. It is used to optimize +// out build.ninja regenerations when non-matching files are added. See +// android/soong/common/glob.go for a longer description. +package main + +import ( + "flag" + "fmt" + "os" + + "android/soong/glob" +) + +var ( + out = flag.String("o", "", "file to write list of files that match glob") +) + +func usage() { + fmt.Fprintf(os.Stderr, "usage: soong_glob -o out glob\n") + flag.PrintDefaults() + os.Exit(2) +} + +func main() { + flag.Parse() + + if *out == "" { + fmt.Fprintln(os.Stderr, "error: -o is required\n") + usage() + } + + if flag.NArg() != 1 { + usage() + } + + _, err := glob.GlobWithDepFile(flag.Arg(0), *out, *out+".d") + if err != nil { + fmt.Fprintf(os.Stderr, "error: %s\n", err.Error()) + os.Exit(1) + } +} |