免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1855 | 回复: 0
打印 上一主题 下一主题

解决lablin版本升级之前toolchain重复编译的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-27 00:58 |只看该作者 |倒序浏览
1、先前的toolchain每次编译都需要从头开始,所以我在lablin/toolchain/build下增加了BuildToolchainPkg和BuildToolchainList两个函数

#-----------------------------------------------------------------------

# STERLING ZHOU SUPPORT THE FOLLOWING CODE

#-----------------------------------------------------------------------


TOOLCHAIN_TOP="${MW_TOP_DIR}/toolchain"
BUILD_TAG=".maxwit_built"

BuildToolchainPkg()
{
    local df=""
    local subdir="${TOOLCHAIN_TOP}/${1}"
    #local srcdir="${TOOLCHAIN_BUILD_PATH}/${1}-build"
    local srcdir=""

    case "${1}" in
    ${MWP_BINUTILS})
        srcdir="${TOOLCHAIN_BUILD_PATH}/binutils-build"
        ;;

    ${MWP_GCC})
        if [ -z $gcc_flag ]; then
            srcdir="${TOOLCHAIN_BUILD_PATH}/gcc-build-1"
            gcc_flag="THE FIRST TIME HAS PASSED"
        else
            srcdir="${TOOLCHAIN_BUILD_PATH}/gcc-build-2"
        fi
        ;;

    ${MWP_GLIBC})
        srcdir="${TOOLCHAIN_BUILD_PATH}/glibc-build"
        ;;

    *)
        echo "SOMETHING HAS BEEN WRONG..."
        echo
        exit 0
        ;;
    esac

    #if [ ! -e ${KERNEL_BUILD_PATH}/${MWP_KERNEL}/${BUILD_TAG} ] && [ ! -d TOOLCHAIN_BUILD_PATH ]; then
    if [ ! -e ${KERNEL_BUILD_PATH}/${MWP_KERNEL}/${BUILD_TAG} ]; then
        build_toolchain

    #else if it has kernel and toolchain diretory
    else

        if [ -e "${srcdir}/${BUILT_TAG}" ]; then
            echo ""${1}" has been built."
            echo
            return 0
        fi

        if [ -f ${subdir}/dep ]
            for df in `cat ${subdir}/dep`
            do
                BuildToolchainPkg ${df} || return 1
            done
        fi

        #gcc has been expanded the other time...NEED CHECK
        check_pkgs ${1}

        Unpack ${1} toolchain

        cd ${srcdir} || exit 1

        #if test -x ${subdir}/build.sh; then
        ${subdir}/build.sh && touch ${srcdir}/${BUILT_TAG} ||
        {
            if [ -e "${srcdir}/${BUILD_TAG}_1" ]
                ${subdir}/build_2.sh && touch ${srcdir}/${BUILT_TAG}_2
            else
                ${subdir}/build_1.sh && touch ${srcdir}/${BUILT_TAG}_1
        }
        echo

        return 0
    fi

}

BuildToolchainList()
{
    local pkg=""
    local gcc_flag=""
    for pkg in $*
    do
        BuildToolchainPkg $pkg || exit 1
    done
}

2、在lablin/build下面增加build_all_toolchain()函数,它可以调用BuildToolchainList函数

build_all_toolchain()
{
    BuildToolchainList \
        ${MWP_BINUTILS} \
        ${MWP_GCC} \
        ${MWP_GLIBC} \
        ${MWP_GCC} ||
        exit 1
}

不过代码还不是很完美,欢迎批评指正。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP