diff --git a/android/sh_binary.go b/android/sh_binary.go index ba0c8be7d..6db9892fa 100644 --- a/android/sh_binary.go +++ b/android/sh_binary.go @@ -48,6 +48,9 @@ type shBinaryProperties struct { // Whether this module is directly installable to one of the partitions. Default: true. Installable *bool + + // install symlinks to the binary + Symlinks []string `android:"arch_variant"` } type TestProperties struct { @@ -103,6 +106,10 @@ func (s *ShBinary) Installable() bool { return s.properties.Installable == nil || Bool(s.properties.Installable) } +func (s *ShBinary) Symlinks() []string { + return s.properties.Symlinks +} + func (s *ShBinary) GenerateAndroidBuildActions(ctx ModuleContext) { s.sourceFilePath = PathForModuleSrc(ctx, String(s.properties.Src)) filename := String(s.properties.Filename) @@ -145,6 +152,9 @@ func (s *ShBinary) customAndroidMkEntries(entries *AndroidMkEntries) { entries.SetString("LOCAL_MODULE_RELATIVE_PATH", String(s.properties.Sub_dir)) entries.SetString("LOCAL_MODULE_SUFFIX", "") entries.SetString("LOCAL_MODULE_STEM", s.outputFilePath.Rel()) + if len(s.properties.Symlinks) > 0 { + entries.SetString("LOCAL_MODULE_SYMLINKS", strings.Join(s.properties.Symlinks, " ")) + } } func (s *ShTest) GenerateAndroidBuildActions(ctx ModuleContext) { diff --git a/apex/apex.go b/apex/apex.go index 69e4b4605..81660d53a 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -1037,7 +1037,7 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { return true } else if sh, ok := child.(*android.ShBinary); ok { fileToCopy, dirInApex := getCopyManifestForShBinary(sh) - filesInfo = append(filesInfo, apexFile{fileToCopy, depName, dirInApex, shBinary, sh, nil}) + filesInfo = append(filesInfo, apexFile{fileToCopy, depName, dirInApex, shBinary, sh, sh.Symlinks()}) } else if py, ok := child.(*python.Module); ok && py.HostToolPath().Valid() { fileToCopy, dirInApex := getCopyManifestForPyBinary(py) filesInfo = append(filesInfo, apexFile{fileToCopy, depName, dirInApex, pyBinary, py, nil})