rust: Refactor cfg and feature flag calculation
Move the cfg and feature flag calculation out of compilerFlags so that it's a separate step. The previous arrangement resulted in overridden compilerFlags which must to set any additional cfgs/features before calling the base. This is a bit confusing and undocumented behavior, so instead break it out into a separate call that can itself be overriden. Bug: N/A Test: Soong tests pass Change-Id: I28e4f707b3b3ca6eb621b7613c3737817f877bb8
This commit is contained in:
@@ -231,6 +231,7 @@ func (compiler *baseCompiler) cfgsToFlags() []string {
|
|||||||
for _, cfg := range compiler.Properties.Cfgs {
|
for _, cfg := range compiler.Properties.Cfgs {
|
||||||
flags = append(flags, "--cfg '"+cfg+"'")
|
flags = append(flags, "--cfg '"+cfg+"'")
|
||||||
}
|
}
|
||||||
|
|
||||||
return flags
|
return flags
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -239,6 +240,24 @@ func (compiler *baseCompiler) featuresToFlags() []string {
|
|||||||
for _, feature := range compiler.Properties.Features {
|
for _, feature := range compiler.Properties.Features {
|
||||||
flags = append(flags, "--cfg 'feature=\""+feature+"\"'")
|
flags = append(flags, "--cfg 'feature=\""+feature+"\"'")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return flags
|
||||||
|
}
|
||||||
|
|
||||||
|
func (compiler *baseCompiler) featureFlags(ctx ModuleContext, flags Flags) Flags {
|
||||||
|
flags.RustFlags = append(flags.RustFlags, compiler.featuresToFlags()...)
|
||||||
|
flags.RustdocFlags = append(flags.RustdocFlags, compiler.featuresToFlags()...)
|
||||||
|
|
||||||
|
return flags
|
||||||
|
}
|
||||||
|
|
||||||
|
func (compiler *baseCompiler) cfgFlags(ctx ModuleContext, flags Flags) Flags {
|
||||||
|
if ctx.RustModule().UseVndk() {
|
||||||
|
compiler.Properties.Cfgs = append(compiler.Properties.Cfgs, "android_vndk")
|
||||||
|
}
|
||||||
|
|
||||||
|
flags.RustFlags = append(flags.RustFlags, compiler.cfgsToFlags()...)
|
||||||
|
flags.RustdocFlags = append(flags.RustdocFlags, compiler.cfgsToFlags()...)
|
||||||
return flags
|
return flags
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -269,10 +288,6 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags) Flag
|
|||||||
|
|
||||||
flags.RustFlags = append(flags.RustFlags, lintFlags)
|
flags.RustFlags = append(flags.RustFlags, lintFlags)
|
||||||
flags.RustFlags = append(flags.RustFlags, compiler.Properties.Flags...)
|
flags.RustFlags = append(flags.RustFlags, compiler.Properties.Flags...)
|
||||||
flags.RustFlags = append(flags.RustFlags, compiler.cfgsToFlags()...)
|
|
||||||
flags.RustFlags = append(flags.RustFlags, compiler.featuresToFlags()...)
|
|
||||||
flags.RustdocFlags = append(flags.RustdocFlags, compiler.cfgsToFlags()...)
|
|
||||||
flags.RustdocFlags = append(flags.RustdocFlags, compiler.featuresToFlags()...)
|
|
||||||
flags.RustFlags = append(flags.RustFlags, "--edition="+compiler.edition())
|
flags.RustFlags = append(flags.RustFlags, "--edition="+compiler.edition())
|
||||||
flags.RustdocFlags = append(flags.RustdocFlags, "--edition="+compiler.edition())
|
flags.RustdocFlags = append(flags.RustdocFlags, "--edition="+compiler.edition())
|
||||||
flags.LinkFlags = append(flags.LinkFlags, compiler.Properties.Ld_flags...)
|
flags.LinkFlags = append(flags.LinkFlags, compiler.Properties.Ld_flags...)
|
||||||
@@ -296,10 +311,6 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags) Flag
|
|||||||
flags.LinkFlags = append(flags.LinkFlags, "-Wl,-rpath,"+rpathPrefix+"../"+rpath)
|
flags.LinkFlags = append(flags.LinkFlags, "-Wl,-rpath,"+rpathPrefix+"../"+rpath)
|
||||||
}
|
}
|
||||||
|
|
||||||
if ctx.RustModule().UseVndk() {
|
|
||||||
flags.RustFlags = append(flags.RustFlags, "--cfg 'android_vndk'")
|
|
||||||
}
|
|
||||||
|
|
||||||
return flags
|
return flags
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -430,15 +430,25 @@ func (library *libraryDecorator) sharedLibFilename(ctx ModuleContext) string {
|
|||||||
return library.getStem(ctx) + ctx.toolchain().SharedLibSuffix()
|
return library.getStem(ctx) + ctx.toolchain().SharedLibSuffix()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (library *libraryDecorator) compilerFlags(ctx ModuleContext, flags Flags) Flags {
|
func (library *libraryDecorator) cfgFlags(ctx ModuleContext, flags Flags) Flags {
|
||||||
flags.RustFlags = append(flags.RustFlags, "-C metadata="+ctx.ModuleName())
|
flags = library.baseCompiler.cfgFlags(ctx, flags)
|
||||||
if library.dylib() {
|
if library.dylib() {
|
||||||
// We need to add a dependency on std in order to link crates as dylibs.
|
// We need to add a dependency on std in order to link crates as dylibs.
|
||||||
// The hack to add this dependency is guarded by the following cfg so
|
// The hack to add this dependency is guarded by the following cfg so
|
||||||
// that we don't force a dependency when it isn't needed.
|
// that we don't force a dependency when it isn't needed.
|
||||||
library.baseCompiler.Properties.Cfgs = append(library.baseCompiler.Properties.Cfgs, "android_dylib")
|
library.baseCompiler.Properties.Cfgs = append(library.baseCompiler.Properties.Cfgs, "android_dylib")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
flags.RustFlags = append(flags.RustFlags, library.baseCompiler.cfgsToFlags()...)
|
||||||
|
flags.RustdocFlags = append(flags.RustdocFlags, library.baseCompiler.cfgsToFlags()...)
|
||||||
|
|
||||||
|
return flags
|
||||||
|
}
|
||||||
|
|
||||||
|
func (library *libraryDecorator) compilerFlags(ctx ModuleContext, flags Flags) Flags {
|
||||||
flags = library.baseCompiler.compilerFlags(ctx, flags)
|
flags = library.baseCompiler.compilerFlags(ctx, flags)
|
||||||
|
|
||||||
|
flags.RustFlags = append(flags.RustFlags, "-C metadata="+ctx.ModuleName())
|
||||||
if library.shared() || library.static() {
|
if library.shared() || library.static() {
|
||||||
library.includeDirs = append(library.includeDirs, android.PathsForModuleSrc(ctx, library.Properties.Include_dirs)...)
|
library.includeDirs = append(library.includeDirs, android.PathsForModuleSrc(ctx, library.Properties.Include_dirs)...)
|
||||||
}
|
}
|
||||||
|
@@ -436,6 +436,8 @@ type RustLibrary struct {
|
|||||||
type compiler interface {
|
type compiler interface {
|
||||||
initialize(ctx ModuleContext)
|
initialize(ctx ModuleContext)
|
||||||
compilerFlags(ctx ModuleContext, flags Flags) Flags
|
compilerFlags(ctx ModuleContext, flags Flags) Flags
|
||||||
|
cfgFlags(ctx ModuleContext, flags Flags) Flags
|
||||||
|
featureFlags(ctx ModuleContext, flags Flags) Flags
|
||||||
compilerProps() []interface{}
|
compilerProps() []interface{}
|
||||||
compile(ctx ModuleContext, flags Flags, deps PathDeps) android.Path
|
compile(ctx ModuleContext, flags Flags, deps PathDeps) android.Path
|
||||||
compilerDeps(ctx DepsContext, deps Deps) Deps
|
compilerDeps(ctx DepsContext, deps Deps) Deps
|
||||||
@@ -847,8 +849,11 @@ func (mod *Module) GenerateAndroidBuildActions(actx android.ModuleContext) {
|
|||||||
Toolchain: toolchain,
|
Toolchain: toolchain,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Calculate rustc flags
|
||||||
if mod.compiler != nil {
|
if mod.compiler != nil {
|
||||||
flags = mod.compiler.compilerFlags(ctx, flags)
|
flags = mod.compiler.compilerFlags(ctx, flags)
|
||||||
|
flags = mod.compiler.cfgFlags(ctx, flags)
|
||||||
|
flags = mod.compiler.featureFlags(ctx, flags)
|
||||||
}
|
}
|
||||||
if mod.coverage != nil {
|
if mod.coverage != nil {
|
||||||
flags, deps = mod.coverage.flags(ctx, flags, deps)
|
flags, deps = mod.coverage.flags(ctx, flags, deps)
|
||||||
|
Reference in New Issue
Block a user