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    block_dev_initializer.cpp \
52    devices.cpp \
53    first_stage_console.cpp \
54    first_stage_init.cpp \
55    first_stage_main.cpp \
56    first_stage_mount.cpp \
57    reboot_utils.cpp \
58    selabel.cpp \
59    selinux.cpp \
60    service_utils.cpp \
61    snapuserd_transition.cpp \
62    switch_root.cpp \
63    uevent_listener.cpp \
64    util.cpp \
65
66LOCAL_MODULE := init_first_stage
67LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
68LOCAL_LICENSE_CONDITIONS := notice
69LOCAL_NOTICE_FILE := $(LOCAL_PATH)/NOTICE
70LOCAL_MODULE_STEM := init
71
72LOCAL_FORCE_STATIC_EXECUTABLE := true
73
74LOCAL_MODULE_PATH := $(TARGET_RAMDISK_OUT)
75LOCAL_UNSTRIPPED_PATH := $(TARGET_RAMDISK_OUT_UNSTRIPPED)
76
77# Install adb_debug.prop into debug ramdisk.
78# This allows adb root on a user build, when debug ramdisk is used.
79LOCAL_REQUIRED_MODULES := \
80   adb_debug.prop \
81
82# Set up the directories that first stage init mounts on.
83
84my_ramdisk_dirs := \
85    debug_ramdisk \
86    dev \
87    metadata \
88    mnt \
89    proc \
90    second_stage_resources \
91    sys \
92
93LOCAL_POST_INSTALL_CMD := mkdir -p $(addprefix $(TARGET_RAMDISK_OUT)/,$(my_ramdisk_dirs))
94ifeq (true,$(BOARD_USES_GENERIC_KERNEL_IMAGE))
95    LOCAL_POST_INSTALL_CMD += $(addprefix $(TARGET_RAMDISK_OUT)/first_stage_ramdisk/,$(my_ramdisk_dirs))
96endif
97
98my_ramdisk_dirs :=
99
100LOCAL_STATIC_LIBRARIES := \
101    libc++fs \
102    libfs_avb \
103    libfs_mgr \
104    libfec \
105    libfec_rs \
106    libsquashfs_utils \
107    liblogwrap \
108    libext4_utils \
109    libcrypto_utils \
110    libsparse \
111    libavb \
112    libkeyutils \
113    liblp \
114    libcutils \
115    libbase \
116    liblog \
117    libcrypto_static \
118    libdl \
119    libz \
120    libselinux \
121    libcap \
122    libgsi \
123    libcom.android.sysprop.apex \
124    liblzma \
125    libunwindstack_no_dex \
126    libbacktrace_no_dex \
127    libmodprobe \
128    libext2_uuid \
129    libprotobuf-cpp-lite \
130    libsnapshot_cow \
131    libsnapshot_init \
132    update_metadata-protos \
133    libprocinfo \
134
135LOCAL_SANITIZE := signed-integer-overflow
136# First stage init is weird: it may start without stdout/stderr, and no /proc.
137LOCAL_NOSANITIZE := hwaddress
138include $(BUILD_EXECUTABLE)
139endif
140
141include $(CLEAR_VARS)
142
143LOCAL_MODULE := init_system
144LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
145LOCAL_LICENSE_CONDITIONS := notice
146LOCAL_NOTICE_FILE := $(LOCAL_PATH)/NOTICE
147LOCAL_REQUIRED_MODULES := \
148   init_second_stage \
149
150include $(BUILD_PHONY_PACKAGE)
151
152include $(CLEAR_VARS)
153
154LOCAL_MODULE := init_vendor
155LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
156LOCAL_LICENSE_CONDITIONS := notice
157LOCAL_NOTICE_FILE := $(LOCAL_PATH)/NOTICE
158ifneq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
159LOCAL_REQUIRED_MODULES := \
160   init_first_stage \
161
162endif
163include $(BUILD_PHONY_PACKAGE)
164