The first split of 1st/2nd stage init went a bit overboard, since it split these even in the case of the recovery image and system-as-root, which don't actually need the split. This change simplifies this a bit: system-as-root and recovery have a single combined /system/bin/init and a symlink from /init to it. non-system-as-root has a separate first stage init at /init on the first stage ramdisk and a combined /system/bin/init on system.img. Two particular benefits from this: 1) Removal of the rsync of TARGET_RAMDISK_OUT to the recovery image 2) Decrease of overall space on the recovery image since it won't have a statically linked first stage init This also unified the various entry points of init to depend entirely on the arguments passed to it, instead of the hybrid of arguments and environment variable used previously. Bug: 80395578 Test: boot both system-as-root and non-system-as-root Change-Id: Ic2f29b6f56b7defc80eaa0e7cd0c9107e978816f
120 lines
2.7 KiB
Makefile
120 lines
2.7 KiB
Makefile
# Copyright 2005 The Android Open Source Project
|
|
|
|
LOCAL_PATH:= $(call my-dir)
|
|
|
|
# --
|
|
|
|
ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT)))
|
|
init_options += \
|
|
-DALLOW_LOCAL_PROP_OVERRIDE=1 \
|
|
-DALLOW_PERMISSIVE_SELINUX=1 \
|
|
-DREBOOT_BOOTLOADER_ON_PANIC=1 \
|
|
-DWORLD_WRITABLE_KMSG=1 \
|
|
-DDUMP_ON_UMOUNT_FAILURE=1
|
|
else
|
|
init_options += \
|
|
-DALLOW_LOCAL_PROP_OVERRIDE=0 \
|
|
-DALLOW_PERMISSIVE_SELINUX=0 \
|
|
-DREBOOT_BOOTLOADER_ON_PANIC=0 \
|
|
-DWORLD_WRITABLE_KMSG=0 \
|
|
-DDUMP_ON_UMOUNT_FAILURE=0
|
|
endif
|
|
|
|
ifneq (,$(filter eng,$(TARGET_BUILD_VARIANT)))
|
|
init_options += \
|
|
-DSHUTDOWN_ZERO_TIMEOUT=1
|
|
else
|
|
init_options += \
|
|
-DSHUTDOWN_ZERO_TIMEOUT=0
|
|
endif
|
|
|
|
init_options += -DLOG_UEVENTS=0
|
|
|
|
init_cflags += \
|
|
$(init_options) \
|
|
-Wall -Wextra \
|
|
-Wno-unused-parameter \
|
|
-Werror \
|
|
-std=gnu++1z \
|
|
|
|
# --
|
|
|
|
# Do not build this even with mmma if we're system-as-root, otherwise it will overwrite the symlink.
|
|
ifneq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
|
|
include $(CLEAR_VARS)
|
|
LOCAL_CPPFLAGS := $(init_cflags)
|
|
LOCAL_SRC_FILES := \
|
|
devices.cpp \
|
|
first_stage_init.cpp \
|
|
first_stage_main.cpp \
|
|
first_stage_mount.cpp \
|
|
reboot_utils.cpp \
|
|
selinux.cpp \
|
|
switch_root.cpp \
|
|
uevent_listener.cpp \
|
|
util.cpp \
|
|
|
|
LOCAL_MODULE := init_first_stage
|
|
LOCAL_MODULE_STEM := init
|
|
|
|
LOCAL_FORCE_STATIC_EXECUTABLE := true
|
|
|
|
LOCAL_MODULE_PATH := $(TARGET_RAMDISK_OUT)
|
|
LOCAL_UNSTRIPPED_PATH := $(TARGET_RAMDISK_OUT_UNSTRIPPED)
|
|
|
|
# Set up the same mount points on the ramdisk that system-as-root contains.
|
|
LOCAL_POST_INSTALL_CMD := \
|
|
mkdir -p $(TARGET_RAMDISK_OUT)/dev \
|
|
$(TARGET_RAMDISK_OUT)/mnt \
|
|
$(TARGET_RAMDISK_OUT)/proc \
|
|
$(TARGET_RAMDISK_OUT)/sys \
|
|
|
|
LOCAL_STATIC_LIBRARIES := \
|
|
libfs_mgr \
|
|
libfec \
|
|
libfec_rs \
|
|
libsquashfs_utils \
|
|
liblogwrap \
|
|
libext4_utils \
|
|
libfscrypt \
|
|
libseccomp_policy \
|
|
libcrypto_utils \
|
|
libsparse \
|
|
libavb \
|
|
libkeyutils \
|
|
liblp \
|
|
libcutils \
|
|
libbase \
|
|
liblog \
|
|
libcrypto \
|
|
libdl \
|
|
libz \
|
|
libselinux \
|
|
libcap \
|
|
|
|
LOCAL_SANITIZE := signed-integer-overflow
|
|
# First stage init is weird: it may start without stdout/stderr, and no /proc.
|
|
LOCAL_NOSANITIZE := hwaddress
|
|
include $(BUILD_EXECUTABLE)
|
|
endif
|
|
|
|
include $(CLEAR_VARS)
|
|
|
|
LOCAL_MODULE := init_system
|
|
LOCAL_REQUIRED_MODULES := \
|
|
init_second_stage \
|
|
|
|
ifeq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
|
|
LOCAL_POST_INSTALL_CMD := ln -sf /system/bin/init $(TARGET_ROOT_OUT)/init
|
|
endif
|
|
include $(BUILD_PHONY_PACKAGE)
|
|
|
|
include $(CLEAR_VARS)
|
|
|
|
LOCAL_MODULE := init_vendor
|
|
ifneq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
|
|
LOCAL_REQUIRED_MODULES := \
|
|
init_first_stage \
|
|
|
|
endif
|
|
include $(BUILD_PHONY_PACKAGE)
|