You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

572 lines
12 KiB

/*
--- 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:
./regenerate.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.
*/
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/env.c",
"lib/help.c",
"lib/lib.c",
"lib/linestack.c",
"lib/llist.c",
"lib/net.c",
"lib/portability.c",
"lib/tty.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/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/dd.c",
"toys/pending/diff.c",
"toys/pending/expr.c",
"toys/pending/getopt.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/dirname.c",
"toys/posix/du.c",
"toys/posix/echo.c",
"toys/posix/env.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/posix/ps.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/mount.c",
"toys/lsb/pidof.c",
"toys/lsb/sync.c",
"toys/lsb/umount.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/flock.c",
"toys/other/fmt.c",
"toys/other/free.c",
"toys/other/freeramdisk.c",
"toys/other/fsfreeze.c",
"toys/other/fsync.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/lspci.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/nsenter.c",
"toys/other/partprobe.c",
"toys/other/pivot_root.c",
"toys/other/pmap.c",
"toys/other/printenv.c",
"toys/other/pwdx.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/uptime.c",
"toys/other/usleep.c",
"toys/other/uuidgen.c",
"toys/other/vconfig.c",
"toys/other/vmstat.c",
"toys/other/watch.c",
"toys/pending/getfattr.c",
"toys/pending/lsof.c",
"toys/pending/modprobe.c",
"toys/pending/more.c",
"toys/pending/readelf.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/file.c",
"toys/posix/iconv.c",
"toys/posix/kill.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",
"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",
"grep",
"groups",
"gunzip",
"gzip",
"head",
"hostname",
"hwclock",
"i2cdetect",
"i2cdump",
"i2cget",
"i2cset",
"iconv",
"id",
"ifconfig",
"inotifyd",
"insmod",
"install",
"ionice",
"iorenice",
"kill",
"killall",
"load_policy",
"ln",
"log",
"logname",
"losetup",
"ls",
"lsattr",
"lsmod",
"lsof",
"lspci",
"lsusb",
"md5sum",
"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",
"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",
"ulimit",
"umount",
"uname",
"uniq",
"unix2dos",
"unlink",
"unshare",
"uptime",
"usleep",
"uudecode",
"uuencode",
"uuidgen",
"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-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: {
linux_glibc: {
local_include_dirs: ["android/linux"],
},
linux_bionic: {
local_include_dirs: ["android/linux"],
},
darwin: {
local_include_dirs: ["android/mac"],
cflags: [
// You can't have toybox cp(1) on macOS before 10.13.
"-mmacosx-version-min=10.13",
"-UMACOSX_DEPLOYMENT_TARGET",
"-DMACOSX_DEPLOYMENT_TARGET=10.13",
// macOS' getgroups(3) signature differs.
"-Wno-pointer-sign",
// diff.c defines MIN and MAX which (only on macOS) we're
// also getting from <sys/param.h>.
"-Wno-macro-redefined",
],
},
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",
shared_libs: [
"libcrypto",
"libz",
],
target: {
android: {
shared_libs: [
"liblog",
"libprocessgroup",
"libselinux",
],
symlinks: toybox_symlinks,
},
},
}
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",
],
}