# HG changeset patch # User "Yann E. MORIN" # Date 1318625064 -7200 # Node ID 13df2720b374cbab6aa84b90414a7e5bcf6369f6 # Parent afa3fde1f7a700556fedd8f6df26a3b15c1b645d scripts: check host features with host compiler Currently, we check host feature in ./configure. This works only for cross toolchains, but not for canadian toolchains. ./configure has absolutely no way to know what the host for the toolchain will be; only the build scripts know. So, move the headers & libraries checks from ./configure to the build scripts, early enough in the build, but not before we know the host compiler and other tools. Signed-off-by: "Yann E. MORIN" diff -r afa3fde1f7a7 -r 13df2720b374 config/cc/gcc.in.2 --- a/config/cc/gcc.in.2 Sun Oct 16 13:26:26 2011 +0200 +++ b/config/cc/gcc.in.2 Fri Oct 14 22:44:24 2011 +0200 @@ -44,9 +44,8 @@ bool prompt "Link libstdc++ statically into the gcc binary" default y - depends on CONFIGURE_static_link_ok - depends on CONFIGURE_has_static_libstdcxx depends on CC_GCC_4_4_or_later + select WANTS_STATIC_LINK help Newer gcc versions use the PPL library which is C++ code. Statically linking libstdc++ increases the likeliness that the gcc binary will diff -r afa3fde1f7a7 -r 13df2720b374 config/debug/gdb.in.cross --- a/config/debug/gdb.in.cross Sun Oct 16 13:26:26 2011 +0200 +++ b/config/debug/gdb.in.cross Fri Oct 14 22:44:24 2011 +0200 @@ -3,18 +3,10 @@ config STATIC_TOOLCHAIN select GDB_CROSS_STATIC if GDB_CROSS -comment "Cross-gdb - disabled (requires expat; re-run ./configure to enable)" - depends on !CONFIGURE_has_expat - -comment "Static cross-gdb - disabled (requires static expat; re-run ./configure to enable)" - depends on STATIC_TOOLCHAIN && !CONFIGURE_has_static_expat - config GDB_CROSS bool prompt "Cross-gdb" default y - depends on CONFIGURE_has_expat - depends on !STATIC_TOOLCHAIN || CONFIGURE_has_static_expat select GDB_GDBSERVER if ! BARE_METAL help Build and install a cross-gdb for the target, to run on host. @@ -24,8 +16,7 @@ config GDB_CROSS_STATIC bool prompt "Build a static cross gdb" - depends on CONFIGURE_static_link_ok - depends on CONFIGURE_has_static_expat + select WANTS_STATIC_LINK help A static cross gdb can be usefull if you debug on a machine that is not the one that is used to compile the toolchain. @@ -36,7 +27,6 @@ config GDB_CROSS_PYTHON bool prompt "Enable python scripting" - depends on CONFIGURE_has_python depends on ! GDB_CROSS_STATIC default y help diff -r afa3fde1f7a7 -r 13df2720b374 config/debug/gdb.in.native --- a/config/debug/gdb.in.native Sun Oct 16 13:26:26 2011 +0200 +++ b/config/debug/gdb.in.native Fri Oct 14 22:44:24 2011 +0200 @@ -10,13 +10,9 @@ if GDB_NATIVE -config GDB_NATIVE_NO_STATIC - bool - config GDB_NATIVE_STATIC bool prompt "Build a static native gdb" - depends on ! GDB_NATIVE_NO_STATIC help In case you have trouble with dynamic loading of shared libraries, you will find that a static gdb comes in handy. diff -r afa3fde1f7a7 -r 13df2720b374 config/toolchain.in --- a/config/toolchain.in Sun Oct 16 13:26:26 2011 +0200 +++ b/config/toolchain.in Fri Oct 14 22:44:24 2011 +0200 @@ -46,20 +46,14 @@ In fact, the sysroot path is constructed as: ${CT_PREFIX_DIR}/${CT_TARGET}/${CT_SYSROOT_DIR_PREFIX}/${CT_SYSROOT_NAME} -# In case we need to add more conditions to enable static -# toolchain, we'll be adding them here -config STATIC_TOOLCHAIN_POSSIBLE +config WANTS_STATIC_LINK bool - default y - depends on CONFIGURE_static_link_ok - depends on CONFIGURE_has_static_libstdcxx - # Add new deps here! :-) config STATIC_TOOLCHAIN bool prompt "Build Static Toolchain (EXPERIMENTAL)" depends on EXPERIMENTAL - depends on STATIC_TOOLCHAIN_POSSIBLE + select WANTS_STATIC_LINK help Build static host binaries. @@ -68,8 +62,9 @@ you can say 'Y' here, and all the host tools will be linked statically. The impacted tools are: - - the GNU binutils - - the cross-gdb + - the cross-binutils (GNU binutils, elf2flt) + - the cross-compiler (gcc) + - the cross-debugger (gdb) The default is 'N', to build dynamicaly-linked host binaries. diff -r afa3fde1f7a7 -r 13df2720b374 configure --- a/configure Sun Oct 16 13:26:26 2011 +0200 +++ b/configure Fri Oct 14 22:44:24 2011 +0200 @@ -534,36 +534,8 @@ ;; esac -printf "Checking if static linking is possible... " -static_link_ok="" -case "${host}" in - Darwin) ;; - *) tmp=.static.tmp - if gcc -xc - -static -o "${tmp}" >/dev/null 2>&1 <<-_EOF_ - int main() { return 0; } - _EOF_ - then - static_link_ok="y" - fi - rm -f "${tmp}" - ;; -esac -if [ "${static_link_ok}" = "y" ]; then - static_link_ko="" - printf "yes\n" -else - static_link_ko="y" - printf "no\n" - printf " * An optional host feature is missing, some features will be disabled:\n" - printf " * - It will not be possible to statically link toolchain's binaries\n" -fi -add_to_kconfig_list static_link_ok - # Library checks -libs_exts="so dylib" -if [ "${static_link_ok}" = "y" ]; then - libs_exts="${libs_exts} a" -fi +libs_exts="so dylib a" ncurses_hdrs="ncurses/ncurses.h ncurses/curses.h ncurses.h curses.h" ncurses_libs="libncursesw libncurses libcurses" @@ -572,46 +544,6 @@ inc="${ncurses_hdrs}" \ err="The 'ncurses' library is needed fo the menuconfig frontend" -has_or_abort lib="libstdc++" \ - lib_exts="${libs_exts}" \ - err="The 'libstdc++' library is needed to build gcc" - -# Yes, we may be checking twice for libstdc++.a -# The first is because we need one instance of libstdc++ (shared or static) -# because it is needed for PPL; the second is because the static version is -# required for static-linking, and if missing, the option is removed. -has_or_warn lib="libstdc++" \ - lib_exts="a" \ - err="static 'libstdc++' is needed to statically link the toolchain's executables" \ - kconfig=has_static_libstdcxx \ - skip="${static_link_ko}" - -has_or_warn inc="expat.h" \ - lib="libexpat" \ - lib_exts="${libs_exts}" \ - err="The 'expat' header file and library are needed to link cross-gdb's executables" \ - kconfig=has_expat - -# Yes, we may be checking twice for libexpat.a -# The first is because we need one instance of libexpat (shared or static) -# because it is needed for cross-gdb; the second is because the static version -# is required for static-linking, and if missing, the option is removed. -has_or_warn lib="libexpat" \ - lib_exts="a" \ - err="static 'expat' is needed to statically link cross-gdb's executables" \ - kconfig=has_static_expat \ - skip="${static_link_ko}" - -for v in 7 6 5 4; do - python_incs="${python_incs} python2.${v}/Python.h" - python_libs="${python_libs} libpython2.${v}" -done -has_or_warn inc="${python_incs}" \ - lib="${python_libs}" \ - lib_exts="${libs_exts}" \ - kconfig=has_python \ - err="The 'python' header file and library are needed for some features of cross-gdb" - #--------------------------------------------------------------------- # Compute the version string diff -r afa3fde1f7a7 -r 13df2720b374 scripts/crosstool-NG.sh.in --- a/scripts/crosstool-NG.sh.in Sun Oct 16 13:26:26 2011 +0200 +++ b/scripts/crosstool-NG.sh.in Fri Oct 14 22:44:24 2011 +0200 @@ -464,6 +464,19 @@ *) ;; esac + # Now we know our host and where to find the host tools, we can check + # if static link was requested, but only if it was requested + if [ "${CT_WANTS_STATIC_LINK}" = "y" ]; then + tmp="${CT_BUILD_DIR}/.static-test" + if ! "${CT_HOST}-gcc" -xc - -static -o "${tmp}" >/dev/null 2>&1 <<-_EOF_ + int main() { return 0; } + _EOF_ + then + CT_Abort "Static linking impossible on the host system '${CT_HOST}'" + fi + rm -f "${tmp}" + fi + # Help gcc CT_CFLAGS_FOR_HOST= [ "${CT_USE_PIPES}" = "y" ] && CT_CFLAGS_FOR_HOST+=" -pipe"