From 07fa29fdac9688e69a74da968f539a459d3f60c4 Mon Sep 17 00:00:00 2001 From: Matthias Reichl Date: Wed, 22 Apr 2020 16:15:53 +0200 Subject: [PATCH 1/4] ncurses: add host configure options Host configure options were completely missing so unnecessary stuff like manpages were built and installed to toolchain. Enable termlib and termcap and also build shared libraries to prevent libtinfo from host being picked up. Signed-off-by: Matthias Reichl --- packages/devel/ncurses/package.mk | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/devel/ncurses/package.mk b/packages/devel/ncurses/package.mk index 2748beda82..449c4a20b5 100644 --- a/packages/devel/ncurses/package.mk +++ b/packages/devel/ncurses/package.mk @@ -60,6 +60,12 @@ PKG_CONFIGURE_OPTS_TARGET="--without-ada \ --disable-home-terminfo \ --disable-assertions" +PKG_CONFIGURE_OPTS_HOST="--enable-termcap \ + --with-termlib \ + --with-shared \ + --enable-pc-files \ + --without-manpages" + post_makeinstall_target() { cp misc/ncurses-config $TOOLCHAIN/bin chmod +x $TOOLCHAIN/bin/ncurses-config From f699a620975f0c46bbb84503a1d8bf717999d0e1 Mon Sep 17 00:00:00 2001 From: Matthias Reichl Date: Wed, 22 Apr 2020 16:18:48 +0200 Subject: [PATCH 2/4] gdb: support building remote/cross gdb for host gdbserver is already present in the image but a remote/cross gdb for the target arch was missing. Add this so we can easily remote-debug programs. Signed-off-by: Matthias Reichl --- packages/debug/gdb/package.mk | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/debug/gdb/package.mk b/packages/debug/gdb/package.mk index 2867e0af0d..47804f8c18 100644 --- a/packages/debug/gdb/package.mk +++ b/packages/debug/gdb/package.mk @@ -9,10 +9,11 @@ PKG_LICENSE="GPL" PKG_SITE="http://www.gnu.org/software/gdb/" PKG_URL="https://ftp.gnu.org/gnu/gdb/$PKG_NAME-$PKG_VERSION.tar.xz" PKG_DEPENDS_TARGET="toolchain zlib ncurses expat" +PKG_DEPENDS_HOST="toolchain:host zlib:host ncurses:host expat:host" PKG_LONGDESC="GNU Project debugger, allows you to see what is going on inside another program while it executes." PKG_BUILD_FLAGS="+size" -PKG_CONFIGURE_OPTS_TARGET="bash_cv_have_mbstate_t=set \ +PKG_CONFIGURE_OPTS_COMMON="bash_cv_have_mbstate_t=set \ --disable-shared \ --enable-static \ --with-auto-load-safe-path=/ \ @@ -22,7 +23,6 @@ PKG_CONFIGURE_OPTS_TARGET="bash_cv_have_mbstate_t=set \ --with-intel-pt=no \ --with-babeltrace=no \ --with-expat=yes \ - --with-libexpat-prefix=${SYSROOT_PREFIX}/usr \ --disable-source-highlight \ --disable-nls \ --disable-sim \ @@ -36,6 +36,12 @@ PKG_CONFIGURE_OPTS_TARGET="bash_cv_have_mbstate_t=set \ --enable-libssp \ --disable-werror" +PKG_CONFIGURE_OPTS_TARGET="${PKG_CONFIGURE_OPTS_COMMON} \ + --with-libexpat-prefix=${SYSROOT_PREFIX}/usr" + +PKG_CONFIGURE_OPTS_HOST="${PKG_CONFIGURE_OPTS_COMMON} \ + --target=${TARGET_NAME}" + pre_configure_target() { CC_FOR_BUILD="$HOST_CC" CFLAGS_FOR_BUILD="$HOST_CFLAGS" From 7d9abe360d85224a5cff931be0f0c191344fe7fa Mon Sep 17 00:00:00 2001 From: Matthias Reichl Date: Wed, 22 Apr 2020 16:24:04 +0200 Subject: [PATCH 3/4] virtual/debug: build remote/cross gdb if REMOTE_GDB is set Signed-off-by: Matthias Reichl --- packages/virtual/debug/package.mk | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/virtual/debug/package.mk b/packages/virtual/debug/package.mk index d2a771cc8b..b12030eff6 100644 --- a/packages/virtual/debug/package.mk +++ b/packages/virtual/debug/package.mk @@ -24,3 +24,7 @@ fi if build_with_debug && [ "$VALGRIND" = "yes" ]; then PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET valgrind" fi + +if [ "$REMOTE_GDB" = "yes" ]; then + PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET gdb:host" +fi From 3524d12878b71d120661bb51170bcbe08062f8c0 Mon Sep 17 00:00:00 2001 From: Matthias Reichl Date: Wed, 22 Apr 2020 19:55:38 +0200 Subject: [PATCH 4/4] allow building with separate debug info Add SPLIT_DEBUG_INFO option, when it's set to yes the debug info is stored in separate .dwo files. This is mainly useful for remote debugging and reduces image size a lot. See also https://gcc.gnu.org/wiki/DebugFission Signed-off-by: Matthias Reichl --- config/functions | 14 +++++++++++--- config/optimize | 4 ++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/config/functions b/config/functions index b38ed56195..671fdf2a08 100644 --- a/config/functions +++ b/config/functions @@ -208,6 +208,7 @@ setup_pkg_config_host() { } setup_toolchain() { + local have_gold="no" if [ "$LTO_SUPPORT" = "yes" ]; then if flag_enabled "lto-parallel" "no"; then TARGET_CFLAGS+=" $FLAGS_OPTIM_LTO_PARALLEL $FLAGS_OPTIM_LTO_NO_FAT" @@ -233,13 +234,20 @@ setup_toolchain() { # gold flag if flag_enabled "gold" "$GOLD_SUPPORT" "only-disable"; then TARGET_LDFLAGS+=" $LDFLAGS_OPTIM_GOLD" + have_gold="yes" fi # compiler optimization, descending priority: speed, size, default if [ "${BUILD_WITH_DEBUG}" = "yes" ]; then - TARGET_CFLAGS+=" $CFLAGS_OPTIM_DEBUG" - TARGET_CXXFLAGS+=" $CXXFLAGS_OPTIM_DEBUG" - TARGET_LDFLAGS+=" $LDFLAGS_OPTIM_DEBUG" + if [ "${SPLIT_DEBUG_INFO}" = "yes" -a "${have_gold}" = "yes" ]; then + TARGET_CFLAGS+=" $CFLAGS_OPTIM_DEBUG_SPLIT" + TARGET_CXXFLAGS+=" $CXXFLAGS_OPTIM_DEBUG_SPLIT" + TARGET_LDFLAGS+=" $LDFLAGS_OPTIM_DEBUG_SPLIT" + else + TARGET_CFLAGS+=" $CFLAGS_OPTIM_DEBUG" + TARGET_CXXFLAGS+=" $CXXFLAGS_OPTIM_DEBUG" + TARGET_LDFLAGS+=" $LDFLAGS_OPTIM_DEBUG" + fi elif flag_enabled "speed" "no"; then TARGET_CFLAGS+=" $CFLAGS_OPTIM_SPEED" TARGET_CXXFLAGS+=" $CXXFLAGS_OPTIM_SPEED" diff --git a/config/optimize b/config/optimize index 7cdb26447d..d8486d2af4 100644 --- a/config/optimize +++ b/config/optimize @@ -43,6 +43,10 @@ CXXFLAGS_OPTIM_SIZE="$CFLAGS_OPTIM_SIZE" CFLAGS_OPTIM_DEBUG="-ggdb -Os" CXXFLAGS_OPTIM_DEBUG="$CFLAGS_OPTIM_DEBUG" LDFLAGS_OPTIM_DEBUG="-ggdb" +# split debug settings (requires gold) +CFLAGS_OPTIM_DEBUG_SPLIT="-gsplit-dwarf -Os" +CXXFLAGS_OPTIM_DEBUG_SPLIT="$CFLAGS_OPTIM_DEBUG_SPLIT" +LDFLAGS_OPTIM_DEBUG_SPLIT="-Wl,--gdb-index" # position-independent code CFLAGS_OPTIM_PIC="-fPIC -DPIC"