From a89d2e18052e717ce3e0672c4166dc936378fc7e Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Mon, 11 Jan 2016 12:48:37 -0800 Subject: [PATCH] Move no_crt property to apply to libraries and binaries Change-Id: I8a770ad422dac0fd67b43ca464e0942f504e1c30 --- cc/cc.go | 44 +++++++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/cc/cc.go b/cc/cc.go index 89c5de75c..4ff65723c 100644 --- a/cc/cc.go +++ b/cc/cc.go @@ -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() {