diff options
author | Jiyong Park <jiyong@google.com> | 2019-02-25 10:54:29 +0900 |
---|---|---|
committer | Jiyong Park <jiyong@google.com> | 2019-03-14 07:35:52 +0900 |
commit | 036e09c36e8c859ee23db7a84adcd9b8563f54c9 (patch) | |
tree | 4487746e251b08685070460505af39ae875ce90c | |
parent | 10935e063d3db0ff2b61f710b8f34bd92fa861ba (diff) |
Don't install *.mountpoint targets
The *.mountpoint targets that installs /bionic/lib/lib*.so and
/bionic/bin/linker* are no longer needed.
Now, /system/lib/lib*.so and /system/bin/linker* are simply symlinks to
the corresponding files in the runtime apex. For example,
/system/lib/libc.so -> /apex/com.android.runtime/lib/bionic/libc.so
This is made possible because we now activate APEXes even before the
data partition is mounted. Before the data partition mounting, the
APEXes from the system partition are ativated. After the data partition
is mounted, updated APEXes in the partition (if any) are activated. As a
result, the symlink always points to the valid path regardless of
whether /data is mounted or not.
Bug: 125549215
Test: device boots
Change-Id: Ie7d83686abe00b3c436f9f9db75d4244200a0fc9
-rw-r--r-- | Android.bp | 56 | ||||
-rw-r--r-- | build/Android.bp | 33 | ||||
-rw-r--r-- | build/bionic.go | 228 | ||||
-rw-r--r-- | build/run-on-host.sh | 47 | ||||
-rw-r--r-- | dummy_mountpoint | 1 | ||||
-rw-r--r-- | libc/Android.bp | 2 | ||||
-rw-r--r-- | libdl/Android.bp | 1 | ||||
-rw-r--r-- | libm/Android.bp | 1 | ||||
-rw-r--r-- | linker/Android.bp | 3 |
9 files changed, 1 insertions, 371 deletions
diff --git a/Android.bp b/Android.bp deleted file mode 100644 index 72ab6c0d2..000000000 --- a/Android.bp +++ /dev/null @@ -1,56 +0,0 @@ -// -// Copyright (C) 2019 The Android Open Source Project -// -// 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. -// - -bionic_mountpoint { - name: "libc.mountpoint", - stem: "libc.so", - src: "dummy_mountpoint", - library: true, - symlinks: ["libc.so"], - mountsource: "libc", -} - -bionic_mountpoint { - name: "libdl.mountpoint", - stem: "libdl.so", - src: "dummy_mountpoint", - library: true, - symlinks: ["libdl.so"], - mountsource: "libdl", -} - -bionic_mountpoint { - name: "libm.mountpoint", - stem: "libm.so", - src: "dummy_mountpoint", - library: true, - symlinks: ["libm.so"], - mountsource: "libm", -} - -bionic_mountpoint { - name: "linker.mountpoint", - stem: "linker", - multilib: { - lib64: { - suffix: "64", - }, - }, - src: "dummy_mountpoint", - binary: true, - symlinks: ["linker", "linker_asan"], - mountsource: "linker", -} diff --git a/build/Android.bp b/build/Android.bp deleted file mode 100644 index acd0ee272..000000000 --- a/build/Android.bp +++ /dev/null @@ -1,33 +0,0 @@ -// -// Copyright (C) 2019 The Android Open Source Project -// -// 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. -// - - -bootstrap_go_package { - name: "soong-bionic", - pkgPath: "android/soong/bionic", - deps: [ - "blueprint", - "blueprint-pathtools", - "blueprint-proptools", - "soong", - "soong-android", - "soong-cc", - ], - srcs: [ - "bionic.go", - ], - pluginFor: ["soong_build"], -} diff --git a/build/bionic.go b/build/bionic.go deleted file mode 100644 index 54ad10bfb..000000000 --- a/build/bionic.go +++ /dev/null @@ -1,228 +0,0 @@ -// Copyright (C) 2019 The Android Open Source Project -// -// 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 bionic - -import ( - "fmt" - "io" - "strings" - - "github.com/google/blueprint" - "github.com/google/blueprint/proptools" - - "android/soong/android" - "android/soong/cc" -) - -// bionic_mountpoint is a module type that is specialized to create -// mount points for Bionic files (libc, libdl, libm, and linker). -// -// With following description, -// -// bionic_mountpoint { -// name: "libc.mountpoint", -// stem: "libc.so", -// src: "dummy_mountpoint", -// library: true, -// symlinks: ["libc.so"], -// } -// -// , the build system does following jobs: -// -// A mount point /bionic/lib[64]/libc.so is created. Its content -// is from the file 'dummy_mountpoint'. -// -// Then a symlink is created at /system/lib[64]/libc.so which points to -// the created mountpoint. -// -// At runtime, on the mount point, either bootstrap Bionic or default Bionic -// (which is from the runtime APEX) is mounted by the init process. The -// symlink exists to provide consistent legacy path for compatibility -// reason. -func init() { - android.RegisterModuleType("bionic_mountpoint", bionicMountpointFactory) -} - -type bionicMountpoint struct { - android.ModuleBase - properties bionicMountpointProperties - - outputFile android.Path - pathInPartition string - stem string - unstrippedOutputFile android.Path -} - -type bionicMountpointProperties struct { - // The file that is installed as the mount point - Src *string - - // TODO(jiyong) remove these two properties (probably Stem and Suffix - // as well, as they can be inteffered from Mountsource - - // True if the mount point is for a Bionic library such libc.so - Library *bool - // True if the mount point is for a Bionic binary such as linker - Binary *bool - - // The module that this module is a mount point for - Mountsource *string - - // Base name of the mount point - Stem *string `android:"arch_variant"` - - // Append to the name of the output - Suffix *string `android:"arch_variant"` - - // Symlinks to the mountpoints from the system and recovery partitions - // Symlinks names will have the same suffix as the mount point - Symlinks []string - - // List of sanitizer names that this APEX is enabled for - SanitizerNames []string `blueprint:"mutated"` -} - -type dependencyTag struct { - blueprint.BaseDependencyTag - name string -} - -var mountsourceTag = dependencyTag{name: "mountsource"} - - -func (m *bionicMountpoint) EnableSanitizer(sanitizerName string) { - if !android.InList(sanitizerName, m.properties.SanitizerNames) { - m.properties.SanitizerNames = append(m.properties.SanitizerNames, sanitizerName) - } -} - -func (m *bionicMountpoint) IsSanitizerEnabled(ctx android.BaseModuleContext, sanitizerName string) bool { - if android.InList(sanitizerName, m.properties.SanitizerNames) { - return true - } - - // Then follow the global setting - globalSanitizerNames := []string{} - if m.Host() { - globalSanitizerNames = ctx.Config().SanitizeHost() - } else { - arches := ctx.Config().SanitizeDeviceArch() - if len(arches) == 0 || android.InList(m.Arch().ArchType.Name, arches) { - globalSanitizerNames = ctx.Config().SanitizeDevice() - } - } - return android.InList(sanitizerName, globalSanitizerNames) -} - -func (m *bionicMountpoint) DepsMutator(ctx android.BottomUpMutatorContext) { - if Bool(m.properties.Library) == Bool(m.properties.Binary) { - ctx.ModuleErrorf("either binary or library must be set to true") - return - } - if m.properties.Stem == nil { - ctx.PropertyErrorf("stem", "stem must be set") - return - } - if m.properties.Src == nil { - ctx.PropertyErrorf("src", "src must be set") - } - android.ExtractSourceDeps(ctx, m.properties.Src) - - if m.properties.Mountsource == nil { - ctx.PropertyErrorf("mountsource", "mountsource must be set") - return - } - - ctx.AddFarVariationDependencies([]blueprint.Variation{ - {Mutator: "arch", Variation: ctx.Target().String()}, - {Mutator: "image", Variation: "core"}, - {Mutator: "link", Variation: "shared"}, - }, mountsourceTag, String(m.properties.Mountsource)) -} - -func (m *bionicMountpoint) GenerateAndroidBuildActions(ctx android.ModuleContext) { - if Bool(m.properties.Library) { - m.pathInPartition = "lib" - if m.Arch().ArchType.Multilib == "lib64" { - m.pathInPartition = "lib64" - } - } else if Bool(m.properties.Binary) { - m.pathInPartition = "bin" - } - - m.stem = String(m.properties.Stem) + String(m.properties.Suffix) - - m.outputFile = ctx.ExpandSource(String(m.properties.Src), "src") - - ctx.VisitDirectDepsWithTag(mountsourceTag, func(module android.Module) { - if cc, ok := module.(*cc.Module); ok { - m.unstrippedOutputFile = cc.UnstrippedOutputFile() - } - }) -} - -func (m *bionicMountpoint) AndroidMk() android.AndroidMkData { - return android.AndroidMkData { - Custom: func(w io.Writer, name, prefix, moduleDir string, data android.AndroidMkData) { - if !m.Arch().Native { - return - } - fmt.Fprintln(w, "\ninclude $(CLEAR_VARS)") - fmt.Fprintln(w, "LOCAL_PATH :=", moduleDir) - fmt.Fprintln(w, "LOCAL_MODULE :=", name) - fmt.Fprintln(w, "LOCAL_USE_CLANG_LLD := false") - fmt.Fprintln(w, "LOCAL_STRIP_MODULE := false") - if Bool(m.properties.Library) { - fmt.Fprintln(w, "LOCAL_MODULE_CLASS := SHARED_LIBRARIES") - } else if Bool(m.properties.Binary) { - fmt.Fprintln(w, "LOCAL_MODULE_CLASS := EXECUTABLES") - } - fmt.Fprintln(w, "LOCAL_MODULE_TAGS := optional") - fmt.Fprintln(w, "LOCAL_PREBUILT_MODULE_FILE :=", m.outputFile.String()) - fmt.Fprintln(w, "LOCAL_MODULE_TARGET_ARCH :=", m.Arch().ArchType.String()) - fmt.Fprintln(w, "LOCAL_MODULE_PATH :=", "$(TARGET_ROOT_OUT)/bionic/" + m.pathInPartition) - fmt.Fprintln(w, "LOCAL_INSTALLED_MODULE_STEM :=", m.stem) - - if len(m.properties.Symlinks) > 0 { - symlink_dir_in_system := "$(TARGET_OUT)/" + m.pathInPartition + "/" - symlink_dir_in_recovery := "$(TARGET_RECOVERY_ROOT_OUT)/system/" + m.pathInPartition + "/" - symlink_target := "/bionic/" + m.pathInPartition + "/" + m.stem - cmds := []string{} - cmds = append(cmds, "$(hide) mkdir -p " + symlink_dir_in_system) - cmds = append(cmds, "mkdir -p " + symlink_dir_in_recovery) - for _, s := range m.properties.Symlinks { - symlink := s + String(m.properties.Suffix) - cmds = append(cmds, "ln -sf " + symlink_target + " " + symlink_dir_in_system + symlink) - cmds = append(cmds, "ln -sf " + symlink_target + " " + symlink_dir_in_recovery + symlink) - } - fmt.Fprintln(w, "LOCAL_POST_INSTALL_CMD := " + strings.Join(cmds, " && ")) - } - if m.unstrippedOutputFile != nil { - fmt.Fprintln(w, "LOCAL_SOONG_UNSTRIPPED_BINARY :=", m.unstrippedOutputFile.String()) - } - fmt.Fprintln(w, "include $(BUILD_SYSTEM)/soong_cc_prebuilt.mk") - }, - } -} - -func bionicMountpointFactory() android.Module { - m := &bionicMountpoint{} - m.AddProperties(&m.properties) - android.InitAndroidArchModule(m, android.DeviceSupported, android.MultilibBoth) - return m -} - -var Bool = proptools.Bool -var String = proptools.String diff --git a/build/run-on-host.sh b/build/run-on-host.sh deleted file mode 100644 index c3a2751a9..000000000 --- a/build/run-on-host.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/bash -e - -source ${ANDROID_BUILD_TOP}/build/envsetup.sh - -TARGET_ARCH=$(get_build_var TARGET_ARCH) -TARGET_OUT=$(get_build_var TARGET_OUT) -TARGET_OUT_EXECUTABLES=$(get_build_var TARGET_OUT_EXECUTABLES) -TARGET_OUT_DATA=$(get_build_var TARGET_OUT_DATA) -HOST_OS=$(get_build_var HOST_OS) -HOST_ARCH=$(get_build_var HOST_ARCH) -HOST_OUT=$(get_build_var HOST_OUT) - -function prepare() -{ - BITS=$1 - shift - - NATIVETEST=${TARGET_OUT_DATA}/nativetest - if [ "${BITS}" = 64 ]; then - NATIVETEST=${NATIVETEST}64 - fi - - if [ ${TARGET_ARCH} = arm -o ${TARGET_ARCH} = mips -o ${TARGET_ARCH} = x86 ]; then - LINKER=${TARGET_OUT_EXECUTABLES}/linker - else - LINKER="${TARGET_OUT_EXECUTABLES}/linker64 ${TARGET_OUT_EXECUTABLES}/linker" - fi - - if [ ${TARGET_ARCH} = x86 -o ${TARGET_ARCH} = x86_64 ]; then - m -j ${LINKER} ${TARGET_OUT}/etc/hosts ${TARGET_OUT_EXECUTABLES}/sh $@ - - if [ ! -d /system ]; then - echo "Attempting to create /system"; - sudo mkdir -p -m 0777 /system; - fi - ( - cd ${ANDROID_BUILD_TOP} - mkdir -p ${TARGET_OUT_DATA}/local/tmp - ln -fs `realpath ${TARGET_OUT}/bin` /system/ - ln -fs `realpath ${TARGET_OUT}/etc` /system/ - ln -fs `realpath ${TARGET_OUT}/lib` /system/ - if [ -d "${TARGET_OUT}/lib64" ]; then - ln -fs `realpath ${TARGET_OUT}/lib64` /system/; - fi - ) - fi -} diff --git a/dummy_mountpoint b/dummy_mountpoint deleted file mode 100644 index 2d13c5523..000000000 --- a/dummy_mountpoint +++ /dev/null @@ -1 +0,0 @@ -This file serves as a mount point for bionic files either from /system partition or from /apex/com.android.runtime. This file is never meant to be accessed directly. diff --git a/libc/Android.bp b/libc/Android.bp index 0e902c179..068df989f 100644 --- a/libc/Android.bp +++ b/libc/Android.bp @@ -1560,7 +1560,7 @@ cc_library { ], }, - required: ["tzdata", "libc.mountpoint"], + required: ["tzdata"], // Leave the symbols in the shared library so that stack unwinders can produce // meaningful name resolution. diff --git a/libdl/Android.bp b/libdl/Android.bp index 642cc7ae0..2e171d632 100644 --- a/libdl/Android.bp +++ b/libdl/Android.bp @@ -108,7 +108,6 @@ cc_library { symbol_file: "libdl.map.txt", versions: ["10000"], }, - required: ["libdl.mountpoint"], } ndk_library { diff --git a/libm/Android.bp b/libm/Android.bp index 5075fb2f6..8c32810d0 100644 --- a/libm/Android.bp +++ b/libm/Android.bp @@ -512,7 +512,6 @@ cc_library { symbol_file: "libm.map.txt", versions: ["10000"], }, - required: ["libm.mountpoint"], } ndk_library { diff --git a/linker/Android.bp b/linker/Android.bp index 613be3d57..73328dad2 100644 --- a/linker/Android.bp +++ b/linker/Android.bp @@ -283,8 +283,6 @@ cc_binary { name: "linker", symlinks: ["linker_asan"], - // The linker in the system partition is now only for bootstrapping - relative_install_path: "bootstrap", recovery_available: true, multilib: { lib32: { @@ -307,7 +305,6 @@ cc_binary { }, compile_multilib: "both", xom: false, - required: ["linker.mountpoint"], } cc_library { |