It's basically an extension of the existing cross compilation suite
and mostly OBS optimizations, not something released into products.

The current load of ARM builds on OBS is very extensive and this is
really the only way to bring it down - leaving processing power for
all builds. If we are to run seperately ARM softfp and hardfp for a
little while, speedrpm is a requirement as not to slow down the
project - in fact, would speed up general development.

Most of the time spent in builds is in the tools specified. It is
stupid to use emulation when there is a straight-forward way to do
accelerated builds, I think.

We can send it past program management if you want but the question is
who? It isn't Core, not Handset, but rather release management if
anything as it's OBS/build specifics :)

/Carsten

2011/1/11 Zhang, Austin <[email protected]>:
> Carsten and Simon,
>
> Is this speedrpm idea widely communicated and bought in?
> There would be many new imported packages.
>
> -----Original Message-----
> From: [email protected] 
> [mailto:[email protected]] On Behalf Of Carsten V. Munk
> Sent: Tuesday, January 11, 2011 3:29 PM
> To: [email protected]
> Subject: [meego-commits] 11723: New package devel:toolchain/coreutils-x86
>
> Hi,
> Adding new package coreutils-x86 in project devel:toolchain. Please review 
> and accept ASAP.
>
> Justification for this new package:
>
> Second batch - submit new packages for speedrpm, BMC#12113. When these are 
> built, prjconf can be modified to enable speedrpm.
>
> Thank You,
> Carsten V. Munk
>
> [This message was auto-generated]
>
> ---
>
> Request #11723:
>
>  submit:   devel:hardfp:base/coreutils-x86(r2) -> 
> devel:toolchain/coreutils-x86
>
>
> Message:
>    Second batch - submit new packages for speedrpm, BMC#12113. When these are 
> built, prjconf can be modified to enable speedrpm.
>
> State:   new          2011-01-10T23:28:39 cvm
> Comment: None
>
>
> This is a NEW package in devel:toolchain project.
> The files in the new package:
> coreutils-x86/
>  |__  baselibs.conf
>  |__  binaries_to_prepare
>  |__  coreutils-x86.changes
>  |__  coreutils-x86.spec
>  |__  files_to_ignore
>
> The content of the spec file, coreutils-x86.spec:
> ===================================================================
> %define __strip /bin/true
> %define _build_name_fmt    
> %%{ARCH}/%%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.dontuse.rpm
> # meta spec file for cross-chroot setup
> #
> # Copyright (c) 2010  Jan-Simon Möller ([email protected])
> # License: GPLv2
>
> ## README
> ##
> ## In this file:
> ## 1) define name of original package (see oldname)
> ##
> ## File binaries_to_prepare:
> ## 2) fill in the binaries which need to be available to the foreign chroot
> ##    e.g. /bin/bash   -  this will make a i586 bash available
> ##
>
> #\/\/\/\/\/\/\/\/\/\/
> ### only changes here
> #
> # The original package name
> %define oldname coreutils
> #
> # The architectures this meta package is built on
> %define myexclusive i586
> #
> ### no changes needed below this line
> # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>
>
>
> ### no changes needed
> #
> # The new package name - convention is %oldname-x86
> %define newname %{oldname}-x86
> #
> # The version of the original package is read from its rpm db info
> %{expand:%%define newversion %(rpm -q --qf '[%{version}]' %oldname)}
> #
> # The license of the original package is read from its rpm db info
> %{expand:%%define newlicense %(rpm -q --qf '[%{license}]' %oldname)}
> #
> # The group information of the original package
> %{expand:%%define newgroup %(rpm -q --qf '[%{group}]' %oldname)}
> #
> # The summary of the original package
> %{expand:%%define newsummary %(rpm -q --qf '[%{summary} - special version ]' 
> %oldname)}
> #
> # New rpath to add to files on request
> %define newrpath "/emul/ia32-linux/lib:/emul/ia32-linux/usr/lib"
> %define newinterpreter /emul/ia32-linux/lib/ld-linux.so.2
> #
> # Some automatic checks for availability
> # binaries_to_prepare
> %define binaries_to_prepare %{expand:%(test -e 
> %{_sourcedir}/binaries_to_prepare && echo 1 || echo 0)}
> %define libraries_to_prepare %{expand:%(test -e 
> %{_sourcedir}/libraries_to_prepare && echo 1 || echo 0)}
> %define special_script %{expand:%(test -e %{_sourcedir}/special_script && 
> echo 1 || echo 0)}
> %define files_to_ignore %{expand:%(test -e %{_sourcedir}/files_to_ignore && 
> echo 1 || echo 0)}
> #
> ### no changes needed below this line
> %define nodebug 1
>
>
> Name:          %newname
> Version:       %newversion
> Release:       7
> AutoReqProv:   0
> Provides:      %newname
> BuildRequires: rpm grep tar patchelf sed -rpmlint-Moblin -rpmlint-mini 
> -post-build-checks
> BuildRequires: %oldname
> Requires:      %oldname
> # no auto requirements - they're generated
> License:       %newlicense
> Group:         %newgroup
> ExclusiveArch: %myexclusive
> Summary:       Don't use! %newsummary
> BuildRoot:     %{_tmppath}/%{name}-%{version}-build
> %if %binaries_to_prepare
> Source10:      binaries_to_prepare
> %endif
> %if %libraries_to_prepare
> Source20:      libraries_to_prepare
> %endif
> %if %special_script
> Source30:      special_script
> %endif
> %if %files_to_ignore
> Source40:      files_to_ignore
> %endif
>
> %description
> This is a meta-package providing %name.
> It is not intended to be used on a normal system/device!
> Original description:
> %{expand:%(rpm -q --qf '[%{description}]' %oldname)}
>
>
>
> %prep
>
> %build
>
> %install
> %if %nodebug
> set +x
> %endif
> mkdir -p %buildroot
> rpm -ql %oldname > filestoinclude1
>
> # ignore files - construct sed script
> sedtmp="sedtmp.$$"
> echo "s#^%{_docdir}.*##" >> $sedtmp
> echo "s#^%{_mandir}.*##" >> $sedtmp
> echo "s#^%{_infodir}.*##" >> $sedtmp
>
> # evaluate files_to_ignore
> %if %files_to_ignore
> for i in `cat %{_sourcedir}/files_to_ignore`; do
>  echo "Ignoring file: $i"
>  echo "s#^${i}.*##" >> $sedtmp
> done
> %endif
>
> # ignore default filesystem files
> for i in `rpm -ql filesystem`; do
>  echo "s#^${i}\$##" >> $sedtmp
> done
>
> #finish up
> echo "/^\$/d" >> $sedtmp
>
> #execute
> sed -f $sedtmp -i filestoinclude1
>
> # tar copy to buildroot
> tar -T filestoinclude1 -cpf - | ( cd %buildroot && tar -xpf - )
> rm filestoinclude1
>
> # Todo: refractor
> # no directories, in filelist
> find %buildroot >  filestoinclude2
> cat filestoinclude2 | sed -e "s#%{buildroot}##g" | uniq | sort > 
> filestoinclude1
> for i in `cat filestoinclude1`; do
> # no directories
>  if ! test -d %buildroot/$i ; then
>    #
>    echo "$i" >> filestoinclude
>  fi
> done
> rm filestoinclude1
> rm filestoinclude2
>
> # patchelf the binaries
> %if %binaries_to_prepare
> echo ""
> echo "[ .oO Preparing binaries Oo. ]"
> echo ""
> mkdir -p %buildroot/%{_prefix}/share/applybinary/
> for binary in `cat %{_sourcedir}/binaries_to_prepare` ; do
>  echo "Processing binary: $binary"
>  tmp="tmp.$$"
> %if %nodebug
>  debug=
> %else
>  debug="--debug"
> %endif
>  ldd $binary  | grep -v "ld-linux" | grep -v "linux-gate" |  sed -e 
> "s#=.*##g" -e "s#^\t*##g"  > $tmp
>  deps=$(for i in `cat $tmp` ; do rpm -q --whatprovides "$i" | grep -v "no 
> package"; done)
>  cleandeps=$(echo "$cleandeps" "$deps" | sort | uniq | sed -e "s/-[0-9].*//g")
>  patchelf $debug --set-rpath %newrpath %buildroot/$binary
>  patchelf $debug --set-interpreter %newinterpreter %buildroot/$binary
>  patchelf $debug --set-rpath %newrpath %buildroot/$binary
>  patchelf $debug --set-interpreter %newinterpreter %buildroot/$binary
>  if test -n "$debug"; then
>    patchelf --print-rpath %buildroot/$binary
>    patchelf --print-interpreter %buildroot/$binary
>  fi
>  echo "$binary" >> %buildroot/%{_prefix}/share/applybinary/%name
>  echo ""
> done
> %endif
>
> # stub
> %if %libraries_to_prepare
> echo ""
> echo "[ .oO Preparing libraries Oo. ]"
> echo ""
> %endif
>
> # stub
> %if %special_script
> echo ""
> echo "[ .oO Executing special script Oo. ]"
> echo ""
> %endif
>
> # lets start the shellquote nightmare ;)
> shellquote()
> {
>    for arg; do
>        arg=${arg//\\/\\\\}
> #        arg=${arg//\$/\$}   # already needs quoting ;(
> #        arg=${arg/\"/\\\"}  # dito
> #        arg=${arg//\`/\`}   # dito
>        arg=${arg//\\|/\|}
>        arg=${arg//\\|/|}
>        echo "$arg"
>    done
> }
>
>
> echo "Creating baselibs_new.conf"
> echo ""
> rm -rRf /tmp/baselibs_new.conf || true
>
> shellquote "%{name}" >> /tmp/baselibs_new.conf
> shellquote "  targettype x86 block!" >> /tmp/baselibs_new.conf
> shellquote "  targettype 32bit block!" >> /tmp/baselibs_new.conf
> shellquote "  targettype arm autoreqprov off" >> /tmp/baselibs_new.conf
>
> # automagically fill in basic requirements
> for i in $cleandeps ; do
>  shellquote "  targettype arm requires \"${i}-x86-arm\"" >> 
> /tmp/baselibs_new.conf
> done
>
> # we require the native version
> shellquote "  targettype arm requires \"%{oldname}\" " >> 
> /tmp/baselibs_new.conf
> shellquote "  targettype arm prefix /emul/ia32-linux" >> 
> /tmp/baselibs_new.conf
> shellquote "  targettype arm extension -arm" >> /tmp/baselibs_new.conf
> shellquote "  targettype arm +/" >> /tmp/baselibs_new.conf
>
> # safe space and download time
> shellquote "  targettype arm -/%{_mandir}" >> /tmp/baselibs_new.conf
> shellquote "  targettype arm -/%{_docdir}" >> /tmp/baselibs_new.conf
> shellquote "  targettype arm requires \"meego-accelerator\"" >> 
> /tmp/baselibs_new.conf
>
> # replace native with x86 binaries as defined in file
> %if %binaries_to_prepare
> # Todo: error handling if .orig-arm is present
> for binary in `cat %{_sourcedir}/binaries_to_prepare` ; do
>   shellquote "  targettype arm post \"  if test -e ${binary}.orig-arm; then 
> \" " >> /tmp/baselibs_new.conf
>   shellquote "  targettype arm post \"    echo \"${binary}.orig-arm already 
> present - skipping.\" \" " >> /tmp/baselibs_new.conf
>   shellquote "  targettype arm post \"  else \" " >> /tmp/baselibs_new.conf
>   shellquote "  targettype arm post \"    mv ${binary} ${binary}.orig-arm ; 
> ln -s <prefix>${binary} ${binary} \"" >> /tmp/baselibs_new.conf
>   shellquote "  targettype arm post \"  fi \" " >> /tmp/baselibs_new.conf
> done
>
> shellquote " " >> /tmp/baselibs_new.conf
> for binary in `cat %{_sourcedir}/binaries_to_prepare` ; do
>
>  shellquote "  targettype arm preun \"  if test -e ${binary}.orig-arm ; then 
> \"" >> /tmp/baselibs_new.conf
>  shellquote "  targettype arm preun \"    rm -f ${binary} ; mv 
> ${binary}.orig-arm ${binary}\"" >> /tmp/baselibs_new.conf
>  shellquote "  targettype arm preun \"  fi \"" >> /tmp/baselibs_new.conf
>
> done
> %endif
>
> cat /tmp/baselibs_new.conf >> %{_sourcedir}/baselibs.conf
>
> echo 
> "################################################################################"
> echo ""
> echo ""
> echo "REQUIREMENTS:"
> grep "requires" %{_sourcedir}/baselibs.conf | sort | uniq | sed -e "s#  
> targettype.*requires ##g" | while read k ; do
>  echo "CBinstall: $k"
> done
> echo "Runscripts: %{newname}-arm"
> echo ""
> echo ""
> echo 
> "################################################################################"
> set -x
>
> %clean
> rm -rf $RPM_BUILD_ROOT
>
> %files -f filestoinclude
> %defattr(-,root,root)
> %if %binaries_to_prepare
> /%{_prefix}/share/applybinary/%name
> %endif
>
> ===================================================================
>
> _______________________________________________
> MeeGo-commits mailing list
> [email protected]
> http://lists.meego.com/listinfo/meego-commits
>
_______________________________________________
MeeGo-packaging mailing list
[email protected]
http://lists.meego.com/listinfo/meego-packaging

Reply via email to