Rename BuildDir and NinjaBuildDir.
These are just out/ and out/soong/ and the old names were quite confusing. Test: Presubmits. Merged-In: I999ca62162062f27e449f83ffb00fa580d4065b8 Merged-In: I2fcd80a9e376a6842a06aa104a9f6f5c5e16f8c7 Change-Id: Ib481d2aac40df8da1b74174dc8ec576c1cb48be0
This commit is contained in:
@@ -106,7 +106,7 @@ type bazelPaths struct {
|
|||||||
bazelPath string
|
bazelPath string
|
||||||
outputBase string
|
outputBase string
|
||||||
workspaceDir string
|
workspaceDir string
|
||||||
buildDir string
|
soongOutDir string
|
||||||
metricsDir string
|
metricsDir string
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -254,7 +254,7 @@ func NewBazelContext(c *config) (BazelContext, error) {
|
|||||||
|
|
||||||
func bazelPathsFromConfig(c *config) (*bazelPaths, error) {
|
func bazelPathsFromConfig(c *config) (*bazelPaths, error) {
|
||||||
p := bazelPaths{
|
p := bazelPaths{
|
||||||
buildDir: c.buildDir,
|
soongOutDir: c.soongOutDir,
|
||||||
}
|
}
|
||||||
missingEnvVars := []string{}
|
missingEnvVars := []string{}
|
||||||
if len(c.Getenv("BAZEL_HOME")) > 1 {
|
if len(c.Getenv("BAZEL_HOME")) > 1 {
|
||||||
@@ -382,7 +382,7 @@ func (r *builtinBazelRunner) issueBazelCommand(paths *bazelPaths, runName bazel.
|
|||||||
bazelCmd.Env = append(os.Environ(),
|
bazelCmd.Env = append(os.Environ(),
|
||||||
"HOME="+paths.homeDir,
|
"HOME="+paths.homeDir,
|
||||||
pwdPrefix(),
|
pwdPrefix(),
|
||||||
"BUILD_DIR="+absolutePath(paths.buildDir),
|
"BUILD_DIR="+absolutePath(paths.soongOutDir),
|
||||||
// Make OUT_DIR absolute here so tools/bazel.sh uses the correct
|
// Make OUT_DIR absolute here so tools/bazel.sh uses the correct
|
||||||
// OUT_DIR at <root>/out, instead of <root>/out/soong/workspace/out.
|
// OUT_DIR at <root>/out, instead of <root>/out/soong/workspace/out.
|
||||||
"OUT_DIR="+absolutePath(paths.outDir()),
|
"OUT_DIR="+absolutePath(paths.outDir()),
|
||||||
@@ -599,24 +599,24 @@ def format(target):
|
|||||||
// Returns a path containing build-related metadata required for interfacing
|
// Returns a path containing build-related metadata required for interfacing
|
||||||
// with Bazel. Example: out/soong/bazel.
|
// with Bazel. Example: out/soong/bazel.
|
||||||
func (p *bazelPaths) intermediatesDir() string {
|
func (p *bazelPaths) intermediatesDir() string {
|
||||||
return filepath.Join(p.buildDir, "bazel")
|
return filepath.Join(p.soongOutDir, "bazel")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the path where the contents of the @soong_injection repository live.
|
// Returns the path where the contents of the @soong_injection repository live.
|
||||||
// It is used by Soong to tell Bazel things it cannot over the command line.
|
// It is used by Soong to tell Bazel things it cannot over the command line.
|
||||||
func (p *bazelPaths) injectedFilesDir() string {
|
func (p *bazelPaths) injectedFilesDir() string {
|
||||||
return filepath.Join(p.buildDir, bazel.SoongInjectionDirName)
|
return filepath.Join(p.soongOutDir, bazel.SoongInjectionDirName)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the path of the synthetic Bazel workspace that contains a symlink
|
// Returns the path of the synthetic Bazel workspace that contains a symlink
|
||||||
// forest composed the whole source tree and BUILD files generated by bp2build.
|
// forest composed the whole source tree and BUILD files generated by bp2build.
|
||||||
func (p *bazelPaths) syntheticWorkspaceDir() string {
|
func (p *bazelPaths) syntheticWorkspaceDir() string {
|
||||||
return filepath.Join(p.buildDir, "workspace")
|
return filepath.Join(p.soongOutDir, "workspace")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the path to the top level out dir ($OUT_DIR).
|
// Returns the path to the top level out dir ($OUT_DIR).
|
||||||
func (p *bazelPaths) outDir() string {
|
func (p *bazelPaths) outDir() string {
|
||||||
return filepath.Dir(p.buildDir)
|
return filepath.Dir(p.soongOutDir)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Issues commands to Bazel to receive results for all cquery requests
|
// Issues commands to Bazel to receive results for all cquery requests
|
||||||
|
@@ -101,7 +101,7 @@ func TestInvokeBazelPopulatesBuildStatements(t *testing.T) {
|
|||||||
func testBazelContext(t *testing.T, bazelCommandResults map[bazelCommand]string) (*bazelContext, string) {
|
func testBazelContext(t *testing.T, bazelCommandResults map[bazelCommand]string) (*bazelContext, string) {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
p := bazelPaths{
|
p := bazelPaths{
|
||||||
buildDir: t.TempDir(),
|
soongOutDir: t.TempDir(),
|
||||||
outputBase: "outputbase",
|
outputBase: "outputbase",
|
||||||
workspaceDir: "workspace_dir",
|
workspaceDir: "workspace_dir",
|
||||||
}
|
}
|
||||||
@@ -114,5 +114,5 @@ func testBazelContext(t *testing.T, bazelCommandResults map[bazelCommand]string)
|
|||||||
bazelRunner: runner,
|
bazelRunner: runner,
|
||||||
paths: &p,
|
paths: &p,
|
||||||
requests: map[cqueryKey]bool{},
|
requests: map[cqueryKey]bool{},
|
||||||
}, p.buildDir
|
}, p.soongOutDir
|
||||||
}
|
}
|
||||||
|
@@ -414,7 +414,7 @@ func PathForBazelOut(ctx PathContext, paths ...string) BazelOutPath {
|
|||||||
}
|
}
|
||||||
|
|
||||||
outputPath := OutputPath{basePath{"", ""},
|
outputPath := OutputPath{basePath{"", ""},
|
||||||
ctx.Config().buildDir,
|
ctx.Config().soongOutDir,
|
||||||
ctx.Config().BazelContext.OutputBase()}
|
ctx.Config().BazelContext.OutputBase()}
|
||||||
|
|
||||||
return BazelOutPath{
|
return BazelOutPath{
|
||||||
|
@@ -67,12 +67,12 @@ type Config struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// BuildDir returns the build output directory for the configuration.
|
// BuildDir returns the build output directory for the configuration.
|
||||||
func (c Config) BuildDir() string {
|
func (c Config) SoongOutDir() string {
|
||||||
return c.buildDir
|
return c.soongOutDir
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c Config) NinjaBuildDir() string {
|
func (c Config) OutDir() string {
|
||||||
return c.buildDir
|
return c.soongOutDir
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c Config) DebugCompilation() bool {
|
func (c Config) DebugCompilation() bool {
|
||||||
@@ -122,7 +122,7 @@ type config struct {
|
|||||||
|
|
||||||
deviceConfig *deviceConfig
|
deviceConfig *deviceConfig
|
||||||
|
|
||||||
buildDir string // the path of the build output directory
|
soongOutDir string // the path of the build output directory
|
||||||
moduleListFile string // the path to the file which lists blueprint files to parse.
|
moduleListFile string // the path to the file which lists blueprint files to parse.
|
||||||
|
|
||||||
env map[string]string
|
env map[string]string
|
||||||
@@ -283,10 +283,10 @@ func saveToBazelConfigFile(config *productVariables, outDir string) error {
|
|||||||
|
|
||||||
// NullConfig returns a mostly empty Config for use by standalone tools like dexpreopt_gen that
|
// NullConfig returns a mostly empty Config for use by standalone tools like dexpreopt_gen that
|
||||||
// use the android package.
|
// use the android package.
|
||||||
func NullConfig(buildDir string) Config {
|
func NullConfig(soongOutDir string) Config {
|
||||||
return Config{
|
return Config{
|
||||||
config: &config{
|
config: &config{
|
||||||
buildDir: buildDir,
|
soongOutDir: soongOutDir,
|
||||||
fs: pathtools.OsFs,
|
fs: pathtools.OsFs,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -319,7 +319,7 @@ func TestConfig(buildDir string, env map[string]string, bp string, fs map[string
|
|||||||
ShippingApiLevel: stringPtr("30"),
|
ShippingApiLevel: stringPtr("30"),
|
||||||
},
|
},
|
||||||
|
|
||||||
buildDir: buildDir,
|
soongOutDir: buildDir,
|
||||||
captureBuild: true,
|
captureBuild: true,
|
||||||
env: envCopy,
|
env: envCopy,
|
||||||
|
|
||||||
@@ -397,7 +397,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
|
// multiple runs in the same program execution is carried over (such as Bazel
|
||||||
// context or environment deps).
|
// context or environment deps).
|
||||||
func ConfigForAdditionalRun(c Config) (Config, error) {
|
func ConfigForAdditionalRun(c Config) (Config, error) {
|
||||||
newConfig, err := NewConfig(c.buildDir, c.moduleListFile, c.env)
|
newConfig, err := NewConfig(c.soongOutDir, c.moduleListFile, c.env)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return Config{}, err
|
return Config{}, err
|
||||||
}
|
}
|
||||||
@@ -408,14 +408,14 @@ func ConfigForAdditionalRun(c Config) (Config, error) {
|
|||||||
|
|
||||||
// NewConfig creates a new Config object. The srcDir argument specifies the path
|
// 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.
|
// to the root source directory. It also loads the config file, if found.
|
||||||
func NewConfig(buildDir string, moduleListFile string, availableEnv map[string]string) (Config, error) {
|
func NewConfig(soongOutDir string, moduleListFile string, availableEnv map[string]string) (Config, error) {
|
||||||
// Make a config with default options.
|
// Make a config with default options.
|
||||||
config := &config{
|
config := &config{
|
||||||
ProductVariablesFileName: filepath.Join(buildDir, productVariablesFileName),
|
ProductVariablesFileName: filepath.Join(soongOutDir, productVariablesFileName),
|
||||||
|
|
||||||
env: availableEnv,
|
env: availableEnv,
|
||||||
|
|
||||||
buildDir: buildDir,
|
soongOutDir: soongOutDir,
|
||||||
multilibConflicts: make(map[ArchType]bool),
|
multilibConflicts: make(map[ArchType]bool),
|
||||||
|
|
||||||
moduleListFile: moduleListFile,
|
moduleListFile: moduleListFile,
|
||||||
@@ -428,7 +428,7 @@ func NewConfig(buildDir string, moduleListFile string, availableEnv map[string]s
|
|||||||
|
|
||||||
// Soundness check of the build and source directories. This won't catch strange
|
// Soundness check of the build and source directories. This won't catch strange
|
||||||
// configurations with symlinks, but at least checks the obvious case.
|
// configurations with symlinks, but at least checks the obvious case.
|
||||||
absBuildDir, err := filepath.Abs(buildDir)
|
absBuildDir, err := filepath.Abs(soongOutDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return Config{}, err
|
return Config{}, err
|
||||||
}
|
}
|
||||||
@@ -448,7 +448,7 @@ func NewConfig(buildDir string, moduleListFile string, availableEnv map[string]s
|
|||||||
return Config{}, err
|
return Config{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
KatiEnabledMarkerFile := filepath.Join(buildDir, ".soong.kati_enabled")
|
KatiEnabledMarkerFile := filepath.Join(soongOutDir, ".soong.kati_enabled")
|
||||||
if _, err := os.Stat(absolutePath(KatiEnabledMarkerFile)); err == nil {
|
if _, err := os.Stat(absolutePath(KatiEnabledMarkerFile)); err == nil {
|
||||||
config.katiEnabled = true
|
config.katiEnabled = true
|
||||||
}
|
}
|
||||||
@@ -556,7 +556,7 @@ var _ bootstrap.ConfigStopBefore = (*config)(nil)
|
|||||||
// BlueprintToolLocation returns the directory containing build system tools
|
// BlueprintToolLocation returns the directory containing build system tools
|
||||||
// from Blueprint, like soong_zip and merge_zips.
|
// from Blueprint, like soong_zip and merge_zips.
|
||||||
func (c *config) BlueprintToolLocation() string {
|
func (c *config) BlueprintToolLocation() string {
|
||||||
return filepath.Join(c.buildDir, "host", c.PrebuiltOS(), "bin")
|
return filepath.Join(c.soongOutDir, "host", c.PrebuiltOS(), "bin")
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ bootstrap.ConfigBlueprintToolLocation = (*config)(nil)
|
var _ bootstrap.ConfigBlueprintToolLocation = (*config)(nil)
|
||||||
|
@@ -834,7 +834,7 @@ func (f *fixture) outputDebugState() {
|
|||||||
func (r *TestResult) NormalizePathForTesting(path Path) string {
|
func (r *TestResult) NormalizePathForTesting(path Path) string {
|
||||||
pathContext := PathContextForTesting(r.Config)
|
pathContext := PathContextForTesting(r.Config)
|
||||||
pathAsString := path.String()
|
pathAsString := path.String()
|
||||||
if rel, isRel := MaybeRel(pathContext, r.Config.BuildDir(), pathAsString); isRel {
|
if rel, isRel := MaybeRel(pathContext, r.Config.SoongOutDir(), pathAsString); isRel {
|
||||||
return rel
|
return rel
|
||||||
}
|
}
|
||||||
return pathAsString
|
return pathAsString
|
||||||
|
@@ -186,13 +186,13 @@ type Path interface {
|
|||||||
// A standard build has the following structure:
|
// A standard build has the following structure:
|
||||||
// ../top/
|
// ../top/
|
||||||
// out/ - make install files go here.
|
// out/ - make install files go here.
|
||||||
// out/soong - this is the buildDir passed to NewTestConfig()
|
// out/soong - this is the soongOutDir passed to NewTestConfig()
|
||||||
// ... - the source files
|
// ... - the source files
|
||||||
//
|
//
|
||||||
// This function converts a path so that it appears relative to the ../top/ directory, i.e.
|
// This function converts a path so that it appears relative to the ../top/ directory, i.e.
|
||||||
// * Make install paths, which have the pattern "buildDir/../<path>" are converted into the top
|
// * Make install paths, which have the pattern "soongOutDir/../<path>" are converted into the top
|
||||||
// relative path "out/<path>"
|
// relative path "out/<path>"
|
||||||
// * Soong install paths and other writable paths, which have the pattern "buildDir/<path>" are
|
// * Soong install paths and other writable paths, which have the pattern "soongOutDir/<path>" are
|
||||||
// converted into the top relative path "out/soong/<path>".
|
// converted into the top relative path "out/soong/<path>".
|
||||||
// * Source paths are already relative to the top.
|
// * Source paths are already relative to the top.
|
||||||
// * Phony paths are not relative to anything.
|
// * Phony paths are not relative to anything.
|
||||||
@@ -211,7 +211,7 @@ type WritablePath interface {
|
|||||||
Path
|
Path
|
||||||
|
|
||||||
// return the path to the build directory.
|
// return the path to the build directory.
|
||||||
getBuildDir() string
|
getSoongOutDir() string
|
||||||
|
|
||||||
// the writablePath method doesn't directly do anything,
|
// the writablePath method doesn't directly do anything,
|
||||||
// but it allows a struct to distinguish between whether or not it implements the WritablePath interface
|
// but it allows a struct to distinguish between whether or not it implements the WritablePath interface
|
||||||
@@ -992,7 +992,7 @@ func safePathForSource(ctx PathContext, pathComponents ...string) (SourcePath, e
|
|||||||
}
|
}
|
||||||
|
|
||||||
// absolute path already checked by validateSafePath
|
// absolute path already checked by validateSafePath
|
||||||
if strings.HasPrefix(ret.String(), ctx.Config().buildDir) {
|
if strings.HasPrefix(ret.String(), ctx.Config().soongOutDir) {
|
||||||
return ret, fmt.Errorf("source path %q is in output", ret.String())
|
return ret, fmt.Errorf("source path %q is in output", ret.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1008,7 +1008,7 @@ func pathForSource(ctx PathContext, pathComponents ...string) (SourcePath, error
|
|||||||
}
|
}
|
||||||
|
|
||||||
// absolute path already checked by validatePath
|
// absolute path already checked by validatePath
|
||||||
if strings.HasPrefix(ret.String(), ctx.Config().buildDir) {
|
if strings.HasPrefix(ret.String(), ctx.Config().soongOutDir) {
|
||||||
return ret, fmt.Errorf("source path %q is in output", ret.String())
|
return ret, fmt.Errorf("source path %q is in output", ret.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1151,7 +1151,7 @@ type OutputPath struct {
|
|||||||
basePath
|
basePath
|
||||||
|
|
||||||
// The soong build directory, i.e. Config.BuildDir()
|
// The soong build directory, i.e. Config.BuildDir()
|
||||||
buildDir string
|
soongOutDir string
|
||||||
|
|
||||||
fullPath string
|
fullPath string
|
||||||
}
|
}
|
||||||
@@ -1167,8 +1167,8 @@ func (p OutputPath) WithoutRel() OutputPath {
|
|||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p OutputPath) getBuildDir() string {
|
func (p OutputPath) getSoongOutDir() string {
|
||||||
return p.buildDir
|
return p.soongOutDir
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p OutputPath) RelativeToTop() Path {
|
func (p OutputPath) RelativeToTop() Path {
|
||||||
@@ -1176,8 +1176,8 @@ func (p OutputPath) RelativeToTop() Path {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p OutputPath) outputPathRelativeToTop() OutputPath {
|
func (p OutputPath) outputPathRelativeToTop() OutputPath {
|
||||||
p.fullPath = StringPathRelativeToTop(p.buildDir, p.fullPath)
|
p.fullPath = StringPathRelativeToTop(p.soongOutDir, p.fullPath)
|
||||||
p.buildDir = OutSoongDir
|
p.soongOutDir = OutSoongDir
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1218,12 +1218,12 @@ func PathForOutput(ctx PathContext, pathComponents ...string) OutputPath {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
reportPathError(ctx, err)
|
reportPathError(ctx, err)
|
||||||
}
|
}
|
||||||
fullPath := filepath.Join(ctx.Config().buildDir, path)
|
fullPath := filepath.Join(ctx.Config().soongOutDir, path)
|
||||||
path = fullPath[len(fullPath)-len(path):]
|
path = fullPath[len(fullPath)-len(path):]
|
||||||
return OutputPath{basePath{path, ""}, ctx.Config().buildDir, fullPath}
|
return OutputPath{basePath{path, ""}, ctx.Config().soongOutDir, fullPath}
|
||||||
}
|
}
|
||||||
|
|
||||||
// PathsForOutput returns Paths rooted from buildDir
|
// PathsForOutput returns Paths rooted from soongOutDir
|
||||||
func PathsForOutput(ctx PathContext, paths []string) WritablePaths {
|
func PathsForOutput(ctx PathContext, paths []string) WritablePaths {
|
||||||
ret := make(WritablePaths, len(paths))
|
ret := make(WritablePaths, len(paths))
|
||||||
for i, path := range paths {
|
for i, path := range paths {
|
||||||
@@ -1545,7 +1545,7 @@ type InstallPath struct {
|
|||||||
basePath
|
basePath
|
||||||
|
|
||||||
// The soong build directory, i.e. Config.BuildDir()
|
// The soong build directory, i.e. Config.BuildDir()
|
||||||
buildDir string
|
soongOutDir string
|
||||||
|
|
||||||
// partitionDir is the part of the InstallPath that is automatically determined according to the context.
|
// partitionDir is the part of the InstallPath that is automatically determined according to the context.
|
||||||
// For example, it is host/<os>-<arch> for host modules, and target/product/<device>/<partition> for device modules.
|
// For example, it is host/<os>-<arch> for host modules, and target/product/<device>/<partition> for device modules.
|
||||||
@@ -1565,12 +1565,12 @@ func ensureTestOnly() {
|
|||||||
|
|
||||||
func (p InstallPath) RelativeToTop() Path {
|
func (p InstallPath) RelativeToTop() Path {
|
||||||
ensureTestOnly()
|
ensureTestOnly()
|
||||||
p.buildDir = OutSoongDir
|
p.soongOutDir = OutSoongDir
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p InstallPath) getBuildDir() string {
|
func (p InstallPath) getSoongOutDir() string {
|
||||||
return p.buildDir
|
return p.soongOutDir
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p InstallPath) ReplaceExtension(ctx PathContext, ext string) OutputPath {
|
func (p InstallPath) ReplaceExtension(ctx PathContext, ext string) OutputPath {
|
||||||
@@ -1585,9 +1585,9 @@ func (p InstallPath) writablePath() {}
|
|||||||
func (p InstallPath) String() string {
|
func (p InstallPath) String() string {
|
||||||
if p.makePath {
|
if p.makePath {
|
||||||
// Make path starts with out/ instead of out/soong.
|
// Make path starts with out/ instead of out/soong.
|
||||||
return filepath.Join(p.buildDir, "../", p.path)
|
return filepath.Join(p.soongOutDir, "../", p.path)
|
||||||
} else {
|
} else {
|
||||||
return filepath.Join(p.buildDir, p.path)
|
return filepath.Join(p.soongOutDir, p.path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1596,9 +1596,9 @@ func (p InstallPath) String() string {
|
|||||||
// The ./soong is dropped if the install path is for Make.
|
// The ./soong is dropped if the install path is for Make.
|
||||||
func (p InstallPath) PartitionDir() string {
|
func (p InstallPath) PartitionDir() string {
|
||||||
if p.makePath {
|
if p.makePath {
|
||||||
return filepath.Join(p.buildDir, "../", p.partitionDir)
|
return filepath.Join(p.soongOutDir, "../", p.partitionDir)
|
||||||
} else {
|
} else {
|
||||||
return filepath.Join(p.buildDir, p.partitionDir)
|
return filepath.Join(p.soongOutDir, p.partitionDir)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1694,7 +1694,7 @@ func pathForInstall(ctx PathContext, os OsType, arch ArchType, partition string,
|
|||||||
|
|
||||||
base := InstallPath{
|
base := InstallPath{
|
||||||
basePath: basePath{partionPath, ""},
|
basePath: basePath{partionPath, ""},
|
||||||
buildDir: ctx.Config().buildDir,
|
soongOutDir: ctx.Config().soongOutDir,
|
||||||
partitionDir: partionPath,
|
partitionDir: partionPath,
|
||||||
makePath: false,
|
makePath: false,
|
||||||
}
|
}
|
||||||
@@ -1705,7 +1705,7 @@ func pathForInstall(ctx PathContext, os OsType, arch ArchType, partition string,
|
|||||||
func pathForNdkOrSdkInstall(ctx PathContext, prefix string, paths []string) InstallPath {
|
func pathForNdkOrSdkInstall(ctx PathContext, prefix string, paths []string) InstallPath {
|
||||||
base := InstallPath{
|
base := InstallPath{
|
||||||
basePath: basePath{prefix, ""},
|
basePath: basePath{prefix, ""},
|
||||||
buildDir: ctx.Config().buildDir,
|
soongOutDir: ctx.Config().soongOutDir,
|
||||||
partitionDir: prefix,
|
partitionDir: prefix,
|
||||||
makePath: false,
|
makePath: false,
|
||||||
}
|
}
|
||||||
@@ -1851,7 +1851,7 @@ type PhonyPath struct {
|
|||||||
|
|
||||||
func (p PhonyPath) writablePath() {}
|
func (p PhonyPath) writablePath() {}
|
||||||
|
|
||||||
func (p PhonyPath) getBuildDir() string {
|
func (p PhonyPath) getSoongOutDir() string {
|
||||||
// A phone path cannot contain any / so cannot be relative to the build directory.
|
// A phone path cannot contain any / so cannot be relative to the build directory.
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
@@ -54,10 +54,10 @@ type SingletonContext interface {
|
|||||||
|
|
||||||
RequireNinjaVersion(major, minor, micro int)
|
RequireNinjaVersion(major, minor, micro int)
|
||||||
|
|
||||||
// SetNinjaBuildDir sets the value of the top-level "builddir" Ninja variable
|
// SetOutDir sets the value of the top-level "builddir" Ninja variable
|
||||||
// that controls where Ninja stores its build log files. This value can be
|
// that controls where Ninja stores its build log files. This value can be
|
||||||
// set at most one time for a single build, later calls are ignored.
|
// set at most one time for a single build, later calls are ignored.
|
||||||
SetNinjaBuildDir(pctx PackageContext, value string)
|
SetOutDir(pctx PackageContext, value string)
|
||||||
|
|
||||||
// Eval takes a string with embedded ninja variables, and returns a string
|
// Eval takes a string with embedded ninja variables, and returns a string
|
||||||
// with all of the variables recursively expanded. Any variables references
|
// with all of the variables recursively expanded. Any variables references
|
||||||
@@ -180,8 +180,8 @@ func (s *singletonContextAdaptor) Phony(name string, deps ...Path) {
|
|||||||
addPhony(s.Config(), name, deps...)
|
addPhony(s.Config(), name, deps...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *singletonContextAdaptor) SetNinjaBuildDir(pctx PackageContext, value string) {
|
func (s *singletonContextAdaptor) SetOutDir(pctx PackageContext, value string) {
|
||||||
s.SingletonContext.SetNinjaBuildDir(pctx.PackageContext, value)
|
s.SingletonContext.SetOutDir(pctx.PackageContext, value)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *singletonContextAdaptor) Eval(pctx PackageContext, ninjaStr string) (string, error) {
|
func (s *singletonContextAdaptor) Eval(pctx PackageContext, ninjaStr string) (string, error) {
|
||||||
|
@@ -77,14 +77,14 @@ func AssertPathsRelativeToTopEquals(t *testing.T, message string, expected []str
|
|||||||
// StringPathRelativeToTop on the actual string path.
|
// StringPathRelativeToTop on the actual string path.
|
||||||
func AssertStringPathRelativeToTopEquals(t *testing.T, message string, config Config, expected string, actual string) {
|
func AssertStringPathRelativeToTopEquals(t *testing.T, message string, config Config, expected string, actual string) {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
AssertStringEquals(t, message, expected, StringPathRelativeToTop(config.buildDir, actual))
|
AssertStringEquals(t, message, expected, StringPathRelativeToTop(config.soongOutDir, actual))
|
||||||
}
|
}
|
||||||
|
|
||||||
// AssertStringPathsRelativeToTopEquals checks if the expected value is equal to the result of
|
// AssertStringPathsRelativeToTopEquals checks if the expected value is equal to the result of
|
||||||
// calling StringPathsRelativeToTop on the actual string paths.
|
// calling StringPathsRelativeToTop on the actual string paths.
|
||||||
func AssertStringPathsRelativeToTopEquals(t *testing.T, message string, config Config, expected []string, actual []string) {
|
func AssertStringPathsRelativeToTopEquals(t *testing.T, message string, config Config, expected []string, actual []string) {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
AssertDeepEquals(t, message, expected, StringPathsRelativeToTop(config.buildDir, actual))
|
AssertDeepEquals(t, message, expected, StringPathsRelativeToTop(config.soongOutDir, actual))
|
||||||
}
|
}
|
||||||
|
|
||||||
// AssertErrorMessageEquals checks if the error is not nil and has the expected message. If it does
|
// AssertErrorMessageEquals checks if the error is not nil and has the expected message. If it does
|
||||||
|
@@ -664,15 +664,15 @@ func newBaseTestingComponent(config Config, provider testBuildProvider) baseTest
|
|||||||
// containing at most one instance of the temporary build directory at the start of the path while
|
// containing at most one instance of the temporary build directory at the start of the path while
|
||||||
// this assumes that there can be any number at any position.
|
// this assumes that there can be any number at any position.
|
||||||
func normalizeStringRelativeToTop(config Config, s string) string {
|
func normalizeStringRelativeToTop(config Config, s string) string {
|
||||||
// The buildDir usually looks something like: /tmp/testFoo2345/001
|
// The soongOutDir usually looks something like: /tmp/testFoo2345/001
|
||||||
//
|
//
|
||||||
// Replace any usage of the buildDir with out/soong, e.g. replace "/tmp/testFoo2345/001" with
|
// Replace any usage of the soongOutDir with out/soong, e.g. replace "/tmp/testFoo2345/001" with
|
||||||
// "out/soong".
|
// "out/soong".
|
||||||
outSoongDir := filepath.Clean(config.buildDir)
|
outSoongDir := filepath.Clean(config.soongOutDir)
|
||||||
re := regexp.MustCompile(`\Q` + outSoongDir + `\E\b`)
|
re := regexp.MustCompile(`\Q` + outSoongDir + `\E\b`)
|
||||||
s = re.ReplaceAllString(s, "out/soong")
|
s = re.ReplaceAllString(s, "out/soong")
|
||||||
|
|
||||||
// Replace any usage of the buildDir/.. with out, e.g. replace "/tmp/testFoo2345" with
|
// Replace any usage of the soongOutDir/.. with out, e.g. replace "/tmp/testFoo2345" with
|
||||||
// "out". This must come after the previous replacement otherwise this would replace
|
// "out". This must come after the previous replacement otherwise this would replace
|
||||||
// "/tmp/testFoo2345/001" with "out/001" instead of "out/soong".
|
// "/tmp/testFoo2345/001" with "out/001" instead of "out/soong".
|
||||||
outDir := filepath.Dir(outSoongDir)
|
outDir := filepath.Dir(outSoongDir)
|
||||||
@@ -991,7 +991,7 @@ func NormalizePathForTesting(path Path) string {
|
|||||||
}
|
}
|
||||||
p := path.String()
|
p := path.String()
|
||||||
if w, ok := path.(WritablePath); ok {
|
if w, ok := path.(WritablePath); ok {
|
||||||
rel, err := filepath.Rel(w.getBuildDir(), p)
|
rel, err := filepath.Rel(w.getSoongOutDir(), p)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
@@ -34,12 +34,12 @@ func DocsSingleton() Singleton {
|
|||||||
type docsSingleton struct{}
|
type docsSingleton struct{}
|
||||||
|
|
||||||
func primaryBuilderPath(ctx SingletonContext) Path {
|
func primaryBuilderPath(ctx SingletonContext) Path {
|
||||||
buildDir := absolutePath(ctx.Config().BuildDir())
|
soongOutDir := absolutePath(ctx.Config().SoongOutDir())
|
||||||
binary := absolutePath(os.Args[0])
|
binary := absolutePath(os.Args[0])
|
||||||
primaryBuilder, err := filepath.Rel(buildDir, binary)
|
primaryBuilder, err := filepath.Rel(soongOutDir, binary)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.Errorf("path to primary builder %q is not in build dir %q (%q)",
|
ctx.Errorf("path to primary builder %q is not in build dir %q (%q)",
|
||||||
os.Args[0], ctx.Config().BuildDir(), err)
|
os.Args[0], ctx.Config().SoongOutDir(), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return PathForOutput(ctx, primaryBuilder)
|
return PathForOutput(ctx, primaryBuilder)
|
||||||
|
@@ -4930,7 +4930,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !foundLibfooJar {
|
if !foundLibfooJar {
|
||||||
t.Errorf("Rule for libfoo.jar missing in dex_bootjars singleton outputs %q", android.StringPathsRelativeToTop(ctx.Config().BuildDir(), s.AllOutputs()))
|
t.Errorf("Rule for libfoo.jar missing in dex_bootjars singleton outputs %q", android.StringPathsRelativeToTop(ctx.Config().SoongOutDir(), s.AllOutputs()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -146,7 +146,7 @@ func runMixedModeBuild(configuration android.Config, firstCtx *android.Context,
|
|||||||
ninjaDeps := bootstrap.RunBlueprint(secondArgs, secondCtx.Context, secondConfig)
|
ninjaDeps := bootstrap.RunBlueprint(secondArgs, secondCtx.Context, secondConfig)
|
||||||
ninjaDeps = append(ninjaDeps, extraNinjaDeps...)
|
ninjaDeps = append(ninjaDeps, extraNinjaDeps...)
|
||||||
|
|
||||||
globListFiles := writeBuildGlobsNinjaFile(secondCtx.SrcDir(), configuration.BuildDir(), secondCtx.Globs, configuration)
|
globListFiles := writeBuildGlobsNinjaFile(secondCtx.SrcDir(), configuration.SoongOutDir(), secondCtx.Globs, configuration)
|
||||||
ninjaDeps = append(ninjaDeps, globListFiles...)
|
ninjaDeps = append(ninjaDeps, globListFiles...)
|
||||||
|
|
||||||
err = deptools.WriteDepFile(shared.JoinPath(topDir, secondArgs.DepFile), secondArgs.OutFile, ninjaDeps)
|
err = deptools.WriteDepFile(shared.JoinPath(topDir, secondArgs.DepFile), secondArgs.OutFile, ninjaDeps)
|
||||||
@@ -177,7 +177,7 @@ func runSoongDocs(configuration android.Config) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func writeMetrics(configuration android.Config) {
|
func writeMetrics(configuration android.Config) {
|
||||||
metricsFile := filepath.Join(configuration.BuildDir(), "soong_build_metrics.pb")
|
metricsFile := filepath.Join(configuration.SoongOutDir(), "soong_build_metrics.pb")
|
||||||
err := android.WriteMetrics(configuration, metricsFile)
|
err := android.WriteMetrics(configuration, metricsFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Fprintf(os.Stderr, "error writing soong_build metrics %s: %s", metricsFile, err)
|
fmt.Fprintf(os.Stderr, "error writing soong_build metrics %s: %s", metricsFile, err)
|
||||||
@@ -194,7 +194,7 @@ func writeJsonModuleGraph(configuration android.Config, ctx *android.Context, pa
|
|||||||
|
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
ctx.Context.PrintJSONGraph(f)
|
ctx.Context.PrintJSONGraph(f)
|
||||||
writeFakeNinjaFile(extraNinjaDeps, configuration.BuildDir())
|
writeFakeNinjaFile(extraNinjaDeps, configuration.SoongOutDir())
|
||||||
}
|
}
|
||||||
|
|
||||||
func writeBuildGlobsNinjaFile(srcDir, buildDir string, globs func() pathtools.MultipleGlobResults, config interface{}) []string {
|
func writeBuildGlobsNinjaFile(srcDir, buildDir string, globs func() pathtools.MultipleGlobResults, config interface{}) []string {
|
||||||
@@ -233,7 +233,7 @@ func doChosenActivity(configuration android.Config, extraNinjaDeps []string) str
|
|||||||
ninjaDeps := bootstrap.RunBlueprint(blueprintArgs, ctx.Context, configuration)
|
ninjaDeps := bootstrap.RunBlueprint(blueprintArgs, ctx.Context, configuration)
|
||||||
ninjaDeps = append(ninjaDeps, extraNinjaDeps...)
|
ninjaDeps = append(ninjaDeps, extraNinjaDeps...)
|
||||||
|
|
||||||
globListFiles := writeBuildGlobsNinjaFile(ctx.SrcDir(), configuration.BuildDir(), ctx.Globs, configuration)
|
globListFiles := writeBuildGlobsNinjaFile(ctx.SrcDir(), configuration.SoongOutDir(), ctx.Globs, configuration)
|
||||||
ninjaDeps = append(ninjaDeps, globListFiles...)
|
ninjaDeps = append(ninjaDeps, globListFiles...)
|
||||||
|
|
||||||
err := deptools.WriteDepFile(shared.JoinPath(topDir, blueprintArgs.DepFile), blueprintArgs.OutFile, ninjaDeps)
|
err := deptools.WriteDepFile(shared.JoinPath(topDir, blueprintArgs.DepFile), blueprintArgs.OutFile, ninjaDeps)
|
||||||
@@ -307,7 +307,7 @@ func main() {
|
|||||||
if shared.IsDebugging() {
|
if shared.IsDebugging() {
|
||||||
// Add a non-existent file to the dependencies so that soong_build will rerun when the debugger is
|
// Add a non-existent file to the dependencies so that soong_build will rerun when the debugger is
|
||||||
// enabled even if it completed successfully.
|
// enabled even if it completed successfully.
|
||||||
extraNinjaDeps = append(extraNinjaDeps, filepath.Join(configuration.BuildDir(), "always_rerun_for_delve"))
|
extraNinjaDeps = append(extraNinjaDeps, filepath.Join(configuration.SoongOutDir(), "always_rerun_for_delve"))
|
||||||
}
|
}
|
||||||
|
|
||||||
if docFile != "" {
|
if docFile != "" {
|
||||||
@@ -356,12 +356,12 @@ func writeUsedEnvironmentFile(configuration android.Config, finalOutputFile stri
|
|||||||
// These files are: build.ninja and build.ninja.d. Since Kati hasn't been
|
// These files are: build.ninja and build.ninja.d. Since Kati hasn't been
|
||||||
// ran as well, and `nothing` is defined in a .mk file, there isn't a ninja
|
// ran as well, and `nothing` is defined in a .mk file, there isn't a ninja
|
||||||
// target called `nothing`, so we manually create it here.
|
// target called `nothing`, so we manually create it here.
|
||||||
func writeFakeNinjaFile(extraNinjaDeps []string, buildDir string) {
|
func writeFakeNinjaFile(extraNinjaDeps []string, soongOutDir string) {
|
||||||
extraNinjaDepsString := strings.Join(extraNinjaDeps, " \\\n ")
|
extraNinjaDepsString := strings.Join(extraNinjaDeps, " \\\n ")
|
||||||
|
|
||||||
ninjaFileName := "build.ninja"
|
ninjaFileName := "build.ninja"
|
||||||
ninjaFile := shared.JoinPath(topDir, buildDir, ninjaFileName)
|
ninjaFile := shared.JoinPath(topDir, soongOutDir, ninjaFileName)
|
||||||
ninjaFileD := shared.JoinPath(topDir, buildDir, ninjaFileName+".d")
|
ninjaFileD := shared.JoinPath(topDir, soongOutDir, ninjaFileName+".d")
|
||||||
// A workaround to create the 'nothing' ninja target so `m nothing` works,
|
// A workaround to create the 'nothing' ninja target so `m nothing` works,
|
||||||
// since bp2build runs without Kati, and the 'nothing' target is declared in
|
// since bp2build runs without Kati, and the 'nothing' target is declared in
|
||||||
// a Makefile.
|
// a Makefile.
|
||||||
@@ -505,7 +505,7 @@ func runBp2Build(configuration android.Config, extraNinjaDeps []string) {
|
|||||||
ninjaDeps := bootstrap.RunBlueprint(blueprintArgs, bp2buildCtx.Context, configuration)
|
ninjaDeps := bootstrap.RunBlueprint(blueprintArgs, bp2buildCtx.Context, configuration)
|
||||||
ninjaDeps = append(ninjaDeps, extraNinjaDeps...)
|
ninjaDeps = append(ninjaDeps, extraNinjaDeps...)
|
||||||
|
|
||||||
globListFiles := writeBuildGlobsNinjaFile(bp2buildCtx.SrcDir(), configuration.BuildDir(), bp2buildCtx.Globs, configuration)
|
globListFiles := writeBuildGlobsNinjaFile(bp2buildCtx.SrcDir(), configuration.SoongOutDir(), bp2buildCtx.Globs, configuration)
|
||||||
ninjaDeps = append(ninjaDeps, globListFiles...)
|
ninjaDeps = append(ninjaDeps, globListFiles...)
|
||||||
|
|
||||||
// Run the code-generation phase to convert BazelTargetModules to BUILD files
|
// Run the code-generation phase to convert BazelTargetModules to BUILD files
|
||||||
@@ -513,8 +513,8 @@ func runBp2Build(configuration android.Config, extraNinjaDeps []string) {
|
|||||||
codegenContext := bp2build.NewCodegenContext(configuration, *bp2buildCtx, bp2build.Bp2Build)
|
codegenContext := bp2build.NewCodegenContext(configuration, *bp2buildCtx, bp2build.Bp2Build)
|
||||||
metrics := bp2build.Codegen(codegenContext)
|
metrics := bp2build.Codegen(codegenContext)
|
||||||
|
|
||||||
generatedRoot := shared.JoinPath(configuration.BuildDir(), "bp2build")
|
generatedRoot := shared.JoinPath(configuration.SoongOutDir(), "bp2build")
|
||||||
workspaceRoot := shared.JoinPath(configuration.BuildDir(), "workspace")
|
workspaceRoot := shared.JoinPath(configuration.SoongOutDir(), "workspace")
|
||||||
|
|
||||||
excludes := []string{
|
excludes := []string{
|
||||||
"bazel-bin",
|
"bazel-bin",
|
||||||
|
@@ -159,7 +159,7 @@ func init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func constructPath(ctx android.PathContext, path string) android.Path {
|
func constructPath(ctx android.PathContext, path string) android.Path {
|
||||||
buildDirPrefix := ctx.Config().BuildDir() + "/"
|
buildDirPrefix := ctx.Config().SoongOutDir() + "/"
|
||||||
if path == "" {
|
if path == "" {
|
||||||
return nil
|
return nil
|
||||||
} else if strings.HasPrefix(path, buildDirPrefix) {
|
} else if strings.HasPrefix(path, buildDirPrefix) {
|
||||||
|
@@ -1737,7 +1737,7 @@ func TestPackageNameOverride(t *testing.T) {
|
|||||||
|
|
||||||
foo := result.ModuleForTests("foo", "android_common")
|
foo := result.ModuleForTests("foo", "android_common")
|
||||||
|
|
||||||
outSoongDir := result.Config.BuildDir()
|
outSoongDir := result.Config.SoongOutDir()
|
||||||
|
|
||||||
outputs := foo.AllOutputs()
|
outputs := foo.AllOutputs()
|
||||||
outputMap := make(map[string]bool)
|
outputMap := make(map[string]bool)
|
||||||
|
@@ -791,7 +791,7 @@ func (j *Module) collectJavacFlags(
|
|||||||
// Manually specify build directory in case it is not under the repo root.
|
// Manually specify build directory in case it is not under the repo root.
|
||||||
// (javac doesn't seem to expand into symbolic links when searching for patch-module targets, so
|
// (javac doesn't seem to expand into symbolic links when searching for patch-module targets, so
|
||||||
// just adding a symlink under the root doesn't help.)
|
// just adding a symlink under the root doesn't help.)
|
||||||
patchPaths := []string{".", ctx.Config().BuildDir()}
|
patchPaths := []string{".", ctx.Config().SoongOutDir()}
|
||||||
|
|
||||||
// b/150878007
|
// b/150878007
|
||||||
//
|
//
|
||||||
|
@@ -1183,7 +1183,7 @@ func checkPatchModuleFlag(t *testing.T, ctx *android.TestContext, moduleName str
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if expected != android.StringPathRelativeToTop(ctx.Config().BuildDir(), got) {
|
if expected != android.StringPathRelativeToTop(ctx.Config().SoongOutDir(), got) {
|
||||||
t.Errorf("Unexpected patch-module flag for module %q - expected %q, but got %q", moduleName, expected, got)
|
t.Errorf("Unexpected patch-module flag for module %q - expected %q, but got %q", moduleName, expected, got)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -36,7 +36,7 @@ func testProjectJson(t *testing.T, bp string) []byte {
|
|||||||
// The JSON file is generated via WriteFileToOutputDir. Therefore, it
|
// The JSON file is generated via WriteFileToOutputDir. Therefore, it
|
||||||
// won't appear in the Output of the TestingSingleton. Manually verify
|
// won't appear in the Output of the TestingSingleton. Manually verify
|
||||||
// it exists.
|
// it exists.
|
||||||
content, err := ioutil.ReadFile(filepath.Join(result.Config.BuildDir(), rustProjectJsonFileName))
|
content, err := ioutil.ReadFile(filepath.Join(result.Config.SoongOutDir(), rustProjectJsonFileName))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("rust-project.json has not been generated")
|
t.Errorf("rust-project.json has not been generated")
|
||||||
}
|
}
|
||||||
|
@@ -71,17 +71,17 @@ func writeEnvironmentFile(ctx Context, envFile string, envDeps map[string]string
|
|||||||
// A tiny struct used to tell Blueprint that it's in bootstrap mode. It would
|
// A tiny struct used to tell Blueprint that it's in bootstrap mode. It would
|
||||||
// probably be nicer to use a flag in bootstrap.Args instead.
|
// probably be nicer to use a flag in bootstrap.Args instead.
|
||||||
type BlueprintConfig struct {
|
type BlueprintConfig struct {
|
||||||
buildDir string
|
soongOutDir string
|
||||||
ninjaBuildDir string
|
outDir string
|
||||||
debugCompilation bool
|
debugCompilation bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c BlueprintConfig) BuildDir() string {
|
func (c BlueprintConfig) SoongOutDir() string {
|
||||||
return c.buildDir
|
return c.soongOutDir
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c BlueprintConfig) NinjaBuildDir() string {
|
func (c BlueprintConfig) OutDir() string {
|
||||||
return c.ninjaBuildDir
|
return c.outDir
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c BlueprintConfig) DebugCompilation() bool {
|
func (c BlueprintConfig) DebugCompilation() bool {
|
||||||
@@ -189,8 +189,8 @@ func bootstrapBlueprint(ctx Context, config Config) {
|
|||||||
blueprintCtx := blueprint.NewContext()
|
blueprintCtx := blueprint.NewContext()
|
||||||
blueprintCtx.SetIgnoreUnknownModuleTypes(true)
|
blueprintCtx.SetIgnoreUnknownModuleTypes(true)
|
||||||
blueprintConfig := BlueprintConfig{
|
blueprintConfig := BlueprintConfig{
|
||||||
buildDir: config.SoongOutDir(),
|
soongOutDir: config.SoongOutDir(),
|
||||||
ninjaBuildDir: config.OutDir(),
|
outDir: config.OutDir(),
|
||||||
debugCompilation: os.Getenv("SOONG_DELVE") != "",
|
debugCompilation: os.Getenv("SOONG_DELVE") != "",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user