Update scripts and remove toybox support

This commit is contained in:
topjohnwu 2021-09-23 02:11:12 -07:00
parent 87ca6f75aa
commit b229c73135
43 changed files with 31 additions and 511 deletions

11
.gitignore vendored
View File

@ -1,6 +1,5 @@
busybox
toybox
libs
obj
jni/selinux
jni/pcre
/busybox
/libs
/obj
/jni/selinux
/jni/pcre

View File

@ -1,10 +1,10 @@
# ndk-box-kitchen
This repo is the kitchen used to create headers and Makefiles for building \*box with the command [`ndk-build`](https://developer.android.com/ndk/guides/ndk-build.html) in NDK. All scripts in this repo expect to run on Linux, however the generated code and Makefiles can be used on all NDK supported platforms.
This repo is the kitchen used to create headers and Makefiles for building BusyBox with the command [`ndk-build`](https://developer.android.com/ndk/guides/ndk-build.html) in NDK. Scripts in this repo expect to run on Linux, however the generated code and Makefiles can be used on all NDK supported platforms.
## Download Sources
To build BusyBox, clone the following repos:
Clone the following repos:
```
git clone https://git.busybox.net/busybox/
@ -14,24 +14,12 @@ git clone https://android.googlesource.com/platform/external/pcre jni/pcre
Currently, the script supports BusyBox version `1.33.1`, please checkout to the correct tags before running scripts
To build ToyBox, clone the following repo:
```
git clone https://github.com/landley/toybox.git
```
## Busybox
`./busybox.sh patch` to apply patches
`./run.sh patch` to apply patches
`./busybox.sh generate` to generate required Makefiles and headers
## Toybox
`./toybox.sh patch` to apply patches
`./toybox.sh generate` to generate required Makefiles and headers
`./run.sh generate` to generate required Makefiles and headers
## Credits
All files in `busybox_patches` are directly copied from [osm0sis/android-busybox-ndk](https://github.com/osm0sis/android-busybox-ndk). Theses patches are required for a fully functioning BusyBox building with NDK + Bionic libc.
Most files in `patches` are copied/modified from [osm0sis/android-busybox-ndk](https://github.com/osm0sis/android-busybox-ndk). Theses patches are required for a fully functioning BusyBox building with NDK + Bionic libc.

View File

@ -5,9 +5,6 @@ include $(CLEAR_VARS)
LOCAL_MODULE := busybox
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
LOCAL_STATIC_LIBRARIES := libselinux
include $(LOCAL_PATH)/Android_src.mk
LOCAL_DISABLE_FORMAT_STRING_CHECKS := true
LOCAL_LDFLAGS := -static
LOCAL_CFLAGS := \
@ -18,4 +15,4 @@ ifeq ($(OS),Windows_NT)
LOCAL_SHORT_COMMANDS := true
endif
include $(BUILD_EXECUTABLE)
LOCAL_SRC_FILES := \

View File

@ -2,5 +2,3 @@ CWD_PATH := $(call my-dir)
include $(CWD_PATH)/../busybox/Android.mk
include $(CWD_PATH)/external.mk
# include $(CWD_PATH)/../toybox/Android.mk

View File

@ -1,4 +1,4 @@
APP_ABI := armeabi-v7a arm64-v8a x86 x86_64
APP_PLATFORM := android-21
APP_PLATFORM := android-22
APP_CFLAGS := -Wall -Oz -fomit-frame-pointer -flto
APP_LDFLAGS := -flto

View File

@ -1,5 +1,7 @@
#!/usr/bin/env bash
BUSYBOX_TAG='1_33_1'
progress() {
echo -e "\n\033[44m${1}\033[0m\n"
}
@ -38,16 +40,14 @@ generate_files() {
scripts/generate_BUFSIZ.sh include/common_bufsiz.h
srctree=$CWD HOSTCC=gcc scripts/embedded_scripts include/embedded_scripts.h embed applets_sh
progress "Generating Android_src.mk based on configs"
# Process Kbuild files
echo "LOCAL_SRC_FILES := \\" > Android_src.mk
parse_kbuild | sort -u >> Android_src.mk
progress "Generating Android.mk based on configs"
# Build Android.mk
echo 'LOCAL_PATH := $(call my-dir)' > Android.mk
cat Makefile | head -n 3 >> Android.mk
cat ../busybox.mk >> Android.mk
parse_kbuild | sort -u >> Android.mk
echo -e '\ninclude $(BUILD_EXECUTABLE)' >> Android.mk
if $COMMIT; then
progress "Commit headers and Makefiles"
@ -58,7 +58,7 @@ generate_files() {
}
apply_patches() {
for p in ../busybox_patches/*; do
for p in ../patches/*; do
if ! git am -3 < $p; then
# Force use fuzzy patch
patch -p1 < $p
@ -68,6 +68,12 @@ apply_patches() {
done
}
create_patches() {
git format-patch ${BUSYBOX_TAG}..HEAD -o ../patches.new
rm -rf ../patches
mv ../patches.new ../patches
}
if [ ! -d busybox ]; then
progress "Please clone busybox, checkout to desired tag, apply patches, then run this script"
exit 1
@ -84,12 +90,17 @@ case "$1" in
patch )
apply_patches
;;
create )
create_patches
;;
* )
echo "Usage:"
echo "$0 patch"
echo " Apply patches for busybox"
echo " Apply patches to busybox"
echo "$0 create"
echo " Create patch files from busybox"
echo "$0 generate [--commit]"
echo " Generate Makefiles for compilation"
echo " Generate Makefiles"
;;
esac

View File

@ -1,362 +0,0 @@
#
# Automatically generated make config: don't edit
# ToyBox version: KCONFIG_VERSION
# Sun Aug 12 11:03:35 2018
#
# CONFIG_TOYBOX_CONTAINER is not set
CONFIG_TOYBOX_FIFREEZE=y
CONFIG_TOYBOX_ICONV=y
CONFIG_TOYBOX_FALLOCATE=y
# CONFIG_TOYBOX_UTMPX is not set
# CONFIG_TOYBOX_SHADOW is not set
# CONFIG_TOYBOX_ON_ANDROID is not set
# CONFIG_TOYBOX_ANDROID_SCHEDPOLICY is not set
CONFIG_TOYBOX_FORK=y
# CONFIG_TOYBOX_PRLIMIT is not set
#
# Posix commands
#
CONFIG_BASENAME=y
CONFIG_CAL=y
CONFIG_CAT=y
CONFIG_CAT_V=y
# CONFIG_CATV is not set
CONFIG_CHGRP=y
CONFIG_CHOWN=y
CONFIG_CHMOD=y
CONFIG_CKSUM=y
CONFIG_CRC32=y
CONFIG_CMP=y
CONFIG_COMM=y
CONFIG_CP=y
CONFIG_CP_PRESERVE=y
CONFIG_MV=y
CONFIG_INSTALL=y
CONFIG_CPIO=y
CONFIG_CUT=y
CONFIG_DATE=y
CONFIG_DF=y
CONFIG_DIRNAME=y
CONFIG_DU=y
CONFIG_ECHO=y
CONFIG_ENV=y
CONFIG_EXPAND=y
CONFIG_FALSE=y
CONFIG_FILE=y
CONFIG_FIND=y
# CONFIG_GETCONF is not set
CONFIG_GREP=y
CONFIG_EGREP=y
CONFIG_FGREP=y
CONFIG_HEAD=y
# CONFIG_ICONV is not set
CONFIG_ID=y
# CONFIG_ID_Z is not set
CONFIG_GROUPS=y
CONFIG_LOGNAME=y
CONFIG_WHOAMI=y
CONFIG_KILL=y
CONFIG_KILLALL5=y
CONFIG_LINK=y
CONFIG_LN=y
# CONFIG_LOGGER is not set
CONFIG_LS=y
CONFIG_LS_COLOR=y
CONFIG_MKDIR=y
# CONFIG_MKDIR_Z is not set
CONFIG_MKFIFO=y
# CONFIG_MKFIFO_Z is not set
CONFIG_NICE=y
CONFIG_NL=y
CONFIG_NOHUP=y
CONFIG_OD=y
CONFIG_PASTE=y
CONFIG_PATCH=y
CONFIG_PRINTF=y
CONFIG_PS=y
CONFIG_TOP=y
CONFIG_IOTOP=y
CONFIG_PGREP=y
CONFIG_PKILL=y
CONFIG_PWD=y
CONFIG_RENICE=y
CONFIG_RM=y
CONFIG_RMDIR=y
CONFIG_SED=y
CONFIG_SLEEP=y
CONFIG_SLEEP_FLOAT=y
CONFIG_SORT=y
CONFIG_SORT_BIG=y
CONFIG_SORT_FLOAT=y
CONFIG_SPLIT=y
CONFIG_STRINGS=y
CONFIG_TAIL=y
CONFIG_TAIL_SEEK=y
CONFIG_TEE=y
CONFIG_TIME=y
CONFIG_TOUCH=y
CONFIG_TRUE=y
CONFIG_TTY=y
CONFIG_ULIMIT=y
CONFIG_UNAME=y
CONFIG_UNIQ=y
CONFIG_UNLINK=y
CONFIG_UUDECODE=y
CONFIG_UUENCODE=y
CONFIG_WC=y
# CONFIG_WHO is not set
CONFIG_XARGS=y
# CONFIG_XARGS_PEDANTIC is not set
#
# pending (see toys/pending/README)
#
# CONFIG_ARP is not set
# CONFIG_ARPING is not set
# CONFIG_BOOTCHARTD is not set
# CONFIG_BRCTL is not set
# CONFIG_COMPRESS is not set
# CONFIG_DECOMPRESS is not set
# CONFIG_CROND is not set
# CONFIG_CRONTAB is not set
CONFIG_DD=y
# CONFIG_DHCP is not set
# CONFIG_DHCP6 is not set
# CONFIG_DHCPD is not set
# CONFIG_DEBUG_DHCP is not set
CONFIG_DIFF=y
# CONFIG_DUMPLEASES is not set
CONFIG_EXPR=y
# CONFIG_FDISK is not set
# CONFIG_FOLD is not set
# CONFIG_FSCK is not set
CONFIG_GETFATTR=y
# CONFIG_GETTY is not set
# CONFIG_GROUPADD is not set
# CONFIG_GROUPDEL is not set
CONFIG_GZIP=y
CONFIG_GUNZIP=y
CONFIG_ZCAT=y
# CONFIG_HOST is not set
# CONFIG_INIT is not set
# CONFIG_IP is not set
# CONFIG_IPCRM is not set
# CONFIG_IPCS is not set
# CONFIG_KLOGD is not set
# CONFIG_KLOGD_SOURCE_RING_BUFFER is not set
# CONFIG_LAST is not set
CONFIG_LSOF=y
# CONFIG_MDEV is not set
# CONFIG_MDEV_CONF is not set
# CONFIG_MKE2FS is not set
# CONFIG_MKE2FS_JOURNAL is not set
# CONFIG_MKE2FS_GEN is not set
# CONFIG_MKE2FS_LABEL is not set
# CONFIG_MKE2FS_EXTENDED is not set
CONFIG_MODPROBE=y
CONFIG_MORE=y
# CONFIG_OPENVT is not set
# CONFIG_DEALLOCVT is not set
# CONFIG_ROUTE is not set
# CONFIG_SH is not set
# CONFIG_CD is not set
# CONFIG_EXIT is not set
CONFIG_STTY=y
# CONFIG_SULOGIN is not set
# CONFIG_SYSLOGD is not set
CONFIG_TAR=y
# CONFIG_TCPSVD is not set
# CONFIG_TELNET is not set
# CONFIG_TELNETD is not set
# CONFIG_TEST is not set
# CONFIG_TFTP is not set
# CONFIG_TFTPD is not set
CONFIG_TR=y
CONFIG_TRACEROUTE=y
# CONFIG_USERADD is not set
# CONFIG_USERDEL is not set
# CONFIG_VI is not set
# CONFIG_WATCH is not set
# CONFIG_WGET is not set
# CONFIG_XZCAT is not set
#
# Other commands
#
CONFIG_ACPI=y
CONFIG_ASCII=y
CONFIG_BASE64=y
CONFIG_BLKID=y
# CONFIG_FSTYPE is not set
CONFIG_BLOCKDEV=y
CONFIG_BUNZIP2=y
CONFIG_BZCAT=y
# CONFIG_CHCON is not set
CONFIG_CHROOT=y
CONFIG_CHRT=y
# CONFIG_CHVT is not set
CONFIG_CLEAR=y
# CONFIG_COUNT is not set
CONFIG_DOS2UNIX=y
CONFIG_UNIX2DOS=y
# CONFIG_EJECT is not set
# CONFIG_FACTOR is not set
CONFIG_FALLOCATE=y
CONFIG_FLOCK=y
CONFIG_FMT=y
CONFIG_FREE=y
CONFIG_FREERAMDISK=y
CONFIG_FSFREEZE=y
# CONFIG_FSYNC is not set
CONFIG_HELP=y
CONFIG_HELP_EXTRAS=y
# CONFIG_HEXEDIT is not set
CONFIG_HWCLOCK=y
CONFIG_INOTIFYD=y
CONFIG_INSMOD=y
CONFIG_IONICE=y
CONFIG_IORENICE=y
# CONFIG_LOGIN is not set
CONFIG_LOSETUP=y
CONFIG_LSATTR=y
CONFIG_CHATTR=y
CONFIG_LSMOD=y
CONFIG_LSPCI=y
# CONFIG_LSPCI_TEXT is not set
CONFIG_LSUSB=y
CONFIG_MAKEDEVS=y
# CONFIG_MIX is not set
# CONFIG_MKPASSWD is not set
CONFIG_MKSWAP=y
CONFIG_MODINFO=y
CONFIG_MOUNTPOINT=y
CONFIG_NBD_CLIENT=y
CONFIG_UNSHARE=y
CONFIG_NSENTER=y
# CONFIG_ONEIT is not set
CONFIG_PARTPROBE=y
CONFIG_PIVOT_ROOT=y
CONFIG_PMAP=y
CONFIG_PRINTENV=y
CONFIG_PWDX=y
# CONFIG_READAHEAD is not set
CONFIG_READLINK=y
CONFIG_REALPATH=y
# CONFIG_REBOOT is not set
# CONFIG_RESET is not set
CONFIG_REV=y
CONFIG_RMMOD=y
CONFIG_SETFATTR=y
CONFIG_SETSID=y
# CONFIG_SHRED is not set
CONFIG_STAT=y
CONFIG_SWAPOFF=y
CONFIG_SWAPON=y
# CONFIG_SWITCH_ROOT is not set
CONFIG_SYSCTL=y
CONFIG_TAC=y
# CONFIG_NPROC is not set
CONFIG_TASKSET=y
CONFIG_TIMEOUT=y
CONFIG_TRUNCATE=y
CONFIG_UPTIME=y
CONFIG_USLEEP=y
CONFIG_UUIDGEN=y
CONFIG_VCONFIG=y
CONFIG_VMSTAT=y
# CONFIG_W is not set
CONFIG_WHICH=y
CONFIG_XXD=y
CONFIG_YES=y
#
# Networking
#
# CONFIG_FTPGET is not set
# CONFIG_FTPPUT is not set
CONFIG_IFCONFIG=y
CONFIG_MICROCOM=y
CONFIG_NETCAT=y
CONFIG_NETCAT_LISTEN=y
CONFIG_NETSTAT=y
CONFIG_PING=y
CONFIG_RFKILL=y
CONFIG_TUNCTL=y
#
# Linux Standard Base commands
#
CONFIG_DMESG=y
CONFIG_HOSTNAME=y
CONFIG_KILLALL=y
CONFIG_MD5SUM=y
CONFIG_SHA1SUM=y
# CONFIG_SHA224SUM is not set
# CONFIG_SHA256SUM is not set
# CONFIG_SHA384SUM is not set
# CONFIG_SHA512SUM is not set
CONFIG_MKNOD=y
# CONFIG_MKNOD_Z is not set
CONFIG_MKTEMP=y
CONFIG_MOUNT=y
# CONFIG_PASSWD is not set
# CONFIG_PASSWD_SAD is not set
CONFIG_PIDOF=y
CONFIG_SEQ=y
# CONFIG_SU is not set
CONFIG_SYNC=y
CONFIG_UMOUNT=y
#
# Example commands
#
# CONFIG_DEMO_MANY_OPTIONS is not set
# CONFIG_DEMO_NUMBER is not set
# CONFIG_DEMO_SCANKEY is not set
# CONFIG_DEMO_UTF8TOWC is not set
# CONFIG_HELLO is not set
# CONFIG_HOSTID is not set
# CONFIG_SKELETON is not set
# CONFIG_SKELETON_ALIAS is not set
#
# Android
#
# CONFIG_GETENFORCE is not set
# CONFIG_GETPROP is not set
# CONFIG_LOAD_POLICY is not set
# CONFIG_LOG is not set
# CONFIG_RESTORECON is not set
# CONFIG_RUNCON is not set
# CONFIG_SENDEVENT is not set
# CONFIG_SETENFORCE is not set
# CONFIG_SETPROP is not set
# CONFIG_START is not set
# CONFIG_STOP is not set
#
#
#
#
# Toybox global settings
#
CONFIG_TOYBOX=y
# CONFIG_TOYBOX_SUID is not set
CONFIG_TOYBOX_LSM_NONE=y
# CONFIG_TOYBOX_SELINUX is not set
# CONFIG_TOYBOX_SMACK is not set
# CONFIG_TOYBOX_LIBCRYPTO is not set
CONFIG_TOYBOX_LIBZ=y
CONFIG_TOYBOX_FLOAT=y
CONFIG_TOYBOX_HELP=y
CONFIG_TOYBOX_HELP_DASHDASH=y
CONFIG_TOYBOX_I18N=y
# CONFIG_TOYBOX_FREE is not set
CONFIG_TOYBOX_NORECURSE=y
# CONFIG_TOYBOX_DEBUG is not set
# CONFIG_TOYBOX_PEDANTIC_ARGS is not set
CONFIG_TOYBOX_UID_SYS=100
CONFIG_TOYBOX_UID_USR=500
# CONFIG_TOYBOX_MUSL_NOMMU_IS_BROKEN is not set

View File

@ -1,20 +0,0 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := toybox
include $(LOCAL_PATH)/Android_src.mk
LOCAL_CFLAGS := \
-Wno-char-subscripts \
-Wno-gnu-variable-sized-type-not-at-end \
-Wno-missing-field-initializers \
-Wno-sign-compare \
-Wno-string-plus-int \
-Wno-unused-parameter \
-funsigned-char \
-ffunction-sections \
-fdata-sections \
-fno-asynchronous-unwind-tables
LOCAL_LDFLAGS := -lz -static
include $(BUILD_EXECUTABLE)

View File

@ -1,68 +0,0 @@
#!/usr/bin/env bash
progress() {
echo -e "\033[44m\n${1}\n\033[0m"
}
generate_files() {
progress "Generating configuration files"
cp ../toybox.config .config
scripts/genconfig.sh
export NOBUILD=1
scripts/make.sh
progress "Generating Android_src.mk based on configs"
# Stolen from scripts/make.sh
TOYFILES="`sed -n 's/^CONFIG_\([^=]*\)=.*/\1/p' .config | xargs | tr ' [A-Z]' '|[a-z]'`"
TOYFILES="`egrep -l "TOY[(]($TOYFILES)[ ,]" toys/*/*.c`"
LIBFILES="`ls lib/*.c`"
echo "LOCAL_SRC_FILES := main.c \\" > Android_src.mk
for SRC in `echo $LIBFILES $TOYFILES | sort`; do
echo "$SRC \\" >> Android_src.mk
done
cp ../toybox.mk Android.mk
if $COMMIT; then
progress "Commit headers and Makefiles"
git add -f generated/*.h
git add *.mk
git commit -m "Add generated files for ndk-build" -m "Auto generated by ndk-box-kitchen"
fi
}
apply_patches() {
for p in ../toybox_patches/*; do
MSG="`cat $p | grep 'Subject' | sed 's/.*]\s//'`"
progress "[PATCH] $MSG"
patch -p1 < $p
git add .
git commit -m "$MSG" -m "Auto generated by ndk-box-kitchen"
done
}
if [ ! -d toybox ]; then
progress "Please clone toybox, checkout to desired tag, apply patches, then run this script"
exit 1
fi
cd toybox
case "$1" in
generate )
[ "$2" = "--commit" ] && COMMIT=true || COMMIT=false
generate_files
;;
patch )
apply_patches
;;
* )
echo "Usage:"
echo "$0 patch"
echo " Apply patches for toybox"
echo "$0 generate [--commit]"
echo " Generate Makefiles for compilation"
;;
esac

View File

@ -1,23 +0,0 @@
From: topjohnwu <topjohnwu@gmail.com>
Date: Sun, 12 Aug 2018 10:56:38 +0800
Subject: [PATCH] fix undefined icmphdr in ping
---
toys/net/ping.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/toys/net/ping.c b/toys/net/ping.c
index 8638479..2eef1ee 100644
--- a/toys/net/ping.c
+++ b/toys/net/ping.c
@@ -45,6 +45,7 @@ config PING
#include <ifaddrs.h>
#include <netinet/ip_icmp.h>
+#include <linux/icmp.h>
GLOBALS(
long w;
--
2.17.1