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 \ du \ md5 \ clear \ getenforce \ setenforce \ chcon \ restorecon \ runcon \ getsebool \ setsebool \ load_policy ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT))) TOOLS += r endif ALL_TOOLS = $(TOOLS) ALL_TOOLS += \ cp \ grep LOCAL_SRC_FILES := \ dynarray.c \ toolbox.c \ $(patsubst %,%.c,$(TOOLS)) \ cp/cp.c cp/utils.c \ grep/grep.c grep/fastgrep.c grep/file.c grep/queue.c grep/util.c LOCAL_C_INCLUDES := bionic/libc/bionic LOCAL_SHARED_LIBRARIES := \ libcutils \ liblog \ libc \ libusbhost \ libselinux 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 := $(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_OUT)/bin/,$(ALL_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)