LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) TOOLS := \ ls \ mount \ cat \ ps \ kill \ ln \ insmod \ rmmod \ lsmod \ ifconfig \ setconsole \ rm \ mkdir \ rmdir \ reboot \ getevent \ sendevent \ date \ wipe \ sync \ umount \ start \ stop \ notify \ cmp \ dmesg \ route \ hd \ dd \ df \ getprop \ setprop \ watchprops \ log \ sleep \ renice \ printenv \ smd \ chmod \ chown \ newfs_msdos \ netstat \ ioctl \ mv \ schedtop \ top \ iftop \ id \ uptime \ vmstat \ nandread \ ionice \ touch \ lsof \ md5 ifeq ($(HAVE_SELINUX),true) TOOLS += \ getenforce \ setenforce \ chcon \ restorecon \ runcon \ getsebool \ setsebool \ load_policy endif ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT))) TOOLS += r endif LOCAL_SRC_FILES:= \ dynarray.c \ toolbox.c \ $(patsubst %,%.c,$(TOOLS)) LOCAL_SHARED_LIBRARIES := libcutils libc libusbhost LOCAL_C_INCLUDES := bionic/libc/bionic ifeq ($(HAVE_SELINUX),true) LOCAL_CFLAGS += -DHAVE_SELINUX LOCAL_SHARED_LIBRARIES += libselinux LOCAL_C_INCLUDES += external/libselinux/include endif LOCAL_MODULE:= toolbox # 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_OUT)/bin/,$(TOOLS)) $(SYMLINKS): TOOLBOX_BINARY := $(LOCAL_MODULE) $(SYMLINKS): $(LOCAL_INSTALLED_MODULE) $(LOCAL_PATH)/Android.mk @echo "Symlink: $@ -> $(TOOLBOX_BINARY)" @mkdir -p $(dir $@) @rm -rf $@ $(hide) ln -sf $(TOOLBOX_BINARY) $@ 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)