github.com/westcoastroms/westcoastroms-build@v0.0.0-20190928114312-2350e5a73030/build/soong/java/proto.go (about) 1 // Copyright 2017 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 15 package java 16 17 import ( 18 "strings" 19 20 "github.com/google/blueprint" 21 "github.com/google/blueprint/proptools" 22 23 "android/soong/android" 24 ) 25 26 func init() { 27 pctx.HostBinToolVariable("protocCmd", "aprotoc") 28 } 29 30 var ( 31 proto = pctx.AndroidStaticRule("protoc", 32 blueprint.RuleParams{ 33 Command: `rm -rf $out.tmp && mkdir -p $out.tmp && ` + 34 `$protocCmd $protoOut=$protoOutParams:$out.tmp -I $protoBase $protoFlags $in && ` + 35 `${config.SoongZipCmd} -jar -o $out -C $out.tmp -D $out.tmp && rm -rf $out.tmp`, 36 CommandDeps: []string{ 37 "$protocCmd", 38 "${config.SoongZipCmd}", 39 }, 40 }, "protoBase", "protoFlags", "protoOut", "protoOutParams") 41 ) 42 43 func genProto(ctx android.ModuleContext, protoFile android.Path, flags javaBuilderFlags) android.Path { 44 srcJarFile := android.GenPathWithExt(ctx, "proto", protoFile, "srcjar") 45 46 var protoBase string 47 if flags.protoRoot { 48 protoBase = "." 49 } else { 50 protoBase = strings.TrimSuffix(protoFile.String(), protoFile.Rel()) 51 } 52 53 ctx.Build(pctx, android.BuildParams{ 54 Rule: proto, 55 Description: "protoc " + protoFile.Rel(), 56 Output: srcJarFile, 57 Input: protoFile, 58 Args: map[string]string{ 59 "protoBase": protoBase, 60 "protoOut": flags.protoOutTypeFlag, 61 "protoOutParams": flags.protoOutParams, 62 "protoFlags": strings.Join(flags.protoFlags, " "), 63 }, 64 }) 65 66 return srcJarFile 67 } 68 69 func protoDeps(ctx android.BottomUpMutatorContext, p *android.ProtoProperties) { 70 switch proptools.String(p.Proto.Type) { 71 case "micro": 72 ctx.AddDependency(ctx.Module(), staticLibTag, "libprotobuf-java-micro") 73 case "nano": 74 ctx.AddDependency(ctx.Module(), staticLibTag, "libprotobuf-java-nano") 75 case "lite", "": 76 ctx.AddDependency(ctx.Module(), staticLibTag, "libprotobuf-java-lite") 77 case "full": 78 if ctx.Host() { 79 ctx.AddDependency(ctx.Module(), staticLibTag, "libprotobuf-java-full") 80 } else { 81 ctx.PropertyErrorf("proto.type", "full java protos only supported on the host") 82 } 83 default: 84 ctx.PropertyErrorf("proto.type", "unknown proto type %q", 85 proptools.String(p.Proto.Type)) 86 } 87 } 88 89 func protoFlags(ctx android.ModuleContext, j *CompilerProperties, p *android.ProtoProperties, 90 flags javaBuilderFlags) javaBuilderFlags { 91 92 switch proptools.String(p.Proto.Type) { 93 case "micro": 94 flags.protoOutTypeFlag = "--javamicro_out" 95 case "nano": 96 flags.protoOutTypeFlag = "--javanano_out" 97 case "lite": 98 flags.protoOutTypeFlag = "--java_out" 99 flags.protoOutParams = "lite" 100 case "full", "": 101 flags.protoOutTypeFlag = "--java_out" 102 default: 103 ctx.PropertyErrorf("proto.type", "unknown proto type %q", 104 proptools.String(p.Proto.Type)) 105 } 106 107 if len(j.Proto.Output_params) > 0 { 108 if flags.protoOutParams != "" { 109 flags.protoOutParams += "," 110 } 111 flags.protoOutParams += strings.Join(j.Proto.Output_params, ",") 112 } 113 114 flags.protoFlags = android.ProtoFlags(ctx, p) 115 flags.protoRoot = android.ProtoCanonicalPathFromRoot(ctx, p) 116 117 return flags 118 }