Skip to content

Commit c15ab40

Browse files
committed
fix: collecting build flags
When collecting build flags for the ninja build rule both backend trying to add module flags to the toolchain flags. This can provide breakage flags as all modules ties to modify Toolchian flags. Toolchain flags should never be changed and added to slice before module flags and that slice should be used to build the ninja rule. Change-Id: I558bb11a7220b38e118f64c47f375f323d3ac3ed
1 parent 5bc518d commit c15ab40

File tree

3 files changed

+22
-16
lines changed

3 files changed

+22
-16
lines changed

core/androidninja_backend.go

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -304,33 +304,36 @@ func (g *androidNinjaGenerator) getSharedLibLinkPaths(ctx blueprint.ModuleContex
304304
func (g *androidNinjaGenerator) CompileObjs(l Compilable, ctx blueprint.ModuleContext, tc toolchain.Toolchain) ([]string, []string) {
305305
orderOnly := GetGeneratedHeadersFiles(ctx)
306306

307-
// tc := backend.Get().GetToolchain(tgtType)
308307
as, astargetflags := tc.GetAssembler()
309308
cc, cctargetflags := tc.GetCCompiler()
310309
cxx, cxxtargetflags := tc.GetCXXCompiler()
310+
311311
cflagsList := []string{}
312+
asflagsList := []string{}
313+
ccflagsList := []string{}
314+
cxxflagsList := []string{}
312315

313316
// Get all the required flags and group them into includes and everything else.
314317
// This should make it easier to visually inspect the flags in logs/ninja files.
315318
l.FlagsInTransitive(ctx).GroupByType(flag.TypeInclude).ForEach(
316319
func(f flag.Flag) {
317320
switch {
318321
case (f.Type() & flag.TypeCompilable) == flag.TypeC: //c exclusive flags
319-
cctargetflags = append(cctargetflags, f.ToString())
322+
ccflagsList = append(ccflagsList, f.ToString())
320323
case f.MatchesType(flag.TypeCC | flag.TypeInclude):
321324
cflagsList = append(cflagsList, f.ToString())
322325
case f.MatchesType(flag.TypeAsm):
323-
astargetflags = append(astargetflags, f.ToString())
326+
asflagsList = append(asflagsList, f.ToString())
324327
case f.MatchesType(flag.TypeCpp):
325-
cxxtargetflags = append(cxxtargetflags, f.ToString())
328+
cxxflagsList = append(cxxflagsList, strings.Clone(f.ToString()))
326329
}
327330
},
328331
)
329332

330-
ctx.Variable(pctx, "asflags", strings.Join(astargetflags, " "))
333+
ctx.Variable(pctx, "asflags", utils.Join(astargetflags, asflagsList))
331334
ctx.Variable(pctx, "cflags", strings.Join(cflagsList, " "))
332-
ctx.Variable(pctx, "conlyflags", strings.Join(cctargetflags, " "))
333-
ctx.Variable(pctx, "cxxflags", strings.Join(cxxtargetflags, " "))
335+
ctx.Variable(pctx, "conlyflags", utils.Join(cctargetflags, ccflagsList))
336+
ctx.Variable(pctx, "cxxflags", utils.Join(cxxtargetflags, cxxflagsList))
334337

335338
objectFiles := []string{}
336339
nonCompiledDeps := []string{}

core/generated_common.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -242,9 +242,9 @@ func (m *ModuleGenerateCommon) getArgs(ctx blueprint.ModuleContext) (string, map
242242
"bob_config_opts": env.ConfigOpts,
243243
"cc": cc,
244244
"cflags": strings.Join(props.Cflags, " "),
245-
"conlyflags": strings.Join(append(cctargetflags, props.Conlyflags...), " "),
245+
"conlyflags": utils.Join(cctargetflags, props.Conlyflags),
246246
"cxx": cxx,
247-
"cxxflags": strings.Join(append(cxxtargetflags, props.Cxxflags...), " "),
247+
"cxxflags": utils.Join(cxxtargetflags, props.Cxxflags),
248248
"ldflags": utils.Join(ldtargetflags, props.Ldflags),
249249
"ldlibs": utils.Join(ldlibs, props.Ldlibs),
250250
"linker": linker,

core/linux_cclibs.go

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,33 +59,36 @@ type Compilable interface {
5959
func (g *linuxGenerator) CompileObjs(l Compilable, ctx blueprint.ModuleContext, tc toolchain.Toolchain) ([]string, []string) {
6060
orderOnly := GetGeneratedHeadersFiles(ctx)
6161

62-
// tc := backend.Get().GetToolchain(tgtType)
6362
as, astargetflags := tc.GetAssembler()
6463
cc, cctargetflags := tc.GetCCompiler()
6564
cxx, cxxtargetflags := tc.GetCXXCompiler()
65+
6666
cflagsList := []string{}
67+
asflagsList := []string{}
68+
ccflagsList := []string{}
69+
cxxflagsList := []string{}
6770

6871
// Get all the required flags and group them into includes and everything else.
6972
// This should make it easier to visually inspect the flags in logs/ninja files.
7073
l.FlagsInTransitive(ctx).GroupByType(flag.TypeInclude).ForEach(
7174
func(f flag.Flag) {
7275
switch {
7376
case (f.Type() & flag.TypeCompilable) == flag.TypeC: //c exclusive flags
74-
cctargetflags = append(cctargetflags, f.ToString())
77+
ccflagsList = append(ccflagsList, f.ToString())
7578
case f.MatchesType(flag.TypeCC | flag.TypeInclude):
7679
cflagsList = append(cflagsList, f.ToString())
7780
case f.MatchesType(flag.TypeAsm):
78-
astargetflags = append(astargetflags, f.ToString())
81+
asflagsList = append(asflagsList, f.ToString())
7982
case f.MatchesType(flag.TypeCpp):
80-
cxxtargetflags = append(cxxtargetflags, f.ToString())
83+
cxxflagsList = append(cxxflagsList, strings.Clone(f.ToString()))
8184
}
8285
},
8386
)
8487

85-
ctx.Variable(pctx, "asflags", strings.Join(astargetflags, " "))
88+
ctx.Variable(pctx, "asflags", utils.Join(astargetflags, asflagsList))
8689
ctx.Variable(pctx, "cflags", strings.Join(cflagsList, " "))
87-
ctx.Variable(pctx, "conlyflags", strings.Join(cctargetflags, " "))
88-
ctx.Variable(pctx, "cxxflags", strings.Join(cxxtargetflags, " "))
90+
ctx.Variable(pctx, "conlyflags", utils.Join(cctargetflags, ccflagsList))
91+
ctx.Variable(pctx, "cxxflags", utils.Join(cxxtargetflags, cxxflagsList))
8992

9093
objectFiles := []string{}
9194
nonCompiledDeps := []string{}

0 commit comments

Comments
 (0)