Move no_crt property to apply to libraries and binaries

Change-Id: I8a770ad422dac0fd67b43ca464e0942f504e1c30
This commit is contained in:
Colin Cross 2016-01-11 12:48:37 -08:00
parent 15a0d46283
commit a89d2e1805
1 changed files with 25 additions and 19 deletions

View File

@ -356,6 +356,10 @@ type BaseLinkerProperties struct {
// list of static libraries to re-export include directories from. Entries must be
// present in static_libs.
Export_static_lib_headers []string `android:"arch_variant"`
// don't link in crt_begin and crt_end. This flag should only be necessary for
// compiling crt or libc.
Nocrt *bool `android:"arch_variant"`
}
type LibraryCompilerProperties struct {
@ -400,10 +404,6 @@ type LibraryLinkerProperties struct {
// local file name to pass to the linker as -force_symbols_weak_list
Force_symbols_weak_list *string `android:"arch_variant"`
// don't link in crt_begin and crt_end. This flag should only be necessary for
// compiling crt or libc.
Nocrt *bool `android:"arch_variant"`
VariantName string `blueprint:"mutated"`
}
@ -1367,6 +1367,8 @@ func (linker *baseLinker) deps(ctx BaseModuleContext, deps Deps) Deps {
func (linker *baseLinker) flags(ctx ModuleContext, flags Flags) Flags {
toolchain := ctx.toolchain()
flags.Nocrt = Bool(linker.Properties.Nocrt)
if !ctx.noDefaultCompilerFlags() {
if ctx.Device() && !Bool(linker.Properties.Allow_undefined_symbols) {
flags.LdFlags = append(flags.LdFlags, "-Wl,--no-undefined")
@ -1602,8 +1604,6 @@ func (library *libraryLinker) props() []interface{} {
func (library *libraryLinker) flags(ctx ModuleContext, flags Flags) Flags {
flags = library.baseLinker.flags(ctx, flags)
flags.Nocrt = Bool(library.Properties.Nocrt)
if !library.static() {
libName := ctx.ModuleName() + library.Properties.VariantName
// GCC for Android assumes that -shared means -Bsymbolic, use -Wl,-shared instead
@ -1645,7 +1645,7 @@ func (library *libraryLinker) deps(ctx BaseModuleContext, deps Deps) Deps {
deps.StaticLibs = append(deps.StaticLibs, library.Properties.Static.Static_libs...)
deps.SharedLibs = append(deps.SharedLibs, library.Properties.Static.Shared_libs...)
} else {
if ctx.Device() && !Bool(library.Properties.Nocrt) {
if ctx.Device() && !Bool(library.baseLinker.Properties.Nocrt) {
if !ctx.sdk() {
deps.CrtBegin = "crtbegin_so"
deps.CrtEnd = "crtend_so"
@ -1932,20 +1932,26 @@ func (binary *binaryLinker) getStem(ctx BaseModuleContext) string {
func (binary *binaryLinker) deps(ctx BaseModuleContext, deps Deps) Deps {
deps = binary.baseLinker.deps(ctx, deps)
if ctx.Device() {
if !ctx.sdk() {
if binary.buildStatic() {
deps.CrtBegin = "crtbegin_static"
if !Bool(binary.baseLinker.Properties.Nocrt) {
if !ctx.sdk() {
if binary.buildStatic() {
deps.CrtBegin = "crtbegin_static"
} else {
deps.CrtBegin = "crtbegin_dynamic"
}
deps.CrtEnd = "crtend_android"
} else {
deps.CrtBegin = "crtbegin_dynamic"
if binary.buildStatic() {
deps.CrtBegin = "ndk_crtbegin_static." + ctx.sdkVersion()
} else {
if Bool(binary.Properties.Static_executable) {
deps.CrtBegin = "ndk_crtbegin_static." + ctx.sdkVersion()
} else {
deps.CrtBegin = "ndk_crtbegin_dynamic." + ctx.sdkVersion()
}
deps.CrtEnd = "ndk_crtend_android." + ctx.sdkVersion()
}
}
deps.CrtEnd = "crtend_android"
} else {
if binary.buildStatic() {
deps.CrtBegin = "ndk_crtbegin_static." + ctx.sdkVersion()
} else {
deps.CrtBegin = "ndk_crtbegin_dynamic." + ctx.sdkVersion()
}
deps.CrtEnd = "ndk_crtend_android." + ctx.sdkVersion()
}
if binary.buildStatic() {