- shared libbusybox.

- IMA compilation option (aka IPO, IPA,..)
Please holler if i broke something..
This commit is contained in:
Bernhard Reutner-Fischer
2006-01-15 14:04:57 +00:00
parent 8c9daa12dc
commit 7ca61b6f33
31 changed files with 515 additions and 172 deletions

128
Makefile
View File

@@ -185,6 +185,7 @@ randconfig: scripts/config/conf
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|CONFIG_FEATURE_DEVFS).*/# \1 is not set/" .config
echo "CONFIG_FEATURE_SHARED_BUSYBOX=y" >> .config
@./scripts/config/conf -o $(CONFIG_CONFIG_IN)
allnoconfig: scripts/config/conf
@@ -207,19 +208,102 @@ 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
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
-include $(top_builddir)/.config
-include $(top_builddir)/.depend
ifeq ($(strip $(CONFIG_BUILD_LIBBUSYBOX)),y)
LD_LIBBUSYBOX:=libbusybox.so
LIBBUSYBOX_SONAME:=$(LD_LIBBUSYBOX).$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL_VERSION)
DO_INSTALL_LIBS:=$(LD_LIBBUSYBOX) \
$(LD_LIBBUSYBOX).$(MAJOR_VERSION) \
$(LD_LIBBUSYBOX).$(MAJOR_VERSION).$(MINOR_VERSION)
ifeq ($(CONFIG_BUILD_AT_ONCE),y)
# Which parts of the internal libs are requested?
# Per default we only want what was actually selected.
ifeq ($(CONFIG_FEATURE_FULL_LIBBUSYBOX),y)
LIBRARY_DEFINE:=$(LIBRARY_DEFINE-a)
LIBRARY_SRC :=$(LIBRARY_SRC-a)
$(LIBBUSYBOX_SONAME): $(LIBRARY_SRC)
else
LIBRARY_DEFINE:=$(LIBRARY_DEFINE-y)
LIBRARY_SRC :=$(LIBRARY_SRC-y)
$(LIBBUSYBOX_SONAME): $(LIBRARY_SRC)
endif
else # CONFIG_BUILD_AT_ONCE
libbusybox-obj:=archival/libunarchive/libunarchive.a \
networking/libiproute/libiproute.a \
libpwdgrp/libpwdgrp.a \
coreutils/libcoreutils/libcoreutils.a \
libbb/libbb.a
libbusybox-obj:=$(patsubst %,$(top_builddir)/%,$(libbusybox-obj))
$(LIBBUSYBOX_SONAME): $(libbusybox-obj)
LIBRARY_DEFINE:=
LIBRARY_SRC :=
endif # CONFIG_BUILD_AT_ONCE
$(LIBBUSYBOX_SONAME):
ifndef MAJOR_VERSION
$(error MAJOR_VERSION needed for $@ is not defined)
endif
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(LDFLAGS) -shared \
$(CFLAGS_PIC) \
-Wl,-soname=$(LD_LIBBUSYBOX).$(MAJOR_VERSION) \
-Wl,--enable-new-dtags -Wl,--reduce-memory-overheads \
-Wl,-z,combreloc -Wl,-shared -Wl,--as-needed -Wl,--warn-shared-textrel \
-o $(@) \
-Wl,--start-group -Wl,--whole-archive \
$(LIBRARY_DEFINE) $(^) \
-Wl,--no-whole-archive -Wl,--end-group
$(RM_F) $(DO_INSTALL_LIBS)
for i in $(DO_INSTALL_LIBS); do $(LN_S) -v $(@) $$i ; done
$(STRIPCMD) $@
endif # ifeq ($(strip $(CONFIG_BUILD_LIBBUSYBOX)),y)
ifeq ($(strip $(CONFIG_FEATURE_SHARED_BUSYBOX)),y)
libraries-y:=$(filter-out $(libbusybox-obj),$(libraries-y))
LDBUSYBOX:=-L$(top_builddir) -lbusybox
BUSYBOX_SRC :=
BUSYBOX_DEFINE:=
else
#LDBUSYBOX:=
BUSYBOX_SRC := $(LIBRARY_SRC)
BUSYBOX_DEFINE:= $(LIBRARY_DEFINE)
endif # ifeq ($(strip $(CONFIG_FEATURE_SHARED_BUSYBOX)),y)
ifeq ($(strip $(CONFIG_BUILD_AT_ONCE)),y)
libraries-y:=
else
BUSYBOX_SRC:=
BUSYBOX_DEFINE:=
APPLET_SRC-y:=
APPLETS_DEFINE-y:=
endif
busybox: .depend $(LIBBUSYBOX_SONAME) $(BUSYBOX_SRC) $(libraries-y)
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(PROG_CFLAGS) $(LDFLAGS) \
-o $@ -Wl,--start-group \
$(APPLETS_DEFINE-y) $(APPLET_SRC-y) $(BUSYBOX_DEFINE) $(BUSYBOX_SRC) $(libraries-y) $(LDBUSYBOX) $(LIBRARIES) \
-Wl,--end-group
$(STRIPCMD) $@
busybox.links: $(top_srcdir)/applets/busybox.mkll include/bb_config.h $(top_srcdir)/include/applets.h
- $(SHELL) $^ >$@
install: $(top_srcdir)/applets/install.sh busybox busybox.links
$(SHELL) $< $(PREFIX) $(INSTALL_OPTS)
DO_INSTALL_LIBS="$(strip $(LIBBUSYBOX_SONAME) $(DO_INSTALL_LIBS))" \
$(SHELL) $< $(PREFIX) $(INSTALL_OPTS)
ifeq ($(strip $(CONFIG_FEATURE_SUID)),y)
@echo
@echo
@@ -232,8 +316,13 @@ ifeq ($(strip $(CONFIG_FEATURE_SUID)),y)
endif
uninstall: busybox.links
rm -f $(PREFIX)/bin/busybox
for i in `cat busybox.links` ; do rm -f $(PREFIX)$$i; done
$(RM_F) $(PREFIX)/bin/busybox
for i in `cat busybox.links` ; do $(RM_F) $(PREFIX)$$i; done
ifneq ($(strip $(DO_INSTALL_LIBS)),n)
for i in $(LIBBUSYBOX_SONAME) $(DO_INSTALL_LIBS); do \
$(RM_F) $(PREFIX)$$i; \
done
endif
# see if we are in verbose mode
KBUILD_VERBOSE :=
@@ -244,13 +333,14 @@ ifdef V
endif
ifneq ($(strip $(KBUILD_VERBOSE)),)
CHECK_VERBOSE := -v
# ARFLAGS+=v
endif
check test: busybox
bindir=$(top_builddir) srcdir=$(top_srcdir)/testsuite \
$(top_srcdir)/testsuite/runtest $(CHECK_VERBOSE)
sizes:
-rm -f busybox
-$(RM_F) busybox
$(MAKE) top_srcdir=$(top_srcdir) top_builddir=$(top_builddir) \
-f $(top_srcdir)/Makefile STRIPCMD=/bin/true
$(NM) --size-sort busybox
@@ -278,14 +368,14 @@ docs/BusyBox.1: docs/busybox.pod
docs/BusyBox.html: docs/busybox.net/BusyBox.html
- mkdir -p docs
-@ rm -f docs/BusyBox.html
-@ $(RM_F) docs/BusyBox.html
-@ cp docs/busybox.net/BusyBox.html docs/BusyBox.html
docs/busybox.net/BusyBox.html: docs/busybox.pod
-@ mkdir -p docs/busybox.net
- pod2html --noindex $< > \
docs/busybox.net/BusyBox.html
-@ rm -f pod2htm*
-@ $(RM_F) pod2htm*
# The nifty new buildsystem stuff
scripts/bb_mkdep: $(top_srcdir)/scripts/bb_mkdep.c
@@ -302,7 +392,7 @@ endif
depend dep: .depend
.depend: scripts/bb_mkdep $(DEP_INCLUDES)
@rm -f .depend
@$(RM_F) .depend
@mkdir -p include/config
scripts/bb_mkdep -c include/config.h -c include/bb_config.h \
-I $(top_srcdir)/include $(top_srcdir) > $@.tmp
@@ -323,22 +413,24 @@ include/bb_config.h: include/config.h
clean:
- $(MAKE) -C scripts/config $@
- rm -f docs/busybox.dvi docs/busybox.ps \
- $(RM_F) docs/busybox.dvi docs/busybox.ps \
docs/busybox.pod docs/busybox.net/busybox.html \
docs/busybox pod2htm* *.gdb *.elf *~ core .*config.log \
docs/BusyBox.txt docs/BusyBox.1 docs/BusyBox.html \
docs/busybox.net/BusyBox.html busybox.links libbb/loop.h \
$(DO_INSTALL_LIBS) $(LIBBUSYBOX_SONAME) \
.config.old busybox
- rm -rf _install testsuite/links
- find . -name .\*.flags -exec rm -f {} \;
- find . -name \*.o -exec rm -f {} \;
- find . -name \*.a -exec rm -f {} \;
- find . -name .\*.flags -exec $(RM_F) {} \;
- find . -name \*.o -exec $(RM_F) {} \;
- find . -name \*.a -exec $(RM_F) {} \;
- find . -name \*.so -exec $(RM_F) {} \;
distclean: clean
- rm -f scripts/bb_mkdep
- $(RM_F) scripts/bb_mkdep
- rm -rf include/config include/config.h include/bb_config.h include/bbconfigopts.h
- find . -name .depend -exec rm -f {} \;
rm -f .config .config.old .config.cmd
- find . -name .depend -exec $(RM_F) {} \;
$(RM_F) .config .config.old .config.cmd
release: distclean #doc
cd ..; \
@@ -353,7 +445,7 @@ release: distclean #doc
find $(PROG)-$(VERSION)/ -type f \
-name .\#* \
-print \
-exec rm -f {} \; ; \
-exec $(RM_F) {} \; ; \
\
tar -cvzf $(PROG)-$(VERSION).tar.gz $(PROG)-$(VERSION)/;