Finds all ELF objects and doesn't strip them twice.
# Remove the first cross compiler which is not needed anymore.
find /tools/ -name "$(CROSSTARGET)*" | xargs rm -rfv
- -strip --strip-debug /tools/lib/*
- -strip --strip-unneeded /tools/{,s}bin/*
- rm -rfv /tools/{,share}/{info,man} /usr/local/man
- chown -R root:root /tools
+ # Remove man and info pages.
+ rm -rfv /tools/{,share}/{info,man}
+
+ # Strip all binaries.
+ STRIP="/usr/bin/strip" $(DIR_SRC)/src/stripper /tools/
+
+ # Fix ownership of the toolchain.
+ chown -R root:root /tools/
endif
+
ifeq "$(PASS)" "3"
mv -v /tools/bin/{ld,ld-old}
mv -v /tools/$(BUILDTARGET)/bin/{ld,ld-old}
mv -v /tools/bin/{ld-new,ld}
ln -sv /tools/bin/ld /tools/$(BUILDTARGET)/bin/ld
- gcc -dumpspecs | \
- perl -p -e 's@/tools/lib/ld-linux.so@/lib/ld-linux.so@g;' \
- -e 's@\*startfile_prefix_spec:\n@$$_/usr/lib/ @g;' > \
- /tools/lib/gcc/$(BUILDTARGET)/$(GCC_VER)/specs
+
+ gcc -dumpspecs | sed \
+ -e 's@/tools@@g' \
+ -e '/\*startfile_prefix_spec:/{n;s@.*@/usr/lib/ @}' \
+ -e '/\*cpp:/{n;s@$$@ -isystem /usr/include@}' > \
+ $$(dirname $$(gcc -print-libgcc-file-name))/specs
endif
@$(POSTBUILD)
###############################################################################
$(TARGET) :
- # Add -ls before -exec if you want to verify what files are in the path to be stripped
- # A running binary can't be stripped, so use the version from /tools
- # It may fail (signal 11) under circonstance not identified by me (Gilles),
- # to strip libc again so ignore the error now. Probably need a static strip for libc
- # Don't use --strip-all on libraries, or they'll be destroyed. Don't use --strip-unneeded, either.
- -/tools/bin/find /lib /usr/lib /usr/share/rrdtool-* /install/initrd/lib \
- -type f \( -name '*.so' -o -name '*.so[\.0-9]*' \) \
- -exec /tools/bin/strip --strip-debug {} \; 2>/dev/null
-
- -/tools/bin/strip --strip-all /{,usr/}{,local/}{bin,sbin}/* /install/{initrd,misc}/bin/* /usr/lib/cyrus/* 2>/dev/null
- -/tools/bin/strip --strip-all /usr/lib/awk/{grcat,pwcat} 2>/dev/null
- -/tools/bin/strip --strip-all /usr/lib/gcc/*-linux-gnu/4.0.4/{cc1*,collect2} 2>/dev/null
+ STRIP="/tools/bin/strip" $(DIR_SRC)/src/stripper /
--- /dev/null
+#!/bin/bash
+
+function _strip() {
+ local file=${1}
+
+ local cmd="${STRIP-strip}"
+
+ case "$(file -bi ${file})" in
+ application/x-sharedlib*)
+ cmd="${cmd} --strip-debug --remove-section=.comment --remove-section=.note"
+ ;;
+ *)
+ cmd="${cmd} --strip-unneeded"
+ ;;
+ esac
+
+ echo "Stripping ${file}..."
+ ${cmd} ${file}
+}
+
+for dir in $@; do
+ find ${dir} -type f \( -perm -0100 -or -perm -0010 -or -perm -0001 \) \
+ | file -N -f - | sed -n -e 's/^\(.*\):[ ]*.*ELF.*, not stripped/\1/p' |
+ while read file; do
+ _strip ${file}
+ done
+done