Modules defined in the srcs property are automatically added as dependencies with AddDependency(), which will use any variant available. This can cause incorrect architecture bindings to be silently pulled in, such as when a host module uses a rust_bindgen module that doesn't create a host variant. This moves populating depPaths.SrcDeps over to depsToPaths and adds a check for SourceProviders to make sure the correct OS and architecture is being used. Bug: 161826371 Test: Soong no longer silently pulls in bindings for the wrong target. Test: New Soong test to catch this case passes. Change-Id: I2b3651cf6fc7dabf4081434df1c455e637f5b3a4
86 lines
2.4 KiB
Go
86 lines
2.4 KiB
Go
// Copyright 2019 The Android Open Source Project
|
|
//
|
|
// 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 rust
|
|
|
|
import (
|
|
"android/soong/android"
|
|
)
|
|
|
|
func init() {
|
|
android.RegisterModuleType("rust_proc_macro", ProcMacroFactory)
|
|
}
|
|
|
|
type ProcMacroCompilerProperties struct {
|
|
}
|
|
|
|
type procMacroDecorator struct {
|
|
*baseCompiler
|
|
*flagExporter
|
|
|
|
Properties ProcMacroCompilerProperties
|
|
}
|
|
|
|
type procMacroInterface interface {
|
|
}
|
|
|
|
var _ compiler = (*procMacroDecorator)(nil)
|
|
var _ exportedFlagsProducer = (*procMacroDecorator)(nil)
|
|
|
|
func ProcMacroFactory() android.Module {
|
|
module, _ := NewProcMacro(android.HostSupportedNoCross)
|
|
return module.Init()
|
|
}
|
|
|
|
func NewProcMacro(hod android.HostOrDeviceSupported) (*Module, *procMacroDecorator) {
|
|
module := newModule(hod, android.MultilibFirst)
|
|
|
|
procMacro := &procMacroDecorator{
|
|
baseCompiler: NewBaseCompiler("lib", "lib64", InstallInSystem),
|
|
flagExporter: NewFlagExporter(),
|
|
}
|
|
|
|
module.compiler = procMacro
|
|
|
|
return module, procMacro
|
|
}
|
|
|
|
func (procMacro *procMacroDecorator) compilerProps() []interface{} {
|
|
return append(procMacro.baseCompiler.compilerProps(),
|
|
&procMacro.Properties)
|
|
}
|
|
|
|
func (procMacro *procMacroDecorator) compile(ctx ModuleContext, flags Flags, deps PathDeps) android.Path {
|
|
fileName := procMacro.getStem(ctx) + ctx.toolchain().ProcMacroSuffix()
|
|
outputFile := android.PathForModuleOut(ctx, fileName)
|
|
|
|
srcPath, _ := srcPathFromModuleSrcs(ctx, procMacro.baseCompiler.Properties.Srcs)
|
|
|
|
procMacro.unstrippedOutputFile = outputFile
|
|
|
|
TransformSrctoProcMacro(ctx, srcPath, deps, flags, outputFile, deps.linkDirs)
|
|
return outputFile
|
|
}
|
|
|
|
func (procMacro *procMacroDecorator) getStem(ctx ModuleContext) string {
|
|
stem := procMacro.baseCompiler.getStemWithoutSuffix(ctx)
|
|
validateLibraryStem(ctx, stem, procMacro.crateName())
|
|
|
|
return stem + String(procMacro.baseCompiler.Properties.Suffix)
|
|
}
|
|
|
|
func (procMacro *procMacroDecorator) autoDep() autoDep {
|
|
return rlibAutoDep
|
|
}
|