integrate mklibs.py support into the build process

SVN-Revision: 17173
This commit is contained in:
Felix Fietkau 2009-08-08 02:25:03 +00:00
parent d9f9d74f69
commit b1a2f4b2b8
2 changed files with 43 additions and 0 deletions

View file

@ -126,6 +126,14 @@ choice
endchoice endchoice
config USE_MKLIBS
bool "Strip unnecessary functions from libraries"
help
Reduces libraries to only those functions that are necessary for using all
selected packages (including those selected as <M>)
Note that this will make the system libraries incompatible with most of the packages
that are not selected during the build process
comment "Package build options" comment "Package build options"
config DEBUG config DEBUG

View file

@ -25,6 +25,40 @@ $(curdir)/install:=$(curdir)/install-cleanup
$(curdir)/cleanup: $(TMP_DIR)/.build $(curdir)/cleanup: $(TMP_DIR)/.build
rm -rf $(TARGET_DIR) $(STAGING_DIR_ROOT) rm -rf $(TARGET_DIR) $(STAGING_DIR_ROOT)
ifdef CONFIG_USE_MKLIBS
define mklibs
rm -rf $(TMP_DIR)/mklibs-progs $(TMP_DIR)/mklibs-out
# first find all programs and add them to the mklibs list
find $(STAGING_DIR_ROOT) -type f -perm +100 -exec \
file -r -N -F '' {} + | \
awk ' /executable.*dynamically/ { print $$1 }' > $(TMP_DIR)/mklibs-progs
# find all loadable objects that are not regular libraries and add them to the list as well
find $(STAGING_DIR_ROOT) -type f -name \*.so\* -exec \
file -r -N -F '' {} + | \
awk ' /shared object/ { print $$1 }' >> $(TMP_DIR)/mklibs-progs
mkdir -p $(TMP_DIR)/mklibs-out
$(STAGING_DIR_HOST)/bin/mklibs.py -D -v \
-d $(TMP_DIR)/mklibs-out \
--sysroot $(STAGING_DIR_ROOT) \
-L /lib \
-L /usr/lib \
--ldlib $(patsubst $(STAGING_DIR_ROOT)/%,/%,$(firstword $(wildcard \
$(foreach name,ld-uClibc.so.* ld-linux.so.*, \
$(STAGING_DIR_ROOT)/lib/$(name) \
)))) \
--target $(REAL_GNU_TARGET_NAME) \
`cat $(TMP_DIR)/mklibs-progs` 2>&1
$(RSTRIP) $(TMP_DIR)/mklibs-out
for lib in `ls $(TMP_DIR)/mklibs-out/*.so.* 2>/dev/null`; do \
LIB="$${lib##*/}"; \
DEST="`ls "$(TARGET_DIR)/lib/$$LIB" "$(TARGET_DIR)/usr/lib/$$LIB" 2>/dev/null`"; \
[ -n "$$DEST" ] || continue; \
echo "Copying stripped library $$lib to $$DEST"; \
cp "$$lib" "$$DEST" || exit 1; \
done
endef
endif
$(curdir)/rootfs-prepare: $(TMP_DIR)/.build $(curdir)/rootfs-prepare: $(TMP_DIR)/.build
@-$(MAKE) package/preconfig @-$(MAKE) package/preconfig
@if [ -d $(TOPDIR)/files ]; then \ @if [ -d $(TOPDIR)/files ]; then \
@ -42,6 +76,7 @@ $(curdir)/rootfs-prepare: $(TMP_DIR)/.build
@-find $(TARGET_DIR) -name .svn | $(XARGS) rm -rf @-find $(TARGET_DIR) -name .svn | $(XARGS) rm -rf
@-find $(TARGET_DIR) -name '.#*' | $(XARGS) rm -f @-find $(TARGET_DIR) -name '.#*' | $(XARGS) rm -f
$(if $(CONFIG_CLEAN_IPKG),rm -rf $(TARGET_DIR)/usr/lib/ipkg) $(if $(CONFIG_CLEAN_IPKG),rm -rf $(TARGET_DIR)/usr/lib/ipkg)
$(call mklibs)
$(curdir)/index: FORCE $(curdir)/index: FORCE
@(cd $(PACKAGE_DIR); $(SCRIPT_DIR)/ipkg-make-index.sh . > Packages && \ @(cd $(PACKAGE_DIR); $(SCRIPT_DIR)/ipkg-make-index.sh . > Packages && \