Merge "Skip obsolete JACK flags"
diff --git a/android/arch.go b/android/arch.go
index 151cabd..957a659 100644
--- a/android/arch.go
+++ b/android/arch.go
@@ -155,18 +155,34 @@
"mips64r6",
},
X86: {
+ "amberlake",
"atom",
+ "broadwell",
"haswell",
+ "icelake",
"ivybridge",
+ "kabylake",
"sandybridge",
"silvermont",
+ "skylake",
+ "stoneyridge",
+ "tigerlake",
+ "whiskeylake",
"x86_64",
},
X86_64: {
+ "amberlake",
+ "broadwell",
"haswell",
+ "icelake",
"ivybridge",
+ "kabylake",
"sandybridge",
"silvermont",
+ "skylake",
+ "stoneyridge",
+ "tigerlake",
+ "whiskeylake",
},
}
@@ -190,6 +206,8 @@
"sse4_2",
"aes_ni",
"avx",
+ "avx2",
+ "avx512",
"popcnt",
"movbe",
},
@@ -200,6 +218,8 @@
"sse4_2",
"aes_ni",
"avx",
+ "avx2",
+ "avx512",
"popcnt",
},
}
@@ -230,10 +250,30 @@
},
},
X86: {
+ "amberlake": {
+ "ssse3",
+ "sse4",
+ "sse4_1",
+ "sse4_2",
+ "avx",
+ "avx2",
+ "aes_ni",
+ "popcnt",
+ },
"atom": {
"ssse3",
"movbe",
},
+ "broadwell": {
+ "ssse3",
+ "sse4",
+ "sse4_1",
+ "sse4_2",
+ "avx",
+ "avx2",
+ "aes_ni",
+ "popcnt",
+ },
"haswell": {
"ssse3",
"sse4",
@@ -244,6 +284,17 @@
"popcnt",
"movbe",
},
+ "icelake": {
+ "ssse3",
+ "sse4",
+ "sse4_1",
+ "sse4_2",
+ "avx",
+ "avx2",
+ "avx512",
+ "aes_ni",
+ "popcnt",
+ },
"ivybridge": {
"ssse3",
"sse4",
@@ -253,6 +304,16 @@
"avx",
"popcnt",
},
+ "kabylake": {
+ "ssse3",
+ "sse4",
+ "sse4_1",
+ "sse4_2",
+ "avx",
+ "avx2",
+ "aes_ni",
+ "popcnt",
+ },
"sandybridge": {
"ssse3",
"sse4",
@@ -269,6 +330,50 @@
"popcnt",
"movbe",
},
+ "skylake": {
+ "ssse3",
+ "sse4",
+ "sse4_1",
+ "sse4_2",
+ "avx",
+ "avx2",
+ "avx512",
+ "aes_ni",
+ "popcnt",
+ },
+ "stoneyridge": {
+ "ssse3",
+ "sse4",
+ "sse4_1",
+ "sse4_2",
+ "aes_ni",
+ "avx",
+ "avx2",
+ "popcnt",
+ "movbe",
+ },
+ "tigerlake": {
+ "ssse3",
+ "sse4",
+ "sse4_1",
+ "sse4_2",
+ "avx",
+ "avx2",
+ "avx512",
+ "aes_ni",
+ "popcnt",
+ },
+ "whiskeylake": {
+ "ssse3",
+ "sse4",
+ "sse4_1",
+ "sse4_2",
+ "avx",
+ "avx2",
+ "avx512",
+ "aes_ni",
+ "popcnt",
+ },
"x86_64": {
"ssse3",
"sse4",
@@ -278,6 +383,26 @@
},
},
X86_64: {
+ "amberlake": {
+ "ssse3",
+ "sse4",
+ "sse4_1",
+ "sse4_2",
+ "avx",
+ "avx2",
+ "aes_ni",
+ "popcnt",
+ },
+ "broadwell": {
+ "ssse3",
+ "sse4",
+ "sse4_1",
+ "sse4_2",
+ "avx",
+ "avx2",
+ "aes_ni",
+ "popcnt",
+ },
"haswell": {
"ssse3",
"sse4",
@@ -287,6 +412,17 @@
"avx",
"popcnt",
},
+ "icelake": {
+ "ssse3",
+ "sse4",
+ "sse4_1",
+ "sse4_2",
+ "avx",
+ "avx2",
+ "avx512",
+ "aes_ni",
+ "popcnt",
+ },
"ivybridge": {
"ssse3",
"sse4",
@@ -296,6 +432,16 @@
"avx",
"popcnt",
},
+ "kabylake": {
+ "ssse3",
+ "sse4",
+ "sse4_1",
+ "sse4_2",
+ "avx",
+ "avx2",
+ "aes_ni",
+ "popcnt",
+ },
"sandybridge": {
"ssse3",
"sse4",
@@ -311,6 +457,49 @@
"aes_ni",
"popcnt",
},
+ "skylake": {
+ "ssse3",
+ "sse4",
+ "sse4_1",
+ "sse4_2",
+ "avx",
+ "avx2",
+ "avx512",
+ "aes_ni",
+ "popcnt",
+ },
+ "stoneyridge": {
+ "ssse3",
+ "sse4",
+ "sse4_1",
+ "sse4_2",
+ "aes_ni",
+ "avx",
+ "avx2",
+ "popcnt",
+ },
+ "tigerlake": {
+ "ssse3",
+ "sse4",
+ "sse4_1",
+ "sse4_2",
+ "avx",
+ "avx2",
+ "avx512",
+ "aes_ni",
+ "popcnt",
+ },
+ "whiskeylake": {
+ "ssse3",
+ "sse4",
+ "sse4_1",
+ "sse4_2",
+ "avx",
+ "avx2",
+ "avx512",
+ "aes_ni",
+ "popcnt",
+ },
},
}
@@ -1356,12 +1545,14 @@
{"x86", "ivybridge", "", []string{"x86"}},
{"x86", "sandybridge", "", []string{"x86"}},
{"x86", "silvermont", "", []string{"x86"}},
+ {"x86", "stoneyridge", "", []string{"x86"}},
{"x86", "x86_64", "", []string{"x86"}},
{"x86_64", "", "", []string{"x86_64"}},
{"x86_64", "haswell", "", []string{"x86_64"}},
{"x86_64", "ivybridge", "", []string{"x86_64"}},
{"x86_64", "sandybridge", "", []string{"x86_64"}},
{"x86_64", "silvermont", "", []string{"x86_64"}},
+ {"x86_64", "stoneyridge", "", []string{"x86_64"}},
}
}
diff --git a/android/filegroup.go b/android/filegroup.go
index 76af804..c2be22a 100644
--- a/android/filegroup.go
+++ b/android/filegroup.go
@@ -49,9 +49,9 @@
var _ SourceFileProducer = (*fileGroup)(nil)
-// filegroup modules contain a list of files, and can be used to export files across package
-// boundaries. filegroups (and genrules) can be referenced from srcs properties of other modules
-// using the syntax ":module".
+// filegroup contains a list of files that are referenced by other modules
+// properties (such as "srcs") using the syntax ":<name>". filegroup are
+// also be used to export files across package boundaries.
func FileGroupFactory() Module {
module := &fileGroup{}
module.AddProperties(&module.properties)
diff --git a/android/module.go b/android/module.go
index c1f3e79..9a69a26 100644
--- a/android/module.go
+++ b/android/module.go
@@ -124,6 +124,7 @@
InstallExecutable(installPath OutputPath, name string, srcPath Path, deps ...Path) OutputPath
InstallFile(installPath OutputPath, name string, srcPath Path, deps ...Path) OutputPath
InstallSymlink(installPath OutputPath, name string, srcPath OutputPath) OutputPath
+ InstallAbsoluteSymlink(installPath OutputPath, name string, absPath string) OutputPath
CheckbuildFile(srcPath Path)
AddMissingDependencies(deps []string)
@@ -382,6 +383,7 @@
&base.nameProperties,
&base.commonProperties,
&base.variableProperties)
+ base.generalProperties = m.GetProperties()
base.customizableProperties = m.GetProperties()
}
@@ -1316,6 +1318,28 @@
return fullInstallPath
}
+// installPath/name -> absPath where absPath might be a path that is available only at runtime
+// (e.g. /apex/...)
+func (a *androidModuleContext) InstallAbsoluteSymlink(installPath OutputPath, name string, absPath string) OutputPath {
+ fullInstallPath := installPath.Join(a, name)
+ a.module.base().hooks.runInstallHooks(a, fullInstallPath, true)
+
+ if !a.skipInstall(fullInstallPath) {
+ a.Build(pctx, BuildParams{
+ Rule: Symlink,
+ Description: "install symlink " + fullInstallPath.Base() + " -> " + absPath,
+ Output: fullInstallPath,
+ Default: !a.Config().EmbeddedInMake(),
+ Args: map[string]string{
+ "fromPath": absPath,
+ },
+ })
+
+ a.installFiles = append(a.installFiles, fullInstallPath)
+ }
+ return fullInstallPath
+}
+
func (a *androidModuleContext) CheckbuildFile(srcPath Path) {
a.checkbuildFiles = append(a.checkbuildFiles, srcPath)
}
diff --git a/android/path_properties.go b/android/path_properties.go
index 5d89709..1a12290 100644
--- a/android/path_properties.go
+++ b/android/path_properties.go
@@ -33,7 +33,7 @@
return
}
- props := m.base().customizableProperties
+ props := m.base().generalProperties
for _, ps := range props {
pathProperties := pathPropertiesForPropertyStruct(ctx, ps)
diff --git a/android/path_properties_test.go b/android/path_properties_test.go
index 6471a3c..ecc2d21 100644
--- a/android/path_properties_test.go
+++ b/android/path_properties_test.go
@@ -25,7 +25,7 @@
ModuleBase
props struct {
Foo string `android:"path"`
- Bar []string `android:"path"`
+ Bar []string `android:"path,arch_variant"`
Baz *string `android:"path"`
Qux string
}
@@ -36,7 +36,7 @@
func pathDepsMutatorTestModuleFactory() Module {
module := &pathDepsMutatorTestModule{}
module.AddProperties(&module.props)
- InitAndroidModule(module)
+ InitAndroidArchModule(module, DeviceSupported, MultilibBoth)
return module
}
@@ -64,6 +64,23 @@
}`,
deps: []string{"a", "b", "c"},
},
+ {
+ name: "arch variant",
+ bp: `
+ test {
+ name: "foo",
+ arch: {
+ arm64: {
+ bar: [":a"],
+ },
+ arm: {
+ bar: [":b"],
+ },
+ },
+ bar: [":c"],
+ }`,
+ deps: []string{"c", "a"},
+ },
}
buildDir, err := ioutil.TempDir("", "soong_path_properties_test")
@@ -74,8 +91,8 @@
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
- config := TestConfig(buildDir, nil)
- ctx := NewTestContext()
+ config := TestArchConfig(buildDir, nil)
+ ctx := NewTestArchContext()
ctx.RegisterModuleType("test", ModuleFactoryAdaptor(pathDepsMutatorTestModuleFactory))
ctx.RegisterModuleType("filegroup", ModuleFactoryAdaptor(FileGroupFactory))
@@ -110,7 +127,7 @@
_, errs = ctx.PrepareBuildActions(config)
FailIfErrored(t, errs)
- m := ctx.ModuleForTests("foo", "").Module().(*pathDepsMutatorTestModule)
+ m := ctx.ModuleForTests("foo", "android_arm64_armv8-a").Module().(*pathDepsMutatorTestModule)
if g, w := m.sourceDeps, test.deps; !reflect.DeepEqual(g, w) {
t.Errorf("want deps %q, got %q", w, g)
diff --git a/android/vts_config.go b/android/vts_config.go
index f468ba8..c44b3a3 100644
--- a/android/vts_config.go
+++ b/android/vts_config.go
@@ -19,14 +19,12 @@
"io"
)
-// Implements vts_config module
-
func init() {
RegisterModuleType("vts_config", VtsConfigFactory)
}
type vtsConfigProperties struct {
- // Test manifest file name if different from AndroidTest.xml.
+ // Override the default (AndroidTest.xml) test manifest file name.
Test_config *string
}
@@ -61,7 +59,8 @@
me.AddProperties(&me.properties)
}
-// Defines VTS configuration.
+// vts_config generates a Vendor Test Suite (VTS) configuration file from the
+// <test_config> xml file and stores it in a subdirectory of $(HOST_OUT).
func VtsConfigFactory() Module {
module := &VtsConfig{}
InitVtsConfigModule(module)
diff --git a/apex/apex_test.go b/apex/apex_test.go
index 66f0725..5b767ef 100644
--- a/apex/apex_test.go
+++ b/apex/apex_test.go
@@ -827,7 +827,7 @@
`)
// check the APEX keys
- keys := ctx.ModuleForTests("myapex.key", "").Module().(*apexKey)
+ keys := ctx.ModuleForTests("myapex.key", "android_common").Module().(*apexKey)
if keys.public_key_file.String() != "vendor/foo/devkeys/testkey.avbpubkey" {
t.Errorf("public key %q is not %q", keys.public_key_file.String(),
@@ -1144,3 +1144,43 @@
ensureContains(t, copyCmds, "image.apex/bin/script/myscript.sh")
}
+
+func TestApexInProductPartition(t *testing.T) {
+ ctx := testApex(t, `
+ apex {
+ name: "myapex",
+ key: "myapex.key",
+ native_shared_libs: ["mylib"],
+ product_specific: true,
+ }
+
+ apex_key {
+ name: "myapex.key",
+ public_key: "testkey.avbpubkey",
+ private_key: "testkey.pem",
+ product_specific: true,
+ }
+
+ cc_library {
+ name: "mylib",
+ srcs: ["mylib.cpp"],
+ system_shared_libs: [],
+ stl: "none",
+ }
+ `)
+
+ apex := ctx.ModuleForTests("myapex", "android_common_myapex").Module().(*apexBundle)
+ expected := "target/product/test_device/product/apex"
+ actual := apex.installDir.RelPathString()
+ if actual != expected {
+ t.Errorf("wrong install path. expected %q. actual %q", expected, actual)
+ }
+
+ apex_key := ctx.ModuleForTests("myapex.key", "android_common").Module().(*apexKey)
+ expected = "target/product/test_device/product/etc/security/apex"
+ actual = apex_key.installDir.RelPathString()
+ if actual != expected {
+ t.Errorf("wrong install path. expected %q. actual %q", expected, actual)
+ }
+
+}
diff --git a/apex/key.go b/apex/key.go
index 5d7c2fa..07c3105 100644
--- a/apex/key.go
+++ b/apex/key.go
@@ -17,6 +17,7 @@
import (
"fmt"
"io"
+ "path/filepath"
"strings"
"android/soong/android"
@@ -38,6 +39,7 @@
public_key_file android.Path
private_key_file android.Path
+ installDir android.OutputPath
keyName string
}
@@ -56,7 +58,8 @@
func apexKeyFactory() android.Module {
module := &apexKey{}
module.AddProperties(&module.properties)
- android.InitAndroidModule(module)
+ // This module is device-only
+ android.InitAndroidArchModule(module, android.DeviceSupported, android.MultilibCommon)
return module
}
@@ -86,8 +89,9 @@
}
m.keyName = pubKeyName
+ m.installDir = android.PathForModuleInstall(ctx, "etc/security/apex")
if m.installable() {
- ctx.InstallFile(android.PathForModuleInstall(ctx, "etc/security/apex"), m.keyName, m.public_key_file)
+ ctx.InstallFile(m.installDir, m.keyName, m.public_key_file)
}
}
@@ -97,7 +101,7 @@
OutputFile: android.OptionalPathForPath(m.public_key_file),
Extra: []android.AndroidMkExtraFunc{
func(w io.Writer, outputFile android.Path) {
- fmt.Fprintln(w, "LOCAL_MODULE_PATH :=", "$(TARGET_OUT)/etc/security/apex")
+ fmt.Fprintln(w, "LOCAL_MODULE_PATH :=", filepath.Join("$(OUT_DIR)", m.installDir.RelPathString()))
fmt.Fprintln(w, "LOCAL_INSTALLED_MODULE_STEM :=", m.keyName)
fmt.Fprintln(w, "LOCAL_UNINSTALLABLE_MODULE :=", !m.installable())
},
diff --git a/cc/androidmk.go b/cc/androidmk.go
index fc791fe..d229d0c 100644
--- a/cc/androidmk.go
+++ b/cc/androidmk.go
@@ -158,6 +158,9 @@
if len(library.Properties.Overrides) > 0 {
fmt.Fprintln(w, "LOCAL_OVERRIDES_MODULES := "+strings.Join(library.Properties.Overrides, " "))
}
+ if len(library.post_install_cmds) > 0 {
+ fmt.Fprintln(w, "LOCAL_POST_INSTALL_CMD := "+strings.Join(library.post_install_cmds, "&& "))
+ }
})
} else if library.header() {
ret.Class = "HEADER_LIBRARIES"
@@ -231,6 +234,9 @@
if len(binary.Properties.Overrides) > 0 {
fmt.Fprintln(w, "LOCAL_OVERRIDES_MODULES := "+strings.Join(binary.Properties.Overrides, " "))
}
+ if len(binary.post_install_cmds) > 0 {
+ fmt.Fprintln(w, "LOCAL_POST_INSTALL_CMD := "+strings.Join(binary.post_install_cmds, "&& "))
+ }
})
}
diff --git a/cc/binary.go b/cc/binary.go
index 4794815..cae1739 100644
--- a/cc/binary.go
+++ b/cc/binary.go
@@ -15,6 +15,8 @@
package cc
import (
+ "path/filepath"
+
"github.com/google/blueprint"
"android/soong/android"
@@ -91,6 +93,8 @@
// Location of the file that should be copied to dist dir when requested
distFile android.OptionalPath
+
+ post_install_cmds []string
}
var _ linker = (*binaryDecorator)(nil)
@@ -249,7 +253,7 @@
} else {
switch ctx.Os() {
case android.Android:
- if ctx.bootstrap() {
+ if ctx.bootstrap() && !ctx.inRecovery() {
flags.DynamicLinker = "/system/bin/bootstrap/linker"
} else {
flags.DynamicLinker = "/system/bin/linker"
@@ -413,7 +417,31 @@
return binary.symlinks
}
+// /system/bin/linker -> /apex/com.android.runtime/bin/linker
+func (binary *binaryDecorator) installSymlinkToRuntimeApex(ctx ModuleContext, file android.Path) {
+ dir := binary.baseInstaller.installDir(ctx)
+ dirOnDevice := android.InstallPathToOnDevicePath(ctx, dir)
+ target := "/" + filepath.Join("apex", "com.android.runtime", dir.Base(), file.Base())
+
+ ctx.InstallAbsoluteSymlink(dir, file.Base(), target)
+ binary.post_install_cmds = append(binary.post_install_cmds, makeSymlinkCmd(dirOnDevice, file.Base(), target))
+
+ for _, symlink := range binary.symlinks {
+ ctx.InstallAbsoluteSymlink(dir, symlink, target)
+ binary.post_install_cmds = append(binary.post_install_cmds, makeSymlinkCmd(dirOnDevice, symlink, target))
+ }
+}
+
func (binary *binaryDecorator) install(ctx ModuleContext, file android.Path) {
+ // Bionic binaries (e.g. linker) is installed to the bootstrap subdirectory.
+ // The original path becomes a symlink to the corresponding file in the
+ // runtime APEX.
+ if isBionic(ctx.baseModuleName()) && ctx.Arch().Native && ctx.apexName() == "" && !ctx.inRecovery() {
+ if ctx.Device() {
+ binary.installSymlinkToRuntimeApex(ctx, file)
+ }
+ binary.baseInstaller.subDir = "bootstrap"
+ }
binary.baseInstaller.install(ctx, file)
for _, symlink := range binary.symlinks {
ctx.InstallSymlink(binary.baseInstaller.installDir(ctx), symlink, binary.baseInstaller.path)
diff --git a/cc/cc.go b/cc/cc.go
index 284b58d..c036b84 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -599,6 +599,14 @@
return Bool(c.Properties.Bootstrap)
}
+func isBionic(name string) bool {
+ switch name {
+ case "libc", "libm", "libdl", "linker":
+ return true
+ }
+ return false
+}
+
type baseModuleContext struct {
android.BaseContext
moduleContextImpl
diff --git a/cc/config/clang.go b/cc/config/clang.go
index 6a1c736..a57bbf8 100644
--- a/cc/config/clang.go
+++ b/cc/config/clang.go
@@ -174,6 +174,10 @@
// Disable this warning because we don't care about behavior with older compilers.
"-Wno-return-std-move-in-c++11",
+
+ // Disable -Wstring-plus-int until the instances detected by this new warning is
+ // fixed.
+ "-Wno-string-plus-int",
}, " "))
// Extra cflags for projects under external/ directory
diff --git a/cc/config/global.go b/cc/config/global.go
index 689b315..e3fab0c 100644
--- a/cc/config/global.go
+++ b/cc/config/global.go
@@ -120,8 +120,8 @@
// prebuilts/clang default settings.
ClangDefaultBase = "prebuilts/clang/host"
- ClangDefaultVersion = "clang-r349610"
- ClangDefaultShortVersion = "8.0.8"
+ ClangDefaultVersion = "clang-r353983"
+ ClangDefaultShortVersion = "9.0.1"
// Directories with warnings from Android.bp files.
WarningAllowedProjects = []string{
diff --git a/cc/config/x86_64_device.go b/cc/config/x86_64_device.go
index 4264eda..0f0420f 100644
--- a/cc/config/x86_64_device.go
+++ b/cc/config/x86_64_device.go
@@ -38,6 +38,10 @@
"": []string{
"-march=x86-64",
},
+ "broadwell": []string{
+ "-march=broadwell",
+ },
+
"haswell": []string{
"-march=core-avx2",
},
@@ -50,6 +54,12 @@
"silvermont": []string{
"-march=slm",
},
+ "skylake": []string{
+ "-march=skylake",
+ },
+ "stoneyridge": []string{
+ "-march=bdver4",
+ },
}
x86_64ArchFeatureCflags = map[string][]string{
@@ -59,6 +69,8 @@
"sse4_2": []string{"-msse4.2"},
"popcnt": []string{"-mpopcnt"},
"avx": []string{"-mavx"},
+ "avx2": []string{"-mavx2"},
+ "avx512": []string{"-mavx512"},
"aes_ni": []string{"-maes"},
}
)
diff --git a/cc/config/x86_device.go b/cc/config/x86_device.go
index 34e7df8..500014e 100644
--- a/cc/config/x86_device.go
+++ b/cc/config/x86_device.go
@@ -51,6 +51,10 @@
"-march=atom",
"-mfpmath=sse",
},
+ "broadwell": []string{
+ "-march=broadwell",
+ "-mfpmath=sse",
+ },
"haswell": []string{
"-march=core-avx2",
"-mfpmath=sse",
@@ -67,6 +71,14 @@
"-march=slm",
"-mfpmath=sse",
},
+ "skylake": []string{
+ "-march=skylake",
+ "-mfpmath=sse",
+ },
+ "stoneyridge": []string{
+ "-march=bdver4",
+ "-mfpmath=sse",
+ },
}
x86ArchFeatureCflags = map[string][]string{
@@ -75,6 +87,7 @@
"sse4_1": []string{"-msse4.1"},
"sse4_2": []string{"-msse4.2"},
"avx": []string{"-mavx"},
+ "avx2": []string{"-mavx2"},
"aes_ni": []string{"-maes"},
}
)
diff --git a/cc/library.go b/cc/library.go
index 71a9df6..5df5112 100644
--- a/cc/library.go
+++ b/cc/library.go
@@ -15,6 +15,7 @@
package cc
import (
+ "path/filepath"
"regexp"
"sort"
"strconv"
@@ -290,6 +291,8 @@
versionScriptPath android.ModuleGenPath
+ post_install_cmds []string
+
// Decorated interafaces
*baseCompiler
*baseLinker
@@ -888,6 +891,14 @@
return library.tocFile
}
+func (library *libraryDecorator) installSymlinkToRuntimeApex(ctx ModuleContext, file android.Path) {
+ dir := library.baseInstaller.installDir(ctx)
+ dirOnDevice := android.InstallPathToOnDevicePath(ctx, dir)
+ target := "/" + filepath.Join("apex", "com.android.runtime", dir.Base(), "bionic", file.Base())
+ ctx.InstallAbsoluteSymlink(dir, file.Base(), target)
+ library.post_install_cmds = append(library.post_install_cmds, makeSymlinkCmd(dirOnDevice, file.Base(), target))
+}
+
func (library *libraryDecorator) install(ctx ModuleContext, file android.Path) {
if library.shared() {
if ctx.Device() && ctx.useVndk() {
@@ -905,15 +916,13 @@
}
}
} else if len(library.Properties.Stubs.Versions) > 0 && android.DirectlyInAnyApex(ctx, ctx.ModuleName()) {
- // If a library in an APEX has stable versioned APIs, we basically don't need
- // to have the platform variant of the library in /system partition because
- // platform components can just use the lib from the APEX without fearing about
- // compatibility. However, if the library is required for some early processes
- // before the APEX is activated, the platform variant may also be required.
- // In that case, it is installed to the subdirectory 'bootstrap' in order to
- // be distinguished/isolated from other non-bootstrap libraries in /system/lib
- // so that the bootstrap libraries are used only when the APEX isn't ready.
- if !library.buildStubs() && ctx.Arch().Native {
+ // Bionic libraries (e.g. libc.so) is installed to the bootstrap subdirectory.
+ // The original path becomes a symlink to the corresponding file in the
+ // runtime APEX.
+ if isBionic(ctx.baseModuleName()) && !library.buildStubs() && ctx.Arch().Native && !ctx.inRecovery() {
+ if ctx.Device() {
+ library.installSymlinkToRuntimeApex(ctx, file)
+ }
library.baseInstaller.subDir = "bootstrap"
}
}
diff --git a/cc/lto.go b/cc/lto.go
index 6302748..0d7a246 100644
--- a/cc/lto.go
+++ b/cc/lto.go
@@ -83,8 +83,7 @@
if lto.LTO() {
var ltoFlag string
if Bool(lto.Properties.Lto.Thin) {
- ltoFlag = "-flto=thin"
-
+ ltoFlag = "-flto=thin -fsplit-lto-unit"
} else {
ltoFlag = "-flto"
}
diff --git a/cc/util.go b/cc/util.go
index 925dd74..782bf61 100644
--- a/cc/util.go
+++ b/cc/util.go
@@ -133,3 +133,10 @@
return root, suffix, ext
}
+
+// linkDirOnDevice/linkName -> target
+func makeSymlinkCmd(linkDirOnDevice string, linkName string, target string) string {
+ dir := filepath.Join("$(PRODUCT_OUT)", linkDirOnDevice)
+ return "mkdir -p " + dir + " && " +
+ "ln -sf " + target + " " + filepath.Join(dir, linkName)
+}
diff --git a/cmd/soong_build/writedocs.go b/cmd/soong_build/writedocs.go
index 5171b68..d011e77 100644
--- a/cmd/soong_build/writedocs.go
+++ b/cmd/soong_build/writedocs.go
@@ -276,8 +276,9 @@
{{- else -}}
<div class="simple" id="{{getModule}}.{{.Name}}">
<span class="fixed"> </span><b>{{.Name}} {{range .OtherNames}}, {{.}}{{end -}}</b>
- {{- if .Text -}}{{.Text}}{{- end -}}
- {{- with .OtherTexts -}}{{.}}{{- end -}}<i>{{.Type}}</i>
+ <i>{{.Type}}</i>
+ {{- if .Text -}}{{if ne .Text "\n"}}, {{end}}{{.Text}}{{- end -}}
+ {{- with .OtherTexts -}}{{.}}{{- end -}}
{{- if .Default -}}<i>Default: {{.Default}}</i>{{- end -}}
</div>
{{- end}}