All of lore.kernel.org
 help / color / mirror / Atom feed
From: Martin Jansa <martin.jansa@gmail.com>
To: Iyad Qumei <iyadkq@gmail.com>
Cc: openembedded-core@lists.openembedded.org
Subject: Re: [PATCH] icecc-create-env: Upgrade script
Date: Wed, 4 Dec 2013 18:43:49 +0100	[thread overview]
Message-ID: <20131204174349.GI3714@jama> (raw)
In-Reply-To: <1386176874-4286-2-git-send-email-iyadkq@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 13100 bytes --]

On Wed, Dec 04, 2013 at 09:07:54AM -0800, Iyad Qumei wrote:
> The original icecc script does not handle toolchain content
> properly, resulting in build failures, such as
> 
>    gxx: fatal error: -fuse-linker-plugin, but liblto_plugin.so not found
> 
> This patch brings in the latest script form the icecream source, and
> modifies it for use in the OE build environment.  The change was tested
> with OE-Core built toolchain, and external toolchain.
> 
> Signed-off-by: Iyad Qumei <iyadkq@gmail.com>
> ---
>  .../icecc-create-env-native/icecc-create-env       |  266 +++++++++++++++-----
>  ...ive_0.1.bb => icecc-create-env-native_1.0.1.bb} |    5 +-
>  2 files changed, 209 insertions(+), 62 deletions(-)
>  rename meta/recipes-devtools/icecc-create-env/{icecc-create-env-native_0.1.bb => icecc-create-env-native_1.0.1.bb} (89%)

NACK

> 
> diff --git a/meta/recipes-devtools/icecc-create-env/icecc-create-env-native/icecc-create-env b/meta/recipes-devtools/icecc-create-env/icecc-create-env-native/icecc-create-env
> index 7e4dbc4..0eb2217 100755
> --- a/meta/recipes-devtools/icecc-create-env/icecc-create-env-native/icecc-create-env
> +++ b/meta/recipes-devtools/icecc-create-env/icecc-create-env-native/icecc-create-env
> @@ -24,12 +24,12 @@ add_file ()
>    fi
>    test -z "$name" && return
>    # ls -H isn't really the same as readlink, but
> -  # readlink is not portable enough.
> +  # readlink is not portable enough. 

Don't introduce trailing whitespaces

>    path=`ls -H $path`
>    toadd="$name=$path"
>    is_contained "$toadd" && return
>    if test -z "$silent"; then
> -  echo "adding file $toadd"
> +    echo "adding file $toadd"
>    fi
>    target_files="$target_files $toadd"
>    if test -x "$path"; then
> @@ -43,19 +43,81 @@ add_file ()
>  		#         libc.so.6 => /lib/tls/libc.so.6 (0xb7e81000)
>  		#         /lib/ld-linux.so.2 (0xb7fe8000)
>  		# covering both situations ( with => and without )
> -          for lib in `ldd "$path" | sed -n 's,^[^/]*\(/[^ ]*\).*,\1,p'`; do
> -	    test -f "$lib" || continue
> -	    # Check wether the same library also exists in the parent directory,
> -	    # and prefer that on the assumption that it is a more generic one.
> -	    local baselib=`echo "$lib" | sed 's,\(/[^/]*\)/.*\(/[^/]*\)$,\1\2,'`
> -	    test -f "$baselib" && lib=$baselib
> -	  add_file "$lib"
> -        done
> -      fi
> +           for lib in `ldd "$path" | sed -n 's,^[^/]*\(/[^ ]*\).*,\1,p'`; do
> +	     test -f "$lib" || continue
> +	     # Check wether the same library also exists in the parent directory,
> +	     # and prefer that on the assumption that it is a more generic one.
> +	     local baselib=`echo "$lib" | sed 's,\(/[^/]*\)/.*\(/[^/]*\)$,\1\2,'`
> +	     test -f "$baselib" && lib=$baselib
> +             add_file "$lib"
> +           done
> +	fi

Don't mix tabs and spaces.

>      fi
>    fi
>  }
>  
> +# returns abs path to filedir
> +abs_path()
> +{
> +    local path=$1
> +    if test -f "$path"; then
> +        pushd $(dirname $path) > /dev/null 2>&1
> +        dir_path=`pwd -P`
> +        path=$dir_path/$(basename $path)
> +        popd > /dev/null 2>&1
> +    elif test -d "$path"; then
> +        pushd $path > /dev/null 2>&1
> +        path=`pwd -P`
> +        popd > /dev/null 2>&1
> +    fi
> +    echo $path
> +}
> +
> +# Search and add file to the tarball file.
> +search_addfile()
> +{
> +    local compiler=$1
> +    local file_name=$2
> +    local file_installdir=$3
> +    local file=""
> +
> +    file=$($compiler -print-prog-name=$file_name)
> +
> +    if test -z "$file" || test "$file" = "$file_name" || ! test -e "$file"; then
> +        file=`$compiler -print-file-name=$file_name`
> +    fi
> +
> +    if ! test -e "$file"; then
> +        return 1
> +    fi
> +
> +    if test -z "$file_installdir"; then
> +        # The file is going to be added to the tarball
> +        # in the same path where the compiler found it.
> +
> +        file_installdir=$(dirname $file)
> +        abs_installdir=$(abs_path $file_installdir)
> +
> +        if test "$file_installdir" != "$abs_installdir"; then
> +            # The path where the compiler found the file is relative!
> +            # If the path where the compiler found the file is relative
> +            # to compiler's path, we must change it to be relative to
> +            # /usr/bin path where the compiler is going to be installed
> +            # in the tarball file.
> +            # Replacing relative path by abs path because the tar command
> +            # used to create the tarball file doesn't work well with
> +            # relative path as installdir.
> +
> +            compiler_basedir=$(abs_path ${compiler%/*/*})
> +            file_installdir=${abs_installdir/$compiler_basedir/"/usr"}
> +        fi
> +    fi
> +
> +    add_file "$file" "$file_installdir/$file_name"
> +
> +    return 0
> +}
> +
>  # backward compat
>  if test "$1" = "--respect-path"; then
>    shift
> @@ -67,64 +129,151 @@ if test "$1" = "--silent"; then
>   shift
>  fi
>  
> -
> -added_gcc=$1
> -shift
> -added_gxx=$1
> -shift
> -added_as=$1
> -shift
> -archive_name=$1
> -
> -if test -z "$added_gcc" || test -z "$added_gxx" ; then
> -	echo "usage: $0 <gcc_path> <g++_path>"
> -	exit 1
> +if test "$1" != "--gcc" -a "$1" != "--clang"; then
> +    # backward compat
> +    added_gcc=$1
> +    shift
> +    added_gxx=$1
> +    shift
> +    added_as=$1
> +    shift
> +    archive_name=$1
> +    shift
> +    gcc=1
> +else
> +    if test "$1" = "--gcc"; then
> +        shift
> +        added_gcc=$1
> +        shift
> +        added_gxx=$1
> +        shift
> +        added_as=$1
> +        shift
> +        archive_name=$1
> +        shift
> +        gcc=1
> +    elif test "$1" = "--clang"; then
> +        shift
> +        added_clang=$1
> +        shift
> +        added_compilerwrapper=$1
> +        shift
> +        clang=1
> +    else
> +        usage
> +        exit 1
> +    fi
>  fi
>  
> -if ! test -x "$added_gcc" ; then
> -  echo "'$added_gcc' is no executable."
> -  exit 1
> +if test -n "$gcc"; then
> +    if test -z "$added_gcc" || test -z "$added_gxx"; then
> +        usage
> +        exit 1
> +    fi
> +    if ! test -x "$added_gcc" ; then
> +        echo "'$added_gcc' is no executable."
> +        exit 1
> +    fi
> +    if ! test -x "$added_gxx" ; then
> +        echo "'$added_gxx' is no executable."
> +        exit 1
> +    fi
> +    if test -z "$added_as" ; then
> +      add_file /usr/bin/as /usr/bin/as
> +    else
> +      if ! test -x "$added_as" ; then
> +        echo "'$added_as' is no executable."
> +        exit 1
> +      fi
> +      add_file $added_as  /usr/bin/as
> +    fi
>  fi
>  
> -if ! test -x "$added_gxx" ; then
> -  echo "'$added_gcc' is no executable."
> -  exit 1
> +if test -n "$clang"; then
> +    if ! test -x "$added_clang" ; then
> +        echo "'$added_clang' is no executable."
> +        exit 1
> +    fi
> +    if ! test -x "$added_compilerwrapper" ; then
> +        echo "'$added_compilerwrapper' is no executable."
> +        exit 1
> +    fi
>  fi
>  
> +extrafiles=
> +while test "x$1" = "x--addfile"; do
> +    shift
> +    extrafiles="$extrafiles $1"
> +    shift
> +done
>  
> +tempdir=`mktemp -d /tmp/iceccenvXXXXXX`
>  
> -add_file $added_gcc /usr/bin/gcc
> -add_file $added_gxx /usr/bin/g++
> +# for testing the environment is usable at all
> +add_file /bin/true
>  
> -if test -z "$added_as" ; then
> - add_file /usr/bin/as /usr/bin/as
> -else
> - if ! test -x "$added_as" ; then
> -  echo "'$added_as' is no executable."
> -  exit 1
> - fi
> +if test -n "$gcc"; then
> +    # getting compilers abs path
> +    added_gcc=$(abs_path $added_gcc)
> +    added_gxx=$(abs_path $added_gxx)
>  
> - add_file $added_as  /usr/bin/as
> -fi
> +    if test -z "$clang"; then
> +        add_file $added_gcc /usr/bin/gcc
> +        add_file $added_gxx /usr/bin/g++
> +    else
> +        # HACK: The clang case below will add a wrapper in place of gcc, so add the real
> +        # gcc under a different name that the wrapper will call.
> +        add_file $added_gcc /usr/bin/gcc.bin
> +        add_file $added_gxx /usr/bin/g++.bin
> +    fi
> +    add_file `$added_gcc -print-prog-name=cc1` /usr/bin/cc1
> +    add_file `$added_gxx -print-prog-name=cc1plus` /usr/bin/cc1plus
> +
> +    gcc_as=$($added_gcc -print-prog-name=as)
> +    if test "$gcc_as" = "as"; then
> +      add_file /usr/bin/as
> +    else
> +      add_file "$gcc_as" /usr/bin/as
> +    fi
>  
> -add_file `$added_gcc -print-prog-name=cc1` /usr/bin/cc1
> -add_file `$added_gxx -print-prog-name=cc1plus` /usr/bin/cc1plus
> -specfile=`$added_gcc -print-file-name=specs`
> -if test -n "$specfile" && test -e "$specfile"; then
> -  add_file "$specfile"
> +    search_addfile $added_gcc specs
> +    search_addfile $added_gcc liblto_plugin.so
>  fi
>  
> -ltofile=`$added_gcc -print-prog-name=lto1`
> -pluginfile="${ltofile%lto1}liblto_plugin.so"
> -if test -r "$pluginfile"
> -then
> -  add_file $pluginfile  ${pluginfile#*usr}
> -  add_file $pluginfile  /usr${pluginfile#*usr}
> +if test -n "$clang"; then
> +    add_file $added_clang /usr/bin/clang
> +    # HACK: Older icecream remotes have /usr/bin/{gcc|g++} hardcoded and wouldn't
> +    # call /usr/bin/clang at all. So include a wrapper binary that will call gcc or clang
> +    # depending on an extra argument added by icecream.
> +    add_file $added_compilerwrapper /usr/bin/gcc
> +    add_file $added_compilerwrapper /usr/bin/g++
> +
> +    add_file $($added_clang -print-prog-name=as) /usr/bin/as
> +
> +    # clang always uses its internal .h files
> +    clangincludes=$(dirname $($added_clang -print-file-name=include/limits.h))
> +    clangprefix=$(dirname $(dirname $added_clang))
> +    for file in $(find $clangincludes -type f); do
> +      # get path without ..
> +      destfile=$(readlink -e $file)
> +      # and convert from <prefix> to /usr if needed
> +      destfile=$(echo $destfile | sed "s#$clangprefix#/usr#" )
> +      add_file "$file" "$destfile"
> +    done
>  fi
>  
> -tempdir=`mktemp -d /tmp/iceccenvXXXXXX`
> +for extrafile in $extrafiles; do
> +    add_file $extrafile
> +done
> +
> +# IKLQ ?
> +# special case for weird multilib setups
> +for dir in /lib /lib64 /usr/lib /usr/lib64; do
> +    test -L $dir && cp -p $dir $tempdir$dir
> +done
> +
>  new_target_files=
> -for i in $target_files; do
> +for i in $target_files; do 

Don't introduce trailing whitespaces

>   case $i in
>     *=/*)
>      target=`echo $i | cut -d= -f1`
> @@ -151,11 +300,11 @@ target_files=`for i in $new_target_files; do echo $i; done | sort`
>  #if not use the md5 of all files as the archive name
>  if test -z "$archive_name"; then
>    md5sum=NONE
> -  for file in /usr/bin/md5sum /bin/md5 /usr/bin/md5; do
> -    if test -x $file; then
> -      md5sum=$file
> -      break
> -    fi
> +  for file in /usr/bin/md5sum /bin/md5 /usr/bin/md5 /sbin/md5; do
> +     if test -x $file; then
> +       md5sum=$file
> +       break
> +     fi

Don't introduce wrong indenntation.

>    done
>  
>    #calculate md5 and use it as the archive name
> @@ -190,3 +339,4 @@ tar -czhf "$mydir/$archive_name" $target_files || {
>  }
>  cd ..
>  rm -rf $tempdir
> +
> diff --git a/meta/recipes-devtools/icecc-create-env/icecc-create-env-native_0.1.bb b/meta/recipes-devtools/icecc-create-env/icecc-create-env-native_1.0.1.bb
> similarity index 89%
> rename from meta/recipes-devtools/icecc-create-env/icecc-create-env-native_0.1.bb
> rename to meta/recipes-devtools/icecc-create-env/icecc-create-env-native_1.0.1.bb
> index b04474e..c03cf5a 100644
> --- a/meta/recipes-devtools/icecc-create-env/icecc-create-env-native_0.1.bb
> +++ b/meta/recipes-devtools/icecc-create-env/icecc-create-env-native_1.0.1.bb
> @@ -6,16 +6,13 @@ SECTION = "base"
>  LICENSE = "GPLv2+"
>  LIC_FILES_CHKSUM = "file://icecc-create-env;beginline=2;endline=5;md5=ae1df3d6a058bfda40b66094c5f6065f"
>  
> -PR = "r2"
> +PR = "r0"

drop

>  DEPENDS = ""
>  INHIBIT_DEFAULT_DEPS = "1"
>  
> -FILESPATH = "${FILE_DIRNAME}/${PN}/"
> -

You cannot drop it without moving file to BPN (see
http://lists.openembedded.org/pipermail/openembedded-core/2013-December/087239.html
)
>  inherit native
>  
> -PATCHTOOL = "patch"

You cannot drop it without causing dependency loop (see
http://lists.openembedded.org/pipermail/openembedded-core/2013-December/087239.html
)

>  SRC_URI = "file://icecc-create-env"
>  
>  S = "${WORKDIR}"
> -- 
> 1.7.10.4
> 
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core

-- 
Martin 'JaMa' Jansa     jabber: Martin.Jansa@gmail.com

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 205 bytes --]

  reply	other threads:[~2013-12-04 17:43 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-04 17:07 [PATCH] icecc-create-env: Upgrade script Iyad Qumei
2013-12-04 17:07 ` Iyad Qumei
2013-12-04 17:43   ` Martin Jansa [this message]
2013-12-04 22:39     ` Iyad Qumei
2013-12-04 23:27       ` Iyad Qumei
2013-12-05  0:14       ` Martin Jansa

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20131204174349.GI3714@jama \
    --to=martin.jansa@gmail.com \
    --cc=iyadkq@gmail.com \
    --cc=openembedded-core@lists.openembedded.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.