reviving libbusybox, adding CONFIG_INDIVIDUAL part 4
This commit is contained in:
parent
def8898596
commit
f545be083d
48
Config.in
48
Config.in
@ -311,24 +311,32 @@ config BUILD_LIBBUSYBOX
|
|||||||
###
|
###
|
||||||
### Say 'N' if in doubt.
|
### Say 'N' if in doubt.
|
||||||
|
|
||||||
config FEATURE_SHARED_BUSYBOX
|
config FEATURE_INDIVIDUAL
|
||||||
bool "Produce additional busybox binary linked against libbusybox"
|
bool "Produce a binary for each applet, linked against libbusybox"
|
||||||
default y if BUILD_LIBBUSYBOX
|
default y
|
||||||
depends on !STATIC && BUILD_LIBBUSYBOX
|
depends on !STATIC && BUILD_LIBBUSYBOX
|
||||||
help
|
help
|
||||||
You need to have a working dynamic linker to use this variant.
|
If your CPU architecture doesn't allow for sharing text/rodata
|
||||||
|
sections of running binaries, but allows for runtime dynamic
|
||||||
|
libraries, this option will allow you to reduce memory footprint
|
||||||
|
when you have many different applets running at once.
|
||||||
|
|
||||||
config LFS
|
If your CPU architecture allows for sharing text/rodata,
|
||||||
bool "Build with Large File Support (for accessing files > 2 GB)"
|
having single binary is more optimal.
|
||||||
default n
|
|
||||||
select FDISK_SUPPORT_LARGE_DISKS
|
Each applet will be a tiny program, dynamically linked
|
||||||
|
against libbusybox.so.N.N.N.
|
||||||
|
|
||||||
|
You need to have a working dynamic linker.
|
||||||
|
|
||||||
|
config FEATURE_SHARED_BUSYBOX
|
||||||
|
bool "Produce additional busybox binary linked against libbusybox"
|
||||||
|
default y
|
||||||
|
depends on !STATIC && BUILD_LIBBUSYBOX
|
||||||
help
|
help
|
||||||
If you want to build BusyBox with large file support, then enable
|
Build busybox, dynamically linked against libbusybox.so.N.N.N.
|
||||||
this option. This will have no effect if your kernel or your C
|
|
||||||
library lacks large file support for large files. Some of the
|
You need to have a working dynamic linker.
|
||||||
programs that can benefit from large file support include dd, gzip,
|
|
||||||
cp, mount, tar, and many others. If you want to access files larger
|
|
||||||
than 2 Gigabytes, enable this option. Otherwise, leave it set to 'N'.
|
|
||||||
|
|
||||||
### config BUILD_AT_ONCE
|
### config BUILD_AT_ONCE
|
||||||
### bool "Compile all sources at once"
|
### bool "Compile all sources at once"
|
||||||
@ -349,6 +357,18 @@ config LFS
|
|||||||
###
|
###
|
||||||
### Say 'N' unless you know what you are doing.
|
### Say 'N' unless you know what you are doing.
|
||||||
|
|
||||||
|
config LFS
|
||||||
|
bool "Build with Large File Support (for accessing files > 2 GB)"
|
||||||
|
default n
|
||||||
|
select FDISK_SUPPORT_LARGE_DISKS
|
||||||
|
help
|
||||||
|
If you want to build BusyBox with large file support, then enable
|
||||||
|
this option. This will have no effect if your kernel or your C
|
||||||
|
library lacks large file support for large files. Some of the
|
||||||
|
programs that can benefit from large file support include dd, gzip,
|
||||||
|
cp, mount, tar, and many others. If you want to access files larger
|
||||||
|
than 2 Gigabytes, enable this option. Otherwise, leave it set to 'N'.
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
menu 'Debugging Options'
|
menu 'Debugging Options'
|
||||||
|
@ -30,6 +30,13 @@ s - suid type:
|
|||||||
# define APPLET_NOEXEC(name,main,l,s,name2) int main##_main(int argc, char **argv);
|
# define APPLET_NOEXEC(name,main,l,s,name2) int main##_main(int argc, char **argv);
|
||||||
# define APPLET_NOFORK(name,main,l,s,name2) int main##_main(int argc, char **argv);
|
# define APPLET_NOFORK(name,main,l,s,name2) int main##_main(int argc, char **argv);
|
||||||
|
|
||||||
|
#elif defined(NAME_MAIN_CNAME)
|
||||||
|
# define APPLET(name,l,s) name name##_main name
|
||||||
|
# define APPLET_NOUSAGE(name,main,l,s) name main##_main name
|
||||||
|
# define APPLET_ODDNAME(name,main,l,s,name2) name main##_main name2
|
||||||
|
# define APPLET_NOEXEC(name,main,l,s,name2) name main##_main name2
|
||||||
|
# define APPLET_NOFORK(name,main,l,s,name2) name main##_main name2
|
||||||
|
|
||||||
#elif defined(MAKE_USAGE) && ENABLE_FEATURE_VERBOSE_USAGE
|
#elif defined(MAKE_USAGE) && ENABLE_FEATURE_VERBOSE_USAGE
|
||||||
# define APPLET(name,l,s) name##_trivial_usage "\n\n" name##_full_usage "\0"
|
# define APPLET(name,l,s) name##_trivial_usage "\n\n" name##_full_usage "\0"
|
||||||
# define APPLET_NOUSAGE(name,main,l,s) "\b\0"
|
# define APPLET_NOUSAGE(name,main,l,s) "\b\0"
|
||||||
@ -373,7 +380,7 @@ USE_YES(APPLET_NOFORK(yes, yes, _BB_DIR_USR_BIN, _BB_SUID_NEVER, yes))
|
|||||||
USE_GUNZIP(APPLET_ODDNAME(zcat, gunzip, _BB_DIR_BIN, _BB_SUID_NEVER, zcat))
|
USE_GUNZIP(APPLET_ODDNAME(zcat, gunzip, _BB_DIR_BIN, _BB_SUID_NEVER, zcat))
|
||||||
USE_ZCIP(APPLET(zcip, _BB_DIR_SBIN, _BB_SUID_NEVER))
|
USE_ZCIP(APPLET(zcip, _BB_DIR_SBIN, _BB_SUID_NEVER))
|
||||||
|
|
||||||
#if !defined(PROTOTYPES) && !defined(MAKE_USAGE)
|
#if !defined(PROTOTYPES) && !defined(NAME_MAIN_CNAME) && !defined(MAKE_USAGE)
|
||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
@ -137,7 +137,7 @@ if test "$CONFIG_FEATURE_SHARED_BUSYBOX" = y; then
|
|||||||
-o $EXE -Wl,-Map -Wl,$EXE.map \
|
-o $EXE -Wl,-Map -Wl,$EXE.map \
|
||||||
-Wl,--warn-common -Wl,--sort-common -Wl,--gc-sections \
|
-Wl,--warn-common -Wl,--sort-common -Wl,--gc-sections \
|
||||||
-Wl,--start-group $O_FILES -Wl,--end-group \
|
-Wl,--start-group $O_FILES -Wl,--end-group \
|
||||||
$l_list -Wl,--verbose \
|
-Wl,--verbose \
|
||||||
-L"$sharedlib_dir" -lbusybox \
|
-L"$sharedlib_dir" -lbusybox \
|
||||||
>/dev/null \
|
>/dev/null \
|
||||||
|| {
|
|| {
|
||||||
@ -148,3 +148,70 @@ if test "$CONFIG_FEATURE_SHARED_BUSYBOX" = y; then
|
|||||||
strip -s --remove-section=.note --remove-section=.comment $EXE -o "$sharedlib_dir/busybox"
|
strip -s --remove-section=.note --remove-section=.comment $EXE -o "$sharedlib_dir/busybox"
|
||||||
echo "busybox linked against libbusybox: $sharedlib_dir/busybox"
|
echo "busybox linked against libbusybox: $sharedlib_dir/busybox"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test "$CONFIG_FEATURE_INDIVIDUAL" = y; then
|
||||||
|
gcc -DNAME_MAIN_CNAME -E -include include/autoconf.h include/applets.h \
|
||||||
|
| grep -v "^#" \
|
||||||
|
| grep -v "^$" \
|
||||||
|
> applet.lst
|
||||||
|
while read name main cname; do
|
||||||
|
|
||||||
|
test x"$cname" = "x[" && cname=test
|
||||||
|
test x"$cname" = "x[[" && cname=test
|
||||||
|
|
||||||
|
echo "\
|
||||||
|
#include <errno.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include \"../include/autoconf.h\"
|
||||||
|
#include \"../include/usage.h\"
|
||||||
|
|
||||||
|
#ifdef __GLIBC__
|
||||||
|
/* Make it reside in R/W memory: */
|
||||||
|
int *const bb_errno __attribute__ ((section (\".data\")));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
const char *applet_name = \"$name\";
|
||||||
|
|
||||||
|
void bb_show_usage(void)
|
||||||
|
{
|
||||||
|
fprintf(stderr, \"Usage: $name \"
|
||||||
|
#ifdef ${cname}_trivial_usage
|
||||||
|
${cname}_trivial_usage
|
||||||
|
#endif
|
||||||
|
#ifdef ${cname}_full_usage
|
||||||
|
\"\\n\\n\" ${cname}_full_usage
|
||||||
|
#endif
|
||||||
|
\"\\n\\n\");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int $main(int argc, char **argv);
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
#ifdef __GLIBC__
|
||||||
|
(*(int **)&bb_errno) = __errno_location();
|
||||||
|
#endif
|
||||||
|
return $main(argc, argv);
|
||||||
|
}
|
||||||
|
" >"$sharedlib_dir/applet.c"
|
||||||
|
|
||||||
|
EXE="$sharedlib_dir/$name"
|
||||||
|
try $CC $LDFLAGS "$sharedlib_dir/applet.c" \
|
||||||
|
-o $EXE \
|
||||||
|
-Wl,--warn-common -Wl,--sort-common -Wl,--gc-sections \
|
||||||
|
-L"$sharedlib_dir" -lbusybox \
|
||||||
|
>/dev/null \
|
||||||
|
|| {
|
||||||
|
echo "Linking $EXE failed"
|
||||||
|
cat -- $EXE.out
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
rm -- "$sharedlib_dir/applet.c" $EXE.out
|
||||||
|
strip -s --remove-section=.note --remove-section=.comment $EXE
|
||||||
|
echo "applet linked against libbusybox: $EXE"
|
||||||
|
|
||||||
|
done <applet.lst
|
||||||
|
fi
|
||||||
|
Loading…
Reference in New Issue
Block a user