Merge changes Ie384089d,Ie2e954cd
* changes: Support genrules as CrtBegin and CrtEnd Support multiple CrtBegin and CrtEnd files
This commit is contained in:
@@ -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() {
|
||||||
|
@@ -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
|
||||||
|
20
cc/cc.go
20
cc/cc.go
@@ -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
|
||||||
}
|
}
|
||||||
|
@@ -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...)
|
||||||
|
Reference in New Issue
Block a user