| # |
| # Copyright (C) 2014 The Android Open Source Project |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| |
| ifneq ($(wildcard external/toybox/Android.mk),) |
| |
| ifeq ($(TW_USE_TOOLBOX), true) |
| |
| LOCAL_PATH := external/toybox |
| |
| # |
| # To update: |
| # |
| |
| # git remote add toybox https://github.com/landley/toybox.git |
| # git fetch toybox |
| # git merge toybox/master |
| # mm -j32 |
| # # (Make any necessary Android.mk changes and test the new toybox.) |
| # git push aosp HEAD:master # Push directly, avoiding gerrit. |
| # git push aosp HEAD:refs/for/master # Push to gerrit. |
| # |
| # # Now commit any necessary Android.mk changes like normal: |
| # repo start post-sync . |
| # git commit -a |
| |
| |
| # |
| # To add a toy: |
| # |
| |
| # make menuconfig |
| # # (Select the toy you want to add.) |
| # make clean && make # Regenerate the generated files. |
| # # Edit LOCAL_SRC_FILES below to add the toy. |
| # # If you just want to use it as "toybox x" rather than "x", you can stop now. |
| # # If you want this toy to have a symbolic link in /system/bin, add the toy to ALL_TOOLS. |
| |
| include $(CLEAR_VARS) |
| |
| LOCAL_SRC_FILES := \ |
| lib/args.c \ |
| lib/dirtree.c \ |
| lib/getmountlist.c \ |
| lib/help.c \ |
| lib/interestingtimes.c \ |
| lib/lib.c \ |
| lib/llist.c \ |
| lib/net.c \ |
| lib/portability.c \ |
| lib/xwrap.c \ |
| main.c \ |
| toys/android/getenforce.c \ |
| toys/android/getprop.c \ |
| toys/android/load_policy.c \ |
| toys/android/restorecon.c \ |
| toys/android/runcon.c \ |
| toys/android/setenforce.c \ |
| toys/android/setprop.c \ |
| toys/lsb/hostname.c \ |
| toys/lsb/killall.c \ |
| toys/lsb/md5sum.c \ |
| toys/lsb/mknod.c \ |
| toys/lsb/mktemp.c \ |
| toys/lsb/mount.c \ |
| toys/lsb/pidof.c \ |
| toys/lsb/seq.c \ |
| toys/lsb/sync.c \ |
| toys/lsb/umount.c \ |
| toys/other/acpi.c \ |
| toys/other/base64.c \ |
| toys/other/blkid.c \ |
| toys/other/blockdev.c \ |
| toys/other/bzcat.c \ |
| toys/other/chcon.c \ |
| toys/other/chroot.c \ |
| toys/other/clear.c \ |
| toys/other/dos2unix.c \ |
| toys/other/fallocate.c \ |
| toys/other/free.c \ |
| toys/other/freeramdisk.c \ |
| toys/other/fsfreeze.c \ |
| toys/other/help.c \ |
| toys/other/inotifyd.c \ |
| toys/other/insmod.c \ |
| toys/other/losetup.c \ |
| toys/other/lsattr.c \ |
| toys/other/lsmod.c \ |
| toys/other/lsusb.c \ |
| toys/other/makedevs.c \ |
| toys/other/mkswap.c \ |
| toys/other/modinfo.c \ |
| toys/other/mountpoint.c \ |
| toys/other/nbd_client.c \ |
| toys/other/partprobe.c \ |
| toys/other/pivot_root.c \ |
| toys/other/pmap.c \ |
| toys/other/printenv.c \ |
| toys/other/pwdx.c \ |
| toys/other/readlink.c \ |
| toys/other/realpath.c \ |
| toys/other/rev.c \ |
| toys/other/rmmod.c \ |
| toys/other/setsid.c \ |
| toys/other/stat.c \ |
| toys/other/swapoff.c \ |
| toys/other/swapon.c \ |
| toys/other/sysctl.c \ |
| toys/other/tac.c \ |
| toys/other/taskset.c \ |
| toys/other/timeout.c \ |
| toys/other/truncate.c \ |
| toys/other/usleep.c \ |
| toys/other/vconfig.c \ |
| toys/other/vmstat.c \ |
| toys/other/which.c \ |
| toys/other/yes.c \ |
| toys/pending/dd.c \ |
| toys/pending/expr.c \ |
| toys/pending/more.c \ |
| toys/pending/route.c \ |
| toys/pending/tar.c \ |
| toys/pending/tr.c \ |
| toys/pending/traceroute.c \ |
| toys/posix/basename.c \ |
| toys/posix/cal.c \ |
| toys/posix/cat.c \ |
| toys/posix/chgrp.c \ |
| toys/posix/chmod.c \ |
| toys/posix/cksum.c \ |
| toys/posix/cmp.c \ |
| toys/posix/comm.c \ |
| toys/posix/cp.c \ |
| toys/posix/cpio.c \ |
| toys/posix/cut.c \ |
| toys/posix/date.c \ |
| toys/posix/df.c \ |
| toys/posix/dirname.c \ |
| toys/posix/du.c \ |
| toys/posix/echo.c \ |
| toys/posix/env.c \ |
| toys/posix/expand.c \ |
| toys/posix/false.c \ |
| toys/posix/find.c \ |
| toys/posix/grep.c \ |
| toys/posix/head.c \ |
| toys/posix/id.c \ |
| toys/posix/kill.c \ |
| toys/posix/ln.c \ |
| toys/posix/ls.c \ |
| toys/posix/mkdir.c \ |
| toys/posix/mkfifo.c \ |
| toys/posix/nice.c \ |
| toys/posix/nl.c \ |
| toys/posix/nohup.c \ |
| toys/posix/od.c \ |
| toys/posix/paste.c \ |
| toys/posix/patch.c \ |
| toys/posix/printf.c \ |
| toys/posix/pwd.c \ |
| toys/posix/renice.c \ |
| toys/posix/rm.c \ |
| toys/posix/rmdir.c \ |
| toys/posix/sed.c \ |
| toys/posix/sleep.c \ |
| toys/posix/sort.c \ |
| toys/posix/split.c \ |
| toys/posix/strings.c \ |
| toys/posix/tail.c \ |
| toys/posix/tee.c \ |
| toys/posix/time.c \ |
| toys/posix/touch.c \ |
| toys/posix/true.c \ |
| toys/posix/tty.c \ |
| toys/posix/uname.c \ |
| toys/posix/uniq.c \ |
| toys/posix/wc.c \ |
| toys/posix/xargs.c |
| |
| ifeq ($(shell test $(PLATFORM_SDK_VERSION) -eq 26; echo $$?),0) |
| # Android 8.0 had some tools in different paths |
| LOCAL_SRC_FILES += \ |
| toys/pending/dmesg.c |
| else |
| LOCAL_SRC_FILES += \ |
| toys/lsb/dmesg.c |
| endif |
| |
| ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 23; echo $$?),0) |
| # there are some conflicts here with AOSP-7.[01] and CM-14.[01] |
| # the following items have been removed for compatibility |
| # ifconfig, netcat, netstat, rfkill, switch_root |
| LOCAL_STATIC_LIBRARIES := libcrypto_static |
| |
| LOCAL_C_INCLUDES += \ |
| external/boringssl/include \ |
| bionic/libc/dns/include |
| |
| LOCAL_SRC_FILES += \ |
| lib/linestack.c \ |
| lib/password.c \ |
| toys/other/flock.c \ |
| toys/other/hwclock.c \ |
| toys/other/ionice.c \ |
| toys/other/lspci.c \ |
| toys/other/readahead.c \ |
| toys/other/reset.c \ |
| toys/other/uptime.c \ |
| toys/other/xxd.c \ |
| toys/pending/arp.c \ |
| toys/pending/diff.c \ |
| toys/pending/lsof.c \ |
| toys/pending/telnet.c \ |
| toys/pending/test.c \ |
| toys/pending/watch.c \ |
| toys/posix/ps.c \ |
| toys/posix/ulimit.c |
| ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 27; echo $$?),0) |
| LOCAL_SRC_FILES += \ |
| toys/pending/xzcat.c |
| endif |
| |
| ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 25; echo $$?),0) |
| # Android 8.0/8.1 had some tools in different paths |
| LOCAL_SRC_FILES += \ |
| toys/net/ftpget.c |
| else |
| LOCAL_SRC_FILES += \ |
| toys/pending/ftpget.c |
| endif |
| |
| # Account for master branch changes pulld into CM14.1 |
| ifneq ($(CM_BUILD),) |
| LOCAL_SRC_FILES += \ |
| toys/android/log.c \ |
| toys/android/sendevent.c \ |
| toys/android/start.c \ |
| toys/net/ifconfig.c \ |
| toys/net/netcat.c \ |
| toys/net/netstat.c \ |
| toys/net/rfkill.c \ |
| toys/net/tunctl.c \ |
| toys/other/setfattr.c \ |
| toys/pending/chrt.c \ |
| toys/pending/fdisk.c \ |
| toys/pending/getfattr.c \ |
| toys/pending/host.c \ |
| toys/pending/resize.c \ |
| toys/posix/file.c |
| else |
| LOCAL_SRC_FILES += \ |
| toys/other/switch_root.c |
| ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 25; echo $$?),0) |
| # Android 8.0 had some tools in different paths |
| LOCAL_SRC_FILES += \ |
| toys/android/log.c \ |
| toys/android/sendevent.c \ |
| toys/android/start.c \ |
| toys/net/ifconfig.c \ |
| toys/net/microcom.c \ |
| toys/net/netcat.c \ |
| toys/net/netstat.c \ |
| toys/net/rfkill.c \ |
| toys/net/tunctl.c \ |
| toys/pending/getfattr.c \ |
| toys/pending/modprobe.c \ |
| toys/posix/file.c \ |
| toys/posix/uudecode.c \ |
| toys/posix/uuencode.c |
| ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 26; echo $$?),0) |
| # Android 8.1 had some tools in different paths |
| LOCAL_SRC_FILES += \ |
| toys/other/chrt.c \ |
| toys/pending/gzip.c |
| else |
| LOCAL_SRC_FILES += \ |
| toys/pending/chrt.c |
| endif |
| ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 27; echo $$?),0) |
| # Android 9.0 |
| LOCAL_SRC_FILES += \ |
| toys/other/setfattr.c \ |
| toys/pending/fmt.c \ |
| toys/pending/stty.c |
| else |
| LOCAL_SRC_FILES += \ |
| toys/pending/setfattr.c |
| endif |
| LOCAL_SHARED_LIBRARIES += liblog |
| else |
| LOCAL_SRC_FILES += \ |
| toys/other/ifconfig.c \ |
| toys/other/netcat.c \ |
| toys/other/rfkill.c \ |
| toys/pending/netstat.c |
| endif |
| endif |
| else |
| LOCAL_SRC_FILES += \ |
| toys/other/ifconfig.c \ |
| toys/other/netcat.c \ |
| toys/other/rfkill.c \ |
| toys/other/switch_root.c \ |
| toys/pending/hwclock.c \ |
| toys/pending/netstat.c \ |
| toys/pending/pgrep.c \ |
| toys/pending/top.c |
| endif |
| |
| LOCAL_CFLAGS += \ |
| -std=c99 \ |
| -std=gnu11 \ |
| -Os \ |
| -Wno-char-subscripts \ |
| -Wno-sign-compare \ |
| -Wno-string-plus-int \ |
| -Wno-uninitialized \ |
| -Wno-unused-parameter \ |
| -funsigned-char \ |
| -ffunction-sections -fdata-sections \ |
| -fno-asynchronous-unwind-tables \ |
| |
| ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 24; echo $$?),0) |
| toybox_version := $(shell git -C $(LOCAL_PATH) rev-parse --short=12 HEAD 2>/dev/null)-android |
| LOCAL_CFLAGS += -DTOYBOX_VERSION='"$(toybox_version)"' |
| else |
| toybox_version := $(shell sed 's/#define.*TOYBOX_VERSION.*"\(.*\)"/\1/p;d' $(LOCAL_PATH)/main.c) |
| LOCAL_CFLAGS += -DTOYBOX_VERSION=\"$(toybox_version)\" |
| endif |
| |
| LOCAL_CLANG := true |
| |
| LOCAL_SHARED_LIBRARIES += libcutils libselinux |
| |
| ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 26; echo $$?),0) |
| LOCAL_CFLAGS += \ |
| -Wno-gnu-variable-sized-type-not-at-end \ |
| -Wno-missing-field-initializers |
| |
| LOCAL_SHARED_LIBRARIES += libz |
| endif |
| |
| LOCAL_MODULE := toybox_recovery |
| LOCAL_MODULE_STEM := toybox |
| LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin |
| LOCAL_MODULE_TAGS := optional |
| |
| # dupes: dd df du ls mount renice |
| # useless?: freeramdisk fsfreeze install makedevs mkfifo nbd-client |
| # partprobe pivot_root pwdx rev rfkill switch_root tty vconfig |
| # prefer BSD netcat instead?: nc netcat |
| # prefer efs2progs instead?: blkid chattr lsattr |
| |
| ALL_TOOLS := \ |
| acpi \ |
| basename \ |
| blkid \ |
| blockdev \ |
| bzcat \ |
| cal \ |
| cat \ |
| chcon \ |
| chgrp \ |
| chmod \ |
| chown \ |
| chroot \ |
| cksum \ |
| clear \ |
| comm \ |
| cmp \ |
| cp \ |
| cpio \ |
| cut \ |
| date \ |
| dirname \ |
| dmesg \ |
| dos2unix \ |
| echo \ |
| env \ |
| expand \ |
| expr \ |
| fallocate \ |
| false \ |
| find \ |
| free \ |
| getenforce \ |
| groups \ |
| head \ |
| hostname \ |
| hwclock \ |
| id \ |
| ifconfig \ |
| inotifyd \ |
| insmod \ |
| kill \ |
| load_policy \ |
| ln \ |
| logname \ |
| losetup \ |
| lsmod \ |
| lsusb \ |
| md5sum \ |
| mkdir \ |
| mknod \ |
| mkswap \ |
| mktemp \ |
| modinfo \ |
| more \ |
| mountpoint \ |
| mv \ |
| netstat \ |
| nice \ |
| nl \ |
| nohup \ |
| od \ |
| paste \ |
| patch \ |
| pgrep \ |
| pidof \ |
| pkill \ |
| pmap \ |
| printenv \ |
| printf \ |
| pwd \ |
| readlink \ |
| realpath \ |
| restorecon \ |
| rm \ |
| rmdir \ |
| rmmod \ |
| route \ |
| runcon \ |
| sed \ |
| seq \ |
| setenforce \ |
| setprop \ |
| setsid \ |
| sha1sum \ |
| sleep \ |
| sort \ |
| split \ |
| stat \ |
| strings \ |
| swapoff \ |
| swapon \ |
| sync \ |
| sysctl \ |
| tac \ |
| tail \ |
| tar \ |
| taskset \ |
| tee \ |
| time \ |
| timeout \ |
| touch \ |
| tr \ |
| true \ |
| truncate \ |
| umount \ |
| uname \ |
| uniq \ |
| unix2dos \ |
| usleep \ |
| vmstat \ |
| wc \ |
| which \ |
| whoami \ |
| xargs \ |
| yes |
| |
| ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 23; echo $$?),0) |
| ALL_TOOLS += \ |
| arp \ |
| base64 \ |
| chattr \ |
| df \ |
| diff \ |
| flock \ |
| freeramdisk \ |
| fsfreeze \ |
| fstype \ |
| ftpget \ |
| ftpput \ |
| help \ |
| install \ |
| ionice \ |
| iorenice \ |
| iotop \ |
| killall \ |
| ls \ |
| lsattr \ |
| lsof \ |
| lspci \ |
| makedevs \ |
| mkfifo \ |
| mount \ |
| nbd-client \ |
| nc \ |
| netcat \ |
| nproc \ |
| partprobe \ |
| pivot_root \ |
| ps \ |
| pwdx \ |
| readahead \ |
| renice \ |
| reset \ |
| rev \ |
| rfkill \ |
| sha224sum \ |
| sha256sum \ |
| sha384sum \ |
| sha512sum \ |
| telnet \ |
| test \ |
| top \ |
| traceroute \ |
| traceroute6 \ |
| tty \ |
| tunctl \ |
| ulimit \ |
| uptime \ |
| vconfig \ |
| watch \ |
| xxd |
| ifeq ($(shell test $(PLATFORM_SDK_VERSION) -le 27; echo $$?),0) |
| ALL_TOOLS += \ |
| getprop \ |
| xzcat |
| endif |
| ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 24; echo $$?),0) |
| ALL_TOOLS += \ |
| du \ |
| gzip \ |
| gunzip \ |
| zcat |
| ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 25; echo $$?),0) |
| ALL_TOOLS += \ |
| fmt \ |
| start \ |
| stop \ |
| stty |
| endif |
| ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 28; echo $$?),0) |
| ALL_TOOLS += \ |
| dd |
| endif |
| endif |
| # Account for master branch changes pulld into CM14.1 |
| ifneq ($(CM_BUILD),) |
| ALL_TOOLS += \ |
| chrt \ |
| fdisk \ |
| file \ |
| getfattr \ |
| host \ |
| log \ |
| resize \ |
| setfattr |
| endif |
| endif |
| |
| # Install the symlinks. |
| # LOCAL_POST_INSTALL_CMD := $(hide) $(foreach t,$(ALL_TOOLS),ln -sf toybox $(TARGET_RECOVERY_ROOT_OUT)/sbin/$(t);) |
| LOCAL_POST_INSTALL_CMD := $(foreach t,$(ALL_TOOLS),ln -sf toybox $(TARGET_RECOVERY_ROOT_OUT)/sbin/$(t);) |
| |
| |
| include $(BUILD_EXECUTABLE) |
| |
| # Make /sbin/toolbox launchers for each tool |
| SYMLINKS := $(addprefix $(TARGET_RECOVERY_ROOT_OUT)/sbin/,$(ALL_TOOLS)) |
| $(SYMLINKS): TOYBOX_BINARY := $(LOCAL_MODULE_STEM) |
| $(SYMLINKS): $(LOCAL_INSTALLED_MODULE) $(LOCAL_PATH)/Android.mk |
| @echo "Symlink: $@ -> $(TOYBOX_BINARY)" |
| @mkdir -p $(dir $@) |
| @rm -rf $@ |
| $(hide) ln -sf $(TOYBOX_BINARY) $@ |
| |
| include $(CLEAR_VARS) |
| LOCAL_MODULE := toybox_symlinks |
| LOCAL_MODULE_TAGS := optional |
| LOCAL_ADDITIONAL_DEPENDENCIES := $(SYMLINKS) |
| include $(BUILD_PHONY_PACKAGE) |
| |
| endif |
| |
| endif |