1*6c119a46SAndroid Build Coastguard Worker// Copyright 2023 The Android Open Source Project 2*6c119a46SAndroid Build Coastguard Worker// 3*6c119a46SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*6c119a46SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*6c119a46SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*6c119a46SAndroid Build Coastguard Worker// 7*6c119a46SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*6c119a46SAndroid Build Coastguard Worker// 9*6c119a46SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*6c119a46SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*6c119a46SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*6c119a46SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*6c119a46SAndroid Build Coastguard Worker// limitations under the License. 14*6c119a46SAndroid Build Coastguard Worker 15*6c119a46SAndroid Build Coastguard Workerpackage soong_wayland_protocol_codegen 16*6c119a46SAndroid Build Coastguard Worker 17*6c119a46SAndroid Build Coastguard Workerimport ( 18*6c119a46SAndroid Build Coastguard Worker "strings" 19*6c119a46SAndroid Build Coastguard Worker 20*6c119a46SAndroid Build Coastguard Worker "android/soong/android" 21*6c119a46SAndroid Build Coastguard Worker) 22*6c119a46SAndroid Build Coastguard Worker 23*6c119a46SAndroid Build Coastguard Worker// Note: the types defined here are identical to the types defined in the 24*6c119a46SAndroid Build Coastguard Worker// locations.go file included as "android/soong/genrule" package. 25*6c119a46SAndroid Build Coastguard Worker// Unfortunately all the types defined there are not public, which means we 26*6c119a46SAndroid Build Coastguard Worker// can't reference them from that package. 27*6c119a46SAndroid Build Coastguard Worker 28*6c119a46SAndroid Build Coastguard Worker// location is used to service $(location) and $(locations) entries in 29*6c119a46SAndroid Build Coastguard Worker// wayland_protocol_codegen commands. 30*6c119a46SAndroid Build Coastguard Workertype location interface { 31*6c119a46SAndroid Build Coastguard Worker Paths(cmd *android.RuleBuilderCommand) []string 32*6c119a46SAndroid Build Coastguard Worker String() string 33*6c119a46SAndroid Build Coastguard Worker} 34*6c119a46SAndroid Build Coastguard Worker 35*6c119a46SAndroid Build Coastguard Worker// inputLocation is a $(location) result for an entry in the srcs property. 36*6c119a46SAndroid Build Coastguard Workertype inputLocation struct { 37*6c119a46SAndroid Build Coastguard Worker paths android.Paths 38*6c119a46SAndroid Build Coastguard Worker} 39*6c119a46SAndroid Build Coastguard Worker 40*6c119a46SAndroid Build Coastguard Workerfunc (l inputLocation) String() string { 41*6c119a46SAndroid Build Coastguard Worker return strings.Join(l.paths.Strings(), " ") 42*6c119a46SAndroid Build Coastguard Worker} 43*6c119a46SAndroid Build Coastguard Worker 44*6c119a46SAndroid Build Coastguard Workerfunc (l inputLocation) Paths(cmd *android.RuleBuilderCommand) []string { 45*6c119a46SAndroid Build Coastguard Worker return cmd.PathsForInputs(l.paths) 46*6c119a46SAndroid Build Coastguard Worker} 47*6c119a46SAndroid Build Coastguard Worker 48*6c119a46SAndroid Build Coastguard Workervar _ location = inputLocation{} 49*6c119a46SAndroid Build Coastguard Worker 50*6c119a46SAndroid Build Coastguard Worker// outputLocation is a $(location) result for an entry in the out property. 51*6c119a46SAndroid Build Coastguard Workertype outputLocation struct { 52*6c119a46SAndroid Build Coastguard Worker path android.WritablePath 53*6c119a46SAndroid Build Coastguard Worker} 54*6c119a46SAndroid Build Coastguard Worker 55*6c119a46SAndroid Build Coastguard Workerfunc (l outputLocation) String() string { 56*6c119a46SAndroid Build Coastguard Worker return l.path.String() 57*6c119a46SAndroid Build Coastguard Worker} 58*6c119a46SAndroid Build Coastguard Worker 59*6c119a46SAndroid Build Coastguard Workerfunc (l outputLocation) Paths(cmd *android.RuleBuilderCommand) []string { 60*6c119a46SAndroid Build Coastguard Worker return []string{cmd.PathForOutput(l.path)} 61*6c119a46SAndroid Build Coastguard Worker} 62*6c119a46SAndroid Build Coastguard Worker 63*6c119a46SAndroid Build Coastguard Workervar _ location = outputLocation{} 64*6c119a46SAndroid Build Coastguard Worker 65*6c119a46SAndroid Build Coastguard Worker// toolLocation is a $(location) result for an entry in the tools or 66*6c119a46SAndroid Build Coastguard Worker// tool_files property. 67*6c119a46SAndroid Build Coastguard Workertype toolLocation struct { 68*6c119a46SAndroid Build Coastguard Worker paths android.Paths 69*6c119a46SAndroid Build Coastguard Worker} 70*6c119a46SAndroid Build Coastguard Worker 71*6c119a46SAndroid Build Coastguard Workerfunc (l toolLocation) String() string { 72*6c119a46SAndroid Build Coastguard Worker return strings.Join(l.paths.Strings(), " ") 73*6c119a46SAndroid Build Coastguard Worker} 74*6c119a46SAndroid Build Coastguard Worker 75*6c119a46SAndroid Build Coastguard Workerfunc (l toolLocation) Paths(cmd *android.RuleBuilderCommand) []string { 76*6c119a46SAndroid Build Coastguard Worker return cmd.PathsForTools(l.paths) 77*6c119a46SAndroid Build Coastguard Worker} 78*6c119a46SAndroid Build Coastguard Worker 79*6c119a46SAndroid Build Coastguard Workervar _ location = toolLocation{} 80*6c119a46SAndroid Build Coastguard Worker 81*6c119a46SAndroid Build Coastguard Worker// packagedToolLocation is a $(location) result for an entry in the tools or 82*6c119a46SAndroid Build Coastguard Worker// tool_files property that has PackagingSpecs. 83*6c119a46SAndroid Build Coastguard Workertype packagedToolLocation struct { 84*6c119a46SAndroid Build Coastguard Worker spec android.PackagingSpec 85*6c119a46SAndroid Build Coastguard Worker} 86*6c119a46SAndroid Build Coastguard Worker 87*6c119a46SAndroid Build Coastguard Workerfunc (l packagedToolLocation) String() string { 88*6c119a46SAndroid Build Coastguard Worker return l.spec.FileName() 89*6c119a46SAndroid Build Coastguard Worker} 90*6c119a46SAndroid Build Coastguard Worker 91*6c119a46SAndroid Build Coastguard Workerfunc (l packagedToolLocation) Paths(cmd *android.RuleBuilderCommand) []string { 92*6c119a46SAndroid Build Coastguard Worker return []string{cmd.PathForPackagedTool(l.spec)} 93*6c119a46SAndroid Build Coastguard Worker} 94*6c119a46SAndroid Build Coastguard Worker 95*6c119a46SAndroid Build Coastguard Workervar _ location = packagedToolLocation{} 96*6c119a46SAndroid Build Coastguard Worker 97*6c119a46SAndroid Build Coastguard Worker// errorLocation is a placeholder for a $(location) result that returns 98*6c119a46SAndroid Build Coastguard Worker// garbage to break the command when error reporting is delayed by 99*6c119a46SAndroid Build Coastguard Worker// ALLOW_MISSING_DEPENDENCIES=true. 100*6c119a46SAndroid Build Coastguard Workertype errorLocation struct { 101*6c119a46SAndroid Build Coastguard Worker err string 102*6c119a46SAndroid Build Coastguard Worker} 103*6c119a46SAndroid Build Coastguard Worker 104*6c119a46SAndroid Build Coastguard Workerfunc (l errorLocation) String() string { 105*6c119a46SAndroid Build Coastguard Worker return l.err 106*6c119a46SAndroid Build Coastguard Worker} 107*6c119a46SAndroid Build Coastguard Worker 108*6c119a46SAndroid Build Coastguard Workerfunc (l errorLocation) Paths(cmd *android.RuleBuilderCommand) []string { 109*6c119a46SAndroid Build Coastguard Worker return []string{l.err} 110*6c119a46SAndroid Build Coastguard Worker} 111*6c119a46SAndroid Build Coastguard Worker 112*6c119a46SAndroid Build Coastguard Workervar _ location = errorLocation{} 113