Support sanitizer builds inside make
am: 30d5f514dd
* commit '30d5f514dd1b43366440d6aff0b53124de5dd7b5':
Support sanitizer builds inside make
Change-Id: I839262ee6f1abcbba9a0dc6f3cca75671b79c799
This commit is contained in:
@@ -26,6 +26,7 @@ import (
|
|||||||
func (c *Module) AndroidMk() (ret common.AndroidMkData, err error) {
|
func (c *Module) AndroidMk() (ret common.AndroidMkData, err error) {
|
||||||
ret.OutputFile = c.outputFile
|
ret.OutputFile = c.outputFile
|
||||||
ret.Extra = append(ret.Extra, func(w io.Writer, outputFile common.Path) (err error) {
|
ret.Extra = append(ret.Extra, func(w io.Writer, outputFile common.Path) (err error) {
|
||||||
|
fmt.Fprintln(w, "LOCAL_SANITIZE := never")
|
||||||
if len(c.Properties.AndroidMkSharedLibs) > 0 {
|
if len(c.Properties.AndroidMkSharedLibs) > 0 {
|
||||||
fmt.Fprintln(w, "LOCAL_SHARED_LIBRARIES := "+strings.Join(c.Properties.AndroidMkSharedLibs, " "))
|
fmt.Fprintln(w, "LOCAL_SHARED_LIBRARIES := "+strings.Join(c.Properties.AndroidMkSharedLibs, " "))
|
||||||
}
|
}
|
||||||
|
12
cc/cc.go
12
cc/cc.go
@@ -1482,7 +1482,7 @@ func (library *libraryLinker) flags(ctx ModuleContext, flags Flags) Flags {
|
|||||||
flags.Nocrt = Bool(library.Properties.Nocrt)
|
flags.Nocrt = Bool(library.Properties.Nocrt)
|
||||||
|
|
||||||
if !library.static() {
|
if !library.static() {
|
||||||
libName := ctx.ModuleName()
|
libName := ctx.ModuleName() + library.Properties.VariantName
|
||||||
// GCC for Android assumes that -shared means -Bsymbolic, use -Wl,-shared instead
|
// GCC for Android assumes that -shared means -Bsymbolic, use -Wl,-shared instead
|
||||||
sharedFlag := "-Wl,-shared"
|
sharedFlag := "-Wl,-shared"
|
||||||
if flags.Clang || ctx.Host() {
|
if flags.Clang || ctx.Host() {
|
||||||
@@ -1663,7 +1663,8 @@ func (library *libraryLinker) appendVariantName(variant string) {
|
|||||||
type libraryInstaller struct {
|
type libraryInstaller struct {
|
||||||
baseInstaller
|
baseInstaller
|
||||||
|
|
||||||
linker *libraryLinker
|
linker *libraryLinker
|
||||||
|
sanitize *sanitize
|
||||||
}
|
}
|
||||||
|
|
||||||
func (library *libraryInstaller) install(ctx ModuleContext, file common.Path) {
|
func (library *libraryInstaller) install(ctx ModuleContext, file common.Path) {
|
||||||
@@ -1672,6 +1673,10 @@ func (library *libraryInstaller) install(ctx ModuleContext, file common.Path) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (library *libraryInstaller) inData() bool {
|
||||||
|
return library.baseInstaller.inData() || library.sanitize.inData()
|
||||||
|
}
|
||||||
|
|
||||||
func NewLibrary(hod common.HostOrDeviceSupported, shared, static bool) *Module {
|
func NewLibrary(hod common.HostOrDeviceSupported, shared, static bool) *Module {
|
||||||
module := newModule(hod, common.MultilibBoth)
|
module := newModule(hod, common.MultilibBoth)
|
||||||
|
|
||||||
@@ -1688,7 +1693,8 @@ func NewLibrary(hod common.HostOrDeviceSupported, shared, static bool) *Module {
|
|||||||
dir: "lib",
|
dir: "lib",
|
||||||
dir64: "lib64",
|
dir64: "lib64",
|
||||||
},
|
},
|
||||||
linker: linker,
|
linker: linker,
|
||||||
|
sanitize: module.sanitize,
|
||||||
}
|
}
|
||||||
|
|
||||||
return module
|
return module
|
||||||
|
@@ -69,6 +69,7 @@ type SanitizeProperties struct {
|
|||||||
|
|
||||||
SanitizerEnabled bool `blueprint:"mutated"`
|
SanitizerEnabled bool `blueprint:"mutated"`
|
||||||
SanitizeDep bool `blueprint:"mutated"`
|
SanitizeDep bool `blueprint:"mutated"`
|
||||||
|
InData bool `blueprint:"mutated"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type sanitize struct {
|
type sanitize struct {
|
||||||
@@ -266,6 +267,10 @@ func (sanitize *sanitize) flags(ctx ModuleContext, flags Flags) Flags {
|
|||||||
return flags
|
return flags
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (sanitize *sanitize) inData() bool {
|
||||||
|
return sanitize.Properties.InData
|
||||||
|
}
|
||||||
|
|
||||||
func (sanitize *sanitize) Sanitizer(t sanitizerType) bool {
|
func (sanitize *sanitize) Sanitizer(t sanitizerType) bool {
|
||||||
if sanitize == nil {
|
if sanitize == nil {
|
||||||
return false
|
return false
|
||||||
@@ -314,14 +319,24 @@ func sanitizerMutator(t sanitizerType) func(common.AndroidBottomUpMutatorContext
|
|||||||
return func(mctx common.AndroidBottomUpMutatorContext) {
|
return func(mctx common.AndroidBottomUpMutatorContext) {
|
||||||
if c, ok := mctx.Module().(*Module); ok && c.sanitize != nil {
|
if c, ok := mctx.Module().(*Module); ok && c.sanitize != nil {
|
||||||
if d, ok := c.linker.(baseLinkerInterface); ok && d.isDependencyRoot() && c.sanitize.Sanitizer(t) {
|
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 {
|
} else if c.sanitize.Properties.SanitizeDep {
|
||||||
modules := mctx.CreateVariations("", t.String())
|
if mctx.AConfig().EmbeddedInMake() {
|
||||||
modules[0].(*Module).sanitize.SetSanitizer(t, false)
|
modules := mctx.CreateVariations(t.String())
|
||||||
modules[1].(*Module).sanitize.SetSanitizer(t, true)
|
modules[0].(*Module).sanitize.SetSanitizer(t, true)
|
||||||
modules[1].(*Module).appendVariantName("_" + t.String())
|
modules[0].(*Module).sanitize.Properties.InData = true
|
||||||
modules[0].(*Module).sanitize.Properties.SanitizeDep = false
|
} else {
|
||||||
modules[1].(*Module).sanitize.Properties.SanitizeDep = false
|
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
|
c.sanitize.Properties.SanitizeDep = false
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user