1*333d2b36SAndroid Build Coastguard Workerpackage android 2*333d2b36SAndroid Build Coastguard Worker 3*333d2b36SAndroid Build Coastguard Workerimport ( 4*333d2b36SAndroid Build Coastguard Worker "encoding/json" 5*333d2b36SAndroid Build Coastguard Worker "io" 6*333d2b36SAndroid Build Coastguard Worker "slices" 7*333d2b36SAndroid Build Coastguard Worker 8*333d2b36SAndroid Build Coastguard Worker "github.com/google/blueprint" 9*333d2b36SAndroid Build Coastguard Worker "github.com/google/blueprint/gobtools" 10*333d2b36SAndroid Build Coastguard Worker) 11*333d2b36SAndroid Build Coastguard Worker 12*333d2b36SAndroid Build Coastguard Workertype CoreModuleInfoJSON struct { 13*333d2b36SAndroid Build Coastguard Worker RegisterName string `json:"-"` 14*333d2b36SAndroid Build Coastguard Worker Path []string `json:"path,omitempty"` // $(sort $(ALL_MODULES.$(m).PATH)) 15*333d2b36SAndroid Build Coastguard Worker Installed []string `json:"installed,omitempty"` // $(sort $(ALL_MODULES.$(m).INSTALLED)) 16*333d2b36SAndroid Build Coastguard Worker ModuleName string `json:"module_name,omitempty"` // $(ALL_MODULES.$(m).MODULE_NAME) 17*333d2b36SAndroid Build Coastguard Worker SupportedVariants []string `json:"supported_variants,omitempty"` // $(sort $(ALL_MODULES.$(m).SUPPORTED_VARIANTS)) 18*333d2b36SAndroid Build Coastguard Worker HostDependencies []string `json:"host_dependencies,omitempty"` // $(sort $(ALL_MODULES.$(m).HOST_REQUIRED_FROM_TARGET)) 19*333d2b36SAndroid Build Coastguard Worker TargetDependencies []string `json:"target_dependencies,omitempty"` // $(sort $(ALL_MODULES.$(m).TARGET_REQUIRED_FROM_HOST)) 20*333d2b36SAndroid Build Coastguard Worker Data []string `json:"data,omitempty"` // $(sort $(ALL_MODULES.$(m).TEST_DATA)) 21*333d2b36SAndroid Build Coastguard Worker Required []string `json:"required,omitempty"` // $(sort $(ALL_MODULES.$(m).REQUIRED_FROM_TARGET)) 22*333d2b36SAndroid Build Coastguard Worker} 23*333d2b36SAndroid Build Coastguard Worker 24*333d2b36SAndroid Build Coastguard Workertype ExtraModuleInfoJSON struct { 25*333d2b36SAndroid Build Coastguard Worker SubName string `json:"-"` 26*333d2b36SAndroid Build Coastguard Worker Uninstallable bool `json:"-"` 27*333d2b36SAndroid Build Coastguard Worker Class []string `json:"class,omitempty"` // $(sort $(ALL_MODULES.$(m).CLASS)) 28*333d2b36SAndroid Build Coastguard Worker Tags []string `json:"tags,omitempty"` // $(sort $(ALL_MODULES.$(m).TAGS)) 29*333d2b36SAndroid Build Coastguard Worker Dependencies []string `json:"dependencies,omitempty"` // $(sort $(ALL_DEPS.$(m).ALL_DEPS)) 30*333d2b36SAndroid Build Coastguard Worker SharedLibs []string `json:"shared_libs,omitempty"` // $(sort $(ALL_MODULES.$(m).SHARED_LIBS)) 31*333d2b36SAndroid Build Coastguard Worker StaticLibs []string `json:"static_libs,omitempty"` // $(sort $(ALL_MODULES.$(m).STATIC_LIBS)) 32*333d2b36SAndroid Build Coastguard Worker SystemSharedLibs []string `json:"system_shared_libs,omitempty"` // $(sort $(ALL_MODULES.$(m).SYSTEM_SHARED_LIBS)) 33*333d2b36SAndroid Build Coastguard Worker Srcs []string `json:"srcs,omitempty"` // $(sort $(ALL_MODULES.$(m).SRCS)) 34*333d2b36SAndroid Build Coastguard Worker SrcJars []string `json:"srcjars,omitempty"` // $(sort $(ALL_MODULES.$(m).SRCJARS)) 35*333d2b36SAndroid Build Coastguard Worker ClassesJar []string `json:"classes_jar,omitempty"` // $(sort $(ALL_MODULES.$(m).CLASSES_JAR)) 36*333d2b36SAndroid Build Coastguard Worker TestMainlineModules []string `json:"test_mainline_modules,omitempty"` // $(sort $(ALL_MODULES.$(m).TEST_MAINLINE_MODULES)) 37*333d2b36SAndroid Build Coastguard Worker IsUnitTest bool `json:"is_unit_test,omitempty"` // $(ALL_MODULES.$(m).IS_UNIT_TEST) 38*333d2b36SAndroid Build Coastguard Worker TestOptionsTags []string `json:"test_options_tags,omitempty"` // $(sort $(ALL_MODULES.$(m).TEST_OPTIONS_TAGS)) 39*333d2b36SAndroid Build Coastguard Worker RuntimeDependencies []string `json:"runtime_dependencies,omitempty"` // $(sort $(ALL_MODULES.$(m).LOCAL_RUNTIME_LIBRARIES)) 40*333d2b36SAndroid Build Coastguard Worker StaticDependencies []string `json:"static_dependencies,omitempty"` // $(sort $(ALL_MODULES.$(m).LOCAL_STATIC_LIBRARIES)) 41*333d2b36SAndroid Build Coastguard Worker DataDependencies []string `json:"data_dependencies,omitempty"` // $(sort $(ALL_MODULES.$(m).TEST_DATA_BINS)) 42*333d2b36SAndroid Build Coastguard Worker 43*333d2b36SAndroid Build Coastguard Worker CompatibilitySuites []string `json:"compatibility_suites,omitempty"` // $(sort $(ALL_MODULES.$(m).COMPATIBILITY_SUITES)) 44*333d2b36SAndroid Build Coastguard Worker AutoTestConfig []string `json:"auto_test_config,omitempty"` // $(ALL_MODULES.$(m).auto_test_config) 45*333d2b36SAndroid Build Coastguard Worker TestConfig []string `json:"test_config,omitempty"` // $(strip $(ALL_MODULES.$(m).TEST_CONFIG) $(ALL_MODULES.$(m).EXTRA_TEST_CONFIGS) 46*333d2b36SAndroid Build Coastguard Worker} 47*333d2b36SAndroid Build Coastguard Worker 48*333d2b36SAndroid Build Coastguard Workertype ModuleInfoJSON struct { 49*333d2b36SAndroid Build Coastguard Worker core CoreModuleInfoJSON 50*333d2b36SAndroid Build Coastguard Worker ExtraModuleInfoJSON 51*333d2b36SAndroid Build Coastguard Worker} 52*333d2b36SAndroid Build Coastguard Worker 53*333d2b36SAndroid Build Coastguard Worker//ALL_DEPS.$(LOCAL_MODULE).ALL_DEPS := $(sort \ 54*333d2b36SAndroid Build Coastguard Worker//$(ALL_DEPS.$(LOCAL_MODULE).ALL_DEPS) \ 55*333d2b36SAndroid Build Coastguard Worker//$(LOCAL_STATIC_LIBRARIES) \ 56*333d2b36SAndroid Build Coastguard Worker//$(LOCAL_WHOLE_STATIC_LIBRARIES) \ 57*333d2b36SAndroid Build Coastguard Worker//$(LOCAL_SHARED_LIBRARIES) \ 58*333d2b36SAndroid Build Coastguard Worker//$(LOCAL_DYLIB_LIBRARIES) \ 59*333d2b36SAndroid Build Coastguard Worker//$(LOCAL_RLIB_LIBRARIES) \ 60*333d2b36SAndroid Build Coastguard Worker//$(LOCAL_PROC_MACRO_LIBRARIES) \ 61*333d2b36SAndroid Build Coastguard Worker//$(LOCAL_HEADER_LIBRARIES) \ 62*333d2b36SAndroid Build Coastguard Worker//$(LOCAL_STATIC_JAVA_LIBRARIES) \ 63*333d2b36SAndroid Build Coastguard Worker//$(LOCAL_JAVA_LIBRARIES) \ 64*333d2b36SAndroid Build Coastguard Worker//$(LOCAL_JNI_SHARED_LIBRARIES)) 65*333d2b36SAndroid Build Coastguard Worker 66*333d2b36SAndroid Build Coastguard Workertype combinedModuleInfoJSON struct { 67*333d2b36SAndroid Build Coastguard Worker *CoreModuleInfoJSON 68*333d2b36SAndroid Build Coastguard Worker *ExtraModuleInfoJSON 69*333d2b36SAndroid Build Coastguard Worker} 70*333d2b36SAndroid Build Coastguard Worker 71*333d2b36SAndroid Build Coastguard Workerfunc encodeModuleInfoJSON(w io.Writer, moduleInfoJSON *ModuleInfoJSON) error { 72*333d2b36SAndroid Build Coastguard Worker moduleInfoJSONCopy := *moduleInfoJSON 73*333d2b36SAndroid Build Coastguard Worker 74*333d2b36SAndroid Build Coastguard Worker sortAndUnique := func(s *[]string) { 75*333d2b36SAndroid Build Coastguard Worker *s = slices.Clone(*s) 76*333d2b36SAndroid Build Coastguard Worker slices.Sort(*s) 77*333d2b36SAndroid Build Coastguard Worker *s = slices.Compact(*s) 78*333d2b36SAndroid Build Coastguard Worker } 79*333d2b36SAndroid Build Coastguard Worker 80*333d2b36SAndroid Build Coastguard Worker sortAndUnique(&moduleInfoJSONCopy.core.Path) 81*333d2b36SAndroid Build Coastguard Worker sortAndUnique(&moduleInfoJSONCopy.core.Installed) 82*333d2b36SAndroid Build Coastguard Worker sortAndUnique(&moduleInfoJSONCopy.core.SupportedVariants) 83*333d2b36SAndroid Build Coastguard Worker sortAndUnique(&moduleInfoJSONCopy.core.HostDependencies) 84*333d2b36SAndroid Build Coastguard Worker sortAndUnique(&moduleInfoJSONCopy.core.TargetDependencies) 85*333d2b36SAndroid Build Coastguard Worker sortAndUnique(&moduleInfoJSONCopy.core.Data) 86*333d2b36SAndroid Build Coastguard Worker sortAndUnique(&moduleInfoJSONCopy.core.Required) 87*333d2b36SAndroid Build Coastguard Worker 88*333d2b36SAndroid Build Coastguard Worker sortAndUnique(&moduleInfoJSONCopy.Class) 89*333d2b36SAndroid Build Coastguard Worker sortAndUnique(&moduleInfoJSONCopy.Tags) 90*333d2b36SAndroid Build Coastguard Worker sortAndUnique(&moduleInfoJSONCopy.Dependencies) 91*333d2b36SAndroid Build Coastguard Worker sortAndUnique(&moduleInfoJSONCopy.SharedLibs) 92*333d2b36SAndroid Build Coastguard Worker sortAndUnique(&moduleInfoJSONCopy.StaticLibs) 93*333d2b36SAndroid Build Coastguard Worker sortAndUnique(&moduleInfoJSONCopy.SystemSharedLibs) 94*333d2b36SAndroid Build Coastguard Worker sortAndUnique(&moduleInfoJSONCopy.Srcs) 95*333d2b36SAndroid Build Coastguard Worker sortAndUnique(&moduleInfoJSONCopy.SrcJars) 96*333d2b36SAndroid Build Coastguard Worker sortAndUnique(&moduleInfoJSONCopy.ClassesJar) 97*333d2b36SAndroid Build Coastguard Worker sortAndUnique(&moduleInfoJSONCopy.TestMainlineModules) 98*333d2b36SAndroid Build Coastguard Worker sortAndUnique(&moduleInfoJSONCopy.TestOptionsTags) 99*333d2b36SAndroid Build Coastguard Worker sortAndUnique(&moduleInfoJSONCopy.RuntimeDependencies) 100*333d2b36SAndroid Build Coastguard Worker sortAndUnique(&moduleInfoJSONCopy.StaticDependencies) 101*333d2b36SAndroid Build Coastguard Worker sortAndUnique(&moduleInfoJSONCopy.DataDependencies) 102*333d2b36SAndroid Build Coastguard Worker sortAndUnique(&moduleInfoJSONCopy.CompatibilitySuites) 103*333d2b36SAndroid Build Coastguard Worker sortAndUnique(&moduleInfoJSONCopy.AutoTestConfig) 104*333d2b36SAndroid Build Coastguard Worker sortAndUnique(&moduleInfoJSONCopy.TestConfig) 105*333d2b36SAndroid Build Coastguard Worker 106*333d2b36SAndroid Build Coastguard Worker encoder := json.NewEncoder(w) 107*333d2b36SAndroid Build Coastguard Worker return encoder.Encode(combinedModuleInfoJSON{&moduleInfoJSONCopy.core, &moduleInfoJSONCopy.ExtraModuleInfoJSON}) 108*333d2b36SAndroid Build Coastguard Worker} 109*333d2b36SAndroid Build Coastguard Worker 110*333d2b36SAndroid Build Coastguard Workerfunc (p *ModuleInfoJSON) ToGob() *combinedModuleInfoJSON { 111*333d2b36SAndroid Build Coastguard Worker return &combinedModuleInfoJSON{ 112*333d2b36SAndroid Build Coastguard Worker CoreModuleInfoJSON: &p.core, 113*333d2b36SAndroid Build Coastguard Worker ExtraModuleInfoJSON: &p.ExtraModuleInfoJSON, 114*333d2b36SAndroid Build Coastguard Worker } 115*333d2b36SAndroid Build Coastguard Worker} 116*333d2b36SAndroid Build Coastguard Worker 117*333d2b36SAndroid Build Coastguard Workerfunc (p *ModuleInfoJSON) FromGob(data *combinedModuleInfoJSON) { 118*333d2b36SAndroid Build Coastguard Worker p.core = *data.CoreModuleInfoJSON 119*333d2b36SAndroid Build Coastguard Worker p.ExtraModuleInfoJSON = *data.ExtraModuleInfoJSON 120*333d2b36SAndroid Build Coastguard Worker} 121*333d2b36SAndroid Build Coastguard Worker 122*333d2b36SAndroid Build Coastguard Workerfunc (m *ModuleInfoJSON) GobEncode() ([]byte, error) { 123*333d2b36SAndroid Build Coastguard Worker return gobtools.CustomGobEncode[combinedModuleInfoJSON](m) 124*333d2b36SAndroid Build Coastguard Worker} 125*333d2b36SAndroid Build Coastguard Worker 126*333d2b36SAndroid Build Coastguard Workerfunc (m *ModuleInfoJSON) GobDecode(data []byte) error { 127*333d2b36SAndroid Build Coastguard Worker return gobtools.CustomGobDecode[combinedModuleInfoJSON](data, m) 128*333d2b36SAndroid Build Coastguard Worker} 129*333d2b36SAndroid Build Coastguard Worker 130*333d2b36SAndroid Build Coastguard Workervar ModuleInfoJSONProvider = blueprint.NewProvider[*ModuleInfoJSON]() 131