diff options
Diffstat (limited to 'android/module.go')
-rw-r--r-- | android/module.go | 128 |
1 files changed, 88 insertions, 40 deletions
diff --git a/android/module.go b/android/module.go index a1a9a4ad2..e3682fa30 100644 --- a/android/module.go +++ b/android/module.go @@ -15,9 +15,6 @@ package android import ( - "bytes" - "encoding/gob" - "errors" "fmt" "net/url" "path/filepath" @@ -1806,6 +1803,26 @@ type FinalModuleBuildTargetsInfo struct { var FinalModuleBuildTargetsProvider = blueprint.NewProvider[FinalModuleBuildTargetsInfo]() +type CommonPropertiesProviderData struct { + Enabled bool + // Whether the module has been replaced by a prebuilt + ReplacedByPrebuilt bool +} + +var CommonPropertiesProviderKey = blueprint.NewProvider[CommonPropertiesProviderData]() + +type PrebuiltModuleProviderData struct { + // Empty for now +} + +var PrebuiltModuleProviderKey = blueprint.NewProvider[PrebuiltModuleProviderData]() + +type HostToolProviderData struct { + HostToolPath OptionalPath +} + +var HostToolProviderKey = blueprint.NewProvider[HostToolProviderData]() + func (m *ModuleBase) GenerateBuildActions(blueprintCtx blueprint.ModuleContext) { ctx := &moduleContext{ module: m.module, @@ -2051,6 +2068,23 @@ func (m *ModuleBase) GenerateBuildActions(blueprintCtx blueprint.ModuleContext) }) } buildComplianceMetadataProvider(ctx, m) + + commonData := CommonPropertiesProviderData{ + ReplacedByPrebuilt: m.commonProperties.ReplacedByPrebuilt, + } + if m.commonProperties.ForcedDisabled { + commonData.Enabled = false + } else { + commonData.Enabled = m.commonProperties.Enabled.GetOrDefault(m.ConfigurableEvaluator(ctx), !m.Os().DefaultDisabled) + } + SetProvider(ctx, CommonPropertiesProviderKey, commonData) + if p, ok := m.module.(PrebuiltInterface); ok && p.Prebuilt() != nil { + SetProvider(ctx, PrebuiltModuleProviderKey, PrebuiltModuleProviderData{}) + } + if h, ok := m.module.(HostToolProvider); ok { + SetProvider(ctx, HostToolProviderKey, HostToolProviderData{ + HostToolPath: h.HostToolPath()}) + } } func SetJarJarPrefixHandler(handler func(ModuleContext)) { @@ -2130,36 +2164,47 @@ type katiInstall struct { orderOnlyDeps Paths executable bool extraFiles *extraFilesZip + absFrom string +} - absFrom string +type katiInstallGob struct { + From Path + To InstallPath + ImplicitDeps Paths + OrderOnlyDeps Paths + Executable bool + ExtraFiles *extraFilesZip + AbsFrom string } -func (p *katiInstall) GobEncode() ([]byte, error) { - w := new(bytes.Buffer) - encoder := gob.NewEncoder(w) - err := errors.Join(encoder.Encode(p.from), encoder.Encode(p.to), - encoder.Encode(p.implicitDeps), encoder.Encode(p.orderOnlyDeps), - encoder.Encode(p.executable), encoder.Encode(p.extraFiles), - encoder.Encode(p.absFrom)) - if err != nil { - return nil, err +func (k *katiInstall) ToGob() *katiInstallGob { + return &katiInstallGob{ + From: k.from, + To: k.to, + ImplicitDeps: k.implicitDeps, + OrderOnlyDeps: k.orderOnlyDeps, + Executable: k.executable, + ExtraFiles: k.extraFiles, + AbsFrom: k.absFrom, } +} - return w.Bytes(), nil +func (k *katiInstall) FromGob(data *katiInstallGob) { + k.from = data.From + k.to = data.To + k.implicitDeps = data.ImplicitDeps + k.orderOnlyDeps = data.OrderOnlyDeps + k.executable = data.Executable + k.extraFiles = data.ExtraFiles + k.absFrom = data.AbsFrom } -func (p *katiInstall) GobDecode(data []byte) error { - r := bytes.NewBuffer(data) - decoder := gob.NewDecoder(r) - err := errors.Join(decoder.Decode(&p.from), decoder.Decode(&p.to), - decoder.Decode(&p.implicitDeps), decoder.Decode(&p.orderOnlyDeps), - decoder.Decode(&p.executable), decoder.Decode(&p.extraFiles), - decoder.Decode(&p.absFrom)) - if err != nil { - return err - } +func (k *katiInstall) GobEncode() ([]byte, error) { + return blueprint.CustomGobEncode[katiInstallGob](k) +} - return nil +func (k *katiInstall) GobDecode(data []byte) error { + return blueprint.CustomGobDecode[katiInstallGob](data, k) } type extraFilesZip struct { @@ -2167,26 +2212,29 @@ type extraFilesZip struct { dir InstallPath } -func (p *extraFilesZip) GobEncode() ([]byte, error) { - w := new(bytes.Buffer) - encoder := gob.NewEncoder(w) - err := errors.Join(encoder.Encode(p.zip), encoder.Encode(p.dir)) - if err != nil { - return nil, err +type extraFilesZipGob struct { + Zip Path + Dir InstallPath +} + +func (e *extraFilesZip) ToGob() *extraFilesZipGob { + return &extraFilesZipGob{ + Zip: e.zip, + Dir: e.dir, } +} - return w.Bytes(), nil +func (e *extraFilesZip) FromGob(data *extraFilesZipGob) { + e.zip = data.Zip + e.dir = data.Dir } -func (p *extraFilesZip) GobDecode(data []byte) error { - r := bytes.NewBuffer(data) - decoder := gob.NewDecoder(r) - err := errors.Join(decoder.Decode(&p.zip), decoder.Decode(&p.dir)) - if err != nil { - return err - } +func (e *extraFilesZip) GobEncode() ([]byte, error) { + return blueprint.CustomGobEncode[extraFilesZipGob](e) +} - return nil +func (e *extraFilesZip) GobDecode(data []byte) error { + return blueprint.CustomGobDecode[extraFilesZipGob](data, e) } type katiInstalls []katiInstall |