From 6102726147a6e81fd7ec209db14337055a99b84b Mon Sep 17 00:00:00 2001 From: Alexey Neyman Date: Sat, 7 Nov 2015 23:31:46 -0800 Subject: Change ncurses to a companion library. Currently, builds for build and target (matching the current implementation). Need to add building for host for canadian crosses. TIC_PATH is removed - configure in ncurses searches $PATH, so it finds 'tic' in buildtools anyway. Arguably unneeded code for MacOS also removed, with a FIXME comment for validation by someone using MacOS. Signed-off-by: Alexey Neyman diff --git a/config/companion_libs.in b/config/companion_libs.in index 2847f17..3567512 100644 --- a/config/companion_libs.in +++ b/config/companion_libs.in @@ -58,6 +58,11 @@ config EXPAT_NEEDED select EXPAT select COMPLIBS_NEEDED +config NCURSES_NEEDED + bool + select NCURSES + select COMPLIBS_NEEDED + config COMPLIBS bool @@ -113,6 +118,13 @@ config EXPAT config EXPAT_TARGET bool +config NCURSES + bool + select COMPLIBS + +config NCURSES_TARGET + bool + if LIBICONV source "config/companion_libs/libiconv.in" endif @@ -147,6 +159,11 @@ comment "expat version needed to build for target" depends on !EXPAT source "config/companion_libs/expat.in" endif +if NCURSES || NCURSES_TARGET +comment "ncurses version needed to build for target" + depends on !NCURSES +source "config/companion_libs/ncurses.in" +endif if COMPLIBS diff --git a/config/companion_libs/ncurses.in b/config/companion_libs/ncurses.in new file mode 100644 index 0000000..550cdc0 --- /dev/null +++ b/config/companion_libs/ncurses.in @@ -0,0 +1,19 @@ +# expat config file + +choice + bool + prompt "ncurses version" +# Don't remove next line +# CT_INSERT_VERSION_BELOW + +config NCURSES_V_5_9 + bool + prompt "5.9" + +endchoice + +config NCURSES_VERSION + string +# Don't remove next line +# CT_INSERT_VERSION_STRING_BELOW + default "5.9" if NCURSES_V_5_9 diff --git a/config/debug/gdb.in.native b/config/debug/gdb.in.native index 4f7e96a..1861506 100644 --- a/config/debug/gdb.in.native +++ b/config/debug/gdb.in.native @@ -6,6 +6,7 @@ config GDB_NATIVE depends on ! BARE_METAL depends on ! BACKEND select EXPAT_TARGET + select NCURSES_TARGET help Build and install a native gdb for the target, to run on the target. diff --git a/scripts/addToolVersion.sh b/scripts/addToolVersion.sh index 7ff6102..123bcb4 100755 --- a/scripts/addToolVersion.sh +++ b/scripts/addToolVersion.sh @@ -18,7 +18,7 @@ doHelp() { 'tool' in one of: gcc, binutils, glibc, uClibc, newlib, linux, gdb, dmalloc, duma, strace, ltrace, libelf, gmp, mpfr, ppl, cloog, mpc, - mingw-w64, expat + mingw-w64, expat, ncurses Valid options for all tools: --stable, -s, +x (default) @@ -192,6 +192,7 @@ while [ $# -gt 0 ]; do --mpc) EXP=; OBS=; cat=MPC; tool=mpc; tool_prefix=companion_libs; dot2suffix=;; --libelf) EXP=; OBS=; cat=LIBELF; tool=libelf; tool_prefix=companion_libs; dot2suffix=;; --expat) EXP=; OBS=; cat=EXPAT; tool=expat; tool_prefix=companion_libs; dot2suffix=;; + --ncurses) EXP=; OBS=; cat=NCURSES; tool=ncurses; tool_prefix=companion_libs; dot2suffix=;; # Tools options: -x|--experimental|+s) EXP=1;; diff --git a/scripts/build/companion_libs/220-ncurses.sh b/scripts/build/companion_libs/220-ncurses.sh new file mode 100644 index 0000000..f108214 --- /dev/null +++ b/scripts/build/companion_libs/220-ncurses.sh @@ -0,0 +1,109 @@ +# Build script for ncurses + +do_ncurses_get() { :; } +do_ncurses_extract() { :; } +do_ncurses_for_build() { :; } +do_ncurses_for_host() { :; } +do_ncurses_for_target() { :; } + +if [ "${CT_NCURSES_TARGET}" = "y" -o "${CT_NCURSES}" = "y" ]; then + +do_ncurses_get() { + CT_GetFile "ncurses-${CT_NCURSES_VERSION}" .tar.gz \ + {http,ftp,https}://ftp.gnu.org/pub/gnu/ncurses \ + ftp://invisible-island.net/ncurses +} + +do_ncurses_extract() { + CT_Extract "ncurses-${CT_NCURSES_VERSION}" + CT_DoExecLog ALL chmod -R u+w "${CT_SRC_DIR}/ncurses-${CT_NCURSES_VERSION}" + CT_Patch "ncurses" "${CT_NCURSES_VERSION}" +} + +# We need tic that runs on the build when building ncurses for host/target +do_ncurses_for_build() { + local -a opts + CT_DoStep INFO "Installing ncurses for build" + CT_mkdir_pushd "${CT_BUILD_DIR}/build-ncurses-build-${CT_BUILD}" + opts=("--enable-symlinks" \ + "--without-manpages" \ + "--without-tests" \ + "--without-cxx" \ + "--without-cxx-binding" \ + "--without-ada") + do_ncurses_backend host="${CT_BUILD}" \ + destdir="${CT_BUILDTOOLS_PREFIX_DIR}" \ + "${opts[@]}" + CT_Popd + CT_EndStep +} + +if [ "${CT_NCURSES_TARGET}" = "y" ]; then +do_ncurses_for_target() { + CT_DoStep INFO "Installing ncurses for target" + CT_mkdir_pushd "${CT_BUILD_DIR}/build-ncurses-target-${CT_TARGET}" + opts=("--without-sysmouse") + [ "${CT_CC_LANG_CXX}" = "y" ] || opts+=("--without-cxx" "--without-cxx-binding") + [ "${CT_CC_LANG_ADA}" = "y" ] || opts+=("--without-ada") + do_ncurses_backend host="${CT_TARGET}" \ + prefix="/usr" \ + destdir="${CT_SYSROOT_DIR}" \ + "${opts[@]}" + CT_Popd + CT_EndStep +} +fi + +# Build libncurses +# Parameter : description : type : default +# host : machine to run on : tuple : (none) +# prefix : prefix to install into : dir : (none) +# cflags : cflags to use : string : (empty) +# ldflags : ldflags to use : string : (empty) +# --* : passed to configure : n/a : n/a +do_ncurses_backend() { + local -a ncurses_opts + local host + local prefix + local cflags + local ldflags + local arg + local for_target + + for arg in "$@"; do + case "$arg" in + --*) + ncurses_opts+=("$arg") + ;; + *) + eval "${arg// /\\ }" + ;; + esac + done + + CT_DoLog EXTRA "Configuring ncurses" + CT_DoExecLog CFG \ + "${CT_SRC_DIR}/ncurses-${CT_NCURSES_VERSION}/configure" \ + --build=${CT_BUILD} \ + --host=${host} \ + --prefix="${prefix}" \ + --with-install-prefix="${destdir}" \ + --enable-termcap \ + "${ncurses_opts[@]}" + + # FIXME: old ncurses build code was removing -static from progs/Makefile, + # claiming static linking does not work on MacOS. A knowledge base article + # (https://developer.apple.com/library/mac/qa/qa1118/_index.html) says that + # static linking works just fine, just do not use it for libc (or other + # libraries that make system calls). ncurses use -static only for linking + # the curses library, then switches back to -dynamic - so they should be fine. + # FIXME: for target, we only need tic (terminfo compiler). However, building + # it also builds ncurses anyway, and dedicated targets (install.includes and + # install.progs) do not do well with parallel make (-jX). + CT_DoLog EXTRA "Building ncurses" + CT_DoExecLog ALL make ${JOBSFLAGS} + CT_DoLog EXTRA "Installing ncurses" + CT_DoExecLog ALL make install +} + +fi diff --git a/scripts/build/debug/300-gdb.sh b/scripts/build/debug/300-gdb.sh index 0977923..4c8116b 100644 --- a/scripts/build/debug/300-gdb.sh +++ b/scripts/build/debug/300-gdb.sh @@ -1,14 +1,7 @@ # Build script for the gdb debug facility -# The version of ncurses to use. Yes, it's hard-coded. -# It's used only internally by crosstool-NG, and is -# not exposed outside, so we don't care about providing -# config options for this. -CT_DEBUG_GDB_NCURSES_VERSION="5.9" - do_debug_gdb_parts() { need_gdb_src= - need_ncurses_src= if [ "${CT_GDB_CROSS}" = y ]; then need_gdb_src=y @@ -20,10 +13,6 @@ do_debug_gdb_parts() { if [ "${CT_GDB_NATIVE}" = "y" ]; then need_gdb_src=y - # GDB on Mingw depends on PDcurses, not ncurses - if [ "${CT_MINGW32}" != "y" ]; then - need_ncurses_src=y - fi fi } @@ -59,12 +48,6 @@ do_debug_gdb_get() { fi fi fi - - if [ "${need_ncurses_src}" = "y" ]; then - CT_GetFile "ncurses-${CT_DEBUG_GDB_NCURSES_VERSION}" .tar.gz \ - {http,ftp,https}://ftp.gnu.org/pub/gnu/ncurses \ - ftp://invisible-island.net/ncurses - fi } do_debug_gdb_extract() { @@ -80,12 +63,6 @@ do_debug_gdb_extract() { CT_Patch "gdb" "${CT_GDB_VERSION}" fi - if [ "${need_ncurses_src}" = "y" ]; then - CT_Extract "ncurses-${CT_DEBUG_GDB_NCURSES_VERSION}" - CT_DoExecLog ALL chmod -R u+w "${CT_SRC_DIR}/ncurses-${CT_DEBUG_GDB_NCURSES_VERSION}" - CT_Patch "ncurses" "${CT_DEBUG_GDB_NCURSES_VERSION}" - fi - if [ -n "${CT_ARCH_XTENSA_CUSTOM_NAME}" ]; then CT_ConfigureXtensa "gdb" "${CT_GDB_VERSION}" fi @@ -196,7 +173,6 @@ do_debug_gdb_build() { if [ "${CT_GDB_NATIVE}" = "y" ]; then local -a native_extra_config - local -a ncurses_opt local -a gdb_native_CFLAGS CT_DoStep INFO "Installing native gdb" @@ -205,19 +181,8 @@ do_debug_gdb_build() { # GDB on Mingw depends on PDcurses, not ncurses if [ "${CT_MINGW32}" != "y" ]; then - CT_DoLog EXTRA "Building static target ncurses" - - CT_mkdir_pushd "${CT_BUILD_DIR}/build-ncurses-target-${CT_TARGET}" - do_gdb_ncurses_backend host="${CT_TARGET}" \ - prefix="${CT_BUILD_DIR}/static-target" \ - cflags="${CT_CFLAGS_FOR_HOST}" \ - ldflags="" - CT_Popd native_extra_config+=("--with-curses") - # There's no better way to tell gdb where to find -lcurses... :-( - gdb_native_CFLAGS+=("-I${CT_BUILD_DIR}/static-target/include") - gdb_native_CFLAGS+=("-L${CT_BUILD_DIR}/static-target/lib") - fi # need_ncurses_src + fi native_extra_config+=("--with-expat") @@ -342,79 +307,3 @@ do_debug_gdb_build() { CT_EndStep fi } - -# Build libncurses -# Parameter : description : type : default -# host : machine to run on : tuple : (none) -# prefix : prefix to install into : dir : (none) -# cflags : cflags to use : string : (empty) -# ldflags : ldflags to use : string : (empty) -do_gdb_ncurses_backend() { - local host - local prefix - local cflags - local ldflags - local arg - - for arg in "$@"; do - eval "${arg// /\\ }" - done - - [ "${CT_CC_LANG_CXX}" = "y" ] || ncurses_opts+=("--without-cxx" "--without-cxx-binding") - [ "${CT_CC_LANG_ADA}" = "y" ] || ncurses_opts+=("--without-ada") - - CT_mkdir_pushd "build-tic" - - # We need a tic that runs on build, not on host nor on target - # Use build = CT_REAL_BUILD so that configure thinks it is - # cross-compiling, and thus will use the ${CT_BUILD}-* - # tools instead of searching for the native ones... - CT_DoExecLog CFG \ - "${CT_SRC_DIR}/ncurses-${CT_DEBUG_GDB_NCURSES_VERSION}/configure" \ - --build=${CT_BUILD} \ - --host=${CT_BUILD} \ - --prefix=/usr \ - --enable-symlinks \ - --with-build-cc=${CT_REAL_BUILD}-gcc \ - --with-build-cpp=${CT_REAL_BUILD}-gcc \ - --with-build-cflags="${CT_CFLAGS_FOR_HOST}" \ - "${ncurses_opts[@]}" - - # ncurses insists on linking tic statically. It does not work - # on some OSes (eg. MacOS-X/Darwin/whatever-you-call-it). - CT_DoExecLog DEBUG sed -r -i -e 's/-static//g;' "progs/Makefile" - - # Under some operating systems (eg. Winblows), there is an - # extension appended to executables. Find that. - tic_ext=$(grep -E '^x[[:space:]]*=' progs/Makefile |sed -r -e 's/^.*=[[:space:]]*//;') - - CT_DoExecLog ALL make ${JOBSFLAGS} -C include - CT_DoExecLog ALL make ${JOBSFLAGS} -C progs "tic${tic_ext}" - - CT_DoExecLog ALL install -d -m 0755 "${CT_BUILDTOOLS_PREFIX_DIR}/bin" - CT_DoExecLog ALL install -m 0755 "progs/tic${tic_ext}" "${CT_BUILDTOOLS_PREFIX_DIR}/bin" - - CT_Popd - - CT_mkdir_pushd "ncurses" - - CT_DoExecLog CFG \ - TIC_PATH="${CT_BUILDTOOLS_PREFIX_DIR}/bin/tic${tic_ext}" \ - "${CT_SRC_DIR}/ncurses-${CT_DEBUG_GDB_NCURSES_VERSION}/configure" \ - --build=${CT_BUILD} \ - --host=${host} \ - --with-build-cc=${CT_BUILD}-gcc \ - --with-build-cpp=${CT_BUILD}-gcc \ - --with-build-cflags="${CT_CFLAGS_FOR_HOST}" \ - --prefix="${prefix}" \ - --without-shared \ - --without-sysmouse \ - --without-progs \ - --enable-termcap \ - "${ncurses_opts[@]}" - - CT_DoExecLog ALL make ${JOBSFLAGS} - CT_DoExecLog ALL make install - - CT_Popd -} diff --git a/scripts/showSamples.sh b/scripts/showSamples.sh index 9ac7c02..f624119 100755 --- a/scripts/showSamples.sh +++ b/scripts/showSamples.sh @@ -64,6 +64,7 @@ dump_single_sample() { -o -n "${CT_MPC}" \ -o -n "${CT_LIBELF}" \ -o -n "${CT_EXPAT}" \ + -o -n "${CT_NCURSES}" \ -o -n "${CT_GMP_TARGET}" \ -o -n "${CT_MPFR_TARGET}" \ -o -n "${CT_PPL_TARGET}" \ @@ -71,17 +72,19 @@ dump_single_sample() { -o -n "${CT_MPC_TARGET}" \ -o -n "${CT_LIBELF_TARGET}" \ -o -n "${CT_EXPAT_TARGET}" \ + -o -n "${CT_NCURSES_TARGET}" \ ]; then printf " %-*s :" ${width} "Companion libs" complibs=1 fi - [ -z "${CT_GMP}" -a -z "${CT_GMP_TARGET}" ] || printf " gmp-%s" "${CT_GMP_VERSION}" - [ -z "${CT_MPFR}" -a -z "${CT_MPFR_TARGET}" ] || printf " mpfr-%s" "${CT_MPFR_VERSION}" - [ -z "${CT_PPL}" -a -z "${CT_PPL_TARGET}" ] || printf " ppl-%s" "${CT_PPL_VERSION}" - [ -z "${CT_CLOOG}" -a -z "${CT_CLOOG_TARGET}" ] || printf " cloog-ppl-%s" "${CT_CLOOG_VERSION}" - [ -z "${CT_MPC}" -a -z "${CT_MPC_TARGET}" ] || printf " mpc-%s" "${CT_MPC_VERSION}" - [ -z "${CT_LIBELF}" -a -z "${CT_LIBELF_TARGET}" ] || printf " libelf-%s" "${CT_LIBELF_VERSION}" - [ -z "${CT_EXPAT}" -a -z "${CT_EXPAT_TARGET}" ] || printf " expat-%s" "${CT_EXPAT_VERSION}" + [ -z "${CT_GMP}" -a -z "${CT_GMP_TARGET}" ] || printf " gmp-%s" "${CT_GMP_VERSION}" + [ -z "${CT_MPFR}" -a -z "${CT_MPFR_TARGET}" ] || printf " mpfr-%s" "${CT_MPFR_VERSION}" + [ -z "${CT_PPL}" -a -z "${CT_PPL_TARGET}" ] || printf " ppl-%s" "${CT_PPL_VERSION}" + [ -z "${CT_CLOOG}" -a -z "${CT_CLOOG_TARGET}" ] || printf " cloog-ppl-%s" "${CT_CLOOG_VERSION}" + [ -z "${CT_MPC}" -a -z "${CT_MPC_TARGET}" ] || printf " mpc-%s" "${CT_MPC_VERSION}" + [ -z "${CT_LIBELF}" -a -z "${CT_LIBELF_TARGET}" ] || printf " libelf-%s" "${CT_LIBELF_VERSION}" + [ -z "${CT_EXPAT}" -a -z "${CT_EXPAT_TARGET}" ] || printf " expat-%s" "${CT_EXPAT_VERSION}" + [ -z "${CT_NCURSES}" -a -z "${CT_NCURSES_TARGET}" ] || printf " ncurses-%s" "${CT_NCURSES_VERSION}" [ -z "${complibs}" ] || printf "\n" printf " %-*s : %s\n" ${width} "binutils" "binutils-${CT_BINUTILS_VERSION}" printf " %-*s :" ${width} "C compilers" -- cgit v0.10.2-6-g49f6