aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Android.bp1
-rw-r--r--android/config.go4
-rw-r--r--android/variable.go2
-rw-r--r--cc/androidmk.go6
-rw-r--r--cc/cc.go18
-rw-r--r--cc/config/vndk.go157
-rw-r--r--cc/library.go7
-rw-r--r--cc/makevars.go1
-rw-r--r--cc/vndk.go18
-rwxr-xr-xscripts/strip.sh18
10 files changed, 225 insertions, 7 deletions
diff --git a/Android.bp b/Android.bp
index 9ad12473..35bc282a 100644
--- a/Android.bp
+++ b/Android.bp
@@ -103,6 +103,7 @@ bootstrap_go_package {
"cc/config/global.go",
"cc/config/tidy.go",
"cc/config/toolchain.go",
+ "cc/config/vndk.go",
"cc/config/arm_device.go",
"cc/config/arm64_device.go",
diff --git a/android/config.go b/android/config.go
index 15207396..7679f297 100644
--- a/android/config.go
+++ b/android/config.go
@@ -818,6 +818,10 @@ func (c *deviceConfig) ExtraVndkVersions() []string {
return c.config.productVariables.ExtraVndkVersions
}
+func (c *deviceConfig) VndkUseCoreVariant() bool {
+ return Bool(c.config.productVariables.VndkUseCoreVariant)
+}
+
func (c *deviceConfig) SystemSdkVersions() []string {
return c.config.productVariables.DeviceSystemSdkVersions
}
diff --git a/android/variable.go b/android/variable.go
index 1c17e5ae..1b33f990 100644
--- a/android/variable.go
+++ b/android/variable.go
@@ -253,6 +253,8 @@ type productVariables struct {
PgoAdditionalProfileDirs []string `json:",omitempty"`
+ VndkUseCoreVariant *bool `json:",omitempty"`
+
BoardVendorSepolicyDirs []string `json:",omitempty"`
BoardOdmSepolicyDirs []string `json:",omitempty"`
BoardPlatPublicSepolicyDirs []string `json:",omitempty"`
diff --git a/cc/androidmk.go b/cc/androidmk.go
index d229d0cf..02806f98 100644
--- a/cc/androidmk.go
+++ b/cc/androidmk.go
@@ -185,6 +185,12 @@ func (library *libraryDecorator) AndroidMk(ctx AndroidMkContext, ret *android.An
if library.coverageOutputFile.Valid() {
fmt.Fprintln(w, "LOCAL_PREBUILT_COVERAGE_ARCHIVE :=", library.coverageOutputFile.String())
}
+
+ if library.useCoreVariant {
+ fmt.Fprintln(w, "LOCAL_UNINSTALLABLE_MODULE := true")
+ fmt.Fprintln(w, "LOCAL_NO_NOTICE_FILE := true")
+ fmt.Fprintln(w, "LOCAL_VNDK_DEPEND_ON_CORE_VARIANT := true")
+ }
})
if library.shared() && !library.buildStubs() {
diff --git a/cc/cc.go b/cc/cc.go
index c036b841..c80d00c3 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -266,6 +266,7 @@ type ModuleContextIntf interface {
hasStubsVariants() bool
isStubs() bool
bootstrap() bool
+ mustUseVendorVariant() bool
}
type ModuleContext interface {
@@ -558,6 +559,10 @@ func (c *Module) isVndkExt() bool {
return false
}
+func (c *Module) mustUseVendorVariant() bool {
+ return c.isVndkSp() || inList(c.Name(), config.VndkMustUseVendorVariantList)
+}
+
func (c *Module) getVndkExtendsModuleName() string {
if vndkdep := c.vndkdep; vndkdep != nil {
return vndkdep.getVndkExtendsModuleName()
@@ -709,6 +714,10 @@ func (ctx *moduleContextImpl) isVndkExt() bool {
return ctx.mod.isVndkExt()
}
+func (ctx *moduleContextImpl) mustUseVendorVariant() bool {
+ return ctx.mod.mustUseVendorVariant()
+}
+
func (ctx *moduleContextImpl) inRecovery() bool {
return ctx.mod.inRecovery()
}
@@ -1769,7 +1778,12 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
isLLndk := inList(libName, llndkLibraries)
isVendorPublicLib := inList(libName, vendorPublicLibraries)
bothVendorAndCoreVariantsExist := ccDep.hasVendorVariant() || isLLndk
- if c.useVndk() && bothVendorAndCoreVariantsExist {
+
+ if ctx.DeviceConfig().VndkUseCoreVariant() && ccDep.isVndk() && !ccDep.mustUseVendorVariant() {
+ // The vendor module is a no-vendor-variant VNDK library. Depend on the
+ // core module instead.
+ return libName
+ } else if c.useVndk() && bothVendorAndCoreVariantsExist {
// The vendor module in Make will have been renamed to not conflict with the core
// module, so update the dependency name here accordingly.
return libName + vendorSuffix
@@ -1908,6 +1922,8 @@ func (c *Module) getMakeLinkType() string {
// TODO(b/114741097): use the correct ndk stl once build errors have been fixed
//family, link := getNdkStlFamilyAndLinkType(c)
//return fmt.Sprintf("native:ndk:%s:%s", family, link)
+ } else if inList(c.Name(), vndkUsingCoreVariantLibraries) {
+ return "native:platform_vndk"
} else {
return "native:platform"
}
diff --git a/cc/config/vndk.go b/cc/config/vndk.go
new file mode 100644
index 00000000..542f7375
--- /dev/null
+++ b/cc/config/vndk.go
@@ -0,0 +1,157 @@
+// Copyright 2019 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package config
+
+// List of VNDK libraries that have different core variant and vendor variant.
+// For these libraries, the vendor variants must be installed even if the device
+// has VndkUseCoreVariant set.
+var VndkMustUseVendorVariantList = []string{
+ "android.frameworks.sensorservice@1.0",
+ "android.hardware.atrace@1.0",
+ "android.hardware.audio.common@5.0",
+ "android.hardware.audio.effect@2.0",
+ "android.hardware.audio.effect@4.0",
+ "android.hardware.audio.effect@5.0",
+ "android.hardware.audio@2.0",
+ "android.hardware.audio@4.0",
+ "android.hardware.audio@5.0",
+ "android.hardware.automotive.evs@1.0",
+ "android.hardware.automotive.vehicle@2.0",
+ "android.hardware.bluetooth.audio@2.0",
+ "android.hardware.boot@1.0",
+ "android.hardware.broadcastradio@1.0",
+ "android.hardware.broadcastradio@1.1",
+ "android.hardware.broadcastradio@2.0",
+ "android.hardware.camera.device@1.0",
+ "android.hardware.camera.device@3.2",
+ "android.hardware.camera.device@3.3",
+ "android.hardware.camera.device@3.4",
+ "android.hardware.camera.provider@2.4",
+ "android.hardware.cas.native@1.0",
+ "android.hardware.cas@1.0",
+ "android.hardware.configstore@1.0",
+ "android.hardware.configstore@1.1",
+ "android.hardware.contexthub@1.0",
+ "android.hardware.drm@1.0",
+ "android.hardware.drm@1.1",
+ "android.hardware.fastboot@1.0",
+ "android.hardware.gatekeeper@1.0",
+ "android.hardware.gnss@1.0",
+ "android.hardware.graphics.allocator@2.0",
+ "android.hardware.graphics.bufferqueue@1.0",
+ "android.hardware.graphics.composer@2.1",
+ "android.hardware.graphics.composer@2.2",
+ "android.hardware.health@1.0",
+ "android.hardware.health@2.0",
+ "android.hardware.ir@1.0",
+ "android.hardware.keymaster@3.0",
+ "android.hardware.keymaster@4.0",
+ "android.hardware.light@2.0",
+ "android.hardware.media.bufferpool@1.0",
+ "android.hardware.media.omx@1.0",
+ "android.hardware.memtrack@1.0",
+ "android.hardware.neuralnetworks@1.0",
+ "android.hardware.neuralnetworks@1.1",
+ "android.hardware.neuralnetworks@1.2",
+ "android.hardware.nfc@1.1",
+ "android.hardware.nfc@1.2",
+ "android.hardware.oemlock@1.0",
+ "android.hardware.power.stats@1.0",
+ "android.hardware.power@1.0",
+ "android.hardware.power@1.1",
+ "android.hardware.radio@1.4",
+ "android.hardware.secure_element@1.0",
+ "android.hardware.sensors@1.0",
+ "android.hardware.soundtrigger@2.0",
+ "android.hardware.soundtrigger@2.0-core",
+ "android.hardware.soundtrigger@2.1",
+ "android.hardware.tetheroffload.config@1.0",
+ "android.hardware.tetheroffload.control@1.0",
+ "android.hardware.thermal@1.0",
+ "android.hardware.tv.cec@1.0",
+ "android.hardware.tv.input@1.0",
+ "android.hardware.vibrator@1.0",
+ "android.hardware.vibrator@1.1",
+ "android.hardware.vibrator@1.2",
+ "android.hardware.weaver@1.0",
+ "android.hardware.wifi.hostapd@1.0",
+ "android.hardware.wifi.offload@1.0",
+ "android.hardware.wifi.supplicant@1.0",
+ "android.hardware.wifi.supplicant@1.1",
+ "android.hardware.wifi@1.0",
+ "android.hardware.wifi@1.1",
+ "android.hardware.wifi@1.2",
+ "android.hardwareundtrigger@2.0",
+ "android.hardwareundtrigger@2.0-core",
+ "android.hardwareundtrigger@2.1",
+ "android.hidl.allocator@1.0",
+ "android.hidl.token@1.0",
+ "android.hidl.token@1.0-utils",
+ "android.system.net.netd@1.0",
+ "android.system.wifi.keystore@1.0",
+ "libaudioroute",
+ "libaudioutils",
+ "libbinder",
+ "libcamera_metadata",
+ "libcrypto",
+ "libdiskconfig",
+ "libdumpstateutil",
+ "libexpat",
+ "libfmq",
+ "libgui",
+ "libhidlcache",
+ "libmedia_helper",
+ "libmedia_omx",
+ "libmemtrack",
+ "libnetutils",
+ "libpuresoftkeymasterdevice",
+ "libradio_metadata",
+ "libselinux",
+ "libsoftkeymasterdevice",
+ "libsqlite",
+ "libssl",
+ "libstagefright_bufferqueue_helper",
+ "libstagefright_flacdec",
+ "libstagefright_foundation",
+ "libstagefright_omx",
+ "libstagefright_omx_utils",
+ "libstagefright_soft_aacdec",
+ "libstagefright_soft_aacenc",
+ "libstagefright_soft_amrdec",
+ "libstagefright_soft_amrnbenc",
+ "libstagefright_soft_amrwbenc",
+ "libstagefright_soft_avcdec",
+ "libstagefright_soft_avcenc",
+ "libstagefright_soft_flacdec",
+ "libstagefright_soft_flacenc",
+ "libstagefright_soft_g711dec",
+ "libstagefright_soft_gsmdec",
+ "libstagefright_soft_hevcdec",
+ "libstagefright_soft_mp3dec",
+ "libstagefright_soft_mpeg2dec",
+ "libstagefright_soft_mpeg4dec",
+ "libstagefright_soft_mpeg4enc",
+ "libstagefright_soft_opusdec",
+ "libstagefright_soft_rawdec",
+ "libstagefright_soft_vorbisdec",
+ "libstagefright_soft_vpxdec",
+ "libstagefright_soft_vpxenc",
+ "libstagefright_xmlparser",
+ "libsysutils",
+ "libui",
+ "libvorbisidec",
+ "libxml2",
+ "libziparchive",
+}
diff --git a/cc/library.go b/cc/library.go
index 7216832c..e5bb3476 100644
--- a/cc/library.go
+++ b/cc/library.go
@@ -293,6 +293,10 @@ type libraryDecorator struct {
post_install_cmds []string
+ // If useCoreVariant is true, the vendor variant of a VNDK library is
+ // not installed.
+ useCoreVariant bool
+
// Decorated interafaces
*baseCompiler
*baseLinker
@@ -914,6 +918,9 @@ func (library *libraryDecorator) install(ctx ModuleContext, file android.Path) {
if ctx.isVndkSp() {
library.baseInstaller.subDir = "vndk-sp"
} else if ctx.isVndk() {
+ if ctx.DeviceConfig().VndkUseCoreVariant() && !ctx.mustUseVendorVariant() {
+ library.useCoreVariant = true
+ }
library.baseInstaller.subDir = "vndk"
}
diff --git a/cc/makevars.go b/cc/makevars.go
index 4a9ade2d..aa6fdea5 100644
--- a/cc/makevars.go
+++ b/cc/makevars.go
@@ -97,6 +97,7 @@ func makeVarsProvider(ctx android.MakeVarsContext) {
ctx.Strict("VNDK_SAMEPROCESS_LIBRARIES", strings.Join(vndkSpLibraries, " "))
ctx.Strict("LLNDK_LIBRARIES", strings.Join(llndkLibraries, " "))
ctx.Strict("VNDK_PRIVATE_LIBRARIES", strings.Join(vndkPrivateLibraries, " "))
+ ctx.Strict("VNDK_USING_CORE_VARIANT_LIBRARIES", strings.Join(vndkUsingCoreVariantLibraries, " "))
// Filter vendor_public_library that are exported to make
exportedVendorPublicLibraries := []string{}
diff --git a/cc/vndk.go b/cc/vndk.go
index 623097da..44a83e76 100644
--- a/cc/vndk.go
+++ b/cc/vndk.go
@@ -21,6 +21,7 @@ import (
"sync"
"android/soong/android"
+ "android/soong/cc/config"
)
type VndkProperties struct {
@@ -191,11 +192,12 @@ func vndkIsVndkDepAllowed(from *vndkdep, to *vndkdep) error {
}
var (
- vndkCoreLibraries []string
- vndkSpLibraries []string
- llndkLibraries []string
- vndkPrivateLibraries []string
- vndkLibrariesLock sync.Mutex
+ vndkCoreLibraries []string
+ vndkSpLibraries []string
+ llndkLibraries []string
+ vndkPrivateLibraries []string
+ vndkUsingCoreVariantLibraries []string
+ vndkLibrariesLock sync.Mutex
)
// gather list of vndk-core, vndk-sp, and ll-ndk libs
@@ -223,6 +225,12 @@ func VndkMutator(mctx android.BottomUpMutatorContext) {
if m.vndkdep.isVndk() && !m.vndkdep.isVndkExt() {
vndkLibrariesLock.Lock()
defer vndkLibrariesLock.Unlock()
+ if mctx.DeviceConfig().VndkUseCoreVariant() && !inList(name, config.VndkMustUseVendorVariantList) {
+ if !inList(name, vndkUsingCoreVariantLibraries) {
+ vndkUsingCoreVariantLibraries = append(vndkUsingCoreVariantLibraries, name)
+ sort.Strings(vndkUsingCoreVariantLibraries)
+ }
+ }
if m.vndkdep.isVndkSp() {
if !inList(name, vndkSpLibraries) {
vndkSpLibraries = append(vndkSpLibraries, name)
diff --git a/scripts/strip.sh b/scripts/strip.sh
index bedc527d..d5369071 100755
--- a/scripts/strip.sh
+++ b/scripts/strip.sh
@@ -28,6 +28,7 @@
# --keep-mini-debug-info
# --keep-symbols
# --use-gnu-strip
+# --remove-build-id
set -o pipefail
@@ -41,6 +42,7 @@ Options:
--keep-mini-debug-info Keep compressed debug info in out-file
--keep-symbols Keep symbols in out-file
--use-gnu-strip Use strip/objcopy instead of llvm-{strip,objcopy}
+ --remove-build-id Remove the gnu build-id section in out-file
EOF
exit 1
}
@@ -110,6 +112,16 @@ do_add_gnu_debuglink() {
fi
}
+do_remove_build_id() {
+ if [ -z "${use_gnu_strip}" ]; then
+ "${CLANG_BIN}/llvm-strip" -remove-section=.note.gnu.build-id "${outfile}.tmp" -o "${outfile}.tmp.no-build-id"
+ else
+ "${CROSS_COMPILE}strip" --remove-section=.note.gnu.build-id "${outfile}.tmp" -o "${outfile}.tmp.no-build-id"
+ fi
+ rm -f "${outfile}.tmp"
+ mv "${outfile}.tmp.no-build-id" "${outfile}.tmp"
+}
+
while getopts $OPTSTRING opt; do
case "$opt" in
d) depsfile="${OPTARG}" ;;
@@ -120,7 +132,7 @@ while getopts $OPTSTRING opt; do
add-gnu-debuglink) add_gnu_debuglink=true ;;
keep-mini-debug-info) keep_mini_debug_info=true ;;
keep-symbols) keep_symbols=true ;;
- use-gnu-strip) use_gnu_strip=true ;;
+ remove-build-id) remove_build_id=true ;;
*) echo "Unknown option --${OPTARG}"; usage ;;
esac;;
?) usage ;;
@@ -167,6 +179,10 @@ if [ ! -z "${add_gnu_debuglink}" ]; then
do_add_gnu_debuglink
fi
+if [ ! -z "${remove_build_id}" ]; then
+ do_remove_build_id
+fi
+
rm -f "${outfile}"
mv "${outfile}.tmp" "${outfile}"