内容简介: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,应该为题不大,反正是拿来玩的。
更新列表见:
- llvm : http://llvm.org/releases/4.0.0/docs/ReleaseNotes.html
- clang : http://llvm.org/releases/4.0.0/tools/clang/docs/ReleaseNotes.html
- clang Extra : http://llvm.org/releases/4.0.0/tools/clang/tools/extra/docs/ReleaseNotes.html
- lld: http://llvm.org/releases/4.0.0/tools/lld/docs/ReleaseNotes.html
编译脚本见: https://github.com/owent-utils/bash-shell/tree/master/LLVM%26Clang%20Installer/4.0
以上所述就是小编给大家介绍的《GCC 7和LLVM+Clang+libc++abi 4.0的构建脚本》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- golang构建项目的脚本
- Gradle系列之构建脚本基础
- 通过Roslyn构建自己的C#脚本(更新版)
- 不得不学之「 Gradle」 ③ 构建脚本基础
- 脚本文件里的 Hybrid Script(混合式脚本)
- 脚本错误量极致优化-定位压缩且无 SourceMap 文件的脚本错误
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
ACM国际大学生程序设计竞赛题解
赵端阳//袁鹤 / 电子工业 / 2010-7 / 39.00元
随着各大专院校参加ACM/ICPC热情的高涨,迫切需要有关介绍ACM国际大学生程序设计竞赛题解的书籍。《ACM国际大学生程序设计竞赛题解(2)》根据浙江大学在线题库的部分题目,经过分类、筛选、汇编,并进行了解答(个别特别简单或者特别复杂的题目未选择),比较详细地分析和深入浅出地讲解了解题的方法和用到的算法。题目的类型包括基础编程、模拟、字符串处理、搜索、动态规划、回溯、图论、几何和数学题。 ......一起来看看 《ACM国际大学生程序设计竞赛题解》 这本书的介绍吧!