Merge changes Ie384089d,Ie2e954cd

* changes:
  Support genrules as CrtBegin and CrtEnd
  Support multiple CrtBegin and CrtEnd files
This commit is contained in:
Colin Cross
2021-06-16 16:50:59 +00:00
committed by Gerrit Code Review
4 changed files with 24 additions and 21 deletions

View File

@@ -149,11 +149,11 @@ func (binary *binaryDecorator) linkerDeps(ctx DepsContext, deps Deps) Deps {
if ctx.toolchain().Bionic() { if ctx.toolchain().Bionic() {
if !Bool(binary.baseLinker.Properties.Nocrt) { if !Bool(binary.baseLinker.Properties.Nocrt) {
if binary.static() { if binary.static() {
deps.CrtBegin = "crtbegin_static" deps.CrtBegin = []string{"crtbegin_static"}
} else { } else {
deps.CrtBegin = "crtbegin_dynamic" deps.CrtBegin = []string{"crtbegin_dynamic"}
} }
deps.CrtEnd = "crtend_android" deps.CrtEnd = []string{"crtend_android"}
} }
if binary.static() { if binary.static() {

View File

@@ -730,9 +730,9 @@ func transformObjToStaticLib(ctx android.ModuleContext,
// 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 libraries, to a shared library (.so) or dynamic executable // and shared libraries, to a shared library (.so) or dynamic executable
func transformObjToDynamicBinary(ctx android.ModuleContext, func transformObjToDynamicBinary(ctx android.ModuleContext,
objFiles, sharedLibs, staticLibs, lateStaticLibs, wholeStaticLibs, deps android.Paths, objFiles, sharedLibs, staticLibs, lateStaticLibs, wholeStaticLibs, deps, crtBegin, crtEnd android.Paths,
crtBegin, crtEnd android.OptionalPath, groupLate bool, flags builderFlags, groupLate bool, flags builderFlags, outputFile android.WritablePath,
outputFile android.WritablePath, implicitOutputs android.WritablePaths, validations android.WritablePaths) { implicitOutputs android.WritablePaths, validations android.WritablePaths) {
ldCmd := "${config.ClangBin}/clang++" ldCmd := "${config.ClangBin}/clang++"
@@ -779,18 +779,17 @@ func transformObjToDynamicBinary(ctx android.ModuleContext,
deps = append(deps, staticLibs...) deps = append(deps, staticLibs...)
deps = append(deps, lateStaticLibs...) deps = append(deps, lateStaticLibs...)
deps = append(deps, wholeStaticLibs...) deps = append(deps, wholeStaticLibs...)
if crtBegin.Valid() { deps = append(deps, crtBegin...)
deps = append(deps, crtBegin.Path(), crtEnd.Path()) deps = append(deps, crtEnd...)
}
rule := ld rule := ld
args := map[string]string{ args := map[string]string{
"ldCmd": ldCmd, "ldCmd": ldCmd,
"crtBegin": crtBegin.String(), "crtBegin": strings.Join(crtBegin.Strings(), " "),
"libFlags": strings.Join(libFlagsList, " "), "libFlags": strings.Join(libFlagsList, " "),
"extraLibFlags": flags.extraLibFlags, "extraLibFlags": flags.extraLibFlags,
"ldFlags": flags.globalLdFlags + " " + flags.localLdFlags, "ldFlags": flags.globalLdFlags + " " + flags.localLdFlags,
"crtEnd": crtEnd.String(), "crtEnd": strings.Join(crtEnd.Strings(), " "),
} }
if ctx.Config().UseRBE() && ctx.Config().IsEnvTrue("RBE_CXX_LINKS") { if ctx.Config().UseRBE() && ctx.Config().IsEnvTrue("RBE_CXX_LINKS") {
rule = ldRE rule = ldRE

View File

@@ -126,7 +126,7 @@ type Deps struct {
ReexportGeneratedHeaders []string ReexportGeneratedHeaders []string
CrtBegin, CrtEnd string CrtBegin, CrtEnd []string
// Used for host bionic // Used for host bionic
LinkerFlagsFile string LinkerFlagsFile string
@@ -177,7 +177,7 @@ type PathDeps struct {
ReexportedDeps android.Paths ReexportedDeps android.Paths
// Paths to crt*.o files // Paths to crt*.o files
CrtBegin, CrtEnd android.OptionalPath CrtBegin, CrtEnd android.Paths
// Path to the file container flags to use with the linker // Path to the file container flags to use with the linker
LinkerFlagsFile android.OptionalPath LinkerFlagsFile android.OptionalPath
@@ -2264,13 +2264,13 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) {
crtVariations := GetCrtVariations(ctx, c) crtVariations := GetCrtVariations(ctx, c)
actx.AddVariationDependencies(crtVariations, objDepTag, deps.ObjFiles...) actx.AddVariationDependencies(crtVariations, objDepTag, deps.ObjFiles...)
if deps.CrtBegin != "" { for _, crt := range deps.CrtBegin {
actx.AddVariationDependencies(crtVariations, CrtBeginDepTag, actx.AddVariationDependencies(crtVariations, CrtBeginDepTag,
RewriteSnapshotLib(deps.CrtBegin, GetSnapshot(c, &snapshotInfo, actx).Objects)) RewriteSnapshotLib(crt, GetSnapshot(c, &snapshotInfo, actx).Objects))
} }
if deps.CrtEnd != "" { for _, crt := range deps.CrtEnd {
actx.AddVariationDependencies(crtVariations, CrtEndDepTag, actx.AddVariationDependencies(crtVariations, CrtEndDepTag,
RewriteSnapshotLib(deps.CrtEnd, GetSnapshot(c, &snapshotInfo, actx).Objects)) RewriteSnapshotLib(crt, GetSnapshot(c, &snapshotInfo, actx).Objects))
} }
if deps.LinkerFlagsFile != "" { if deps.LinkerFlagsFile != "" {
actx.AddDependency(c, linkerFlagsDepTag, deps.LinkerFlagsFile) actx.AddDependency(c, linkerFlagsDepTag, deps.LinkerFlagsFile)
@@ -2584,6 +2584,10 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
} else { } else {
ctx.ModuleErrorf("module %q is not a genrule", depName) ctx.ModuleErrorf("module %q is not a genrule", depName)
} }
case CrtBeginDepTag:
depPaths.CrtBegin = append(depPaths.CrtBegin, android.OutputFileForModule(ctx, dep, ""))
case CrtEndDepTag:
depPaths.CrtEnd = append(depPaths.CrtEnd, android.OutputFileForModule(ctx, dep, ""))
} }
return return
} }
@@ -2896,9 +2900,9 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
case objDepTag: case objDepTag:
depPaths.Objs.objFiles = append(depPaths.Objs.objFiles, linkFile.Path()) depPaths.Objs.objFiles = append(depPaths.Objs.objFiles, linkFile.Path())
case CrtBeginDepTag: case CrtBeginDepTag:
depPaths.CrtBegin = linkFile depPaths.CrtBegin = append(depPaths.CrtBegin, linkFile.Path())
case CrtEndDepTag: case CrtEndDepTag:
depPaths.CrtEnd = linkFile depPaths.CrtEnd = append(depPaths.CrtEnd, linkFile.Path())
case dynamicLinkerDepTag: case dynamicLinkerDepTag:
depPaths.DynamicLinker = linkFile depPaths.DynamicLinker = linkFile
} }

View File

@@ -1175,8 +1175,8 @@ func (library *libraryDecorator) linkerDeps(ctx DepsContext, deps Deps) Deps {
deps.ReexportStaticLibHeaders = append(deps.ReexportStaticLibHeaders, library.StaticProperties.Static.Export_static_lib_headers...) deps.ReexportStaticLibHeaders = append(deps.ReexportStaticLibHeaders, library.StaticProperties.Static.Export_static_lib_headers...)
} else if library.shared() { } else if library.shared() {
if ctx.toolchain().Bionic() && !Bool(library.baseLinker.Properties.Nocrt) { if ctx.toolchain().Bionic() && !Bool(library.baseLinker.Properties.Nocrt) {
deps.CrtBegin = "crtbegin_so" deps.CrtBegin = []string{"crtbegin_so"}
deps.CrtEnd = "crtend_so" deps.CrtEnd = []string{"crtend_so"}
} }
deps.WholeStaticLibs = append(deps.WholeStaticLibs, library.SharedProperties.Shared.Whole_static_libs...) deps.WholeStaticLibs = append(deps.WholeStaticLibs, library.SharedProperties.Shared.Whole_static_libs...)
deps.StaticLibs = append(deps.StaticLibs, library.SharedProperties.Shared.Static_libs...) deps.StaticLibs = append(deps.StaticLibs, library.SharedProperties.Shared.Static_libs...)