diff --git a/cc/compiler.go b/cc/compiler.go index 69ead3089..c4e967fbf 100644 --- a/cc/compiler.go +++ b/cc/compiler.go @@ -189,6 +189,11 @@ type BaseCompilerProperties struct { // variant of the C/C++ module. Cflags []string } + Platform struct { + // List of additional cflags that should be used to build the platform + // variant of the C/C++ module. + Cflags []string + } } Proto struct { @@ -310,6 +315,7 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags, deps CheckBadCompilerFlags(ctx, "product.cflags", compiler.Properties.Target.Product.Cflags) CheckBadCompilerFlags(ctx, "recovery.cflags", compiler.Properties.Target.Recovery.Cflags) CheckBadCompilerFlags(ctx, "vendor_ramdisk.cflags", compiler.Properties.Target.Vendor_ramdisk.Cflags) + CheckBadCompilerFlags(ctx, "platform.cflags", compiler.Properties.Target.Platform.Cflags) esc := proptools.NinjaAndShellEscapeList @@ -502,6 +508,9 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags, deps if ctx.inVendorRamdisk() { flags.Local.CFlags = append(flags.Local.CFlags, esc(compiler.Properties.Target.Vendor_ramdisk.Cflags)...) } + if !ctx.useSdk() { + flags.Local.CFlags = append(flags.Local.CFlags, esc(compiler.Properties.Target.Platform.Cflags)...) + } // We can enforce some rules more strictly in the code we own. strict // indicates if this is code that we can be stricter with. If we have diff --git a/cc/linker.go b/cc/linker.go index 13df23296..49e754a32 100644 --- a/cc/linker.go +++ b/cc/linker.go @@ -111,6 +111,10 @@ type BaseLinkerProperties struct { // product variant of the C/C++ module. Static_libs []string + // list of ehader libs that only should be used to build vendor or product + // variant of the C/C++ module. + Header_libs []string + // list of shared libs that should not be used to build vendor or // product variant of the C/C++ module. Exclude_shared_libs []string @@ -179,6 +183,14 @@ type BaseLinkerProperties struct { // in most cases the same libraries are available for the SDK and platform // variants. Shared_libs []string + + // list of ehader libs that only should be used to build platform variant of + // the C/C++ module. + Header_libs []string + + // list of shared libs that should not be used to build the platform variant + // of the C/C++ module. + Exclude_shared_libs []string } Apex struct { // list of shared libs that should not be used to build the apex variant of @@ -300,6 +312,7 @@ func (linker *baseLinker) linkerDeps(ctx DepsContext, deps Deps) Deps { deps.ReexportSharedLibHeaders = removeListFromList(deps.ReexportSharedLibHeaders, linker.Properties.Target.Vendor.Exclude_shared_libs) deps.StaticLibs = append(deps.StaticLibs, linker.Properties.Target.Vendor.Static_libs...) deps.StaticLibs = removeListFromList(deps.StaticLibs, linker.Properties.Target.Vendor.Exclude_static_libs) + deps.HeaderLibs = append(deps.HeaderLibs, linker.Properties.Target.Vendor.Header_libs...) deps.HeaderLibs = removeListFromList(deps.HeaderLibs, linker.Properties.Target.Vendor.Exclude_header_libs) deps.ReexportStaticLibHeaders = removeListFromList(deps.ReexportStaticLibHeaders, linker.Properties.Target.Vendor.Exclude_static_libs) deps.WholeStaticLibs = removeListFromList(deps.WholeStaticLibs, linker.Properties.Target.Vendor.Exclude_static_libs) @@ -349,6 +362,8 @@ func (linker *baseLinker) linkerDeps(ctx DepsContext, deps Deps) Deps { if !ctx.useSdk() { deps.SharedLibs = append(deps.SharedLibs, linker.Properties.Target.Platform.Shared_libs...) + deps.SharedLibs = removeListFromList(deps.SharedLibs, linker.Properties.Target.Platform.Exclude_shared_libs) + deps.HeaderLibs = append(deps.HeaderLibs, linker.Properties.Target.Platform.Header_libs...) } deps.SystemSharedLibs = linker.overrideDefaultSharedLibraries(ctx)