/* --- To sync with upstream: # Update source and regenerate generated files. git remote add toybox https://github.com/landley/toybox.git git fetch toybox && git merge toybox/master && ./regenerate.sh # Make any necessary Android.bp changes and rebuild. mm -j32 # Run all the tests. ./run-tests-on-android.sh # Run a single test. ./run-tests-on-android.sh wc # Upload changes. git commit -a --amend git push aosp HEAD:refs/for/master # Push to gerrit for review. git push aosp HEAD:master # Push directly, avoiding gerrit. --- To add a toy: # Edit the three .config-* files to enable the toy you want for the targets # you want it on, and regenerate the generated files: ./post_update.sh . # Edit the relevant `srcs` below, depending on where the toy should be # available. # If you just want to use the toy via "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 `symlinks` below. */ package { default_applicable_licenses: ["external_toybox_license"], } license { name: "external_toybox_license", visibility: [":__subpackages__"], license_kinds: [ "SPDX-license-identifier-0BSD", "SPDX-license-identifier-CC0-1.0", "SPDX-license-identifier-Unlicense", "legacy_unencumbered", ], license_text: [ "LICENSE", ], } all_srcs = [ "lib/args.c", "lib/commas.c", "lib/dirtree.c", "lib/elf.c", "lib/env.c", "lib/hash.c", "lib/lib.c", "lib/llist.c", "lib/net.c", "lib/portability.c", "lib/tty.c", "lib/utf8.c", "lib/xwrap.c", "main.c", "toys/lsb/gzip.c", "toys/lsb/hostname.c", "toys/lsb/md5sum.c", "toys/lsb/mktemp.c", "toys/lsb/seq.c", "toys/net/microcom.c", "toys/other/dos2unix.c", "toys/other/getopt.c", "toys/other/readlink.c", "toys/other/setsid.c", "toys/other/stat.c", "toys/other/timeout.c", "toys/other/truncate.c", "toys/other/which.c", "toys/other/xxd.c", "toys/other/yes.c", "toys/pending/diff.c", "toys/pending/expr.c", "toys/pending/tr.c", "toys/posix/basename.c", "toys/posix/cat.c", "toys/posix/chmod.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/dd.c", "toys/posix/dirname.c", "toys/posix/du.c", "toys/posix/echo.c", "toys/posix/env.c", "toys/posix/file.c", "toys/posix/find.c", "toys/posix/getconf.c", "toys/posix/grep.c", "toys/posix/head.c", "toys/posix/id.c", "toys/posix/ln.c", "toys/posix/ls.c", "toys/posix/mkdir.c", "toys/posix/nl.c", "toys/posix/od.c", "toys/posix/paste.c", "toys/posix/patch.c", "toys/posix/printf.c", "toys/posix/pwd.c", "toys/posix/rm.c", "toys/posix/rmdir.c", "toys/posix/sed.c", "toys/posix/sleep.c", "toys/posix/sort.c", "toys/posix/tail.c", "toys/posix/tar.c", "toys/posix/tee.c", "toys/posix/test.c", "toys/posix/touch.c", "toys/posix/true.c", "toys/posix/uname.c", "toys/posix/uniq.c", "toys/posix/wc.c", "toys/posix/xargs.c", ] linux_srcs = [ "toys/lsb/mount.c", "toys/lsb/umount.c", "toys/posix/ps.c", "toys/other/flock.c", "toys/other/nsenter.c", "toys/other/taskset.c", ] device_srcs = [ "toys/android/getenforce.c", "toys/android/load_policy.c", "toys/android/log.c", "toys/android/restorecon.c", "toys/android/runcon.c", "toys/android/sendevent.c", "toys/android/setenforce.c", "toys/lsb/dmesg.c", "toys/lsb/killall.c", "toys/lsb/mknod.c", "toys/lsb/pidof.c", "toys/lsb/sync.c", "toys/net/ifconfig.c", "toys/net/netcat.c", "toys/net/netstat.c", "toys/net/ping.c", "toys/net/rfkill.c", "toys/net/tunctl.c", "toys/other/acpi.c", "toys/other/base64.c", "toys/other/blkdiscard.c", "toys/other/blkid.c", "toys/other/blockdev.c", "toys/other/chcon.c", "toys/other/chroot.c", "toys/other/chrt.c", "toys/other/clear.c", "toys/other/devmem.c", "toys/other/fallocate.c", "toys/other/fmt.c", "toys/other/free.c", "toys/other/freeramdisk.c", "toys/other/fsfreeze.c", "toys/other/fsync.c", "toys/other/gpiod.c", "toys/other/help.c", "toys/other/hwclock.c", "toys/other/i2ctools.c", "toys/other/inotifyd.c", "toys/other/insmod.c", "toys/other/ionice.c", "toys/other/losetup.c", "toys/other/lsattr.c", "toys/other/lsmod.c", "toys/other/lsusb.c", "toys/other/makedevs.c", "toys/other/memeater.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/readelf.c", "toys/other/rev.c", "toys/other/rmmod.c", "toys/other/rtcwake.c", "toys/other/setfattr.c", "toys/other/swapoff.c", "toys/other/swapon.c", "toys/other/sysctl.c", "toys/other/tac.c", "toys/other/uclampset.c", "toys/other/uptime.c", "toys/other/usleep.c", "toys/other/uuidgen.c", "toys/other/vconfig.c", "toys/other/vmstat.c", "toys/other/watch.c", "toys/pending/brctl.c", "toys/pending/getfattr.c", "toys/pending/lsof.c", "toys/pending/modprobe.c", "toys/pending/more.c", "toys/pending/stty.c", "toys/pending/traceroute.c", "toys/pending/vi.c", "toys/posix/cal.c", "toys/posix/chgrp.c", "toys/posix/cksum.c", "toys/posix/df.c", "toys/posix/expand.c", "toys/posix/false.c", "toys/posix/iconv.c", "toys/posix/kill.c", "toys/posix/logger.c", "toys/posix/mkfifo.c", "toys/posix/nice.c", "toys/posix/nohup.c", "toys/posix/renice.c", "toys/posix/split.c", "toys/posix/strings.c", "toys/posix/time.c", "toys/posix/tty.c", "toys/posix/ulimit.c", "toys/posix/unlink.c", "toys/posix/uudecode.c", "toys/posix/uuencode.c", ] toybox_symlinks = [ "[", "acpi", "base64", "basename", "blockdev", "brctl", "cal", "cat", "chattr", "chcon", "chgrp", "chmod", "chown", "chroot", "chrt", "cksum", "clear", "comm", "cmp", "cp", "cpio", "cut", "date", "dd", "devmem", "df", "diff", "dirname", "dmesg", "dos2unix", "du", "echo", "egrep", "env", "expand", "expr", "fallocate", "false", "fgrep", "file", "find", "flock", "fmt", "free", "fsync", "getconf", "getenforce", "getfattr", "getopt", "gpiodetect", "gpiofind", "gpioget", "gpioinfo", "gpioset", "grep", "groups", "gunzip", "gzip", "head", "hostname", "hwclock", "i2cdetect", "i2cdump", "i2cget", "i2cset", "i2ctransfer", "iconv", "id", "ifconfig", "inotifyd", "insmod", "install", "ionice", "iorenice", "kill", "killall", "load_policy", "ln", "log", "logger", "logname", "losetup", "ls", "lsattr", "lsmod", "lsof", "lspci", "lsusb", "md5sum", "memeater", "mkdir", "mkfifo", "mknod", "mkswap", "mktemp", "microcom", "modinfo", "more", "mount", "mountpoint", "mv", "nc", "netcat", "netstat", "nice", "nl", "nohup", "nproc", "nsenter", "od", "paste", "patch", "pgrep", "pidof", "pkill", "pmap", "printenv", "printf", "ps", "pwd", "readelf", "readlink", "realpath", "renice", "restorecon", "rm", "rmdir", "rmmod", "rtcwake", "runcon", "sed", "sendevent", "seq", "setenforce", "setfattr", "setsid", "sha1sum", "sha224sum", "sha256sum", "sha384sum", "sha512sum", "sleep", "sort", "split", "stat", "strings", "stty", "swapoff", "swapon", "sync", "sysctl", "tac", "tail", "tar", "taskset", "tee", "test", "time", "timeout", "top", "touch", "tr", "true", "truncate", "tty", "uclampset", "ulimit", "umount", "uname", "uniq", "unix2dos", "unlink", "unshare", "uptime", "usleep", "uudecode", "uuencode", "uuidgen", "vi", "vmstat", "watch", "wc", "which", "whoami", "xargs", "xxd", "yes", "zcat", ] cc_defaults { name: "toybox-defaults", srcs: all_srcs, cflags: [ "-Os", "-Wall", "-Werror", "-Wno-char-subscripts", "-Wno-deprecated-declarations", "-Wno-invalid-source-encoding", "-Wno-missing-field-initializers", "-Wno-pointer-arith", "-Wno-sign-compare", "-Wno-string-plus-int", "-Wno-unused-parameter", "-Wno-unused-variable", "-funsigned-char", "-ffunction-sections", "-fdata-sections", "-fno-asynchronous-unwind-tables", "-DTOYBOX_VENDOR=\"-android\"", ], target: { host_linux: { local_include_dirs: ["android/linux"], }, darwin: { local_include_dirs: ["android/mac"], cflags: [ // macOS' getgroups(3) signature differs. "-Wno-pointer-sign", // diff.c defines MIN and MAX which (only on macOS) we're // also getting from . "-Wno-macro-redefined", ], ldflags: [ "-Wl,-dead_strip", ], }, linux: { srcs: linux_srcs, }, android: { local_include_dirs: ["android/device"], srcs: device_srcs, }, }, } //########################################### // toybox for /system, /vendor, and /recovery //########################################### cc_defaults { name: "toybox-shared-defaults", defaults: ["toybox-defaults"], // This doesn't actually prevent us from dragging in libc++ at runtime // on the device because libnetd_client.so is C++, but it improves host // startup time. stl: "none", target: { android: { shared_libs: [ "libcrypto", "liblog", "libprocessgroup", "libselinux", "libz", ], symlinks: toybox_symlinks, }, host: { static_libs: [ "libcrypto", "libz", ], }, }, } cc_binary { name: "toybox", defaults: ["toybox-shared-defaults"], host_supported: true, recovery_available: true, vendor_ramdisk_available: true, } cc_binary { name: "toybox_vendor", defaults: ["toybox-shared-defaults"], vendor: true, } //########################################### // Static toybox binaries for legacy devices //########################################### cc_binary { name: "toybox-static", defaults: ["toybox-defaults"], static_executable: true, compile_multilib: "both", multilib: { lib32: { suffix: "32", }, lib64: { suffix: "64", }, }, stl: "libc++_static", static_libs: [ "libc", "libm", "libz", "libbase", "libcgrouprc", "libcgrouprc_format", "libcrypto_static", "liblog", "libprocessgroup", "libselinux", ], dist: { targets: [ "sdk", ], }, } //########################################### // Running the toybox tests //########################################### sh_test { name: "toybox-tests", src: "run-tests-on-android.sh", filename: "run-tests-on-android.sh", test_suites: ["general-tests"], host_supported: true, device_supported: false, require_root: true, data: [ "tests/**/*", "scripts/runtest.sh", ], } cc_test { name: "toybox-gtests", compile_multilib: "first", srcs: [ "toybox-gtests.cpp", ], static_libs: [ "libbase", "liblog", ], test_suites: ["device-tests"], require_root: true, data: [ "tests/**/*", "scripts/runtest.sh", ], }