diff options
author | Colin Cross <ccross@android.com> | 2016-05-03 18:02:42 -0700 |
---|---|---|
committer | Colin Cross <ccross@android.com> | 2016-05-03 18:02:42 -0700 |
commit | 30d5f514dd1b43366440d6aff0b53124de5dd7b5 (patch) | |
tree | 521d35f648aa4142cfa9b46f76e5e88a1953c919 /cc | |
parent | b8ecdfe0398c4d43178b433bea2d6c9d0c4fd509 (diff) | |
download | build_soong-30d5f514dd1b43366440d6aff0b53124de5dd7b5.tar.gz build_soong-30d5f514dd1b43366440d6aff0b53124de5dd7b5.tar.bz2 build_soong-30d5f514dd1b43366440d6aff0b53124de5dd7b5.zip |
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
Diffstat (limited to 'cc')
-rw-r--r-- | cc/androidmk.go | 1 | ||||
-rw-r--r-- | cc/cc.go | 12 | ||||
-rw-r--r-- | cc/sanitize.go | 29 |
3 files changed, 32 insertions, 10 deletions
diff --git a/cc/androidmk.go b/cc/androidmk.go index 5b160c63..53c05d4d 100644 --- a/cc/androidmk.go +++ b/cc/androidmk.go @@ -26,6 +26,7 @@ import ( func (c *Module) AndroidMk() (ret common.AndroidMkData, err error) { ret.OutputFile = c.outputFile 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 { fmt.Fprintln(w, "LOCAL_SHARED_LIBRARIES := "+strings.Join(c.Properties.AndroidMkSharedLibs, " ")) } @@ -1482,7 +1482,7 @@ func (library *libraryLinker) flags(ctx ModuleContext, flags Flags) Flags { flags.Nocrt = Bool(library.Properties.Nocrt) if !library.static() { - libName := ctx.ModuleName() + libName := ctx.ModuleName() + library.Properties.VariantName // GCC for Android assumes that -shared means -Bsymbolic, use -Wl,-shared instead sharedFlag := "-Wl,-shared" if flags.Clang || ctx.Host() { @@ -1663,7 +1663,8 @@ func (library *libraryLinker) appendVariantName(variant string) { type libraryInstaller struct { baseInstaller - linker *libraryLinker + linker *libraryLinker + sanitize *sanitize } 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 { module := newModule(hod, common.MultilibBoth) @@ -1688,7 +1693,8 @@ func NewLibrary(hod common.HostOrDeviceSupported, shared, static bool) *Module { dir: "lib", dir64: "lib64", }, - linker: linker, + linker: linker, + sanitize: module.sanitize, } return module diff --git a/cc/sanitize.go b/cc/sanitize.go index 676d5b37..670443bf 100644 --- a/cc/sanitize.go +++ b/cc/sanitize.go @@ -69,6 +69,7 @@ type SanitizeProperties struct { SanitizerEnabled bool `blueprint:"mutated"` SanitizeDep bool `blueprint:"mutated"` + InData bool `blueprint:"mutated"` } type sanitize struct { @@ -266,6 +267,10 @@ func (sanitize *sanitize) flags(ctx ModuleContext, flags Flags) Flags { 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 @@ func sanitizerMutator(t sanitizerType) func(common.AndroidBottomUpMutatorContext 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 } |