diff --git a/cc/builder.go b/cc/builder.go index 00dc742e8..554706ca8 100644 --- a/cc/builder.go +++ b/cc/builder.go @@ -271,6 +271,8 @@ type builderFlags struct { sAbiDump bool emitXrefs bool + assemblerWithCpp bool + systemIncludeFlags string groupStaticLibs bool @@ -428,7 +430,9 @@ func TransformSourceToObj(ctx android.ModuleContext, subdir string, srcFiles and switch srcFile.Ext() { case ".s": - rule = ccNoDeps + if !flags.assemblerWithCpp { + rule = ccNoDeps + } fallthrough case ".S": ccCmd = "clang" diff --git a/cc/cc.go b/cc/cc.go index 0245c6a18..4edbee6a6 100644 --- a/cc/cc.go +++ b/cc/cc.go @@ -174,7 +174,8 @@ type Flags struct { CFlagsDeps android.Paths // Files depended on by compiler flags LdFlagsDeps android.Paths // Files depended on by linker flags - GroupStaticLibs bool + AssemblerWithCpp bool + GroupStaticLibs bool proto android.ProtoFlags protoC bool // Whether to use C instead of C++ @@ -1053,6 +1054,9 @@ func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) { if c.sabi != nil { flags = c.sabi.flags(ctx, flags) } + + flags.AssemblerWithCpp = inList("-xassembler-with-cpp", flags.AsFlags) + // Optimization to reduce size of build.ninja // Replace the long list of flags for each file with a module-local variable ctx.Variable(pctx, "cflags", strings.Join(flags.CFlags, " ")) diff --git a/cc/util.go b/cc/util.go index fb6338ac2..7b8ad1872 100644 --- a/cc/util.go +++ b/cc/util.go @@ -79,7 +79,8 @@ func flagsToBuilderFlags(in Flags) builderFlags { systemIncludeFlags: strings.Join(in.SystemIncludeFlags, " "), - groupStaticLibs: in.GroupStaticLibs, + assemblerWithCpp: in.AssemblerWithCpp, + groupStaticLibs: in.GroupStaticLibs, proto: in.proto, protoC: in.protoC,