LINUX.ORG.RU

CC=anothercc CXX=anotherc++ emerge options packagenames

для более окультуренного варианта сейчас выложу скрипты

Sylvia ★★★★★
()
Ответ на: комментарий от Sylvia

http://filebeam.com/3c5c4c33b55eec6f3d2bcbdd15c8a09c

скрипты

флаги для icc я задаю в /etc/profile/bashrc

там же можно переопределять и другие переменные, например PATH или LD_LIBRARY_PATH если нужно

package.compilers

cat/package CC CXX

вот так задается (там есть примеры того , что я не собираю с GCC 4.5.x)

для package.icc

cat/package

флаги будут из bashrc

*.*-cflags я не пользовалась, хотя если нужно то можно там переопределять флаги для отдельных пакетов.

Sylvia ★★★★★
()
Ответ на: комментарий от Sylvia

сам боюсь, но есть вот такое для icc и прочего - по поводу env.d хочу сделать по-другому, но потом

#!/bin/bash

#CFLAGS
if [ "$counttt" != "1" ]; then

if [ -f /etc/portage/env.d/${CATEGORY}/${PN} ]; then

for MY_ENV in ${PN} ${P} ${PF}; do
if [ -f /etc/portage/env.d/${CATEGORY}/${MY_ENV} ]; then
. /etc/portage/env.d/${CATEGORY}/${MY_ENV}
export CXXFLAGS="${CFLAGS}"
fi
done
fi
export counttt="1"
fi


#PGO
PROFILE_GEN="$CFLAGS -fprofile-generate -fprofile-arcs -ftest-coverage -fprofile-dir=/var/tmp/PGO/$CATEGORY/$PF"
PROFILE_USE="$CFLAGS -fprofile-use -fprofile-correction -lgcov -Wcoverage-mismatch -fprofile-dir=/var/tmp/PGO/$CATEGORY/$PF"

if [ -f /etc/portage/package.pgo ]; then
while read -a target; do
    if [ "${target}" = "${CATEGORY}/${PN}" ]; then
	  if [ -d "/var/tmp/PGO/$CATEGORY/$PF" ]; then	  
		if [ "$count" != "1" ]; then 
		      if [ "$countt" != "1" ]; then export CFLAGS="$PROFILE_USE" && export CXXFLAGS="$PROFILE_USE"&& export countt="1"
		      fi
		fi
   else
      if [ "$count" != "1" ]; then 
	    if [ "$countt" != "1" ]; then export CFLAGS="$PROFILE_GEN" && export CXXFLAGS="$PROFILE_GEN"&& export count="1" 
	    fi
      fi
fi
fi
done < /etc/portage/package.pgo
fi



#ICC
if [ -f /etc/portage/package.icc ]; then
[ -r ${ROOT}/etc/portage/package.icc ] || return 0
while read -a target; do
if [ "${target}" = "${CATEGORY}/${PN}" ]; then
export OCC="icc"
export OCXX="icpc"
export CFLAGS="${ICCCFLAGS}"
export CXXFLAGS="${ICCCXXFLAGS}"
if [ -r ${ROOT}/etc/portage/package.icc-cflags ]; then
while read target flags; do
if [ "${target}" = "${CATEGORY}/${PN}" ]; then
export CFLAGS="$flags"
export CXXFLAGS="$flags"
break
fi
done < ${ROOT}/etc/portage/package.icc-cflags
fi
export CC_FOR_BUILD="${OCC}"
return 0
fi
done < ${ROOT}/etc/portage/package.icc
fi

#PATCHES
pre_src_configure() {
    src_autopatcher
}
src_autopatcher() {

    # Specify a directory for patches.
    PATCH_DIR="/var/portage/patches"

    PATCH_OPTS="-g0 -E --no-backup-if-mismatch"
    local count=0
 
    if [ -d "${PATCH_DIR}/${CATEGORY}/${PN}" ]; then
        for PATCH in $(find "${PATCH_DIR}/${CATEGORY}/${PN}" -type f -name "*.patch"|sort)
        do
            einfo "Patching ${PATCH/*\//} ..."
            while [[ ${count} -lt 5 ]]; do
                if (patch -p${count} ${PATCH_OPTS} --dry-run -f < "${PATCH}") >/dev/null; then
                    patch -p${count} ${PATCH_OPTS} < "${PATCH}" >/dev/null
                    break
                fi
            (( count++ ))
            done
            if [[ ${count} -ge 5 ]] ; then
                eerror "Failed Patch: ${PATCH/*\//} !"
                die "Failed Patch: ${PATCH/*\//} !"
            fi
        done
    fi
}

#STUFF
post_src_configure() {
echo -e "\n \n \n \n \n\033[0;0;1;33mCFLAGS=\033[0;0;1;32m\"$(echo $CFLAGS)\"\033[0m \n"
echo -e "\n\033[0;0;1;33mCXXFLAGS=\033[0;0;1;32m\"$(echo $CXXFLAGS)\"\033[0m \n \n \n \n \n"
}

megabaks ★★★★
() автор топика
Ответ на: комментарий от megabaks

с автоматизацией PGO ? забавно )

MAKEOPTS="-j1" для PGO только нужно еще, это не строго обязательно, но если собираются какие-нибудь программы и запускаются в процессе сборки пакета, то будут коллизии.

Sylvia ★★★★★
()
Ответ на: комментарий от megabaks

>-ftest-coverage

-lgcov

Это для gcov, те если ты не отлавливаешь вручную горячие места кода оно тебе не нужно.

Кратко: для PGO оно не нужно.

-fprofile-arcs

уже включено при задании -fprofile-generate.

Это just fyi.

anon_666
()
Ответ на: комментарий от Sylvia

не хочет (
единственный рабочий вариант с gcc-config
но т.к. -j* не вариант
как быть?

megabaks ★★★★
() автор топика
Ответ на: комментарий от Sylvia

сделал так

#!/bin/bash

#CFLAGS
if [ "$counttt" != "1" ]; then
  if [ -f /etc/portage/env.d/${CATEGORY}/${PN} ]; then
    for MY_ENV in ${PN} ${P} ${PF}; do
      if [ -f /etc/portage/env.d/${CATEGORY}/${MY_ENV} ]; then
      . /etc/portage/env.d/${CATEGORY}/${MY_ENV}
      export CXXFLAGS="${CFLAGS}"
      fi
    done
  fi
  export counttt="1"
fi

#PGO
PROFILE_GEN="$CFLAGS -fprofile-generate -ftest-coverage -fprofile-dir=/var/tmp/PGO/$CATEGORY/$PF"
PROFILE_USE="$CFLAGS -fprofile-use -fprofile-correction -Wcoverage-mismatch -fprofile-dir=/var/tmp/PGO/$CATEGORY/$PF"

if [ -f /etc/portage/package.pgo ]; then
while read -a target; do
    if [ "${target}" = "${CATEGORY}/${PN}" ]; then
	  if [ -d "/var/tmp/PGO/$CATEGORY/$PF" ]; then	  
		if [ "$count" != "1" ]; then 
		      if [ "$countt" != "1" ]; then export CFLAGS="$PROFILE_USE" && export CXXFLAGS="$PROFILE_USE" && export MAKEOPTS="-j1" && export countt="1"
		      fi
		fi
   else
      if [ "$count" != "1" ]; then 
	    if [ "$countt" != "1" ]; then export CFLAGS="$PROFILE_GEN" && export CXXFLAGS="$PROFILE_GEN" && export MAKEOPTS="-j1" && export count="1" 
	    fi
      fi
fi
fi
done < /etc/portage/package.pgo
fi

#ICC
if [ -f /etc/portage/package.icc ]; then
  [ -r ${ROOT}/etc/portage/package.icc ] || return 0
  while read -a target; do
    if [ "${target}" = "${CATEGORY}/${PN}" ]; then
    export OCC="icc"
    export OCXX="icpc"
    export CFLAGS="${ICCCFLAGS}"
    export CXXFLAGS="${ICCCXXFLAGS}"
    if [ -r ${ROOT}/etc/portage/package.icc-cflags ]; then
      while read target flags; do
	if [ "${target}" = "${CATEGORY}/${PN}" ]; then
	export CFLAGS="$flags"
	export CXXFLAGS="$flags"
	break
	fi
      done < ${ROOT}/etc/portage/package.icc-cflags
    fi
    export CC_FOR_BUILD="${OCC}"
    return 0
    fi
  done < ${ROOT}/etc/portage/package.icc
fi

#PATCHES
pre_src_configure() {
    src_autopatcher
}
src_autopatcher() {
# Specify a directory for patches.
PATCH_DIR="/var/portage/patches"
PATCH_OPTS="-g0 -E --no-backup-if-mismatch"
local count=0
if [ -d "${PATCH_DIR}/${CATEGORY}/${PN}" ]; then
     for PATCH in $(find "${PATCH_DIR}/${CATEGORY}/${PN}" -type f -name "*.patch"|sort)
     do
     einfo "Patching ${PATCH/*\//} ..."
       while [[ ${count} -lt 5 ]]; do
         if (patch -p${count} ${PATCH_OPTS} --dry-run -f < "${PATCH}") >/dev/null; then
         patch -p${count} ${PATCH_OPTS} < "${PATCH}" >/dev/null
         break
         fi
         (( count++ ))
       done
	  if [[ ${count} -ge 5 ]] ; then
	  eerror "Failed Patch: ${PATCH/*\//} !"
	  die "Failed Patch: ${PATCH/*\//} !"
	  fi
     done
fi
}

#COMPILERS
if [ -r ${ROOT}/etc/portage/package.compilers ]; then
   while read target ver; do
      if [ "${target}" = "${CATEGORY}/${PN}" ]; then
      export PATH="/usr/i686-pc-linux-gnu/gcc-bin/$ver:$PATH"
      fi
   done < ${ROOT}/etc/portage/package.compilers
fi

#STUFF
post_src_configure() {
echo -e "\n \n \n \n \n\033[0;0;1;33mCFLAGS=\033[0;0;1;32m\"$(echo $CFLAGS)\"\033[0m \n"
echo -e "\n\033[0;0;1;33mCXXFLAGS=\033[0;0;1;32m\"$(echo $CXXFLAGS)\"\033[0m \n \n \n \n \n"
}

megabaks ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.