Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit add122a8 authored by Ivan Lozano's avatar Ivan Lozano
Browse files

rust: Add vendor and recovery dylib support.

Adds dylib support for vendor and recovery images.

This changes the default linkage for vendor and recovery images to
dylib, which matches the platform default linkage. This also means that
by default, dylib-std variants are used for rlib dependencies.

Bug: 204303985
Test: Soong tests.
Test: m dist vendor-snapshot
Test: RECOVERY_SNAPSHOT_VERSION=current m dist recovery-snapshot
Change-Id: If84074b8615a70c45e7e162abeb853dc8c34d49a
parent e3c11d0a
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -10553,6 +10553,7 @@ func TestTrimmedApex(t *testing.T) {
			src: "libc.so",
			min_sdk_version: "29",
			recovery_available: true,
			vendor_available: true,
		}
		api_imports {
			name: "api_imports",
+4 −0
Original line number Diff line number Diff line
@@ -1079,6 +1079,10 @@ func (c *Module) CcLibraryInterface() bool {
	return false
}

func (c *Module) RlibStd() bool {
	panic(fmt.Errorf("RlibStd called on non-Rust module: %q", c.BaseModuleName()))
}

func (c *Module) RustLibraryInterface() bool {
	return false
}
+9 −0
Original line number Diff line number Diff line
@@ -87,6 +87,12 @@ type Snapshottable interface {
	// SnapshotStaticLibs returns the list of static library dependencies for this module.
	SnapshotStaticLibs() []string

	// SnapshotDylibs returns the list of dylib library dependencies for this module.
	SnapshotDylibs() []string

	// SnapshotRlibs returns the list of rlib library dependencies for this module.
	SnapshotRlibs() []string

	// IsSnapshotPrebuilt returns true if this module is a snapshot prebuilt.
	IsSnapshotPrebuilt() bool
}
@@ -239,6 +245,9 @@ type LinkableInterface interface {
	// Dylib returns true if this is an dylib module.
	Dylib() bool

	// RlibStd returns true if this is an rlib which links against an rlib libstd.
	RlibStd() bool

	// Static returns true if this is a static library module.
	Static() bool

+5 −1
Original line number Diff line number Diff line
@@ -100,6 +100,7 @@ const (
	snapshotBinarySuffix = "_binary."
	snapshotObjectSuffix = "_object."
	SnapshotRlibSuffix   = "_rlib."
	SnapshotDylibSuffix  = "_dylib."
)

type SnapshotProperties struct {
@@ -107,6 +108,7 @@ type SnapshotProperties struct {
	Static_libs []string `android:"arch_variant"`
	Shared_libs []string `android:"arch_variant"`
	Rlibs       []string `android:"arch_variant"`
	Dylibs      []string `android:"arch_variant"`
	Vndk_libs   []string `android:"arch_variant"`
	Binaries    []string `android:"arch_variant"`
	Objects     []string `android:"arch_variant"`
@@ -186,6 +188,7 @@ func (s *snapshotModule) DepsMutator(ctx android.BottomUpMutatorContext) {
	staticLibs := collectSnapshotMap(s.properties.Static_libs, snapshotSuffix, SnapshotStaticSuffix)
	sharedLibs := collectSnapshotMap(s.properties.Shared_libs, snapshotSuffix, SnapshotSharedSuffix)
	rlibs := collectSnapshotMap(s.properties.Rlibs, snapshotSuffix, SnapshotRlibSuffix)
	dylibs := collectSnapshotMap(s.properties.Dylibs, snapshotSuffix, SnapshotDylibSuffix)
	vndkLibs := collectSnapshotMap(s.properties.Vndk_libs, "", vndkSuffix)
	for k, v := range vndkLibs {
		sharedLibs[k] = v
@@ -198,11 +201,12 @@ func (s *snapshotModule) DepsMutator(ctx android.BottomUpMutatorContext) {
		StaticLibs: staticLibs,
		SharedLibs: sharedLibs,
		Rlibs:      rlibs,
		Dylibs:     dylibs,
	})
}

type SnapshotInfo struct {
	HeaderLibs, Binaries, Objects, StaticLibs, SharedLibs, Rlibs map[string]string
	HeaderLibs, Binaries, Objects, StaticLibs, SharedLibs, Rlibs, Dylibs map[string]string
}

var SnapshotInfoProvider = blueprint.NewMutatorProvider(SnapshotInfo{}, "deps")
+8 −0
Original line number Diff line number Diff line
@@ -57,6 +57,14 @@ func (m *Module) SnapshotStaticLibs() []string {
	return m.Properties.SnapshotStaticLibs
}

func (m *Module) SnapshotRlibs() []string {
	return []string{}
}

func (m *Module) SnapshotDylibs() []string {
	return []string{}
}

// snapshotLibraryInterface is an interface for libraries captured to VNDK / vendor snapshots.
type snapshotLibraryInterface interface {
	libraryInterface
Loading