blob: 0893da5e089bd5a20b069f9b3e07a745bd7c2d12 [file] [log] [blame]
Vinh Tran0ccc2322023-03-09 22:07:19 -05001// Copyright 2023 Google Inc. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package cc
16
17import (
18 "android/soong/android"
Vinh Tran0ccc2322023-03-09 22:07:19 -050019 "github.com/google/blueprint"
20)
21
22func init() {
23 RegisterFdoProfileBuildComponents(android.InitRegistrationContext)
24}
25
26func RegisterFdoProfileBuildComponents(ctx android.RegistrationContext) {
Vinh Trance40b922023-06-05 12:57:55 -040027 ctx.RegisterModuleType("fdo_profile", FdoProfileFactory)
Vinh Tran0ccc2322023-03-09 22:07:19 -050028}
29
30type fdoProfile struct {
31 android.ModuleBase
32
33 properties fdoProfileProperties
34}
35
36type fdoProfileProperties struct {
37 Profile *string `android:"arch_variant"`
38}
39
40// FdoProfileInfo is provided by FdoProfileProvider
41type FdoProfileInfo struct {
42 Path android.Path
43}
44
45// FdoProfileProvider is used to provide path to an fdo profile
Ke-Yu Lu351d3642024-02-06 02:15:03 +000046var FdoProfileProvider = blueprint.NewMutatorProvider[FdoProfileInfo]("fdo_profile")
47
48// FdoProfileMutatorInterface is the interface implemented by fdo_profile module type
49// module types that can depend on an fdo_profile module
50type FdoProfileMutatorInterface interface {
51 // FdoProfileMutator eithers set or get FdoProfileProvider
52 fdoProfileMutator(ctx android.BottomUpMutatorContext)
53}
54
55var _ FdoProfileMutatorInterface = (*fdoProfile)(nil)
Vinh Tran0ccc2322023-03-09 22:07:19 -050056
57// GenerateAndroidBuildActions of fdo_profile does not have any build actions
Ke-Yu Lu351d3642024-02-06 02:15:03 +000058func (fp *fdoProfile) GenerateAndroidBuildActions(ctx android.ModuleContext) {}
59
60// FdoProfileMutator sets FdoProfileProvider to fdo_profile module
61// or sets afdo.Properties.FdoProfilePath to path in FdoProfileProvider of the depended fdo_profile
62func (fp *fdoProfile) fdoProfileMutator(ctx android.BottomUpMutatorContext) {
Vinh Tran0ccc2322023-03-09 22:07:19 -050063 if fp.properties.Profile != nil {
64 path := android.PathForModuleSrc(ctx, *fp.properties.Profile)
Colin Cross40213022023-12-13 15:19:49 -080065 android.SetProvider(ctx, FdoProfileProvider, FdoProfileInfo{
Vinh Tran0ccc2322023-03-09 22:07:19 -050066 Path: path,
67 })
68 }
69}
70
Ke-Yu Lu351d3642024-02-06 02:15:03 +000071// fdoProfileMutator calls the generic fdoProfileMutator function of fdoProfileMutator
72// which is implemented by cc and cc.FdoProfile
73func fdoProfileMutator(ctx android.BottomUpMutatorContext) {
74 if f, ok := ctx.Module().(FdoProfileMutatorInterface); ok {
75 f.fdoProfileMutator(ctx)
76 }
77}
78
Vinh Trance40b922023-06-05 12:57:55 -040079func FdoProfileFactory() android.Module {
Vinh Tran0ccc2322023-03-09 22:07:19 -050080 m := &fdoProfile{}
81 m.AddProperties(&m.properties)
82 android.InitAndroidMultiTargetsArchModule(m, android.DeviceSupported, android.MultilibBoth)
Vinh Tran0ccc2322023-03-09 22:07:19 -050083 return m
84}