diff options
Diffstat (limited to 'toolbox/Android.mk')
-rw-r--r-- | toolbox/Android.mk | 300 |
1 files changed, 300 insertions, 0 deletions
diff --git a/toolbox/Android.mk b/toolbox/Android.mk new file mode 100644 index 000000000..4c3e433c2 --- /dev/null +++ b/toolbox/Android.mk @@ -0,0 +1,300 @@ +TWRP_TOOLBOX_PATH := $(call my-dir) +LOCAL_PATH := system/core/toolbox +include $(CLEAR_VARS) + +OUR_TOOLS := + +ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 24; echo $$?),0) + OUR_TOOLS := \ + start \ + stop +endif + +ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 23; echo $$?),0) + OUR_TOOLS += \ + getprop \ + setprop +endif + +# 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 + + ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 23; echo $$?),0) + TOOLS_FOR_SELINUX += \ + load_policy \ + getenforce \ + chcon \ + restorecon \ + runcon \ + getsebool \ + setsebool + endif + + OUR_TOOLS += $(filter-out $(RECOVERY_BUSYBOX_TOOLS), $(TOOLS_FOR_SELINUX)) + + # toolbox setenforce is used during init, so it needs to be included here + # symlink is omitted at the very end if busybox already provides this + ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 23; echo $$?),0) + OUR_TOOLS += setenforce + endif +endif + +ifeq ($(TW_USE_TOOLBOX), true) + ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 22; echo $$?),0) + # These are the only toolbox tools in M. The rest are now in toybox. + BSD_TOOLS := \ + dd \ + du \ + + OUR_TOOLS := \ + df \ + iftop \ + ioctl \ + ionice \ + log \ + ls \ + lsof \ + mount \ + nandread \ + newfs_msdos \ + ps \ + prlimit \ + renice \ + sendevent \ + start \ + stop \ + top \ + uptime \ + watchprops \ + + else + ifneq (,$(filter $(PLATFORM_SDK_VERSION), 21 22)) + OUR_TOOLS += \ + mknod \ + nohup + BSD_TOOLS := \ + cat \ + chown \ + cp \ + dd \ + du \ + grep \ + kill \ + ln \ + mv \ + printenv \ + rm \ + rmdir \ + sleep \ + sync + else + OUR_TOOLS += \ + cat \ + chown \ + dd \ + du \ + kill \ + ln \ + mv \ + printenv \ + rm \ + rmdir \ + setconsole \ + sleep \ + sync + endif + + OUR_TOOLS += \ + chmod \ + clear \ + cmp \ + date \ + df \ + dmesg \ + getevent \ + hd \ + id \ + ifconfig \ + iftop \ + insmod \ + ioctl \ + ionice \ + log \ + lsmod \ + lsof \ + md5 \ + mkdir \ + mkswap \ + mount \ + nandread \ + netstat \ + newfs_msdos \ + notify \ + ps \ + readlink \ + renice \ + rmmod \ + route \ + schedtop \ + sendevent \ + smd \ + swapoff \ + swapon \ + top \ + touch \ + umount \ + uptime \ + vmstat \ + watchprops \ + wipe + ifneq ($(TWHAVE_SELINUX), true) + OUR_TOOLS += ls + endif + endif +endif + +ifneq (,$(filter $(PLATFORM_SDK_VERSION), 21 22)) + ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT))) + OUR_TOOLS += r + endif +endif + +LOCAL_SRC_FILES := \ + toolbox.c \ + $(patsubst %,%.c,$(OUR_TOOLS)) + +ifneq ($(wildcard system/core/toolbox/dynarray.c),) + LOCAL_SRC_FILES += dynarray.c +endif + +ifneq (,$(filter $(PLATFORM_SDK_VERSION), 21 22)) + LOCAL_SRC_FILES += \ + pwcache.c \ + 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 +endif + +ifneq (,$(filter $(PLATFORM_SDK_VERSION), 21 22 23)) + LOCAL_CFLAGS += \ + -std=gnu99 \ + -Werror -Wno-unused-parameter \ + -I$(LOCAL_PATH)/upstream-netbsd/include \ + -include bsd-compatibility.h +endif + +ifneq (,$(filter $(PLATFORM_SDK_VERSION), 21 22)) + LOCAL_C_INCLUDES += external/openssl/include +else + LOCAL_C_INCLUDES += bionic/libc/bionic +endif + +LOCAL_SHARED_LIBRARIES += libcutils + +ifneq (,$(filter $(PLATFORM_SDK_VERSION), 21 22)) + ifeq ($(TW_USE_TOOLBOX), true) + LOCAL_SHARED_LIBRARIES += libcrypto + endif +else + LOCAL_SHARED_LIBRARIES += \ + libc \ + liblog +endif + +ifeq ($(TWHAVE_SELINUX), true) + LOCAL_SHARED_LIBRARIES += libselinux +endif + +ifneq (,$(filter $(PLATFORM_SDK_VERSION), 21 22 23)) + # 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)) +endif + +ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 22; echo $$?),0) + # Rule to make getprop and setprop in M trees where toybox normally + # provides these tools. Toybox does not allow for easy dynamic + # configuration, so we would have to include the entire toybox binary + # which takes up more space than is necessary so long as we are still + # including busybox. + LOCAL_SRC_FILES += \ + ../../../$(TWRP_TOOLBOX_PATH)/getprop.c \ + ../../../$(TWRP_TOOLBOX_PATH)/setprop.c + OUR_TOOLS += getprop setprop + ifneq ($(TW_USE_TOOLBOX), true) + LOCAL_SRC_FILES += ../../../$(TWRP_TOOLBOX_PATH)/ls.c + endif +endif +ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 23; echo $$?),0) + # Rule for making start and stop in N trees + LOCAL_SRC_FILES += \ + ../../../$(TWRP_TOOLBOX_PATH)/start.c \ + ../../../$(TWRP_TOOLBOX_PATH)/stop.c + OUR_TOOLS += start stop +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) below +include $(BUILD_EXECUTABLE) + +$(LOCAL_PATH)/toolbox.c: $(intermediates)/tools.h + +ifneq (,$(filter $(PLATFORM_SDK_VERSION), 21 22 23)) + ALL_TOOLS := $(BSD_TOOLS) $(OUR_TOOLS) +else + ALL_TOOLS := $(OUR_TOOLS) +endif + +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) + +ifeq ($(TWHAVE_SELINUX), true) + # toolbox setenforce is used during init in non-symlink form, so it was + # required to be included as part of the suite above. if busybox already + # provides setenforce, we can omit the toolbox symlink + TEMP_TOOLS := $(filter-out $(RECOVERY_BUSYBOX_TOOLS), $(ALL_TOOLS)) + ALL_TOOLS := $(TEMP_TOOLS) +endif + +# Make /sbin/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) + +ifneq (,$(filter $(PLATFORM_SDK_VERSION),16 17 18)) + # Only needed if the build system lacks support for LOCAL_ADDITIONAL_DEPENDENCIES + ALL_DEFAULT_INSTALLED_MODULES += $(SYMLINKS) + ALL_MODULES.$(LOCAL_MODULE).INSTALLED := \ + $(ALL_MODULES.$(LOCAL_MODULE).INSTALLED) $(SYMLINKS) +endif + +SYMLINKS := +ALL_TOOLS := +BSD_TOOLS := +OUR_TOOLS := +TEMP_TOOLS := +TOOLS_FOR_SELINUX := |