1# Copyright 2005 The Android Open Source Project
2
3LOCAL_PATH:= $(call my-dir)
4
5-include system/sepolicy/policy_version.mk
6
7# --
8
9ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT)))
10init_options += \
11    -DALLOW_FIRST_STAGE_CONSOLE=1 \
12    -DALLOW_LOCAL_PROP_OVERRIDE=1 \
13    -DALLOW_PERMISSIVE_SELINUX=1 \
14    -DREBOOT_BOOTLOADER_ON_PANIC=1 \
15    -DWORLD_WRITABLE_KMSG=1 \
16    -DDUMP_ON_UMOUNT_FAILURE=1
17else
18init_options += \
19    -DALLOW_FIRST_STAGE_CONSOLE=0 \
20    -DALLOW_LOCAL_PROP_OVERRIDE=0 \
21    -DALLOW_PERMISSIVE_SELINUX=0 \
22    -DREBOOT_BOOTLOADER_ON_PANIC=0 \
23    -DWORLD_WRITABLE_KMSG=0 \
24    -DDUMP_ON_UMOUNT_FAILURE=0
25endif
26
27ifneq (,$(filter eng,$(TARGET_BUILD_VARIANT)))
28init_options += \
29    -DSHUTDOWN_ZERO_TIMEOUT=1
30else
31init_options += \
32    -DSHUTDOWN_ZERO_TIMEOUT=0
33endif
34
35init_options += -DLOG_UEVENTS=0 \
36    -DSEPOLICY_VERSION=$(POLICYVERS)
37
38init_cflags += \
39    $(init_options) \
40    -Wall -Wextra \
41    -Wno-unused-parameter \
42    -Werror \
43
44# --
45
46# Do not build this even with mmma if we're system-as-root, otherwise it will overwrite the symlink.
47ifneq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
48include $(CLEAR_VARS)
49LOCAL_CPPFLAGS := $(init_cflags)
50LOCAL_SRC_FILES := \
51    devices.cpp \
52    first_stage_init.cpp \
53    first_stage_main.cpp \
54    first_stage_mount.cpp \
55    mount_namespace.cpp \
56    reboot_utils.cpp \
57    selabel.cpp \
58    selinux.cpp \
59    switch_root.cpp \
60    uevent_listener.cpp \
61    util.cpp \
62
63LOCAL_MODULE := init_first_stage
64LOCAL_MODULE_STEM := init
65
66LOCAL_FORCE_STATIC_EXECUTABLE := true
67
68LOCAL_MODULE_PATH := $(TARGET_RAMDISK_OUT)
69LOCAL_UNSTRIPPED_PATH := $(TARGET_RAMDISK_OUT_UNSTRIPPED)
70
71# Install adb_debug.prop into debug ramdisk.
72# This allows adb root on a user build, when debug ramdisk is used.
73LOCAL_REQUIRED_MODULES := \
74   adb_debug.prop \
75
76# Set up the same mount points on the ramdisk that system-as-root contains.
77LOCAL_POST_INSTALL_CMD := mkdir -p \
78    $(TARGET_RAMDISK_OUT)/apex \
79    $(TARGET_RAMDISK_OUT)/debug_ramdisk \
80    $(TARGET_RAMDISK_OUT)/dev \
81    $(TARGET_RAMDISK_OUT)/mnt \
82    $(TARGET_RAMDISK_OUT)/proc \
83    $(TARGET_RAMDISK_OUT)/sys \
84
85LOCAL_STATIC_LIBRARIES := \
86    libc++fs \
87    libfs_avb \
88    libfs_mgr \
89    libfec \
90    libfec_rs \
91    libsquashfs_utils \
92    liblogwrap \
93    libext4_utils \
94    libfscrypt \
95    libcrypto_utils \
96    libsparse \
97    libavb \
98    libkeyutils \
99    liblp \
100    libcutils \
101    libbase \
102    liblog \
103    libcrypto_static \
104    libdl \
105    libz \
106    libselinux \
107    libcap \
108    libgsi \
109    libcom.android.sysprop.apex \
110    liblzma \
111    libdexfile_support_static \
112    libunwindstack \
113    libbacktrace \
114    libmodprobe \
115    libext2_uuid \
116    libprotobuf-cpp-lite \
117    libsnapshot_init \
118
119LOCAL_SANITIZE := signed-integer-overflow
120# First stage init is weird: it may start without stdout/stderr, and no /proc.
121LOCAL_NOSANITIZE := hwaddress
122include $(BUILD_EXECUTABLE)
123endif
124
125include $(CLEAR_VARS)
126
127LOCAL_MODULE := init_system
128LOCAL_REQUIRED_MODULES := \
129   init_second_stage \
130
131include $(BUILD_PHONY_PACKAGE)
132
133include $(CLEAR_VARS)
134
135LOCAL_MODULE := init_vendor
136ifneq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
137LOCAL_REQUIRED_MODULES := \
138   init_first_stage \
139
140endif
141include $(BUILD_PHONY_PACKAGE)
142