mirror of
https://github.com/vincentmli/bpfire.git
synced 2026-04-09 18:45:54 +02:00
Make stripping more efficient.
Finds all ELF objects and doesn't strip them twice.
This commit is contained in:
@@ -62,19 +62,26 @@ ifeq "$(PASS)" "2"
|
||||
# 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)
|
||||
|
||||
13
lfs/strip
13
lfs/strip
@@ -46,15 +46,4 @@ md5 :
|
||||
###############################################################################
|
||||
|
||||
$(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 /
|
||||
|
||||
27
src/stripper
Executable file
27
src/stripper
Executable file
@@ -0,0 +1,27 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user