platform_build_soong/rust/source_provider.go
Ivan Lozano 45901edb9a Ensure hermetic device rust_bindgen.
rust_bindgen was not hermetic previously as it would pull in host
headers for device targets. This fixes that by using the same flags we
use when compiling with Clang. This also makes sure our rust_bindgen
headers are built as similar as possible to their respective
cc_libraries.

This also pulls in the bionic dependencies as well, which provide the
headers required for device targets.

Bug: 162007475
Test: device rust_bindgen deps file does not reference host headers.

Change-Id: I4efdf333e011a6c6d73a0345e5485823f166d17a
2020-07-28 14:53:57 -04:00

70 lines
1.9 KiB
Go

// Copyright 2020 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"
)
type SourceProviderProperties struct {
// sets name of the output
Stem *string `android:"arch_variant"`
}
type baseSourceProvider struct {
Properties SourceProviderProperties
outputFile android.Path
subAndroidMkOnce map[subAndroidMkProvider]bool
}
var _ SourceProvider = (*baseSourceProvider)(nil)
type SourceProvider interface {
generateSource(ctx android.ModuleContext, deps PathDeps) android.Path
Srcs() android.Paths
sourceProviderProps() []interface{}
sourceProviderDeps(ctx DepsContext, deps Deps) Deps
}
func (sp *baseSourceProvider) Srcs() android.Paths {
return android.Paths{sp.outputFile}
}
func (sp *baseSourceProvider) generateSource(ctx android.ModuleContext, deps PathDeps) android.Path {
panic("baseSourceProviderModule does not implement generateSource()")
}
func (sp *baseSourceProvider) sourceProviderProps() []interface{} {
return []interface{}{&sp.Properties}
}
func NewSourceProvider() *baseSourceProvider {
return &baseSourceProvider{
Properties: SourceProviderProperties{},
}
}
func (sp *baseSourceProvider) getStem(ctx android.ModuleContext) string {
stem := ctx.ModuleName()
if String(sp.Properties.Stem) != "" {
stem = String(sp.Properties.Stem)
}
return stem
}
func (sp *baseSourceProvider) sourceProviderDeps(ctx DepsContext, deps Deps) Deps {
return deps
}