Loading android/config.go +4 −0 Original line number Diff line number Diff line Loading @@ -351,6 +351,10 @@ func (c *config) BlueprintToolLocation() string { var _ bootstrap.ConfigBlueprintToolLocation = (*config)(nil) func (c *config) HostToolPath(ctx PathContext, tool string) Path { return PathForOutput(ctx, "host", c.PrebuiltOS(), "bin", tool) } // HostSystemTool looks for non-hermetic tools from the system we're running on. // Generally shouldn't be used, but useful to find the XCode SDK, etc. func (c *config) HostSystemTool(name string) string { Loading cc/builder.go +8 −3 Original line number Diff line number Diff line Loading @@ -231,8 +231,6 @@ type builderFlags struct { ldFlags string libFlags string yaccFlags string protoFlags string protoOutParams string tidyFlags string sAbiFlags string yasmFlags string Loading @@ -242,7 +240,6 @@ type builderFlags struct { tidy bool coverage bool sAbiDump bool protoRoot bool systemIncludeFlags string Loading @@ -252,6 +249,14 @@ type builderFlags struct { stripKeepMiniDebugInfo bool stripAddGnuDebuglink bool stripUseLlvmStrip bool protoDeps android.Paths protoFlags string protoOutTypeFlag string protoOutParams string protoC bool protoOptionsFile bool protoRoot bool } type Objects struct { Loading cc/cc.go +8 −3 Original line number Diff line number Diff line Loading @@ -130,8 +130,6 @@ type Flags struct { CppFlags []string // Flags that apply to C++ source files ToolingCppFlags []string // Flags that apply to C++ source files parsed by clang LibTooling tools YaccFlags []string // Flags that apply to Yacc source files protoFlags []string // Flags that apply to proto source files protoOutParams []string // Flags that modify the output of proto generated files aidlFlags []string // Flags that apply to aidl source files rsFlags []string // Flags that apply to renderscript source files LdFlags []string // Flags that apply to linker command lines Loading @@ -148,7 +146,6 @@ type Flags struct { Tidy bool Coverage bool SAbiDump bool ProtoRoot bool RequiredInstructionSet string DynamicLinker string Loading @@ -157,6 +154,14 @@ type Flags struct { LdFlagsDeps android.Paths // Files depended on by linker flags GroupStaticLibs bool protoDeps android.Paths protoFlags []string // Flags that apply to proto source files protoOutTypeFlag string // The output type, --cpp_out for example protoOutParams []string // Flags that modify the output of proto generated files protoC bool // Whether to use C instead of C++ protoOptionsFile bool // Whether to look for a .options file next to the .proto ProtoRoot bool } type ObjectLinkerProperties struct { Loading cc/gen.go +1 −2 Original line number Diff line number Diff line Loading @@ -182,8 +182,7 @@ func genSources(ctx android.ModuleContext, srcFiles android.Paths, srcFiles[i] = cppFile genLex(ctx, srcFile, cppFile) case ".proto": ccFile, headerFile := genProto(ctx, srcFile, buildFlags.protoFlags, buildFlags.protoOutParams, buildFlags.protoRoot) ccFile, headerFile := genProto(ctx, srcFile, buildFlags) srcFiles[i] = ccFile deps = append(deps, headerFile) case ".aidl": Loading cc/proto.go +56 −10 Original line number Diff line number Diff line Loading @@ -31,41 +31,56 @@ func init() { var ( proto = pctx.AndroidStaticRule("protoc", blueprint.RuleParams{ Command: "$protocCmd --cpp_out=$protoOutParams:$outDir --dependency_out=$out.d -I $protoBase $protoFlags $in && " + Command: "$protocCmd $protoOut=$protoOutParams:$outDir --dependency_out=$out.d -I $protoBase $protoFlags $in && " + `$depFixCmd $out.d`, CommandDeps: []string{"$protocCmd", "$depFixCmd"}, Depfile: "${out}.d", Deps: blueprint.DepsGCC, }, "protoFlags", "protoOutParams", "protoBase", "outDir") }, "protoFlags", "protoOut", "protoOutParams", "protoBase", "outDir") ) // genProto creates a rule to convert a .proto file to generated .pb.cc and .pb.h files and returns // the paths to the generated files. func genProto(ctx android.ModuleContext, protoFile android.Path, protoFlags, protoOutParams string, root bool) (ccFile, headerFile android.WritablePath) { func genProto(ctx android.ModuleContext, protoFile android.Path, flags builderFlags) (ccFile, headerFile android.WritablePath) { srcSuffix := ".cc" if flags.protoC { srcSuffix = ".c" } var protoBase string if root { if flags.protoRoot { protoBase = "." ccFile = android.GenPathWithExt(ctx, "proto", protoFile, "pb.cc") ccFile = android.GenPathWithExt(ctx, "proto", protoFile, "pb"+srcSuffix) headerFile = android.GenPathWithExt(ctx, "proto", protoFile, "pb.h") } else { rel := protoFile.Rel() protoBase = strings.TrimSuffix(protoFile.String(), rel) ccFile = android.PathForModuleGen(ctx, "proto", pathtools.ReplaceExtension(rel, "pb.cc")) ccFile = android.PathForModuleGen(ctx, "proto", pathtools.ReplaceExtension(rel, "pb"+srcSuffix)) headerFile = android.PathForModuleGen(ctx, "proto", pathtools.ReplaceExtension(rel, "pb.h")) } protoDeps := flags.protoDeps if flags.protoOptionsFile { optionsFile := pathtools.ReplaceExtension(protoFile.String(), "options") optionsPath := android.ExistentPathForSource(ctx, optionsFile) if optionsPath.Valid() { protoDeps = append(android.Paths{optionsPath.Path()}, protoDeps...) } } ctx.Build(pctx, android.BuildParams{ Rule: proto, Description: "protoc " + protoFile.Rel(), Output: ccFile, ImplicitOutput: headerFile, Input: protoFile, Implicits: protoDeps, Args: map[string]string{ "outDir": android.ProtoDir(ctx).String(), "protoFlags": protoFlags, "protoOutParams": protoOutParams, "protoFlags": flags.protoFlags, "protoOut": flags.protoOutTypeFlag, "protoOutParams": flags.protoOutParams, "protoBase": protoBase, }, }) Loading @@ -91,6 +106,12 @@ func protoDeps(ctx BaseModuleContext, deps Deps, p *android.ProtoProperties, sta } else { lib = "libprotobuf-cpp-lite" } case "nanopb-c": lib = "libprotobuf-c-nano" static = true case "nanopb-c-enable_malloc": lib = "libprotobuf-c-nano-enable_malloc" static = true default: ctx.PropertyErrorf("proto.type", "unknown proto type %q", String(p.Proto.Type)) Loading Loading @@ -118,8 +139,33 @@ func protoFlags(ctx ModuleContext, flags Flags, p *android.ProtoProperties) Flag flags.protoFlags = android.ProtoFlags(ctx, p) if String(p.Proto.Type) == "lite" { var plugin string switch String(p.Proto.Type) { case "nanopb-c", "nanopb-c-enable_malloc": flags.protoC = true flags.protoOptionsFile = true flags.protoOutTypeFlag = "--nanopb_out" plugin = "protoc-gen-nanopb" case "full": flags.protoOutTypeFlag = "--cpp_out" case "lite": flags.protoOutTypeFlag = "--cpp_out" flags.protoOutParams = append(flags.protoOutParams, "lite") case "": // TODO(b/119714316): this should be equivalent to "lite" in // order to match protoDeps, but some modules are depending on // this behavior flags.protoOutTypeFlag = "--cpp_out" default: ctx.PropertyErrorf("proto.type", "unknown proto type %q", String(p.Proto.Type)) } if plugin != "" { path := ctx.Config().HostToolPath(ctx, plugin) flags.protoDeps = append(flags.protoDeps, path) flags.protoFlags = append(flags.protoFlags, "--plugin="+path.String()) } return flags Loading Loading
android/config.go +4 −0 Original line number Diff line number Diff line Loading @@ -351,6 +351,10 @@ func (c *config) BlueprintToolLocation() string { var _ bootstrap.ConfigBlueprintToolLocation = (*config)(nil) func (c *config) HostToolPath(ctx PathContext, tool string) Path { return PathForOutput(ctx, "host", c.PrebuiltOS(), "bin", tool) } // HostSystemTool looks for non-hermetic tools from the system we're running on. // Generally shouldn't be used, but useful to find the XCode SDK, etc. func (c *config) HostSystemTool(name string) string { Loading
cc/builder.go +8 −3 Original line number Diff line number Diff line Loading @@ -231,8 +231,6 @@ type builderFlags struct { ldFlags string libFlags string yaccFlags string protoFlags string protoOutParams string tidyFlags string sAbiFlags string yasmFlags string Loading @@ -242,7 +240,6 @@ type builderFlags struct { tidy bool coverage bool sAbiDump bool protoRoot bool systemIncludeFlags string Loading @@ -252,6 +249,14 @@ type builderFlags struct { stripKeepMiniDebugInfo bool stripAddGnuDebuglink bool stripUseLlvmStrip bool protoDeps android.Paths protoFlags string protoOutTypeFlag string protoOutParams string protoC bool protoOptionsFile bool protoRoot bool } type Objects struct { Loading
cc/cc.go +8 −3 Original line number Diff line number Diff line Loading @@ -130,8 +130,6 @@ type Flags struct { CppFlags []string // Flags that apply to C++ source files ToolingCppFlags []string // Flags that apply to C++ source files parsed by clang LibTooling tools YaccFlags []string // Flags that apply to Yacc source files protoFlags []string // Flags that apply to proto source files protoOutParams []string // Flags that modify the output of proto generated files aidlFlags []string // Flags that apply to aidl source files rsFlags []string // Flags that apply to renderscript source files LdFlags []string // Flags that apply to linker command lines Loading @@ -148,7 +146,6 @@ type Flags struct { Tidy bool Coverage bool SAbiDump bool ProtoRoot bool RequiredInstructionSet string DynamicLinker string Loading @@ -157,6 +154,14 @@ type Flags struct { LdFlagsDeps android.Paths // Files depended on by linker flags GroupStaticLibs bool protoDeps android.Paths protoFlags []string // Flags that apply to proto source files protoOutTypeFlag string // The output type, --cpp_out for example protoOutParams []string // Flags that modify the output of proto generated files protoC bool // Whether to use C instead of C++ protoOptionsFile bool // Whether to look for a .options file next to the .proto ProtoRoot bool } type ObjectLinkerProperties struct { Loading
cc/gen.go +1 −2 Original line number Diff line number Diff line Loading @@ -182,8 +182,7 @@ func genSources(ctx android.ModuleContext, srcFiles android.Paths, srcFiles[i] = cppFile genLex(ctx, srcFile, cppFile) case ".proto": ccFile, headerFile := genProto(ctx, srcFile, buildFlags.protoFlags, buildFlags.protoOutParams, buildFlags.protoRoot) ccFile, headerFile := genProto(ctx, srcFile, buildFlags) srcFiles[i] = ccFile deps = append(deps, headerFile) case ".aidl": Loading
cc/proto.go +56 −10 Original line number Diff line number Diff line Loading @@ -31,41 +31,56 @@ func init() { var ( proto = pctx.AndroidStaticRule("protoc", blueprint.RuleParams{ Command: "$protocCmd --cpp_out=$protoOutParams:$outDir --dependency_out=$out.d -I $protoBase $protoFlags $in && " + Command: "$protocCmd $protoOut=$protoOutParams:$outDir --dependency_out=$out.d -I $protoBase $protoFlags $in && " + `$depFixCmd $out.d`, CommandDeps: []string{"$protocCmd", "$depFixCmd"}, Depfile: "${out}.d", Deps: blueprint.DepsGCC, }, "protoFlags", "protoOutParams", "protoBase", "outDir") }, "protoFlags", "protoOut", "protoOutParams", "protoBase", "outDir") ) // genProto creates a rule to convert a .proto file to generated .pb.cc and .pb.h files and returns // the paths to the generated files. func genProto(ctx android.ModuleContext, protoFile android.Path, protoFlags, protoOutParams string, root bool) (ccFile, headerFile android.WritablePath) { func genProto(ctx android.ModuleContext, protoFile android.Path, flags builderFlags) (ccFile, headerFile android.WritablePath) { srcSuffix := ".cc" if flags.protoC { srcSuffix = ".c" } var protoBase string if root { if flags.protoRoot { protoBase = "." ccFile = android.GenPathWithExt(ctx, "proto", protoFile, "pb.cc") ccFile = android.GenPathWithExt(ctx, "proto", protoFile, "pb"+srcSuffix) headerFile = android.GenPathWithExt(ctx, "proto", protoFile, "pb.h") } else { rel := protoFile.Rel() protoBase = strings.TrimSuffix(protoFile.String(), rel) ccFile = android.PathForModuleGen(ctx, "proto", pathtools.ReplaceExtension(rel, "pb.cc")) ccFile = android.PathForModuleGen(ctx, "proto", pathtools.ReplaceExtension(rel, "pb"+srcSuffix)) headerFile = android.PathForModuleGen(ctx, "proto", pathtools.ReplaceExtension(rel, "pb.h")) } protoDeps := flags.protoDeps if flags.protoOptionsFile { optionsFile := pathtools.ReplaceExtension(protoFile.String(), "options") optionsPath := android.ExistentPathForSource(ctx, optionsFile) if optionsPath.Valid() { protoDeps = append(android.Paths{optionsPath.Path()}, protoDeps...) } } ctx.Build(pctx, android.BuildParams{ Rule: proto, Description: "protoc " + protoFile.Rel(), Output: ccFile, ImplicitOutput: headerFile, Input: protoFile, Implicits: protoDeps, Args: map[string]string{ "outDir": android.ProtoDir(ctx).String(), "protoFlags": protoFlags, "protoOutParams": protoOutParams, "protoFlags": flags.protoFlags, "protoOut": flags.protoOutTypeFlag, "protoOutParams": flags.protoOutParams, "protoBase": protoBase, }, }) Loading @@ -91,6 +106,12 @@ func protoDeps(ctx BaseModuleContext, deps Deps, p *android.ProtoProperties, sta } else { lib = "libprotobuf-cpp-lite" } case "nanopb-c": lib = "libprotobuf-c-nano" static = true case "nanopb-c-enable_malloc": lib = "libprotobuf-c-nano-enable_malloc" static = true default: ctx.PropertyErrorf("proto.type", "unknown proto type %q", String(p.Proto.Type)) Loading Loading @@ -118,8 +139,33 @@ func protoFlags(ctx ModuleContext, flags Flags, p *android.ProtoProperties) Flag flags.protoFlags = android.ProtoFlags(ctx, p) if String(p.Proto.Type) == "lite" { var plugin string switch String(p.Proto.Type) { case "nanopb-c", "nanopb-c-enable_malloc": flags.protoC = true flags.protoOptionsFile = true flags.protoOutTypeFlag = "--nanopb_out" plugin = "protoc-gen-nanopb" case "full": flags.protoOutTypeFlag = "--cpp_out" case "lite": flags.protoOutTypeFlag = "--cpp_out" flags.protoOutParams = append(flags.protoOutParams, "lite") case "": // TODO(b/119714316): this should be equivalent to "lite" in // order to match protoDeps, but some modules are depending on // this behavior flags.protoOutTypeFlag = "--cpp_out" default: ctx.PropertyErrorf("proto.type", "unknown proto type %q", String(p.Proto.Type)) } if plugin != "" { path := ctx.Config().HostToolPath(ctx, plugin) flags.protoDeps = append(flags.protoDeps, path) flags.protoFlags = append(flags.protoFlags, "--plugin="+path.String()) } return flags Loading