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  }