Add late static libraries for libgcc

libgcc has to be last on the command line, after -lc for libc.

Change-Id: I5c867cef59ca84e23ff5cea406da3ec3f261aa76
This commit is contained in:
Colin Cross
2015-03-16 16:15:49 -07:00
parent 13af54da2d
commit 77b00fa6f1
2 changed files with 19 additions and 11 deletions

View File

@@ -184,8 +184,8 @@ func TransformObjToStaticLib(ctx common.AndroidModuleContext, objFiles []string,
// Generate a rule for compiling multiple .o files, plus static libraries, whole static libraries, // Generate a rule for compiling multiple .o files, plus static libraries, whole static libraries,
// and shared libraires, to a shared library (.so) or dynamic executable // and shared libraires, to a shared library (.so) or dynamic executable
func TransformObjToDynamicBinary(ctx common.AndroidModuleContext, func TransformObjToDynamicBinary(ctx common.AndroidModuleContext,
objFiles, sharedLibs, staticLibs, wholeStaticLibs []string, crtBegin, crtEnd string, objFiles, sharedLibs, staticLibs, lateStaticLibs, wholeStaticLibs []string,
flags builderFlags, outputFile string) { crtBegin, crtEnd string, flags builderFlags, outputFile string) {
var ldCmd string var ldCmd string
if flags.clang { if flags.clang {
@@ -218,6 +218,8 @@ func TransformObjToDynamicBinary(ctx common.AndroidModuleContext,
ldDirs = append(ldDirs, dir) ldDirs = append(ldDirs, dir)
} }
libFlagsList = append(libFlagsList, lateStaticLibs...)
deps := []string{ldCmd} deps := []string{ldCmd}
deps = append(deps, sharedLibs...) deps = append(deps, sharedLibs...)
deps = append(deps, staticLibs...) deps = append(deps, staticLibs...)

View File

@@ -276,7 +276,7 @@ func (c *ccBase) findToolchain(ctx common.AndroidModuleContext) toolchain {
} }
type ccDeps struct { type ccDeps struct {
staticLibs, sharedLibs, wholeStaticLibs, objFiles, includeDirs []string staticLibs, sharedLibs, lateStaticLibs, wholeStaticLibs, objFiles, includeDirs []string
crtBegin, crtEnd string crtBegin, crtEnd string
} }
@@ -641,7 +641,7 @@ func (c *ccDynamic) AndroidDynamicDependencies(ctx common.AndroidDynamicDepender
ctx.AddVariationDependencies([]blueprint.Variation{{"link", "shared"}}, c.systemSharedLibs()...) ctx.AddVariationDependencies([]blueprint.Variation{{"link", "shared"}}, c.systemSharedLibs()...)
ctx.AddVariationDependencies([]blueprint.Variation{{"link", "static"}}, ctx.AddVariationDependencies([]blueprint.Variation{{"link", "static"}},
"libcompiler_rt-extras", "libcompiler_rt-extras",
//"libgcov", "libgcov",
"libatomic", "libatomic",
"libgcc") "libgcc")
@@ -659,8 +659,6 @@ func (c *ccDynamic) AndroidDynamicDependencies(ctx common.AndroidDynamicDepender
return deps return deps
} }
var implicitStaticLibs = []string{"libcompiler_rt-extras" /*"libgcov",*/, "libatomic", "libgcc"}
func (c *ccDynamic) collectDeps(ctx common.AndroidModuleContext, flags ccFlags) (ccDeps, ccFlags) { func (c *ccDynamic) collectDeps(ctx common.AndroidModuleContext, flags ccFlags) (ccDeps, ccFlags) {
var newIncludeDirs []string var newIncludeDirs []string
@@ -677,10 +675,16 @@ func (c *ccDynamic) collectDeps(ctx common.AndroidModuleContext, flags ccFlags)
if ctx.Arch().HostOrDevice.Device() { if ctx.Arch().HostOrDevice.Device() {
var staticLibs []string var staticLibs []string
staticLibNames := implicitStaticLibs staticLibNames := []string{"libcompiler_rt-extras"}
_, staticLibs, newIncludeDirs = c.collectDepsFromList(ctx, staticLibNames) _, staticLibs, newIncludeDirs = c.collectDepsFromList(ctx, staticLibNames)
deps.staticLibs = append(deps.staticLibs, staticLibs...) deps.staticLibs = append(deps.staticLibs, staticLibs...)
deps.includeDirs = append(deps.includeDirs, newIncludeDirs...) deps.includeDirs = append(deps.includeDirs, newIncludeDirs...)
// libgcc and libatomic have to be last on the command line
staticLibNames = []string{"libgcov", "libatomic", "libgcc"}
_, staticLibs, newIncludeDirs = c.collectDepsFromList(ctx, staticLibNames)
deps.lateStaticLibs = append(deps.lateStaticLibs, staticLibs...)
deps.includeDirs = append(deps.includeDirs, newIncludeDirs...)
} }
ctx.VisitDirectDeps(func(m blueprint.Module) { ctx.VisitDirectDeps(func(m blueprint.Module) {
@@ -889,8 +893,9 @@ func (c *ccLibrary) compileSharedLibrary(ctx common.AndroidModuleContext,
outputFile := filepath.Join(common.ModuleOutDir(ctx), ctx.ModuleName()+sharedLibraryExtension) outputFile := filepath.Join(common.ModuleOutDir(ctx), ctx.ModuleName()+sharedLibraryExtension)
TransformObjToDynamicBinary(ctx, objFiles, deps.sharedLibs, deps.staticLibs, deps.wholeStaticLibs, TransformObjToDynamicBinary(ctx, objFiles, deps.sharedLibs, deps.staticLibs,
deps.crtBegin, deps.crtEnd, ccFlagsToBuilderFlags(flags), outputFile) deps.lateStaticLibs, deps.wholeStaticLibs, deps.crtBegin, deps.crtEnd,
ccFlagsToBuilderFlags(flags), outputFile)
c.out = outputFile c.out = outputFile
c.exportIncludeDirs = pathtools.PrefixPaths(c.properties.Export_include_dirs, c.exportIncludeDirs = pathtools.PrefixPaths(c.properties.Export_include_dirs,
@@ -1059,8 +1064,9 @@ func (c *ccBinary) compileModule(ctx common.AndroidModuleContext,
outputFile := filepath.Join(common.ModuleOutDir(ctx), c.getStem(ctx)) outputFile := filepath.Join(common.ModuleOutDir(ctx), c.getStem(ctx))
TransformObjToDynamicBinary(ctx, objFiles, deps.sharedLibs, deps.staticLibs, deps.wholeStaticLibs, TransformObjToDynamicBinary(ctx, objFiles, deps.sharedLibs, deps.staticLibs,
deps.crtBegin, deps.crtEnd, ccFlagsToBuilderFlags(flags), outputFile) deps.lateStaticLibs, deps.wholeStaticLibs, deps.crtBegin, deps.crtEnd,
ccFlagsToBuilderFlags(flags), outputFile)
ctx.InstallFile("bin", outputFile) ctx.InstallFile("bin", outputFile)
} }