- fix building out-of-tree; 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 specif
This commit was genuinely broken at the time (not related to our build system): scripts/config/mkconfigs.c (2005-08-01 - 2006-10-05 arasi) uretilen bbconfigopts.h icine .config satirlarini kacissiz, ham newline'larla gömüyordu - gecerli C degildi, busybox'un kendi bb_mkdep araci bile parse edemiyordu (7d219aab7 ile duzeltildi, mkconfigs shell scripte cevrildi)
No binary (build failed)
—
(log yok)
| @@ -1,14 +1,50 @@ | |
| + | Building: |
| + | ========= |
| + | |
| + | You will usually build in the source-tree. |
| + | |
| + | Alternatively you can build out-of-tree to have the object files separated |
| + | from the source. This allows for building several different configurations |
| + | from the same set of sources. |
| + | |
| + | A) Building in the source-tree: |
| + | ------------------------------- |
| + | |
| 1) Run 'make config' or 'make menuconfig' and select the | |
| functionality that you wish to enable. | |
| 2) Run 'make' | |
| - | 3) Go get a drink of water, drink a soda, visit the bathroom, |
| - | or whatever while it compiles. It doesn't take very |
| - | long to compile, so you don't really need to waste too |
| - | much time waiting... |
| - | |
| - | 4) Run 'make install' or 'make PREFIX=/target install' to |
| + | 3) Run 'make install' or 'make PREFIX=/target install' to |
| install busybox and all the needed links. Some people | |
| will prefer to install using hardlinks and will instead | |
| want to run 'make install-hardlinks'.... | |
| + | |
| + | B) Building out-of-tree: |
| + | ------------------------ |
| + | |
| + | 1) make the directory to hold the object files and chdir to it: |
| + | 'mkdir /tmp/bb ; cd /tmp/bb' |
| + | Then prepare the config giving the full path to the source in top_srcdir: |
| + | make top_srcdir=/path/busybox -f /path/busybox/Makefile O=/tmp/b allyesconfig |
| + | |
| + | Note that O=$(pwd) is the default if no O= was specified. |
| + | |
| + | You now have a buildable tree in $O and can run 'make' without the need |
| + | to specify any paths. |
| + | |
| + | Proceed with step #A2 above. |
| + | |
| + | |
| + | Installation: |
| + | ============= |
| + | |
| + | After the build is complete, a busybox.links file is generated. This is |
| + | used by 'make install' to create symlinks to the BusyBox binary for all |
| + | compiled in functions. By default, 'make install' will place the symlink |
| + | forest into `pwd`/_install unless you have defined the PREFIX environment |
| + | variable (i.e., 'make PREFIX=/tmp/foo install') |
| + | |
| + | If you wish to install hard links, rather than symlinks, you can use |
| + | 'make PREFIX=/tmp/foo install-hardlinks' instead. |
| + | |
| @@ -24,8 +24,6 @@ endif | |
| export srctree=$(top_srcdir) | |
| vpath %/Config.in $(srctree) | |
| - | include $(top_srcdir)/Rules.mak |
| - | |
| DIRS:=applets archival archival/libunarchive coreutils console-tools \ | |
| debianutils editors findutils init miscutils modutils networking \ | |
| networking/libiproute networking/udhcp procps loginutils shell \ | |
| @@ -33,28 +31,36 @@ DIRS:=applets archival archival/libunarchive coreutils console-tools \ | |
| SRC_DIRS:=$(patsubst %,$(top_srcdir)/%,$(DIRS)) | |
| - | ifeq ($(strip $(CONFIG_SELINUX)),y) |
| - | LIBRARIES += -lselinux |
| - | endif |
| + | # That's our default target when none is given on the command line |
| + | .PHONY: _all |
| + | _all: |
| + | |
| + | # All object directories. |
| + | OBJ_DIRS = scripts/config include $(DIRS) |
| + | $(OBJ_DIRS): |
| + | mkdir -p "$(patsubst %,$(top_builddir)/%,$@)" |
| + | |
| + | scripts/config/Makefile: $(top_srcdir)/scripts/config/Makefile |
| + | cp -v $< $@ |
| + | |
| + | include $(top_srcdir)/Rules.mak |
| CONFIG_CONFIG_IN = $(top_srcdir)/sysdeps/$(TARGET_OS)/Config.in | |
| CONFIG_DEFCONFIG = $(top_srcdir)/sysdeps/$(TARGET_OS)/defconfig | |
| - | ALL_DIRS:= $(DIRS) scripts/config |
| - | ALL_MAKEFILES:=$(patsubst %,%/Makefile,$(ALL_DIRS)) |
| - | |
| ifeq ($(KBUILD_SRC),) | |
| ifdef O | |
| ifeq ("$(origin O)", "command line") | |
| KBUILD_OUTPUT := $(O) | |
| endif | |
| + | else |
| + | # If no alternate output-dir was specified, we build in cwd |
| + | # We are using KBUILD_OUTPUT nevertheless to make sure that we create |
| + | # Rules.mak and the toplevel Makefile, in case they don't exist. |
| + | KBUILD_OUTPUT := $(top_builddir) |
| endif | |
| - | # That's our default target when none is given on the command line |
| - | .PHONY: _all |
| - | _all: |
| - | |
| ifneq ($(KBUILD_OUTPUT),) | |
| # Invoke a second make in the output directory, passing relevant variables | |
| # check that the output directory actually exists | |
| @@ -63,24 +69,29 @@ KBUILD_OUTPUT := $(shell cd $(KBUILD_OUTPUT) && /bin/pwd) | |
| $(if $(wildcard $(KBUILD_OUTPUT)),, \ | |
| $(error output directory "$(saved-output)" does not exist)) | |
| + | # We only need a copy of the Makefile for the config targets and reuse |
| + | # the rest from the source directory, i.e. we do not cp ALL_MAKEFILES. |
| + | all_tree: $(OBJ_DIRS) $(KBUILD_OUTPUT)/Rules.mak $(KBUILD_OUTPUT)/Makefile scripts/config/Makefile |
| + | |
| .PHONY: $(MAKECMDGOALS) | |
| - | $(filter-out _all,$(MAKECMDGOALS)) _all: $(KBUILD_OUTPUT)/Rules.mak $(KBUILD_OUTPUT)/Makefile |
| + | $(filter-out _all,$(MAKECMDGOALS)) _all: $(KBUILD_OUTPUT)/Rules.mak $(KBUILD_OUTPUT)/Makefile all_tree |
| + | #all: |
| $(MAKE) -C $(KBUILD_OUTPUT) \ | |
| - | top_srcdir=$(CURDIR) \ |
| - | top_builddir=$(KBUILD_OUTPUT) \ |
| - | KBUILD_SRC=$(CURDIR) \ |
| + | top_srcdir=$(top_srcdir) \ |
| + | top_builddir=$(top_builddir) \ |
| + | KBUILD_SRC=$(top_srcdir) \ |
| -f $(CURDIR)/Makefile $@ | |
| $(KBUILD_OUTPUT)/Rules.mak: | |
| @echo > $@ | |
| - | @echo top_srcdir=$(CURDIR) >> $@ |
| + | @echo top_srcdir=$(top_srcdir) >> $@ |
| @echo top_builddir=$(KBUILD_OUTPUT) >> $@ | |
| @echo include $(top_srcdir)/Rules.mak >> $@ | |
| $(KBUILD_OUTPUT)/Makefile: | |
| @echo > $@ | |
| - | @echo top_srcdir=$(CURDIR) >> $@ |
| + | @echo top_srcdir=$(top_srcdir) >> $@ |
| @echo top_builddir=$(KBUILD_OUTPUT) >> $@ | |
| @echo KBUILD_SRC='$$(top_srcdir)' >> $@ | |
| @echo include '$$(KBUILD_SRC)'/Makefile >> $@ | |
| @@ -124,21 +135,61 @@ help: | |
| @echo ' sizes - show size of all enabled busybox symbols' | |
| @echo | |
| - | ifeq ($(strip $(HAVE_DOT_CONFIG)),y) |
| - | all: busybox busybox.links doc |
| + | ifneq ($(strip $(HAVE_DOT_CONFIG)),y) |
| + | |
| + | all: menuconfig |
| - | all_tree: $(ALL_MAKEFILES) |
| + | # configuration |
| + | # --------------------------------------------------------------------------- |
| - | $(ALL_MAKEFILES): %/Makefile: $(top_srcdir)/%/Makefile |
| - | [ -d $(@D) ] || mkdir -p $(@D); cp $< $@ |
| + | scripts/config/conf: scripts/config/Makefile |
| + | $(MAKE) -C scripts/config conf |
| + | -@if [ ! -f .config ] ; then \ |
| + | cp $(CONFIG_DEFCONFIG) .config; \ |
| + | fi |
| + | |
| + | scripts/config/mconf: scripts/config/Makefile |
| + | $(MAKE) -C scripts/config ncurses conf mconf |
| + | -@if [ ! -f .config ] ; then \ |
| + | cp $(CONFIG_DEFCONFIG) .config; \ |
| + | fi |
| + | |
| + | menuconfig: scripts/config/mconf |
| + | @./scripts/config/mconf $(CONFIG_CONFIG_IN) |
| + | |
| + | config: scripts/config/conf |
| + | @./scripts/config/conf $(CONFIG_CONFIG_IN) |
| + | |
| + | oldconfig: scripts/config/conf |
| + | @./scripts/config/conf -o $(CONFIG_CONFIG_IN) |
| + | |
| + | randconfig: scripts/config/conf |
| + | @./scripts/config/conf -r $(CONFIG_CONFIG_IN) |
| + | |
| + | allyesconfig: scripts/config/conf |
| + | @./scripts/config/conf -y $(CONFIG_CONFIG_IN) |
| + | sed -i -r -e "s/^(CONFIG_DEBUG|USING_CROSS_COMPILER|CONFIG_STATIC|CONFIG_SELINUX).*/# \1 is not set/" .config |
| + | @./scripts/config/conf -o $(CONFIG_CONFIG_IN) |
| + | |
| + | allnoconfig: scripts/config/conf |
| + | @./scripts/config/conf -n $(CONFIG_CONFIG_IN) |
| + | |
| + | defconfig: scripts/config/conf |
| + | @./scripts/config/conf -d $(CONFIG_CONFIG_IN) |
| + | |
| + | else # ifneq ($(strip $(HAVE_DOT_CONFIG)),y) |
| + | |
| + | all: busybox busybox.links doc |
| # In this section, we need .config | |
| -include $(top_builddir)/.config.cmd | |
| include $(patsubst %,%/Makefile.in, $(SRC_DIRS)) | |
| -include $(top_builddir)/.depend | |
| - | busybox: $(ALL_MAKEFILES) .depend $(libraries-y) |
| + | endif # ifneq ($(strip $(HAVE_DOT_CONFIG)),y) |
| + | |
| + | busybox: .depend $(libraries-y) |
| $(CC) $(EXTRA_CFLAGS) $(LDFLAGS) -o $@ -Wl,--start-group $(libraries-y) $(LIBRARIES) -Wl,--end-group | |
| $(STRIPCMD) $@ | |
| @@ -217,7 +268,7 @@ ifeq ($(strip $(CONFIG_BBCONFIG)),y) | |
| DEP_INCLUDES += include/bbconfigopts.h | |
| include/bbconfigopts.h: .config | |
| - | scripts/config/mkconfigs > $@ |
| + | $(top_srcdir)/scripts/config/mkconfigs > $@ |
| endif | |
| depend dep $(top_builddir)/.depend: .depend | |
| @@ -245,48 +296,6 @@ finished2: | |
| $(SECHO) Finished installing... | |
| $(SECHO) | |
| - | else # ifeq ($(strip $(HAVE_DOT_CONFIG)),y) |
| - | |
| - | all: menuconfig |
| - | |
| - | # configuration |
| - | # --------------------------------------------------------------------------- |
| - | |
| - | scripts/config/conf: scripts/config/Makefile $(top_srcdir)/Rules.mak |
| - | $(MAKE) -C scripts/config conf |
| - | -@if [ ! -f .config ] ; then \ |
| - | cp $(CONFIG_DEFCONFIG) .config; \ |
| - | fi |
| - | |
| - | scripts/config/mconf: scripts/config/Makefile $(top_srcdir)/Rules.mak |
| - | $(MAKE) -C scripts/config ncurses conf mconf |
| - | -@if [ ! -f .config ] ; then \ |
| - | cp $(CONFIG_DEFCONFIG) .config; \ |
| - | fi |
| - | |
| - | menuconfig: scripts/config/mconf |
| - | @./scripts/config/mconf $(CONFIG_CONFIG_IN) |
| - | |
| - | config: scripts/config/conf |
| - | @./scripts/config/conf $(CONFIG_CONFIG_IN) |
| - | |
| - | oldconfig: scripts/config/conf |
| - | @./scripts/config/conf -o $(CONFIG_CONFIG_IN) |
| - | |
| - | randconfig: scripts/config/conf |
| - | @./scripts/config/conf -r $(CONFIG_CONFIG_IN) |
| - | |
| - | allyesconfig: scripts/config/conf |
| - | @./scripts/config/conf -y $(CONFIG_CONFIG_IN) |
| - | sed -i -r -e "s/^(CONFIG_DEBUG|USING_CROSS_COMPILER|CONFIG_STATIC|CONFIG_SELINUX).*/# \1 is not set/" .config |
| - | @./scripts/config/conf -o $(CONFIG_CONFIG_IN) |
| - | |
| - | allnoconfig: scripts/config/conf |
| - | @./scripts/config/conf -n $(CONFIG_CONFIG_IN) |
| - | |
| - | defconfig: scripts/config/conf |
| - | @./scripts/config/conf -d $(CONFIG_CONFIG_IN) |
| - | |
| clean: | |
| - $(MAKE) -C scripts/config $@ | |
| - rm -f docs/busybox.dvi docs/busybox.ps \ | |
| @@ -327,8 +336,6 @@ tags: | |
| ctags -R . | |
| - | endif # ifeq ($(strip $(HAVE_DOT_CONFIG)),y) |
| - | |
| endif # ifeq ($(skip-makefile),) | |
| .PHONY: dummy subdirs release distclean clean config oldconfig \ | |
| @@ -1,4 +1,5 @@ | |
| Please see the LICENSE file for details on copying and usage. | |
| + | Please refer to the INSTALL file for instructions on how to build. |
| BusyBox combines tiny versions of many common UNIX utilities into a single | |
| small executable. It provides minimalist replacements for most of the utilities | |
| @@ -15,17 +16,8 @@ BusyBox provides a fairly complete POSIX environment for any small or embedded | |
| system. | |
| BusyBox is extremely configurable. This allows you to include only the | |
| - | components you need, thereby reducing binary size. Run 'make config' or |
| - | 'make menuconfig' to select the functionality that you wish to enable. |
| - | |
| - | After the build is complete, a busybox.links file is generated. This is |
| - | used by 'make install' to create symlinks to the BusyBox binary for all |
| - | compiled in functions. By default, 'make install' will place the symlink |
| - | forest into `pwd`/_install unless you have defined the PREFIX environment |
| - | variable (i.e., 'make PREFIX=/tmp/foo install') |
| - | |
| - | If you wish to install hard links, rather than symlinks, you can use |
| - | 'make PREFIX=/tmp/foo install-hardlinks' instead. |
| + | components you need, thereby reducing binary size. See the file INSTALL |
| + | for details. |
| ---------------- | |
| @@ -110,14 +102,14 @@ be downloaded from | |
| CVS: | |
| - | BusyBox now has its own publicly browsable CVS tree at: |
| - | http://busybox.net/cgi-bin/cvsweb/busybox/ |
| + | BusyBox now has its own publicly browsable SVN tree at: |
| + | http://busybox.net/cgi-bin/viewcvs.cgi/trunk/busybox/ |
| - | Anonymous CVS access is available. For instructions, check out: |
| - | http://busybox.net/cvs_anon.html |
| + | Anonymous SVN access is available. For instructions, check out: |
| + | http://busybox.net/subversion.html |
| - | For those that are actively contributing there is even CVS write access: |
| - | http://busybox.net/cvs_write.html |
| + | For those that are actively contributing there is even SVN write access: |
| + | http://busybox.net/developer.html |
| ---------------- | |
| @@ -27,7 +27,7 @@ BUILDTIME := $(shell TZ=UTC date -u "+%Y.%m.%d-%H:%M%z") | |
| # With a modern GNU make(1) (highly recommended, that's what all the | |
| # developers use), all of the following configuration values can be | |
| # overridden at the command line. For example: | |
| - | # make CROSS=powerpc-linux- BB_SRC_DIR=$HOME/busybox PREFIX=/mnt/app |
| + | # make CROSS=powerpc-linux- top_srcdir="$HOME/busybox" PREFIX=/mnt/app |
| #-------------------------------------------------------- | |
| # If you are running a cross compiler, you will want to set 'CROSS' | |
| @@ -60,11 +60,6 @@ LC_ALL:= C | |
| # For optimization overrides, it's better still to set OPTIMIZATION. | |
| CFLAGS_EXTRA=$(subst ",, $(strip $(EXTRA_CFLAGS_OPTIONS))) | |
| - | # If you have a "pristine" source directory, point BB_SRC_DIR to it. |
| - | # Experimental and incomplete; tell the mailing list |
| - | # <[email protected]> if you do or don't like it so far. |
| - | BB_SRC_DIR= |
| - | |
| # To compile vs some other alternative libc, you may need to use/adjust | |
| # the following lines to meet your needs... | |
| # | |
| @@ -176,19 +171,20 @@ ifeq ($(strip $(CONFIG_STATIC)),y) | |
| LDFLAGS += --static | |
| endif | |
| + | ifeq ($(strip $(CONFIG_SELINUX)),y) |
| + | LIBRARIES += -lselinux |
| + | endif |
| + | |
| ifeq ($(strip $(PREFIX)),) | |
| PREFIX:=`pwd`/_install | |
| endif | |
| # Additional complications due to support for pristine source dir. | |
| # Include files in the build directory should take precedence over | |
| - | # the copy in BB_SRC_DIR, both during the compilation phase and the |
| + | # the copy in top_srcdir, both during the compilation phase and the |
| # shell script that finds the list of object files. | |
| # Work in progress by <[email protected]>. | |
| - | # |
| - | ifneq ($(strip $(BB_SRC_DIR)),) |
| - | VPATH:=$(BB_SRC_DIR) |
| - | endif |
| + | |
| OBJECTS:=$(APPLET_SOURCES:.c=.o) busybox.o usage.o applets.o | |
| CFLAGS += $(CROSS_CFLAGS) | |
| @@ -8,8 +8,8 @@ top_srcdir=.. | |
| top_builddir=.. | |
| srcdir=$(top_srcdir)/e2fsprogs | |
| E2FSPROGS_DIR:=./ | |
| - | include $(top_builddir)/Rules.mak |
| include $(top_builddir)/.config | |
| + | include $(top_builddir)/Rules.mak |
| include Makefile.in | |
| all: $(libraries-y) | |
| -include $(top_builddir)/.depend | |
| @@ -39,7 +39,18 @@ UUID_SRC := compare.c gen_uuid.c pack.c parse.c unpack.c unparse.c \ | |
| UUID_SRCS := $(patsubst %,uuid/%, $(UUID_SRC)) | |
| UUID_OBJS := $(patsubst %.c,%.o, $(UUID_SRCS)) | |
| - | E2FSPROGS-:= |
| + | # for building out-of-tree we need to make sure that the directories to hold |
| + | # the object tree are created |
| + | $(patsubst %,$(E2FSPROGS_DIR)/%, blkid e2fsck e2p ext2fs uuid): |
| + | mkdir -p "$@" |
| + | |
| + | $(patsubst %,$(E2FSPROGS_DIR)/%, $(BLKID_OBJS)):$(E2FSPROGS_DIR)/blkid |
| + | $(patsubst %,$(E2FSPROGS_DIR)/%, $(E2FSCK_OBJS)):$(E2FSPROGS_DIR)/e2fsck |
| + | $(patsubst %,$(E2FSPROGS_DIR)/%, $(E2P_OBJS)):$(E2FSPROGS_DIR)/e2p |
| + | $(patsubst %,$(E2FSPROGS_DIR)/%, $(EXT2FS_OBJS)):$(E2FSPROGS_DIR)/ext2fs |
| + | $(patsubst %,$(E2FSPROGS_DIR)/%, $(UUID_OBJS)):$(E2FSPROGS_DIR)/uuid |
| + | |
| + | E2FSPROGS-y:= |
| E2FSPROGS-$(CONFIG_CHATTR) += chattr.o $(E2P_OBJS) | |
| E2FSPROGS-$(CONFIG_E2FSCK) += e2fsck.o util.o $(BLKID_OBJS) $(EXT2FS_OBJS) $(UUID_OBJS) | |
| E2FSPROGS-$(CONFIG_FSCK) += fsck.o base_device.o $(BLKID_OBJS) $(UUID_OBJS) | |
| @@ -53,5 +64,6 @@ libraries-y+=$(E2FSPROGS_DIR)/$(E2FSPROGS_AR) | |
| $(E2FSPROGS_DIR)/$(E2FSPROGS_AR): $(patsubst %,$(E2FSPROGS_DIR)/%, $(E2FSPROGS-y)) | |
| $(AR) $(ARFLAGS) $@ $(patsubst %,$(E2FSPROGS_DIR)/%, $(E2FSPROGS-y)) | |
| - | $(E2FSPROGS_DIR)/%.o: $(E2FSPROGS_DIR)/%.c |
| + | $(E2FSPROGS_DIR)/%.o: $(subst $(top_builddir),$(top_srcdir),$(E2FSPROGS_DIR)/%.c) |
| $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(E2FSPROGS_CFLAGS) -c -o $@ $< | |
| + | |