- flag .depend as .NOTPARALLEL to workaround bug in make-3.80 and make-3.81
Some more details on the second workaround (i.e. kludge):
make-3.80 silently fails, while make-3.81 is at least self-conscious enough to
admit:
include/usage_compressed.h: .config scripts/usage
# Implicit rule search has not been done.
# File does not exist.
# File has not been updated.
# Dependencies commands running (THIS IS A BUG).
# commands to execute (from `/home/cow/src/bb2/Makefile', line 430):
$(Q)$(SHELL) $(top_srcdir)/scripts/usage_compressed "$(top_builddir)/scripts" > $@
I'm giving up on trying to run the rest of the prerequisites of .depend in
parallel and just (try to) indicate that the prerequisites of .depend are
not to be run in parallel.
While this makes `make distclean defconfig;make -j´ work for me, it is not a
real -- longterm -- solution; FIXME
Development:
bloatcheck - show size difference between busybox_unstripped
/bin/sh: -c: line 0: unexpected EOF while looking for matching `''
/bin/sh: -c: line 1: syntax error: unexpected end of file
make[1]: *** [help] Error 2
make: *** [help] Error 2
Currently we have these errors:
./modutils/Config.in: No helptext for 'CONFIG_FEATURE_QUERY_MODULE_INTERFACE'
./networking/Config.in: No helptext for 'CONFIG_IPADDR'
./networking/Config.in: No helptext for 'CONFIG_IPLINK'
./networking/Config.in: No helptext for 'CONFIG_IPROUTE'
./networking/Config.in: No helptext for 'CONFIG_IPTUNNEL'
./coreutils/Config.in: No helptext for 'CONFIG_UNIX2DOS'
landley, that one broke your tar-testing (see below).
To see the issue i was talking about in the comment to rev. 14431, remove the
'P' from ARFLAGS in Rules.mak, then recompile.
You will see undefined references to these symbols:
iplink_main
iproute_main
iptunnel_main
login_main
run_parts_main
These are due to the fact that these applets (named e.g. login.o) clash with
libbb/login.o, for example. So ar sees that we're going to add login.o
(the applet!) and does so. Later on, we add libbb/login.o (just the basename
is used, so login.o). and this libbb/login.o *replaces* the login.o (the
applet!).
I therefor want (you) to rename abovementioned files from libbb to have
a prefix bb_ (e.g. svn mv libbb/login.c libbb/bb_login.c) to avoid these
clashed.
ok?
TIA,
- don't overwrite objects in the archive. Affected applets with name-clash
mostly vs. libbb:
iplink_main
iproute_main
iptunnel_main
login_main
run_parts_main
For each CONFIG_SYMBOL, include/bb_config.h now has both ENABLE_SYMBOL
and USE_SYMBOL(x). ENABLE_SYMBOL is still always defined (1 or 0) so that
if(ENABLE) should optimize out when it's zero. The USE_SYMBOL(X) will only
splice in X if the symbol is defined, otherwise it'll be empty.
Thus we can convert this:
#ifdef CONFIG_ARGS
opt = bb_getopt_ulflags(argc, argv, "ab:c"
#ifdef CONFIG_THINGY
"d:"
#endif
, &bvalue
#ifdef CONFIG_THINGY
, &thingy
#endif
);
#endif
into this:
if (ENABLE_ARGS) {
opt = bb_getopt_ulflags(argc, argv, "ab:c" USE_THINGY("d:"), &bvalue
USE_THINGY(, &thingy));
}
And it should produce the same code.
Unlike the old versions in include/_usage.h, the new USE_SYMBOL(x) can handle
commas in its arguments (as shown above). (The _usage.h file is obsolete and
no longer generated.)
Nobody should need to include config.h directly anymore, bb_config.h should
define all the configuration stuff we need. Someday, the CONFIG_SYMBOL
versions should go away in favor of ENABLE_SYMBOL and USE_SYMBOL().
Thanks to vodz for the new version of bb_mkdep.c that works with function
macros.
the "maximum sane configuration" shouldn't have. (Explicit MTAB support in
mount, which you should only need if you have no /proc, and FEATURE_CLEAN_UP,
which exists to humor valgrind and otherwise just bloats the code).
symbol (switched on to remove now: test your apps to make sure they _don't_
do this, because as some point we should just yank it), fixup head/tail/fold.
Also tweak "make allyesconfig" so anything starting with CONFIG_DEBUG gets
left switched off. Possibly other things we want to put in the debug menu?
Very unreliable as e.g the ld check will see the flags supported by each emulation, not just the active one.
good enough for now..
Fix would be to crate one or more dummy .c files and accually try if a flag
works.
the attached patch makes applet list in busybox.links
correctly include tr and watchdog.
Currently, they don't appear because they are prefixed
with ENABLE_ in include/applets.h
it's going to be used. (I'm guessing it doesn't work with newlib.)
The other one is from me: allyesconfig shouldn't enable devfs because that
changes all sorts of unrelated stuff (like /dev/loop0->dev/loop/0), which
can come as a bit of a surprise. (It's still there, but you have to go into
menuconfig and select it manually.)
- add some filesystem operation wrapper variables for use in the makefiles and
pull them in early in the toplevel makefile
- use the cross-toolchain for "make sizes"
to test, checkout the source (let's assume /scratch/src/busybox), then
mkdir /tmp/bb ; cd /tmp/bb
make top_srcdir=/scratch/src/busybox O="$(pwd)" -f /scratch/src/busybox/Makefile allyesconfig check
- default to O=$(pwd) if no O was specified. Now you can just specify
the top_srcdir (without O=/somewhere) to create the obj-tree in pwd.
- make "make configtarget buildtarget" work. Previously this didn't
work due to how HAVE_DOT_CONFIG was evaluated. Two separate steps were
needed before, e.g. make config ; make busybox.
- remove some unneeded variables from Rules.mak (BB_SRC_DIR from Mr.
ldoolitt@recycle.lbl) which suggest that the stuff fixed above
didn't work before.
- move selinux libraries to where they belong (from Makefile to Rules.mak)
- update the docs to mention svn instead of cvs and provide an example
for building out-of-tree in INSTALL.
scripts/config from distclean to clean) with a sed consolidation that's
been in my tree for a bit, and switching the GPL boilerplate to just point
at LICENSE.
obvious (and less side-effect prone in strange build environments) BB_CONFIG_H.
Yeah, I know Erik ripped it out of our copy of menuconfig (which is a good
thing), but that doesn't fix people whose headers have it inherited from
linux-kernel headers or old versions of uclibc, and Erik's fix could easily
get forgotten and reverted the next time we update menuconfig anyway...
infrastructure, the compiler isn't smart enough to replace const static
int with the constant, and allocates space for each set of them,
bloating the executable something fierce. Oops.
So now, we #define ENABLE_XXX to 0 or 1 for each CONFIG_XXX (which
is still there so the 1000+ #ifdef/#ifndef tests don't have to be
replaced wholesale). Changed the test instance in networking/ifconfig.c
to use this.
Rob Landley, and others.
Currently CONFIG options are defined or undefined, so we chop out code with
#ifdefs, ala:
#ifdef CONFIG_THING
stuff();
#endif
This creates a new header file, bb_config.h, which sets the CONFIG entry to 1
or 0, and lets us do:
if(CONFIG_THING) stuff();
And let the compiler do dead code elimination to get rid of it. (Note: #ifdef
will still work because for the 1 case it's a static const int, not a #define.)