LOCAL_PATH:= system/core/toolbox/ ifeq ($(PLATFORM_SDK_VERSION), 21) # Rule for lollipop common_cflags := \ -std=gnu99 \ -Werror -Wno-unused-parameter \ -I$(LOCAL_PATH)/upstream-netbsd/include/ \ -include bsd-compatibility.h include $(CLEAR_VARS) OUR_TOOLS := \ start \ stop \ getprop \ setprop # If busybox does not have SELinux support, provide these tools with toolbox. # Note that RECOVERY_BUSYBOX_TOOLS will be empty if TW_USE_TOOLBOX == true. ifeq ($(TWHAVE_SELINUX), true) TOOLS_FOR_SELINUX := \ ls \ getenforce \ setenforce \ chcon \ restorecon \ runcon \ getsebool \ setsebool \ load_policy OUR_TOOLS += $(filter-out $(RECOVERY_BUSYBOX_TOOLS), $(TOOLS_FOR_SELINUX)) endif ifeq ($(TW_USE_TOOLBOX), true) BSD_TOOLS := \ cat \ chown \ cp \ dd \ du \ grep \ kill \ ln \ mv \ printenv \ rm \ rmdir \ sleep \ sync \ OUR_TOOLS += \ chmod \ clear \ cmp \ date \ df \ dmesg \ getevent \ hd \ id \ ifconfig \ iftop \ insmod \ ioctl \ ionice \ log \ lsmod \ lsof \ md5 \ mkdir \ mknod \ mkswap \ mount \ nandread \ netstat \ newfs_msdos \ nohup \ notify \ ps \ readlink \ renice \ rmmod \ route \ schedtop \ sendevent \ smd \ swapoff \ swapon \ top \ touch \ umount \ uptime \ vmstat \ watchprops \ wipe ifneq ($(TWHAVE_SELINUX), true) TOOLS += ls endif LOCAL_SHARED_LIBRARIES += libcrypto endif ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT))) OUR_TOOLS += r endif ALL_TOOLS = $(BSD_TOOLS) $(OUR_TOOLS) setenforce LOCAL_SRC_FILES := \ upstream-netbsd/lib/libc/gen/getbsize.c \ upstream-netbsd/lib/libc/gen/humanize_number.c \ upstream-netbsd/lib/libc/stdlib/strsuftoll.c \ upstream-netbsd/lib/libc/string/swab.c \ upstream-netbsd/lib/libutil/raise_default_signal.c \ dynarray.c \ pwcache.c \ $(patsubst %,%.c,$(OUR_TOOLS)) \ toolbox.c \ ifeq (,$(filter $(LOCAL_SRC_FILES),setenforce.c)) LOCAL_SRC_FILES += setenforce.c endif LOCAL_CFLAGS += $(common_cflags) LOCAL_C_INCLUDES += external/openssl/include LOCAL_SHARED_LIBRARIES += libcutils ifeq ($(TWHAVE_SELINUX), true) LOCAL_SHARED_LIBRARIES += libselinux LOCAL_STATIC_LIBRARIES += \ libtoolbox_cat \ libtoolbox_chown \ libtoolbox_cp \ libtoolbox_dd \ libtoolbox_grep \ libtoolbox_kill \ libtoolbox_ln \ libtoolbox_mv \ libtoolbox_printenv \ libtoolbox_rm \ libtoolbox_rmdir \ libtoolbox_sleep \ libtoolbox_sync endif # libusbhost is only used by lsusb, and that isn't usually included in toolbox. # The linker strips out all the unused library code in the normal case. LOCAL_STATIC_LIBRARIES := \ libusbhost \ LOCAL_WHOLE_STATIC_LIBRARIES := $(patsubst %,libtoolbox_%,$(BSD_TOOLS)) LOCAL_MODULE := toolbox_recovery LOCAL_MODULE_STEM := toolbox LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin LOCAL_ADDITIONAL_DEPENDENCIES += $(LOCAL_PATH)/Android.mk # Including this will define $(intermediates). # include $(BUILD_EXECUTABLE) $(LOCAL_PATH)/toolbox.c: $(intermediates)/tools.h TOOLS_H := $(intermediates)/tools.h $(TOOLS_H): PRIVATE_TOOLS := $(ALL_TOOLS) $(TOOLS_H): PRIVATE_CUSTOM_TOOL = echo "/* file generated automatically */" > $@ ; for t in $(PRIVATE_TOOLS) ; do echo "TOOL($$t)" >> $@ ; done $(TOOLS_H): $(LOCAL_PATH)/Android.mk $(TOOLS_H): $(transform-generated-source) # Make #!/system/bin/toolbox launchers for each tool. # SYMLINKS := $(addprefix $(TARGET_RECOVERY_ROOT_OUT)/sbin/,$(ALL_TOOLS)) $(SYMLINKS): TOOLBOX_BINARY := $(LOCAL_MODULE_STEM) $(SYMLINKS): $(LOCAL_INSTALLED_MODULE) $(LOCAL_PATH)/Android.mk @echo "Symlink: $@ -> $(TOOLBOX_BINARY)" @mkdir -p $(dir $@) @rm -rf $@ $(hide) ln -sf $(TOOLBOX_BINARY) $@ include $(CLEAR_VARS) LOCAL_MODULE := toolbox_symlinks LOCAL_MODULE_TAGS := optional LOCAL_ADDITIONAL_DEPENDENCIES := $(SYMLINKS) include $(BUILD_PHONY_PACKAGE) SYMLINKS := # We need this so that the installed files could be picked up based on the # local module name ALL_MODULES.$(LOCAL_MODULE).INSTALLED := \ $(ALL_MODULES.$(LOCAL_MODULE).INSTALLED) $(SYMLINKS) else # Rule for older trees LOCAL_PATH:= system/core/toolbox/ include $(CLEAR_VARS) TOOLS := \ start \ stop \ getprop \ setprop # If busybox does not have SELinux support, provide these tools with toolbox. # Note that RECOVERY_BUSYBOX_TOOLS will be empty if TW_USE_TOOLBOX == true. ifeq ($(TWHAVE_SELINUX), true) TOOLS_FOR_SELINUX := \ ls \ getenforce \ setenforce \ chcon \ restorecon \ runcon \ getsebool \ setsebool \ load_policy TOOLS += $(filter-out $(RECOVERY_BUSYBOX_TOOLS), $(TOOLS_FOR_SELINUX)) endif ifeq ($(TW_USE_TOOLBOX), true) TOOLS += \ mount \ cat \ ps \ kill \ ln \ insmod \ rmmod \ lsmod \ ifconfig \ setconsole \ rm \ mkdir \ rmdir \ getevent \ sendevent \ date \ wipe \ sync \ umount \ notify \ cmp \ dmesg \ route \ hd \ dd \ df \ watchprops \ log \ sleep \ renice \ printenv \ smd \ chmod \ chown \ newfs_msdos \ netstat \ ioctl \ mv \ schedtop \ top \ iftop \ id \ uptime \ vmstat \ nandread \ ionice \ touch \ lsof \ du \ md5 \ clear \ swapon \ swapoff \ mkswap \ readlink ifneq ($(TWHAVE_SELINUX), true) TOOLS += ls endif endif LOCAL_SRC_FILES := \ toolbox.c \ $(patsubst %,%.c,$(TOOLS)) ifneq ($(wildcard system/core/toolbox/dynarray.c),) LOCAL_SRC_FILES += dynarray.c endif # reboot.c was removed in 4.4 kitkat #TOOLS += reboot #ifeq ($(BOARD_USES_BOOTMENU),true) # LOCAL_SRC_FILES += ../../../external/bootmenu/libreboot/reboot.c #else # LOCAL_SRC_FILES += reboot.c #endif LOCAL_C_INCLUDES := bionic/libc/bionic LOCAL_SHARED_LIBRARIES := \ libcutils \ liblog \ libc ifeq ($(TWHAVE_SELINUX), true) LOCAL_SHARED_LIBRARIES += libselinux endif LOCAL_MODULE := toolbox_recovery LOCAL_MODULE_STEM := toolbox LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin LOCAL_MODULE_TAGS := optional # Including this will define $(intermediates). # include $(BUILD_EXECUTABLE) $(LOCAL_PATH)/toolbox.c: $(intermediates)/tools.h TOOLS_H := $(intermediates)/tools.h $(TOOLS_H): PRIVATE_TOOLS := $(TOOLS) $(TOOLS_H): PRIVATE_CUSTOM_TOOL = echo "/* file generated automatically */" > $@ ; for t in $(PRIVATE_TOOLS) ; do echo "TOOL($$t)" >> $@ ; done $(TOOLS_H): $(LOCAL_PATH)/Android.mk $(TOOLS_H): $(transform-generated-source) # Make #!/system/bin/toolbox launchers for each tool. # SYMLINKS := $(addprefix $(TARGET_RECOVERY_ROOT_OUT)/sbin/,$(TOOLS)) $(SYMLINKS): TOOLBOX_BINARY := $(LOCAL_MODULE_STEM) $(SYMLINKS): $(LOCAL_INSTALLED_MODULE) $(LOCAL_PATH)/Android.mk @echo "Symlink: $@ -> $(TOOLBOX_BINARY)" @mkdir -p $(dir $@) @rm -rf $@ $(hide) ln -sf $(TOOLBOX_BINARY) $@ ifneq (,$(filter $(PLATFORM_SDK_VERSION),16 17 18)) ALL_DEFAULT_INSTALLED_MODULES += $(SYMLINKS) # We need this so that the installed files could be picked up based on the # local module name ALL_MODULES.$(LOCAL_MODULE).INSTALLED := \ $(ALL_MODULES.$(LOCAL_MODULE).INSTALLED) $(SYMLINKS) endif include $(CLEAR_VARS) LOCAL_MODULE := toolbox_symlinks LOCAL_MODULE_TAGS := optional LOCAL_ADDITIONAL_DEPENDENCIES := $(SYMLINKS) include $(BUILD_PHONY_PACKAGE) SYMLINKS := endif