Merge "Include NDK CRT object variants in the sysroot."
This commit is contained in:
@@ -142,6 +142,13 @@ func (n *ndkSingleton) GenerateBuildActions(ctx android.SingletonContext) {
|
|||||||
staticLibInstallPaths, library.ndkSysrootPath)
|
staticLibInstallPaths, library.ndkSysrootPath)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if object, ok := m.linker.(*objectLinker); ok {
|
||||||
|
if object.ndkSysrootPath != nil {
|
||||||
|
staticLibInstallPaths = append(
|
||||||
|
staticLibInstallPaths, object.ndkSysrootPath)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
30
cc/object.go
30
cc/object.go
@@ -44,6 +44,10 @@ var ccObjectSdkMemberType = &librarySdkMemberType{
|
|||||||
type objectLinker struct {
|
type objectLinker struct {
|
||||||
*baseLinker
|
*baseLinker
|
||||||
Properties ObjectLinkerProperties
|
Properties ObjectLinkerProperties
|
||||||
|
|
||||||
|
// Location of the object in the sysroot. Empty if the object is not
|
||||||
|
// included in the NDK.
|
||||||
|
ndkSysrootPath android.Path
|
||||||
}
|
}
|
||||||
|
|
||||||
type objectBazelHandler struct {
|
type objectBazelHandler struct {
|
||||||
@@ -99,6 +103,10 @@ type ObjectLinkerProperties struct {
|
|||||||
// Indicates that this module is a CRT object. CRT objects will be split
|
// Indicates that this module is a CRT object. CRT objects will be split
|
||||||
// into a variant per-API level between min_sdk_version and current.
|
// into a variant per-API level between min_sdk_version and current.
|
||||||
Crt *bool
|
Crt *bool
|
||||||
|
|
||||||
|
// Indicates that this module should not be included in the NDK sysroot.
|
||||||
|
// Only applies to CRT objects. Defaults to false.
|
||||||
|
Exclude_from_ndk_sysroot *bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func newObject(hod android.HostOrDeviceSupported) *Module {
|
func newObject(hod android.HostOrDeviceSupported) *Module {
|
||||||
@@ -268,17 +276,28 @@ func (object *objectLinker) link(ctx ModuleContext,
|
|||||||
|
|
||||||
objs = objs.Append(deps.Objs)
|
objs = objs.Append(deps.Objs)
|
||||||
|
|
||||||
var outputFile android.Path
|
var output android.WritablePath
|
||||||
builderFlags := flagsToBuilderFlags(flags)
|
builderFlags := flagsToBuilderFlags(flags)
|
||||||
outputName := ctx.ModuleName()
|
outputName := ctx.ModuleName()
|
||||||
if !strings.HasSuffix(outputName, objectExtension) {
|
if !strings.HasSuffix(outputName, objectExtension) {
|
||||||
outputName += objectExtension
|
outputName += objectExtension
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(objs.objFiles) == 1 && String(object.Properties.Linker_script) == "" {
|
// isForPlatform is terribly named and actually means isNotApex.
|
||||||
output := android.PathForModuleOut(ctx, outputName)
|
if Bool(object.Properties.Crt) &&
|
||||||
outputFile = output
|
!Bool(object.Properties.Exclude_from_ndk_sysroot) && ctx.useSdk() &&
|
||||||
|
ctx.isSdkVariant() && ctx.isForPlatform() {
|
||||||
|
|
||||||
|
output = getVersionedLibraryInstallPath(ctx,
|
||||||
|
nativeApiLevelOrPanic(ctx, ctx.sdkVersion())).Join(ctx, outputName)
|
||||||
|
object.ndkSysrootPath = output
|
||||||
|
} else {
|
||||||
|
output = android.PathForModuleOut(ctx, outputName)
|
||||||
|
}
|
||||||
|
|
||||||
|
outputFile := output
|
||||||
|
|
||||||
|
if len(objs.objFiles) == 1 && String(object.Properties.Linker_script) == "" {
|
||||||
if String(object.Properties.Prefix_symbols) != "" {
|
if String(object.Properties.Prefix_symbols) != "" {
|
||||||
transformBinaryPrefixSymbols(ctx, String(object.Properties.Prefix_symbols), objs.objFiles[0],
|
transformBinaryPrefixSymbols(ctx, String(object.Properties.Prefix_symbols), objs.objFiles[0],
|
||||||
builderFlags, output)
|
builderFlags, output)
|
||||||
@@ -290,9 +309,6 @@ func (object *objectLinker) link(ctx ModuleContext,
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
output := android.PathForModuleOut(ctx, outputName)
|
|
||||||
outputFile = output
|
|
||||||
|
|
||||||
if String(object.Properties.Prefix_symbols) != "" {
|
if String(object.Properties.Prefix_symbols) != "" {
|
||||||
input := android.PathForModuleOut(ctx, "unprefixed", outputName)
|
input := android.PathForModuleOut(ctx, "unprefixed", outputName)
|
||||||
transformBinaryPrefixSymbols(ctx, String(object.Properties.Prefix_symbols), input,
|
transformBinaryPrefixSymbols(ctx, String(object.Properties.Prefix_symbols), input,
|
||||||
|
@@ -65,7 +65,7 @@ func TestUseCrtObjectOfCorrectVersion(t *testing.T) {
|
|||||||
variant := "android_arm64_armv8-a_sdk"
|
variant := "android_arm64_armv8-a_sdk"
|
||||||
crt := ctx.ModuleForTests("bin", variant).Rule("ld").Args["crtBegin"]
|
crt := ctx.ModuleForTests("bin", variant).Rule("ld").Args["crtBegin"]
|
||||||
android.AssertStringDoesContain(t, "crt dep of sdk variant", crt,
|
android.AssertStringDoesContain(t, "crt dep of sdk variant", crt,
|
||||||
variant+"_29/crtbegin_dynamic.o")
|
"29/crtbegin_dynamic.o")
|
||||||
|
|
||||||
// platform variant uses the crt object built for platform
|
// platform variant uses the crt object built for platform
|
||||||
variant = "android_arm64_armv8-a"
|
variant = "android_arm64_armv8-a"
|
||||||
|
Reference in New Issue
Block a user