专栏首页owentGCC 7和LLVM+Clang+libc++abi 4.0的构建脚本

GCC 7和LLVM+Clang+libc++abi 4.0的构建脚本

之前的版本发完,有空来更新一下之前的gcc和llvm+clang工具链的编译脚本了。其实GCC 7是才release没多久但是llvm 4.0发布其实有一段时间了。

GCC

这回是GCC的脚本有一些改动。因为我现在开发机的环境很多组件并没有装,所以顺带发现了之前的构建脚本的一些问题。

第一是multilib的问题。之前的编译有时候是使用–disable-multilib来编译的。但是其实如果依赖库可以编译multilib就会自动开启,然后就有一些依赖库要自己编译multilib版本。

另外GCC 7之后不再默认包含 bdw-gc了,所以如果加了–enable-objc-gc参数以后,编译会报错。所以现在编译的依赖包里又加入了bdw-gc。同时由于bdw-gc依赖libatomic_ops,所以也增加了libatomic_ops的下载脚本。不过由于这两个库都要区分multilib,所以并没有放在原始的安装目录下,而是放到了multilib子目录里,并且仅生成静态库(这样就不需要加入到动态库查找目录)。大概就是下面这样:

    # install libatomic_ops
    if [ -z "$BUILD_TARGET_COMPOMENTS" ] || [ "0" == $(is_in_list libatomic_ops $BUILD_TARGET_COMPOMENTS) ]; then
        LIBATOMIC_OPS_PKG=$(check_and_download "libatomic_ops-7.4.4" "libatomic_ops-*.tar.gz" "https://github.com/ivmai/libatomic_ops/archive/libatomic_ops-7_4_4.tar.gz" "libatomic_ops-7_4_4.tar.gz" );
        if [ $? -ne 0 ]; then
            echo -e "$LIBATOMIC_OPS_PKG";
            exit -1;
        fi
        tar -zxvf $LIBATOMIC_OPS_PKG;
        LIBATOMIC_OPS_DIR=$(ls -d libatomic_ops-* | grep -v \.tar\.gz);
        # cd $LIBATOMIC_OPS_DIR;
        # bash ./autogen.sh ;
        # ./configure --prefix=$PREFIX_DIR ;
        # make $BUILD_THREAD_OPT && make install;
        if [ $? -ne 0 ]; then
            echo -e "\\033[31;1mError: build libatomic_ops failed.\\033[39;49;0m";
            exit -1;
        fi
        cd "$WORKING_DIR";
    fi

    # install bdw-gc
    if [ -z "$BUILD_TARGET_COMPOMENTS" ] || [ "0" == $(is_in_list bdw-gc $BUILD_TARGET_COMPOMENTS) ]; then
        BDWGC_PKG=$(check_and_download "bdw-gc-7.6.0" "gc7_6_0.tar.gz" "https://github.com/ivmai/bdwgc/archive/gc7_6_0.tar.gz" "gc7_6_0.tar.gz" );
        if [ $? -ne 0 ]; then
            echo -e "$BDWGC_PKG";
            exit -1;
        fi
        tar -zxvf $BDWGC_PKG;
        BDWGC_DIR=$(ls -d bdwgc-gc* | grep -v \.tar\.gz);
        cd $BDWGC_DIR;
        bash ./autogen.sh ;
        if [ ! -z "$LIBATOMIC_OPS_DIR" ]; then
            if [ -e libatomic_ops ]; then
                rm -rf libatomic_ops;
            fi
            mv -f ../$LIBATOMIC_OPS_DIR libatomic_ops;
            $(cd libatomic_ops && bash ./autogen.sh );
            BDWGC_LIBATOMIC_OPS=no ;
        else
            BDWGC_LIBATOMIC_OPS=check ;
        fi
        ./configure --prefix=$PREFIX_DIR/multilib/$SYS_LONG_BIT --enable-cplusplus --with-pic=yes --enable-shared=no --enable-static=yes --with-libatomic-ops=$BDWGC_LIBATOMIC_OPS ;
        make $BUILD_THREAD_OPT && make install;
        if [ $? -ne 0 ]; then
            echo -e "\\033[31;1mError: build bdw-gc failed.\\033[39;49;0m";
            exit -1;
        fi

        if [ $SYS_LONG_BIT == "64" ] && [ "$GCC_OPT_DISABLE_MULTILIB" == "--enable-multilib" ] ; then
            make distclean;
            env CFLAGS=-m32 CPPFLAGS=-m32 ./configure --prefix=$PREFIX_DIR/multilib/32 --enable-cplusplus --with-pic=yes --enable-shared=no --enable-static=yes --with-libatomic-ops=$BDWGC_LIBATOMIC_OPS ;

            make $BUILD_THREAD_OPT && make install;
            if [ $? -ne 0 ]; then
                echo -e "\\033[31;1mError: build bdw-gc with -m32 failed.\\033[39;49;0m";
                exit -1;
            fi
            BDWGC_PREBIUILT="--with-target-bdw-gc=$PREFIX_DIR/multilib/$SYS_LONG_BIT,32=$PREFIX_DIR/multilib/32";
        else
            BDWGC_PREBIUILT="--with-target-bdw-gc=$PREFIX_DIR/multilib/$SYS_LONG_BIT";
        fi
        cd "$WORKING_DIR";
    fi

再就是,以前看到gcc的用于gdb的python脚本已经支持Python 3了,我就把默认Python换成了Python 3。但是之前一直是使用我的开发机的内置Python 2的,所以编译没有问题。但是实际上gdb的编译脚本里并没有检测Python 2的,所以使用Python 2实际上编译不出来。所以这次又换回了 Python 2。

GCC 7更新的东西还是蛮多的,具体可见 https://github.com/owent-utils/bash-shell/tree/master/GCC%20Installer/gcc-7

当然编译脚本也是这里

LLVM+Clang+libc++abi

得益于之前重构的LLVM系列的编译脚本,这次这个也就更新了一下版本号。编译过程很顺利,不过我测试的时候没有编lldb,应该为题不大,反正是拿来玩的。

更新列表见:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 我们的Lua类绑定机制

    最近一个人搞后台,框架底层+逻辑功能茫茫多,扛得比较辛苦,一直没抽出空来写点东西。

    owent
  • Lua性能分析

    Lua性能分析本来有一些现成的工具,比如LuaProfile,不幸的是这货不支持luajit,另外LuaStudio虽然挺好用但是是收费的。 比较不爽,刚好L...

    owent
  • LLVM + Clang + Libcxx + Libcxxabi 工具链编译

    LLVM和Clang工具链的生成配置文件写得比较搓,所以略微麻烦,另外这个脚本没有经过多环境测试,不保证在其他Linux发行版里正常使用。

    owent
  • Serverless 实战:通过 Serverless 架构实现监控告警

    在实际生产中,我们经常需要做一些监控脚本来监控网站服务或者 API 服务是否可用。传统的方法是使用网站监控平台(例如 DNSPod 监控、360 网站服务监控...

    腾讯云serverless团队
  • 爬虫实践: 获取百度贴吧内容

    本次要爬的贴吧是<< 西部世界 >>,西部世界是我一直很喜欢的一部美剧,平时有空也会去看看吧友们都在聊些什么。所以这次选取这个吧来作为实验材料。

    sergiojune
  • ​Python爬虫--- 1.5 爬虫实践: 获取百度贴吧内容

    原文链接:https://www.fkomm.cn/article/2018/7/22/21.html

    圆方圆PYTHON学院
  • 白帽子到底是黑还是白?

    自从“黑客”一词被妖魔化后,贵圈人士一时间找不到合适的词来标榜自己,突然间有一天顿悟,发现“白帽子”这词不错,完全从“黑”变“白”。于是,这个词开始在贵圈流行,...

    周俊辉
  • 易观发布:中国人工智能产业生态图谱2018

    中国人工智能产业在过去两年经历了前所未有的热潮,在2017年下半年,随着技术发展现状和市场应用逐渐清晰,整个市场趋于冷静。人工智能技术持续向各行各业各种场景应用...

    钱塘数据
  • 聊聊nacos address的postCluster

    nacos-1.1.3/address/src/main/java/com/alibaba/nacos/address/controller/AddressSe...

    codecraft
  • 没有试过的话你真的不知道,多实例MYSQL有多方便管理

    [root@db01 ~]# mkdir /data/{3307,3308,3309} -p

    java架构师

扫码关注云+社区

领取腾讯云代金券