This is the mail archive of the crossgcc@sourceware.org mailing list for the crossgcc project.

See crosstool-NG for lots more information.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] scripts: refine static linking check to better guide the user


Minor commentary: I implemented Yann's suggested cleanups-- thanks,
it's vastly better, and should be easier to extend in the future.  And
I also pushed this stuff down just slightly in the code so that (a) we
can test using the CFLAGS we've derived and (b) we can note to the
user the high level point: testing that the host compiler is working--
which seems like a separate activity from "Building Environment."
Yann, if you disagree I can of course move it back up.

        -dp

On Tue, Nov 20, 2012 at 5:02 PM, Daniel Price <daniel.price@gmail.com> wrote:
> # HG changeset patch
> # User Daniel Price <daniel.price@gmail.com>
> # Date 1353459557 28800
> # Node ID 163f86b5216fc08c672a687d549dd90b062c81ef
> # Parent  5df2d60ca8476069f3dccf7526940058a47bc837
> scripts: refine static linking check to better guide the user
> scripts: fail on ':' in paths
>
> Signed-off-by: Daniel Price <daniel.price@gmail.com>
>
> diff -r 5df2d60ca847 -r 163f86b5216f scripts/crosstool-NG.sh.in
> --- a/scripts/crosstool-NG.sh.in        Mon Nov 19 15:23:05 2012 -0800
> +++ b/scripts/crosstool-NG.sh.in        Tue Nov 20 16:59:17 2012 -0800
> @@ -66,6 +66,9 @@
>              *" "*)
>                  CT_Abort "'CT_${d}_DIR'='${dir}' contains a space in it.\nDon't use spaces in paths, it breaks things."
>                  ;;
> +            *":"*)
> +                CT_Abort "'CT_${d}_DIR'='${dir}' contains a colon in it.\nDon't use colons in paths, it breaks things."
> +                ;;
>          esac
>  done
>
> @@ -421,8 +424,7 @@
>                  where=$(CT_Which "${tool}")
>              fi
>
> -            # Not all tools are available for all platforms, but some are really,
> -            # bally needed
> +            # Not all tools are available for all platforms, but some are required.
>              if [ -n "${where}" ]; then
>                  CT_DoLog DEBUG "  '${!v}-${tool}' -> '${where}'"
>                  printf "#${BANG}${CT_CONFIG_SHELL}\nexec '${where}' \"\${@}\"\n" >"${CT_BUILDTOOLS_PREFIX_DIR}/bin/${!v}-${tool}"
> @@ -474,25 +476,13 @@
>          *)  ;;
>      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
>      # Explicitly optimise, else the lines below will overide the
>      # package's default optimisation flags
>      CT_CFLAGS_FOR_HOST="-O2 -g"
>      [ "${CT_USE_PIPES}" = "y" ] && CT_CFLAGS_FOR_HOST+=" -pipe"
>      CT_CFLAGS_FOR_HOST+=" ${CT_EXTRA_FLAGS_FOR_HOST}"
> +    CT_DoLog DEBUG "gcc CFLAGS for host compiler: ${CT_CFLAGS_FOR_HOST}"
>
>      # Set the shell to be used by ./configure scripts and by Makefiles (those
>      # that support it!).
> @@ -510,6 +500,36 @@
>      [ ${CT_PARALLEL_JOBS} -gt 0 ] && JOBSFLAGS="${JOBSFLAGS} -j${CT_PARALLEL_JOBS}"
>      [ ${CT_LOAD} -ne 0 ] && JOBSFLAGS="${JOBSFLAGS} -l${CT_LOAD}"
>
> +    CT_DoLog INFO "Testing host compiler"
> +    # Now that we've set up $PATH and $CT_CFLAGS_FOR_HOST, sanity test that gcc
> +    # is runnable so that the user can troubleshoot problems if not.
> +    CT_DoLog DEBUG "Checking that we can run gcc -v"
> +    CT_DoExecLog DEBUG "${CT_HOST}-gcc" -v
> +
> +    # Create a simple C program for testing.
> +    testc="${CT_BUILD_DIR}/.test.c"
> +    printf "int main() {return 0; }\n" > "${testc}"
> +    gccout="${CT_BUILD_DIR}/.gccout"
> +
> +    CT_DoLog DEBUG "Checking that gcc can compile a trivial program"
> +    CT_DoExecLog DEBUG "${CT_HOST}-gcc" ${CT_CFLAGS_FOR_HOST} -xc "${testc}" -o "${gccout}"
> +    rm -f "${gccout}"
> +
> +    if [ "${CT_WANTS_STATIC_LINK}" = "y" ]; then
> +        CT_DoLog DEBUG "Checking that gcc can compile a trivial statically linked program (CT_WANTS_STATIC_LINK)"
> +        CT_DoLog DEBUG "You may need to ensure that static libraries such as libc.a are installed on your system"
> +        CT_DoExecLog DEBUG "${CT_HOST}-gcc" ${CT_CFLAGS_FOR_HOST} -xc "${testc}" -static -o "${gccout}"
> +        rm -f "${gccout}"
> +    fi
> +
> +    if [ "${CT_CC_STATIC_LIBSTDCXX}" = "y" ]; then
> +        CT_DoLog DEBUG "Checking that gcc can statically link libstdc++ (CT_CC_STATIC_LIBSTDCXX)"
> +        CT_DoLog DEBUG "You may need to ensure that libstdc++.a is installed on your system"
> +        CT_DoExecLog DEBUG "${CT_HOST}-gcc" ${CT_CFLAGS_FOR_HOST} -xc "${testc}" -static -lstdc++ -o "${gccout}"
> +        rm -f "${gccout}"
> +    fi
> +    rm -f "${testc}"
> +
>      # We need to save the real .config with kconfig's value,
>      # not our mangled .config.2 with arrays.
>      CT_DoLog EXTRA "Installing user-supplied crosstool-NG configuration"



-- 
Daniel.Price@gmail.com; Twitter: @danielbprice

--
For unsubscribe information see http://sourceware.org/lists.html#faq


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]