Loading android/Android.bp +0 −3 Original line number Diff line number Diff line Loading @@ -78,9 +78,6 @@ bootstrap_go_package { "variable.go", "visibility.go", "writedocs.go", // Lock down environment access last "env.go", ], testSrcs: [ "android_test.go", Loading android/config.go +3 −3 Original line number Diff line number Diff line Loading @@ -345,7 +345,7 @@ func TestArchConfig(buildDir string, env map[string]string, bp string, fs map[st // multiple runs in the same program execution is carried over (such as Bazel // context or environment deps). func ConfigForAdditionalRun(c Config) (Config, error) { newConfig, err := NewConfig(c.srcDir, c.buildDir, c.moduleListFile) newConfig, err := NewConfig(c.srcDir, c.buildDir, c.moduleListFile, c.env) if err != nil { return Config{}, err } Loading @@ -356,12 +356,12 @@ func ConfigForAdditionalRun(c Config) (Config, error) { // NewConfig creates a new Config object. The srcDir argument specifies the path // to the root source directory. It also loads the config file, if found. func NewConfig(srcDir, buildDir string, moduleListFile string) (Config, error) { func NewConfig(srcDir, buildDir string, moduleListFile string, availableEnv map[string]string) (Config, error) { // Make a config with default options. config := &config{ ProductVariablesFileName: filepath.Join(buildDir, productVariablesFileName), env: originalEnv, env: availableEnv, srcDir: srcDir, buildDir: buildDir, Loading android/env.godeleted 100644 → 0 +0 −40 Original line number Diff line number Diff line // 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 android import ( "android/soong/shared" ) // This file supports dependencies on environment variables. During build // manifest generation, any dependency on an environment variable is added to a // list. At the end of the build, a JSON file called soong.environment.used is // written containing the current value of all used environment variables. The // next time the top-level build script is run, soong_ui parses the compare the // contents of the used environment variables, then, if they changed, deletes // soong.environment.used to cause a rebuild. // // The dependency of build.ninja on soong.environment.used is declared in // build.ninja.d var originalEnv map[string]string func InitEnvironment(envFile string) { var err error originalEnv, err = shared.EnvFromFile(envFile) if err != nil { panic(err) } } cmd/soong_build/main.go +28 −9 Original line number Diff line number Diff line Loading @@ -75,8 +75,8 @@ func newContext(configuration android.Config, prepareBuildActions bool) *android return ctx } func newConfig(srcDir, outDir string) android.Config { configuration, err := android.NewConfig(srcDir, outDir, bootstrap.CmdlineModuleListFile()) func newConfig(srcDir, outDir string, availableEnv map[string]string) android.Config { configuration, err := android.NewConfig(srcDir, outDir, bootstrap.CmdlineModuleListFile(), availableEnv) if err != nil { fmt.Fprintf(os.Stderr, "%s", err) os.Exit(1) Loading Loading @@ -188,12 +188,31 @@ func main() { shared.ReexecWithDelveMaybe(delveListen, delvePath) android.InitSandbox(topDir) android.InitEnvironment(shared.JoinPath(topDir, outDir, "soong.environment.available")) usedVariablesFile := shared.JoinPath(outDir, "soong.environment.used") // soong_ui dumps the available environment variables to // soong.environment.available . Then soong_build itself is run with an empty // environment so that the only way environment variables can be accessed is // using Config, which tracks access to them. // At the end of the build, a file called soong.environment.used is written // containing the current value of all used environment variables. The next // time soong_ui is run, it checks whether any environment variables that was // used had changed and if so, it deletes soong.environment.used to cause a // rebuild. // // The dependency of build.ninja on soong.environment.used is declared in // build.ninja.d availableEnvFile := shared.JoinPath(topDir, outDir, "soong.environment.available") usedEnvFile := shared.JoinPath(topDir, outDir, "soong.environment.used") availableEnv, err := shared.EnvFromFile(availableEnvFile) if err != nil { fmt.Fprintf(os.Stderr, "error reading available environment file %s: %s\n", availableEnvFile, err) os.Exit(1) } // The top-level Blueprints file is passed as the first argument. srcDir := filepath.Dir(flag.Arg(0)) configuration := newConfig(srcDir, outDir) configuration := newConfig(srcDir, outDir, availableEnv) extraNinjaDeps := []string{ configuration.ProductVariablesFileName, shared.JoinPath(outDir, "soong.environment.used"), Loading @@ -219,19 +238,19 @@ func main() { } doChosenActivity(configuration, extraNinjaDeps) writeUsedVariablesFile(shared.JoinPath(topDir, usedVariablesFile), configuration) writeUsedEnvironmentFile(usedEnvFile, configuration) } func writeUsedVariablesFile(path string, configuration android.Config) { func writeUsedEnvironmentFile(path string, configuration android.Config) { data, err := shared.EnvFileContents(configuration.EnvDeps()) if err != nil { fmt.Fprintf(os.Stderr, "error writing used variables file %s: %s\n", path, err) fmt.Fprintf(os.Stderr, "error writing used environment file %s: %s\n", path, err) os.Exit(1) } err = ioutil.WriteFile(path, data, 0666) if err != nil { fmt.Fprintf(os.Stderr, "error writing used variables file %s: %s\n", path, err) fmt.Fprintf(os.Stderr, "error writing used environment file %s: %s\n", path, err) os.Exit(1) } Loading Loading
android/Android.bp +0 −3 Original line number Diff line number Diff line Loading @@ -78,9 +78,6 @@ bootstrap_go_package { "variable.go", "visibility.go", "writedocs.go", // Lock down environment access last "env.go", ], testSrcs: [ "android_test.go", Loading
android/config.go +3 −3 Original line number Diff line number Diff line Loading @@ -345,7 +345,7 @@ func TestArchConfig(buildDir string, env map[string]string, bp string, fs map[st // multiple runs in the same program execution is carried over (such as Bazel // context or environment deps). func ConfigForAdditionalRun(c Config) (Config, error) { newConfig, err := NewConfig(c.srcDir, c.buildDir, c.moduleListFile) newConfig, err := NewConfig(c.srcDir, c.buildDir, c.moduleListFile, c.env) if err != nil { return Config{}, err } Loading @@ -356,12 +356,12 @@ func ConfigForAdditionalRun(c Config) (Config, error) { // NewConfig creates a new Config object. The srcDir argument specifies the path // to the root source directory. It also loads the config file, if found. func NewConfig(srcDir, buildDir string, moduleListFile string) (Config, error) { func NewConfig(srcDir, buildDir string, moduleListFile string, availableEnv map[string]string) (Config, error) { // Make a config with default options. config := &config{ ProductVariablesFileName: filepath.Join(buildDir, productVariablesFileName), env: originalEnv, env: availableEnv, srcDir: srcDir, buildDir: buildDir, Loading
android/env.godeleted 100644 → 0 +0 −40 Original line number Diff line number Diff line // 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 android import ( "android/soong/shared" ) // This file supports dependencies on environment variables. During build // manifest generation, any dependency on an environment variable is added to a // list. At the end of the build, a JSON file called soong.environment.used is // written containing the current value of all used environment variables. The // next time the top-level build script is run, soong_ui parses the compare the // contents of the used environment variables, then, if they changed, deletes // soong.environment.used to cause a rebuild. // // The dependency of build.ninja on soong.environment.used is declared in // build.ninja.d var originalEnv map[string]string func InitEnvironment(envFile string) { var err error originalEnv, err = shared.EnvFromFile(envFile) if err != nil { panic(err) } }
cmd/soong_build/main.go +28 −9 Original line number Diff line number Diff line Loading @@ -75,8 +75,8 @@ func newContext(configuration android.Config, prepareBuildActions bool) *android return ctx } func newConfig(srcDir, outDir string) android.Config { configuration, err := android.NewConfig(srcDir, outDir, bootstrap.CmdlineModuleListFile()) func newConfig(srcDir, outDir string, availableEnv map[string]string) android.Config { configuration, err := android.NewConfig(srcDir, outDir, bootstrap.CmdlineModuleListFile(), availableEnv) if err != nil { fmt.Fprintf(os.Stderr, "%s", err) os.Exit(1) Loading Loading @@ -188,12 +188,31 @@ func main() { shared.ReexecWithDelveMaybe(delveListen, delvePath) android.InitSandbox(topDir) android.InitEnvironment(shared.JoinPath(topDir, outDir, "soong.environment.available")) usedVariablesFile := shared.JoinPath(outDir, "soong.environment.used") // soong_ui dumps the available environment variables to // soong.environment.available . Then soong_build itself is run with an empty // environment so that the only way environment variables can be accessed is // using Config, which tracks access to them. // At the end of the build, a file called soong.environment.used is written // containing the current value of all used environment variables. The next // time soong_ui is run, it checks whether any environment variables that was // used had changed and if so, it deletes soong.environment.used to cause a // rebuild. // // The dependency of build.ninja on soong.environment.used is declared in // build.ninja.d availableEnvFile := shared.JoinPath(topDir, outDir, "soong.environment.available") usedEnvFile := shared.JoinPath(topDir, outDir, "soong.environment.used") availableEnv, err := shared.EnvFromFile(availableEnvFile) if err != nil { fmt.Fprintf(os.Stderr, "error reading available environment file %s: %s\n", availableEnvFile, err) os.Exit(1) } // The top-level Blueprints file is passed as the first argument. srcDir := filepath.Dir(flag.Arg(0)) configuration := newConfig(srcDir, outDir) configuration := newConfig(srcDir, outDir, availableEnv) extraNinjaDeps := []string{ configuration.ProductVariablesFileName, shared.JoinPath(outDir, "soong.environment.used"), Loading @@ -219,19 +238,19 @@ func main() { } doChosenActivity(configuration, extraNinjaDeps) writeUsedVariablesFile(shared.JoinPath(topDir, usedVariablesFile), configuration) writeUsedEnvironmentFile(usedEnvFile, configuration) } func writeUsedVariablesFile(path string, configuration android.Config) { func writeUsedEnvironmentFile(path string, configuration android.Config) { data, err := shared.EnvFileContents(configuration.EnvDeps()) if err != nil { fmt.Fprintf(os.Stderr, "error writing used variables file %s: %s\n", path, err) fmt.Fprintf(os.Stderr, "error writing used environment file %s: %s\n", path, err) os.Exit(1) } err = ioutil.WriteFile(path, data, 0666) if err != nil { fmt.Fprintf(os.Stderr, "error writing used variables file %s: %s\n", path, err) fmt.Fprintf(os.Stderr, "error writing used environment file %s: %s\n", path, err) os.Exit(1) } Loading