Skip to content

Commit 99c9bec

Browse files
demin-hancmuellner
authored andcommitted
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 <[email protected]>
1 parent 4db6642 commit 99c9bec

File tree

4 files changed

+65
-20
lines changed

4 files changed

+65
-20
lines changed

Makefile.in

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ LLVM_SRCDIR := @with_llvm_src@
1717
DEJAGNU_SRCDIR := @with_dejagnu_src@
1818
DEBUG_INFO := @debug_info@
1919
ENABLE_DEFAULT_PIE := @enable_default_pie@
20+
INSTALL_TARGET := @install_target@
2021

2122
SIM ?= @WITH_SIM@
2223

@@ -40,6 +41,7 @@ WITH_ISA_SPEC ?= @WITH_ISA_SPEC@
4041
SYSROOT := $(INSTALL_DIR)/sysroot
4142
ENABLE_LIBSANITIZER ?= @enable_libsanitizer@
4243
QEMU_TARGETS ?= @qemu_targets@
44+
QEMU_EXTRA_CONFIGURE_FLAGS := @enable_strip_qemu@ $(QEMU_EXTRA_CONFIGURE_FLAGS)
4345

4446
ENABLED_LANGUAGES ?= @WITH_LANGUAGES@
4547
ifeq ($(ENABLED_LANGUAGES),)
@@ -355,7 +357,7 @@ stamps/install-host-gcc: $(GCC_SRCDIR) $(GCC_SRC_GIT)
355357
--disable-bootstrap \
356358
--disable-multilib
357359
$(MAKE) -C $(notdir $@)
358-
$(MAKE) -C $(notdir $@) install
360+
$(MAKE) -C $(notdir $@) $(INSTALL_TARGET)
359361
mkdir -p $(dir $@) && touch $@
360362

361363
#
@@ -383,7 +385,7 @@ stamps/build-binutils-linux: $(BINUTILS_SRCDIR) $(BINUTILS_SRC_GIT) $(PREPARATIO
383385
--disable-readline \
384386
$(WITH_ISA_SPEC)
385387
$(MAKE) -C $(notdir $@)
386-
$(MAKE) -C $(notdir $@) install
388+
$(MAKE) -C $(notdir $@) $(INSTALL_TARGET)
387389
mkdir -p $(dir $@) && touch $@
388390

389391
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)
407409
--disable-gold \
408410
--disable-gprof
409411
$(MAKE) -C $(notdir $@)
410-
$(MAKE) -C $(notdir $@) install
412+
$(MAKE) -C $(notdir $@) $(INSTALL_TARGET)
411413
mkdir -p $(dir $@) && touch $@
412414

413415
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
494496
CFLAGS_FOR_TARGET="-O2 $(CFLAGS_FOR_TARGET)" \
495497
CXXFLAGS_FOR_TARGET="-O2 $(CXXFLAGS_FOR_TARGET)"
496498
$(MAKE) -C $(notdir $@) inhibit-libc=true all-gcc
497-
$(MAKE) -C $(notdir $@) inhibit-libc=true install-gcc
499+
$(MAKE) -C $(notdir $@) inhibit-libc=true $(INSTALL_TARGET)-gcc
498500
$(MAKE) -C $(notdir $@) inhibit-libc=true all-target-libgcc
499501
$(MAKE) -C $(notdir $@) inhibit-libc=true install-target-libgcc
500502
mkdir -p $(dir $@) && touch $@
@@ -532,7 +534,7 @@ stamps/build-gcc-linux-stage2: $(GCC_SRCDIR) $(GCC_SRC_GIT) $(addprefix stamps/b
532534
CFLAGS_FOR_TARGET="-O2 $(CFLAGS_FOR_TARGET)" \
533535
CXXFLAGS_FOR_TARGET="-O2 $(CXXFLAGS_FOR_TARGET)"
534536
$(MAKE) -C $(notdir $@)
535-
$(MAKE) -C $(notdir $@) install
537+
$(MAKE) -C $(notdir $@) $(INSTALL_TARGET)
536538
cp -a $(INSTALL_DIR)/$(LINUX_TUPLE)/lib* $(SYSROOT)
537539
mkdir -p $(dir $@) && touch $@
538540

@@ -556,7 +558,7 @@ stamps/build-binutils-linux-native: $(BINUTILS_SRCDIR) $(BINUTILS_SRC_GIT) stamp
556558
--disable-readline \
557559
$(WITH_ISA_SPEC)
558560
$(MAKE) -C $(notdir $@)
559-
$(MAKE) -C $(notdir $@) install
561+
$(MAKE) -C $(notdir $@) $(INSTALL_TARGET)
560562
mkdir -p $(dir $@) && touch $@
561563

562564

@@ -588,7 +590,7 @@ stamps/build-gcc-linux-native: $(GCC_SRCDIR) $(GCC_SRC_GIT) stamps/build-gcc-lin
588590
$(WITH_ISA_SPEC) \
589591
$(GCC_EXTRA_CONFIGURE_FLAGS)
590592
$(MAKE) -C $(notdir $@)
591-
$(MAKE) -C $(notdir $@) install
593+
$(MAKE) -C $(notdir $@) $(INSTALL_TARGET)
592594
cp -a $(INSTALL_DIR)/$(LINUX_TUPLE)/lib* $(SYSROOT)
593595
mkdir -p $(dir $@) && touch $@
594596

@@ -614,7 +616,7 @@ stamps/build-binutils-newlib: $(BINUTILS_SRCDIR) $(BINUTILS_SRC_GIT) $(PREPARATI
614616
--disable-readline \
615617
$(WITH_ISA_SPEC)
616618
$(MAKE) -C $(notdir $@)
617-
$(MAKE) -C $(notdir $@) install
619+
$(MAKE) -C $(notdir $@) $(INSTALL_TARGET)
618620
mkdir -p $(dir $@) && touch $@
619621

620622
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)
635637
--disable-gold \
636638
--disable-gprof
637639
$(MAKE) -C $(notdir $@)
638-
$(MAKE) -C $(notdir $@) install
640+
$(MAKE) -C $(notdir $@) $(INSTALL_TARGET)
639641
mkdir -p $(dir $@) && touch $@
640642

641643
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
670672
CFLAGS_FOR_TARGET="-Os $(CFLAGS_FOR_TARGET)" \
671673
CXXFLAGS_FOR_TARGET="-Os $(CXXFLAGS_FOR_TARGET)"
672674
$(MAKE) -C $(notdir $@) all-gcc
673-
$(MAKE) -C $(notdir $@) install-gcc
675+
$(MAKE) -C $(notdir $@) $(INSTALL_TARGET)-gcc
674676
mkdir -p $(dir $@) && touch $@
675677

676678
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
779781
CFLAGS_FOR_TARGET="-Os $(CFLAGS_FOR_TARGET)" \
780782
CXXFLAGS_FOR_TARGET="-Os $(CXXFLAGS_FOR_TARGET)"
781783
$(MAKE) -C $(notdir $@)
782-
$(MAKE) -C $(notdir $@) install
784+
$(MAKE) -C $(notdir $@) $(INSTALL_TARGET)
783785
mkdir -p $(dir $@) && touch $@
784786

785787
#
@@ -807,7 +809,7 @@ stamps/build-binutils-musl: $(BINUTILS_SRCDIR) $(BINUTILS_SRC_GIT) $(PREPARATION
807809
--disable-readline \
808810
$(WITH_ISA_SPEC)
809811
$(MAKE) -C $(notdir $@)
810-
$(MAKE) -C $(notdir $@) install
812+
$(MAKE) -C $(notdir $@) $(INSTALL_TARGET)
811813
mkdir -p $(dir $@) && touch $@
812814

813815
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)
831833
--disable-gold \
832834
--disable-gprof
833835
$(MAKE) -C $(notdir $@)
834-
$(MAKE) -C $(notdir $@) install
836+
$(MAKE) -C $(notdir $@) $(INSTALL_TARGET)
835837
mkdir -p $(dir $@) && touch $@
836838

837839
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
868870
CFLAGS_FOR_TARGET="-O2 $(CFLAGS_FOR_TARGET)" \
869871
CXXFLAGS_FOR_TARGET="-O2 $(CXXFLAGS_FOR_TARGET)"
870872
$(MAKE) -C $(notdir $@) inhibit-libc=true all-gcc
871-
$(MAKE) -C $(notdir $@) inhibit-libc=true install-gcc
873+
$(MAKE) -C $(notdir $@) inhibit-libc=true $(INSTALL_TARGET)-gcc
872874
$(MAKE) -C $(notdir $@) inhibit-libc=true all-target-libgcc
873875
$(MAKE) -C $(notdir $@) inhibit-libc=true install-target-libgcc
874876
mkdir -p $(dir $@) && touch $@
@@ -939,7 +941,7 @@ stamps/build-gcc-musl-stage2: $(GCC_SRCDIR) $(GCC_SRC_GIT) stamps/build-musl-lin
939941
CFLAGS_FOR_TARGET="-O2 $(CFLAGS_FOR_TARGET)" \
940942
CXXFLAGS_FOR_TARGET="-O2 $(CXXFLAGS_FOR_TARGET)"
941943
$(MAKE) -C $(notdir $@)
942-
$(MAKE) -C $(notdir $@) install
944+
$(MAKE) -C $(notdir $@) $(INSTALL_TARGET)
943945
cp -a $(INSTALL_DIR)/$(MUSL_TUPLE)/lib* $(SYSROOT)
944946
mkdir -p $(dir $@) && touch $@
945947

@@ -968,7 +970,7 @@ stamps/build-binutils-uclibc: $(BINUTILS_SRCDIR) $(BINUTILS_SRC_GIT) $(PREPARATI
968970
--disable-readline \
969971
$(WITH_ISA_SPEC)
970972
$(MAKE) -C $(notdir $@)
971-
$(MAKE) -C $(notdir $@) install
973+
$(MAKE) -C $(notdir $@) $(INSTALL_TARGET)
972974
mkdir -p $(dir $@) && touch $@
973975

974976
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
10041006
CFLAGS_FOR_TARGET="-O2 $(CFLAGS_FOR_TARGET)" \
10051007
CXXFLAGS_FOR_TARGET="-O2 $(CXXFLAGS_FOR_TARGET)"
10061008
$(MAKE) -C $(notdir $@) inhibit-libc=true all-gcc
1007-
$(MAKE) -C $(notdir $@) inhibit-libc=true install-gcc
1009+
$(MAKE) -C $(notdir $@) inhibit-libc=true $(INSTALL_TARGET)-gcc
10081010
$(MAKE) -C $(notdir $@) inhibit-libc=true all-target-libgcc
10091011
$(MAKE) -C $(notdir $@) inhibit-libc=true install-target-libgcc
10101012
mkdir -p $(dir $@) && touch $@
@@ -1072,7 +1074,7 @@ stamps/build-gcc-uclibc-stage2: $(GCC_SRCDIR) $(GCC_SRC_GIT) stamps/build-uclibc
10721074
CFLAGS_FOR_TARGET="-O2 $(CFLAGS_FOR_TARGET)" \
10731075
CXXFLAGS_FOR_TARGET="-O2 $(CXXFLAGS_FOR_TARGET)"
10741076
$(MAKE) -C $(notdir $@)
1075-
$(MAKE) -C $(notdir $@) install
1077+
$(MAKE) -C $(notdir $@) $(INSTALL_TARGET)
10761078
cp -a $(INSTALL_DIR)/$(UCLIBC_TUPLE)/lib* $(SYSROOT)
10771079
mkdir -p $(dir $@) && touch $@
10781080

@@ -1158,7 +1160,7 @@ stamps/build-llvm-linux: $(LLVM_SRCDIR) $(LLVM_SRC_GIT) $(BINUTILS_SRCDIR) $(BIN
11581160
-DLLVM_PARALLEL_LINK_JOBS=4 \
11591161
$(LLVM_EXTRA_CONFIGURE_FLAGS)
11601162
$(MAKE) -C $(notdir $@)
1161-
$(MAKE) -C $(notdir $@) install
1163+
$(MAKE) -C $(notdir $@) $(subst -,/,$(INSTALL_TARGET))
11621164
# Build shared/static OpenMP libraries on RV64.
11631165
if test $(XLEN) -eq 64; then \
11641166
mkdir $(notdir $@)/openmp-shared; \
@@ -1220,7 +1222,7 @@ stamps/build-llvm-newlib: $(LLVM_SRCDIR) $(LLVM_SRC_GIT) $(BINUTILS_SRCDIR) $(BI
12201222
-DLLVM_PARALLEL_LINK_JOBS=4 \
12211223
$(LLVM_EXTRA_CONFIGURE_FLAGS)
12221224
$(MAKE) -C $(notdir $@)
1223-
$(MAKE) -C $(notdir $@) install
1225+
$(MAKE) -C $(notdir $@) $(subst -,/,$(INSTALL_TARGET))
12241226
cd $(INSTALL_DIR)/bin && ln -s -f clang $(NEWLIB_TUPLE)-clang && \
12251227
ln -s -f clang++ $(NEWLIB_TUPLE)-clang++
12261228
mkdir -p $(dir $@) && touch $@

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,9 @@ To customize the enabled languages, use option `--with-languages=`. For example,
108108
if you want to enable `c,c++,fortran`, use `./configure --with-languages=c,c++,fortran`.
109109
This option only takes effect for the GNU toolchain.
110110

111+
The toolchain has an option `--enable-strip` to control strip of host binaries,
112+
strip is disabled by default.
113+
111114
### Troubleshooting Build Problems
112115

113116
Builds work best if installing into an empty directory. If you build a

configure

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -630,6 +630,8 @@ with_glibc_src
630630
with_newlib_src
631631
with_binutils_src
632632
with_gcc_src
633+
enable_strip_qemu
634+
install_target
633635
enable_host_gcc
634636
enable_llvm
635637
enable_gdb
@@ -736,6 +738,7 @@ with_guile
736738
enable_gdb
737739
enable_llvm
738740
enable_host_gcc
741+
enable_strip
739742
with_gcc_src
740743
with_binutils_src
741744
with_newlib_src
@@ -1392,6 +1395,7 @@ Optional Features:
13921395
--disable-gdb Don't build GDB, as it's not upstream
13931396
--enable-llvm Build LLVM (clang)
13941397
--enable-host-gcc Build host GCC to build cross toolchain
1398+
--enable-strip Strip debug symbols at install time
13951399
--enable-libsanitizer Build libsanitizer, which only supports rv64
13961400
--enable-qemu-system Build qemu with system-mode emulation
13971401
@@ -4345,6 +4349,28 @@ else $as_nop
43454349
43464350
fi
43474351
4352+
# Check whether --enable-strip was given.
4353+
if test ${enable_strip+y}
4354+
then :
4355+
enableval=$enable_strip; enable_strip=yes
4356+
fi
4357+
4358+
4359+
if test "x$enable_strip" != xyes
4360+
then :
4361+
install_target=install
4362+
4363+
else $as_nop
4364+
install_target=install-strip
4365+
4366+
fi
4367+
4368+
if test "x$enable_strip" = xyes
4369+
then :
4370+
enable_strip_qemu=-Dstrip=true
4371+
4372+
fi
4373+
43484374
43494375
43504376
{

configure.ac

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,20 @@ AS_IF([test "x$enable_host_gcc" != xyes],
293293
[AC_SUBST(enable_host_gcc, --disable-host-gcc)],
294294
[AC_SUBST(enable_host_gcc, --enable-host-gcc)])
295295

296+
AC_ARG_ENABLE(strip,
297+
[AS_HELP_STRING([--enable-strip],
298+
[Strip debug symbols at install time])],
299+
[enable_strip=yes],
300+
[]
301+
)
302+
303+
AS_IF([test "x$enable_strip" != xyes],
304+
[AC_SUBST(install_target, install)],
305+
[AC_SUBST(install_target, install-strip)])
306+
307+
AS_IF([test "x$enable_strip" = xyes],
308+
[AC_SUBST(enable_strip_qemu, -Dstrip=true)])
309+
296310
AC_DEFUN([AX_ARG_WITH_SRC],
297311
[{m4_pushdef([opt_name], with_$1_src)
298312
AC_ARG_WITH($1-src,

0 commit comments

Comments
 (0)