Support sanitizer builds inside make
Make expects libraries built with address sanitizer to be installed into
/data, and can't handle multiple variants of modules.
Change-Id: Ice575ff6f0788a88f296e7b3ee521a2b9771f55f
diff --git a/cc/sanitize.go b/cc/sanitize.go
index 676d5b3..670443b 100644
--- a/cc/sanitize.go
+++ b/cc/sanitize.go
@@ -69,6 +69,7 @@
SanitizerEnabled bool `blueprint:"mutated"`
SanitizeDep bool `blueprint:"mutated"`
+ InData bool `blueprint:"mutated"`
}
type sanitize struct {
@@ -266,6 +267,10 @@
return flags
}
+func (sanitize *sanitize) inData() bool {
+ return sanitize.Properties.InData
+}
+
func (sanitize *sanitize) Sanitizer(t sanitizerType) bool {
if sanitize == nil {
return false
@@ -314,14 +319,24 @@
return func(mctx common.AndroidBottomUpMutatorContext) {
if c, ok := mctx.Module().(*Module); ok && c.sanitize != nil {
if d, ok := c.linker.(baseLinkerInterface); ok && d.isDependencyRoot() && c.sanitize.Sanitizer(t) {
- mctx.CreateVariations(t.String())
+ modules := mctx.CreateVariations(t.String())
+ modules[0].(*Module).sanitize.SetSanitizer(t, true)
+ if mctx.AConfig().EmbeddedInMake() {
+ modules[0].(*Module).sanitize.Properties.InData = true
+ }
} else if c.sanitize.Properties.SanitizeDep {
- modules := mctx.CreateVariations("", t.String())
- modules[0].(*Module).sanitize.SetSanitizer(t, false)
- modules[1].(*Module).sanitize.SetSanitizer(t, true)
- modules[1].(*Module).appendVariantName("_" + t.String())
- modules[0].(*Module).sanitize.Properties.SanitizeDep = false
- modules[1].(*Module).sanitize.Properties.SanitizeDep = false
+ if mctx.AConfig().EmbeddedInMake() {
+ modules := mctx.CreateVariations(t.String())
+ modules[0].(*Module).sanitize.SetSanitizer(t, true)
+ modules[0].(*Module).sanitize.Properties.InData = true
+ } else {
+ modules := mctx.CreateVariations("", t.String())
+ modules[0].(*Module).sanitize.SetSanitizer(t, false)
+ modules[1].(*Module).sanitize.SetSanitizer(t, true)
+ modules[1].(*Module).appendVariantName("_" + t.String())
+ modules[0].(*Module).sanitize.Properties.SanitizeDep = false
+ modules[1].(*Module).sanitize.Properties.SanitizeDep = false
+ }
}
c.sanitize.Properties.SanitizeDep = false
}