Add install strip support

Binutils and GCC have an install target 'install-strip' which can strips
debug symbols at install. This can reduce installed size largely.

LLVM has similar install target 'install/strip'.

Thanks for shenki's previous work

Signed-off-by: demin.han <demin.han@starfivetech.com>
This commit is contained in:
demin.han 2025-07-18 13:27:51 +08:00 committed by Christoph Müllner
parent 4db66423a9
commit 99c9bec115
4 changed files with 65 additions and 20 deletions

View File

@ -17,6 +17,7 @@ LLVM_SRCDIR := @with_llvm_src@
DEJAGNU_SRCDIR := @with_dejagnu_src@ DEJAGNU_SRCDIR := @with_dejagnu_src@
DEBUG_INFO := @debug_info@ DEBUG_INFO := @debug_info@
ENABLE_DEFAULT_PIE := @enable_default_pie@ ENABLE_DEFAULT_PIE := @enable_default_pie@
INSTALL_TARGET := @install_target@
SIM ?= @WITH_SIM@ SIM ?= @WITH_SIM@
@ -40,6 +41,7 @@ WITH_ISA_SPEC ?= @WITH_ISA_SPEC@
SYSROOT := $(INSTALL_DIR)/sysroot SYSROOT := $(INSTALL_DIR)/sysroot
ENABLE_LIBSANITIZER ?= @enable_libsanitizer@ ENABLE_LIBSANITIZER ?= @enable_libsanitizer@
QEMU_TARGETS ?= @qemu_targets@ QEMU_TARGETS ?= @qemu_targets@
QEMU_EXTRA_CONFIGURE_FLAGS := @enable_strip_qemu@ $(QEMU_EXTRA_CONFIGURE_FLAGS)
ENABLED_LANGUAGES ?= @WITH_LANGUAGES@ ENABLED_LANGUAGES ?= @WITH_LANGUAGES@
ifeq ($(ENABLED_LANGUAGES),) ifeq ($(ENABLED_LANGUAGES),)
@ -355,7 +357,7 @@ stamps/install-host-gcc: $(GCC_SRCDIR) $(GCC_SRC_GIT)
--disable-bootstrap \ --disable-bootstrap \
--disable-multilib --disable-multilib
$(MAKE) -C $(notdir $@) $(MAKE) -C $(notdir $@)
$(MAKE) -C $(notdir $@) install $(MAKE) -C $(notdir $@) $(INSTALL_TARGET)
mkdir -p $(dir $@) && touch $@ mkdir -p $(dir $@) && touch $@
# #
@ -383,7 +385,7 @@ stamps/build-binutils-linux: $(BINUTILS_SRCDIR) $(BINUTILS_SRC_GIT) $(PREPARATIO
--disable-readline \ --disable-readline \
$(WITH_ISA_SPEC) $(WITH_ISA_SPEC)
$(MAKE) -C $(notdir $@) $(MAKE) -C $(notdir $@)
$(MAKE) -C $(notdir $@) install $(MAKE) -C $(notdir $@) $(INSTALL_TARGET)
mkdir -p $(dir $@) && touch $@ mkdir -p $(dir $@) && touch $@
stamps/build-gdb-linux: $(GDB_SRCDIR) $(GDB_SRC_GIT) $(PREPARATION_STAMP) stamps/build-gdb-linux: $(GDB_SRCDIR) $(GDB_SRC_GIT) $(PREPARATION_STAMP)
@ -407,7 +409,7 @@ stamps/build-gdb-linux: $(GDB_SRCDIR) $(GDB_SRC_GIT) $(PREPARATION_STAMP)
--disable-gold \ --disable-gold \
--disable-gprof --disable-gprof
$(MAKE) -C $(notdir $@) $(MAKE) -C $(notdir $@)
$(MAKE) -C $(notdir $@) install $(MAKE) -C $(notdir $@) $(INSTALL_TARGET)
mkdir -p $(dir $@) && touch $@ mkdir -p $(dir $@) && touch $@
stamps/build-glibc-linux-headers: $(GLIBC_SRCDIR) $(GLIBC_SRC_GIT) stamps/build-gcc-linux-stage1 stamps/build-glibc-linux-headers: $(GLIBC_SRCDIR) $(GLIBC_SRC_GIT) stamps/build-gcc-linux-stage1
@ -494,7 +496,7 @@ stamps/build-gcc-linux-stage1: $(GCC_SRCDIR) $(GCC_SRC_GIT) stamps/build-binutil
CFLAGS_FOR_TARGET="-O2 $(CFLAGS_FOR_TARGET)" \ CFLAGS_FOR_TARGET="-O2 $(CFLAGS_FOR_TARGET)" \
CXXFLAGS_FOR_TARGET="-O2 $(CXXFLAGS_FOR_TARGET)" CXXFLAGS_FOR_TARGET="-O2 $(CXXFLAGS_FOR_TARGET)"
$(MAKE) -C $(notdir $@) inhibit-libc=true all-gcc $(MAKE) -C $(notdir $@) inhibit-libc=true all-gcc
$(MAKE) -C $(notdir $@) inhibit-libc=true install-gcc $(MAKE) -C $(notdir $@) inhibit-libc=true $(INSTALL_TARGET)-gcc
$(MAKE) -C $(notdir $@) inhibit-libc=true all-target-libgcc $(MAKE) -C $(notdir $@) inhibit-libc=true all-target-libgcc
$(MAKE) -C $(notdir $@) inhibit-libc=true install-target-libgcc $(MAKE) -C $(notdir $@) inhibit-libc=true install-target-libgcc
mkdir -p $(dir $@) && touch $@ mkdir -p $(dir $@) && touch $@
@ -532,7 +534,7 @@ stamps/build-gcc-linux-stage2: $(GCC_SRCDIR) $(GCC_SRC_GIT) $(addprefix stamps/b
CFLAGS_FOR_TARGET="-O2 $(CFLAGS_FOR_TARGET)" \ CFLAGS_FOR_TARGET="-O2 $(CFLAGS_FOR_TARGET)" \
CXXFLAGS_FOR_TARGET="-O2 $(CXXFLAGS_FOR_TARGET)" CXXFLAGS_FOR_TARGET="-O2 $(CXXFLAGS_FOR_TARGET)"
$(MAKE) -C $(notdir $@) $(MAKE) -C $(notdir $@)
$(MAKE) -C $(notdir $@) install $(MAKE) -C $(notdir $@) $(INSTALL_TARGET)
cp -a $(INSTALL_DIR)/$(LINUX_TUPLE)/lib* $(SYSROOT) cp -a $(INSTALL_DIR)/$(LINUX_TUPLE)/lib* $(SYSROOT)
mkdir -p $(dir $@) && touch $@ mkdir -p $(dir $@) && touch $@
@ -556,7 +558,7 @@ stamps/build-binutils-linux-native: $(BINUTILS_SRCDIR) $(BINUTILS_SRC_GIT) stamp
--disable-readline \ --disable-readline \
$(WITH_ISA_SPEC) $(WITH_ISA_SPEC)
$(MAKE) -C $(notdir $@) $(MAKE) -C $(notdir $@)
$(MAKE) -C $(notdir $@) install $(MAKE) -C $(notdir $@) $(INSTALL_TARGET)
mkdir -p $(dir $@) && touch $@ mkdir -p $(dir $@) && touch $@
@ -588,7 +590,7 @@ stamps/build-gcc-linux-native: $(GCC_SRCDIR) $(GCC_SRC_GIT) stamps/build-gcc-lin
$(WITH_ISA_SPEC) \ $(WITH_ISA_SPEC) \
$(GCC_EXTRA_CONFIGURE_FLAGS) $(GCC_EXTRA_CONFIGURE_FLAGS)
$(MAKE) -C $(notdir $@) $(MAKE) -C $(notdir $@)
$(MAKE) -C $(notdir $@) install $(MAKE) -C $(notdir $@) $(INSTALL_TARGET)
cp -a $(INSTALL_DIR)/$(LINUX_TUPLE)/lib* $(SYSROOT) cp -a $(INSTALL_DIR)/$(LINUX_TUPLE)/lib* $(SYSROOT)
mkdir -p $(dir $@) && touch $@ mkdir -p $(dir $@) && touch $@
@ -614,7 +616,7 @@ stamps/build-binutils-newlib: $(BINUTILS_SRCDIR) $(BINUTILS_SRC_GIT) $(PREPARATI
--disable-readline \ --disable-readline \
$(WITH_ISA_SPEC) $(WITH_ISA_SPEC)
$(MAKE) -C $(notdir $@) $(MAKE) -C $(notdir $@)
$(MAKE) -C $(notdir $@) install $(MAKE) -C $(notdir $@) $(INSTALL_TARGET)
mkdir -p $(dir $@) && touch $@ mkdir -p $(dir $@) && touch $@
stamps/build-gdb-newlib: $(GDB_SRCDIR) $(GDB_SRC_GIT) $(PREPARATION_STAMP) stamps/build-gdb-newlib: $(GDB_SRCDIR) $(GDB_SRC_GIT) $(PREPARATION_STAMP)
@ -635,7 +637,7 @@ stamps/build-gdb-newlib: $(GDB_SRCDIR) $(GDB_SRC_GIT) $(PREPARATION_STAMP)
--disable-gold \ --disable-gold \
--disable-gprof --disable-gprof
$(MAKE) -C $(notdir $@) $(MAKE) -C $(notdir $@)
$(MAKE) -C $(notdir $@) install $(MAKE) -C $(notdir $@) $(INSTALL_TARGET)
mkdir -p $(dir $@) && touch $@ mkdir -p $(dir $@) && touch $@
stamps/build-gcc-newlib-stage1: $(GCC_SRCDIR) $(GCC_SRC_GIT) stamps/build-binutils-newlib stamps/build-gcc-newlib-stage1: $(GCC_SRCDIR) $(GCC_SRC_GIT) stamps/build-binutils-newlib
@ -670,7 +672,7 @@ stamps/build-gcc-newlib-stage1: $(GCC_SRCDIR) $(GCC_SRC_GIT) stamps/build-binuti
CFLAGS_FOR_TARGET="-Os $(CFLAGS_FOR_TARGET)" \ CFLAGS_FOR_TARGET="-Os $(CFLAGS_FOR_TARGET)" \
CXXFLAGS_FOR_TARGET="-Os $(CXXFLAGS_FOR_TARGET)" CXXFLAGS_FOR_TARGET="-Os $(CXXFLAGS_FOR_TARGET)"
$(MAKE) -C $(notdir $@) all-gcc $(MAKE) -C $(notdir $@) all-gcc
$(MAKE) -C $(notdir $@) install-gcc $(MAKE) -C $(notdir $@) $(INSTALL_TARGET)-gcc
mkdir -p $(dir $@) && touch $@ mkdir -p $(dir $@) && touch $@
stamps/build-newlib: $(NEWLIB_SRCDIR) $(NEWLIB_SRC_GIT) stamps/build-gcc-newlib-stage1 stamps/build-newlib: $(NEWLIB_SRCDIR) $(NEWLIB_SRC_GIT) stamps/build-gcc-newlib-stage1
@ -779,7 +781,7 @@ stamps/build-gcc-newlib-stage2: $(GCC_SRCDIR) $(GCC_SRC_GIT) stamps/build-newlib
CFLAGS_FOR_TARGET="-Os $(CFLAGS_FOR_TARGET)" \ CFLAGS_FOR_TARGET="-Os $(CFLAGS_FOR_TARGET)" \
CXXFLAGS_FOR_TARGET="-Os $(CXXFLAGS_FOR_TARGET)" CXXFLAGS_FOR_TARGET="-Os $(CXXFLAGS_FOR_TARGET)"
$(MAKE) -C $(notdir $@) $(MAKE) -C $(notdir $@)
$(MAKE) -C $(notdir $@) install $(MAKE) -C $(notdir $@) $(INSTALL_TARGET)
mkdir -p $(dir $@) && touch $@ mkdir -p $(dir $@) && touch $@
# #
@ -807,7 +809,7 @@ stamps/build-binutils-musl: $(BINUTILS_SRCDIR) $(BINUTILS_SRC_GIT) $(PREPARATION
--disable-readline \ --disable-readline \
$(WITH_ISA_SPEC) $(WITH_ISA_SPEC)
$(MAKE) -C $(notdir $@) $(MAKE) -C $(notdir $@)
$(MAKE) -C $(notdir $@) install $(MAKE) -C $(notdir $@) $(INSTALL_TARGET)
mkdir -p $(dir $@) && touch $@ mkdir -p $(dir $@) && touch $@
stamps/build-gdb-musl: $(GDB_SRCDIR) $(GDB_SRC_GIT) $(PREPARATION_STAMP) stamps/build-gdb-musl: $(GDB_SRCDIR) $(GDB_SRC_GIT) $(PREPARATION_STAMP)
@ -831,7 +833,7 @@ stamps/build-gdb-musl: $(GDB_SRCDIR) $(GDB_SRC_GIT) $(PREPARATION_STAMP)
--disable-gold \ --disable-gold \
--disable-gprof --disable-gprof
$(MAKE) -C $(notdir $@) $(MAKE) -C $(notdir $@)
$(MAKE) -C $(notdir $@) install $(MAKE) -C $(notdir $@) $(INSTALL_TARGET)
mkdir -p $(dir $@) && touch $@ mkdir -p $(dir $@) && touch $@
stamps/build-gcc-musl-stage1: $(GCC_SRCDIR) $(GCC_SRC_GIT) stamps/build-binutils-musl \ stamps/build-gcc-musl-stage1: $(GCC_SRCDIR) $(GCC_SRC_GIT) stamps/build-binutils-musl \
@ -868,7 +870,7 @@ stamps/build-gcc-musl-stage1: $(GCC_SRCDIR) $(GCC_SRC_GIT) stamps/build-binutils
CFLAGS_FOR_TARGET="-O2 $(CFLAGS_FOR_TARGET)" \ CFLAGS_FOR_TARGET="-O2 $(CFLAGS_FOR_TARGET)" \
CXXFLAGS_FOR_TARGET="-O2 $(CXXFLAGS_FOR_TARGET)" CXXFLAGS_FOR_TARGET="-O2 $(CXXFLAGS_FOR_TARGET)"
$(MAKE) -C $(notdir $@) inhibit-libc=true all-gcc $(MAKE) -C $(notdir $@) inhibit-libc=true all-gcc
$(MAKE) -C $(notdir $@) inhibit-libc=true install-gcc $(MAKE) -C $(notdir $@) inhibit-libc=true $(INSTALL_TARGET)-gcc
$(MAKE) -C $(notdir $@) inhibit-libc=true all-target-libgcc $(MAKE) -C $(notdir $@) inhibit-libc=true all-target-libgcc
$(MAKE) -C $(notdir $@) inhibit-libc=true install-target-libgcc $(MAKE) -C $(notdir $@) inhibit-libc=true install-target-libgcc
mkdir -p $(dir $@) && touch $@ mkdir -p $(dir $@) && touch $@
@ -939,7 +941,7 @@ stamps/build-gcc-musl-stage2: $(GCC_SRCDIR) $(GCC_SRC_GIT) stamps/build-musl-lin
CFLAGS_FOR_TARGET="-O2 $(CFLAGS_FOR_TARGET)" \ CFLAGS_FOR_TARGET="-O2 $(CFLAGS_FOR_TARGET)" \
CXXFLAGS_FOR_TARGET="-O2 $(CXXFLAGS_FOR_TARGET)" CXXFLAGS_FOR_TARGET="-O2 $(CXXFLAGS_FOR_TARGET)"
$(MAKE) -C $(notdir $@) $(MAKE) -C $(notdir $@)
$(MAKE) -C $(notdir $@) install $(MAKE) -C $(notdir $@) $(INSTALL_TARGET)
cp -a $(INSTALL_DIR)/$(MUSL_TUPLE)/lib* $(SYSROOT) cp -a $(INSTALL_DIR)/$(MUSL_TUPLE)/lib* $(SYSROOT)
mkdir -p $(dir $@) && touch $@ mkdir -p $(dir $@) && touch $@
@ -968,7 +970,7 @@ stamps/build-binutils-uclibc: $(BINUTILS_SRCDIR) $(BINUTILS_SRC_GIT) $(PREPARATI
--disable-readline \ --disable-readline \
$(WITH_ISA_SPEC) $(WITH_ISA_SPEC)
$(MAKE) -C $(notdir $@) $(MAKE) -C $(notdir $@)
$(MAKE) -C $(notdir $@) install $(MAKE) -C $(notdir $@) $(INSTALL_TARGET)
mkdir -p $(dir $@) && touch $@ mkdir -p $(dir $@) && touch $@
stamps/build-gcc-uclibc-stage1: $(GCC_SRCDIR) $(GCC_SRC_GIT) stamps/build-binutils-uclibc \ stamps/build-gcc-uclibc-stage1: $(GCC_SRCDIR) $(GCC_SRC_GIT) stamps/build-binutils-uclibc \
@ -1004,7 +1006,7 @@ stamps/build-gcc-uclibc-stage1: $(GCC_SRCDIR) $(GCC_SRC_GIT) stamps/build-binuti
CFLAGS_FOR_TARGET="-O2 $(CFLAGS_FOR_TARGET)" \ CFLAGS_FOR_TARGET="-O2 $(CFLAGS_FOR_TARGET)" \
CXXFLAGS_FOR_TARGET="-O2 $(CXXFLAGS_FOR_TARGET)" CXXFLAGS_FOR_TARGET="-O2 $(CXXFLAGS_FOR_TARGET)"
$(MAKE) -C $(notdir $@) inhibit-libc=true all-gcc $(MAKE) -C $(notdir $@) inhibit-libc=true all-gcc
$(MAKE) -C $(notdir $@) inhibit-libc=true install-gcc $(MAKE) -C $(notdir $@) inhibit-libc=true $(INSTALL_TARGET)-gcc
$(MAKE) -C $(notdir $@) inhibit-libc=true all-target-libgcc $(MAKE) -C $(notdir $@) inhibit-libc=true all-target-libgcc
$(MAKE) -C $(notdir $@) inhibit-libc=true install-target-libgcc $(MAKE) -C $(notdir $@) inhibit-libc=true install-target-libgcc
mkdir -p $(dir $@) && touch $@ mkdir -p $(dir $@) && touch $@
@ -1072,7 +1074,7 @@ stamps/build-gcc-uclibc-stage2: $(GCC_SRCDIR) $(GCC_SRC_GIT) stamps/build-uclibc
CFLAGS_FOR_TARGET="-O2 $(CFLAGS_FOR_TARGET)" \ CFLAGS_FOR_TARGET="-O2 $(CFLAGS_FOR_TARGET)" \
CXXFLAGS_FOR_TARGET="-O2 $(CXXFLAGS_FOR_TARGET)" CXXFLAGS_FOR_TARGET="-O2 $(CXXFLAGS_FOR_TARGET)"
$(MAKE) -C $(notdir $@) $(MAKE) -C $(notdir $@)
$(MAKE) -C $(notdir $@) install $(MAKE) -C $(notdir $@) $(INSTALL_TARGET)
cp -a $(INSTALL_DIR)/$(UCLIBC_TUPLE)/lib* $(SYSROOT) cp -a $(INSTALL_DIR)/$(UCLIBC_TUPLE)/lib* $(SYSROOT)
mkdir -p $(dir $@) && touch $@ mkdir -p $(dir $@) && touch $@
@ -1158,7 +1160,7 @@ stamps/build-llvm-linux: $(LLVM_SRCDIR) $(LLVM_SRC_GIT) $(BINUTILS_SRCDIR) $(BIN
-DLLVM_PARALLEL_LINK_JOBS=4 \ -DLLVM_PARALLEL_LINK_JOBS=4 \
$(LLVM_EXTRA_CONFIGURE_FLAGS) $(LLVM_EXTRA_CONFIGURE_FLAGS)
$(MAKE) -C $(notdir $@) $(MAKE) -C $(notdir $@)
$(MAKE) -C $(notdir $@) install $(MAKE) -C $(notdir $@) $(subst -,/,$(INSTALL_TARGET))
# Build shared/static OpenMP libraries on RV64. # Build shared/static OpenMP libraries on RV64.
if test $(XLEN) -eq 64; then \ if test $(XLEN) -eq 64; then \
mkdir $(notdir $@)/openmp-shared; \ mkdir $(notdir $@)/openmp-shared; \
@ -1220,7 +1222,7 @@ stamps/build-llvm-newlib: $(LLVM_SRCDIR) $(LLVM_SRC_GIT) $(BINUTILS_SRCDIR) $(BI
-DLLVM_PARALLEL_LINK_JOBS=4 \ -DLLVM_PARALLEL_LINK_JOBS=4 \
$(LLVM_EXTRA_CONFIGURE_FLAGS) $(LLVM_EXTRA_CONFIGURE_FLAGS)
$(MAKE) -C $(notdir $@) $(MAKE) -C $(notdir $@)
$(MAKE) -C $(notdir $@) install $(MAKE) -C $(notdir $@) $(subst -,/,$(INSTALL_TARGET))
cd $(INSTALL_DIR)/bin && ln -s -f clang $(NEWLIB_TUPLE)-clang && \ cd $(INSTALL_DIR)/bin && ln -s -f clang $(NEWLIB_TUPLE)-clang && \
ln -s -f clang++ $(NEWLIB_TUPLE)-clang++ ln -s -f clang++ $(NEWLIB_TUPLE)-clang++
mkdir -p $(dir $@) && touch $@ mkdir -p $(dir $@) && touch $@

View File

@ -108,6 +108,9 @@ To customize the enabled languages, use option `--with-languages=`. For example,
if you want to enable `c,c++,fortran`, use `./configure --with-languages=c,c++,fortran`. if you want to enable `c,c++,fortran`, use `./configure --with-languages=c,c++,fortran`.
This option only takes effect for the GNU toolchain. This option only takes effect for the GNU toolchain.
The toolchain has an option `--enable-strip` to control strip of host binaries,
strip is disabled by default.
### Troubleshooting Build Problems ### Troubleshooting Build Problems
Builds work best if installing into an empty directory. If you build a Builds work best if installing into an empty directory. If you build a

26
configure vendored
View File

@ -630,6 +630,8 @@ with_glibc_src
with_newlib_src with_newlib_src
with_binutils_src with_binutils_src
with_gcc_src with_gcc_src
enable_strip_qemu
install_target
enable_host_gcc enable_host_gcc
enable_llvm enable_llvm
enable_gdb enable_gdb
@ -736,6 +738,7 @@ with_guile
enable_gdb enable_gdb
enable_llvm enable_llvm
enable_host_gcc enable_host_gcc
enable_strip
with_gcc_src with_gcc_src
with_binutils_src with_binutils_src
with_newlib_src with_newlib_src
@ -1392,6 +1395,7 @@ Optional Features:
--disable-gdb Don't build GDB, as it's not upstream --disable-gdb Don't build GDB, as it's not upstream
--enable-llvm Build LLVM (clang) --enable-llvm Build LLVM (clang)
--enable-host-gcc Build host GCC to build cross toolchain --enable-host-gcc Build host GCC to build cross toolchain
--enable-strip Strip debug symbols at install time
--enable-libsanitizer Build libsanitizer, which only supports rv64 --enable-libsanitizer Build libsanitizer, which only supports rv64
--enable-qemu-system Build qemu with system-mode emulation --enable-qemu-system Build qemu with system-mode emulation
@ -4345,6 +4349,28 @@ else $as_nop
fi fi
# Check whether --enable-strip was given.
if test ${enable_strip+y}
then :
enableval=$enable_strip; enable_strip=yes
fi
if test "x$enable_strip" != xyes
then :
install_target=install
else $as_nop
install_target=install-strip
fi
if test "x$enable_strip" = xyes
then :
enable_strip_qemu=-Dstrip=true
fi
{ {

View File

@ -293,6 +293,20 @@ AS_IF([test "x$enable_host_gcc" != xyes],
[AC_SUBST(enable_host_gcc, --disable-host-gcc)], [AC_SUBST(enable_host_gcc, --disable-host-gcc)],
[AC_SUBST(enable_host_gcc, --enable-host-gcc)]) [AC_SUBST(enable_host_gcc, --enable-host-gcc)])
AC_ARG_ENABLE(strip,
[AS_HELP_STRING([--enable-strip],
[Strip debug symbols at install time])],
[enable_strip=yes],
[]
)
AS_IF([test "x$enable_strip" != xyes],
[AC_SUBST(install_target, install)],
[AC_SUBST(install_target, install-strip)])
AS_IF([test "x$enable_strip" = xyes],
[AC_SUBST(enable_strip_qemu, -Dstrip=true)])
AC_DEFUN([AX_ARG_WITH_SRC], AC_DEFUN([AX_ARG_WITH_SRC],
[{m4_pushdef([opt_name], with_$1_src) [{m4_pushdef([opt_name], with_$1_src)
AC_ARG_WITH($1-src, AC_ARG_WITH($1-src,