├── .clang-format ├── .cmake-format.yaml ├── .flake8 ├── .gitattributes ├── .github └── workflows │ └── stale.yml ├── .pylintrc ├── CPPLINT.cfg ├── GCC Installer ├── gcc-10 │ ├── README.md │ └── installer.sh ├── gcc-11 │ ├── README.md │ └── installer.sh ├── gcc-12 │ ├── README.md │ └── installer.sh ├── gcc-13 │ ├── README.md │ └── installer.sh ├── gcc-14 │ ├── README.md │ └── installer.sh ├── gcc-15 │ ├── README.md │ └── installer.sh ├── gcc-4.7 │ ├── README.md │ └── installer.sh ├── gcc-4.8 │ ├── README.md │ └── installer.sh ├── gcc-4.9 │ ├── README.md │ └── installer.sh ├── gcc-5 │ ├── README.md │ └── installer.sh ├── gcc-6 │ ├── README.md │ └── installer.sh ├── gcc-7 │ ├── README.md │ └── installer.sh ├── gcc-8 │ ├── README.md │ └── installer.sh └── gcc-9 │ ├── README.md │ └── installer.sh ├── LLVM&Clang Installer ├── 10.0 │ ├── README.md │ └── installer.sh ├── 11.0 │ ├── README.md │ └── installer.sh ├── 12.0 │ ├── README.md │ ├── distribution-stage1.cmake │ ├── distribution-stage2.cmake │ ├── installer-bootstrap.sh │ └── installer.sh ├── 13.0 │ ├── README.md │ ├── distribution-stage1.cmake │ ├── distribution-stage2.cmake │ └── installer-bootstrap.sh ├── 14.0 │ ├── README.md │ ├── distribution-stage1.12.cmake │ ├── distribution-stage1.cmake │ ├── distribution-stage2.12.cmake │ ├── distribution-stage2.cmake │ └── installer-bootstrap.sh ├── 15.0 │ ├── README.md │ ├── distribution-stage1.cmake │ ├── distribution-stage2.cmake │ └── installer-bootstrap.sh ├── 16.0 │ ├── README.md │ ├── bolt-disable-emit-relocs.patch │ ├── distribution-stage1.cmake │ ├── distribution-stage2.cmake │ └── installer-bootstrap.sh ├── 17.0 │ ├── README.md │ ├── bolt-disable-emit-relocs.patch │ ├── distribution-stage1.cmake │ ├── distribution-stage2.cmake │ └── installer-bootstrap.sh ├── 18.1 │ ├── README.md │ ├── bolt-disable-emit-relocs.patch │ ├── distribution-stage1.cmake │ ├── distribution-stage2.cmake │ └── installer-bootstrap.sh ├── 19.1 │ ├── README.md │ ├── bolt-disable-emit-relocs.patch │ ├── distribution-stage1.cmake │ ├── distribution-stage2.cmake │ └── installer-bootstrap.sh ├── 20.1 │ ├── README.md │ ├── bolt-disable-emit-relocs.patch │ ├── distribution-stage1.cmake │ ├── distribution-stage2.cmake │ └── installer-bootstrap.sh ├── 3.5 │ ├── README.md │ └── installer.sh ├── 3.6 │ ├── README.md │ └── installer.sh ├── 3.7 │ ├── README.md │ └── installer.sh ├── 3.8 │ ├── README.md │ └── installer.sh ├── 3.9 │ ├── README.md │ └── installer.sh ├── 4.0 │ ├── README.md │ └── installer.sh ├── 5.0 │ ├── README.md │ └── installer.sh ├── 6.0 │ ├── README.md │ └── installer.sh ├── 7.0 │ ├── README.md │ └── installer.sh ├── 8.0 │ ├── README.md │ └── installer.sh └── 9.0 │ ├── README.md │ └── installer.sh ├── LNMP ├── README.md ├── lnmp.sh ├── lnmp_configure_log.sh ├── lnmp_for_el7.sh └── nginx_with_http2_for_el7.sh ├── MIT-LICENSE.txt ├── Others ├── aria2-rpc.bat ├── aria2-rpc.ps1 ├── aria2-rpc.sh ├── aria2.conf ├── centos_7_bbr_install_kernel.sh ├── centos_7_bbr_sysctl.sh ├── common.sh ├── git-clone-for-ci.sh ├── git-mirror.md ├── lets_encrypt_ssl_cert │ ├── README.md │ ├── acme-init.sh │ ├── acme-renew.sh │ ├── init.sh │ └── renew.sh ├── run_as_admin.bat ├── setup_swapfile.sh └── x509_ssl_cert │ ├── cfssl-ca-config.json │ ├── cfssl-csr.json │ ├── cfssl_cert.sh │ ├── mk_ssl_cert.sh │ └── openssl.cnf ├── README.md ├── Redmine Installer ├── install │ ├── README.md │ ├── config │ │ ├── additional_environment.rb │ │ ├── configuration.yml │ │ └── database.yml │ ├── etc │ │ ├── nginx │ │ │ └── conf.d │ │ │ │ └── thin.redmine.conf │ │ └── thin │ │ │ └── redmine.yml │ ├── init.sql │ └── usr │ │ └── lib │ │ └── systemd │ │ └── system │ │ └── redmine.service └── style │ └── add.css ├── distcc ├── distccd.service.tmpl └── generate_systemd.sh ├── samba └── README.md ├── shadowsock&kcptun ├── centos_7_build_ssr.sh ├── centos_7_kcptun.sh └── centos_7_shadowsocks.sh └── v2ray ├── centos_7_setup_v2ray_server.sh └── update_google_play.sh /.clang-format: -------------------------------------------------------------------------------- 1 | --- 2 | Language: Cpp 3 | BasedOnStyle: Google 4 | ColumnLimit: 120 5 | DerivePointerAlignment: true 6 | PointerAlignment: Left 7 | 8 | # Only sort headers in each include block 9 | SortIncludes: true 10 | IncludeBlocks: Preserve 11 | 12 | # Ident #if/#else/#endif: 13 | # #if defined(WIN) 14 | # # include 15 | # #else 16 | # # include 17 | # #endif 18 | IndentPPDirectives: AfterHash 19 | --- 20 | 21 | --- 22 | Language: Proto 23 | BasedOnStyle: Google 24 | ColumnLimit: 120 25 | --- 26 | 27 | -------------------------------------------------------------------------------- /.cmake-format.yaml: -------------------------------------------------------------------------------- 1 | # @see https://cmake-format.readthedocs.io/en/latest/configuration.html for more details 2 | 3 | format: 4 | line_width: 120 5 | tab_size: 2 6 | use_tabchars: false 7 | line_ending: unix 8 | max_subgroups_hwrap: 4 9 | 10 | markup: 11 | first_comment_is_literal: True 12 | -------------------------------------------------------------------------------- /.flake8: -------------------------------------------------------------------------------- 1 | [flake8] 2 | ignore = 3 | ;W503 line break before binary operator 4 | W503, 5 | ;E203 whitespace before ‘:’ 6 | E203, 7 | 8 | ; exclude file 9 | exclude = 10 | .tox, 11 | .git, 12 | __pycache__, 13 | build, 14 | dist, 15 | *.pyc, 16 | *.egg-info, 17 | .cache, 18 | .eggs 19 | 20 | max-line-length = 120 -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.sh eol=lf 2 | *.sh.mako eol=lf 3 | *.sh.in eol=lf 4 | *.py eol=lf 5 | *.mako.py eol=lf 6 | *.md eol=crlf 7 | *.md.in eol=crlf 8 | *.bat eol=crlf 9 | *.bat.in eol=crlf 10 | *.ps1 eol=crlf 11 | *.ps1.in eol=crlf 12 | *.rst eol=lf 13 | *.cmake eol=lf 14 | *.cmake.in eol=lf 15 | CMakeLists.txt eol=lf 16 | -------------------------------------------------------------------------------- /.github/workflows/stale.yml: -------------------------------------------------------------------------------- 1 | name: "Mark and close stale issues" 2 | on: 3 | schedule: 4 | - cron: "30 1 * * *" 5 | 6 | jobs: 7 | stale: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: actions/stale@v6 11 | with: 12 | stale-issue-message: "This issue was marked as stale due to lack of activity." 13 | days-before-issue-stale: 90 14 | exempt-issue-labels: "do-not-stale" 15 | -------------------------------------------------------------------------------- /.pylintrc: -------------------------------------------------------------------------------- 1 | [MASTER] 2 | # Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the 3 | # number of processors available to use. 4 | jobs=1 5 | 6 | 7 | [MESSAGES CONTROL] 8 | 9 | # Disable the message, report, category or checker with the given id(s). 10 | disable=all 11 | 12 | # Enable the message, report, category or checker with the given id(s). 13 | enable=c-extension-no-member, 14 | bad-indentation, 15 | bare-except, 16 | broad-except, 17 | dangerous-default-value, 18 | function-redefined, 19 | len-as-condition, 20 | line-too-long, 21 | misplaced-future, 22 | missing-final-newline, 23 | mixed-line-endings, 24 | multiple-imports, 25 | multiple-statements, 26 | singleton-comparison, 27 | trailing-comma-tuple, 28 | trailing-newlines, 29 | trailing-whitespace, 30 | unexpected-line-ending-format, 31 | unused-import, 32 | unused-variable, 33 | wildcard-import, 34 | wrong-import-order 35 | 36 | 37 | [FORMAT] 38 | 39 | # Expected format of line ending, e.g. empty (any line ending), LF or CRLF. 40 | expected-line-ending-format=LF 41 | 42 | # Regexp for a line that is allowed to be longer than the limit. 43 | ignore-long-lines=^\s*(# )??$ 44 | 45 | # Maximum number of characters on a single line. 46 | max-line-length=120 47 | 48 | # Maximum number of lines in a module. 49 | max-module-lines=2000 50 | 51 | 52 | [EXCEPTIONS] 53 | 54 | # Exceptions that will emit a warning when being caught. Defaults to 55 | # "BaseException, Exception". 56 | overgeneral-exceptions=BaseException, 57 | Exception -------------------------------------------------------------------------------- /CPPLINT.cfg: -------------------------------------------------------------------------------- 1 | linelength=120 2 | filter=-build/c++11,-build/c++14,-runtime/references -------------------------------------------------------------------------------- /GCC Installer/gcc-10/README.md: -------------------------------------------------------------------------------- 1 | Linux 编译安装 GCC 10 2 | ====== 3 | 4 | GCC 9发布啦,本脚本在之前GCC 9的基础上做了稍许更新,主要增加了新的链接优化依赖 [zstd](http://www.zstd.net) , 增加了一个方便打包的工具 [lz4](https://github.com/lz4/lz4) 。 5 | 6 | 由于GCC从5开始[对版本号进行重新规范](https://gcc.gnu.org/develop.html#num_scheme),所以这里的编译脚本以后以主版本号为准。 7 | 8 | GCC 10的大致(C/C++)内容如下: 9 | 10 | 1. 增加了 ```__has_builtin``` 预处理,用于功能检测 11 | 2. 增加了一些分析相关的选项 12 | 3. 一系列跨过程优化和链接时优化相关的改进 13 | 4. 一些新的warning,支持UTF-8标识符和UCN语法的标识符 14 | 5. 支持u8字符标识```u8''```,支持属性 15 | 6. \[C\] 默认开启 ```-fno-common``` 16 | 7. \[C++\] 茫茫多C++20的功能 17 | 8. \[C++\] 优化 ```constexpr``` 在编译期的内存消耗 18 | 9. \[C++\] 支持 ```[[no_unique_address]]``` , 允许空类0字节大小。(和 ```-std=c++17``` and ```-std=c++14``` ABI 不兼容 ) 19 | 10. \[C++\] 减少头文件依赖,加快编译速度 20 | 21 | ## 编译安装 GCC 10.X.X 22 | 23 | ### 准备环境及依赖项 24 | 25 | 1. 支持 ISO C++ 98 的编译器(GCC 3.4及以上) 26 | 2. C标准库及头文件 27 | 3. 用于创建Ada编译器的GNAT 28 | 4. 支持POSIX的shell或GNU bash 29 | 5. POSIX或SVR4的 awk工具 30 | 6. GNU binutils 31 | 7. gzip 版本1.2.4及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 32 | 8. bzip2 版本 1.0.2及以上 (此处可下载 http://www.bzip.org/) 33 | 9. GNU make 工具 版本3.80及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 34 | 10. GNU tar工具 版本1.14及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 35 | 11. perl 版本5.6.1-5.6.24 (此处可下载 http://www.perl.org/) 36 | 12. tar或zip和unzip工具 (此处可下载 http://www.info-zip.org) 37 | 13. gmp库 版本4.3.2及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 38 | 14. mpfr库 版本3.1.0及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 39 | 15. mpc库 版本1.0.1及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 40 | 16. isl 版本 0.15及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 中gcc目录中的infrastructure目录下载 ) 41 | 17. zstd 42 | 18. awk 43 | 19. m4 44 | 20. automake 45 | 21. autoconf 46 | 22. gettext 47 | 23. gperf 48 | 24. cmake 49 | 50 | ### 我编译的环境 51 | 52 | #### 系统 53 | 54 | CentOS 7 55 | 56 | #### 编译的依赖库和工具 57 | 58 | + m4 1.4.18 59 | + autoconf latest 60 | + automake 1.16.2 61 | + libtool 2.4.6 62 | + pkgconfig 0.29.2 63 | + gmp 6.2.0 64 | + mpfr 4.1.0 65 | + mpc 1.2.1 66 | + isl 0.18 67 | + libatomic_ops 7.6.10 68 | + bdw-gc 8.0.4 69 | + zstd 1.4.5 70 | + openssl 1.1.1h 71 | + libexpat 2.2.10 72 | + libxcrypt 4.4.17 73 | + gdbm latest 74 | 75 | #### 编译目标 76 | 77 | + gcc 10.2.0 78 | + binutils 2.35.1 79 | + python 3.9.0 *[按需]* 80 | + gdb 10.1 (如果存在ncurses-devel包) 81 | + global 6.6.5 82 | + lz4 1.9.2 *[非必须]* 83 | + zlib 1.2.11 *[非必须]* 84 | + libffi 3.3 *[非必须]* 85 | + ncurses 6.2 *[非必须]* 86 | 87 | #### 注 88 | 89 | + (所有的库都会被安装在**$PREFEX_DIR**里) 90 | 91 | #### 额外建议 92 | 93 | 给特定用户安装 gdb的pretty-printer 用以友好打印stdc++的stl容器 94 | 95 | 1. 在执行 install.sh 脚本前安装 ncurses-devel 和 python-devel, 用于编译gdb和开启python功能 96 | 2. gdb载入后可使用 ```so [安装目录]/load-libstdc++-gdb-printers.py``` 手动加载gdb的pretty printers 97 | 98 | #### History 99 | 100 | + 2020-05-09 Created 101 | + 2020-05-12 更新优化环境变量加载脚本 102 | + 2020-08-20 更新组件 103 | + GCC -> 10.2.0 104 | + mpfr -> 4.1.0 105 | + mpc -> 1.2.0 106 | + binutils -> 2.35 107 | + gdb -> 9.2 108 | + zstd -> 1.4.5 109 | + 2020-10-26 更新组件,增加工具脚本 ```load-libstdc++-gdb-printers.py```,增加内部使用的openssl 110 | + mpc -> 1.2.1 111 | + binutils -> 2.35.1 112 | + openssl -> 1.1.1h 113 | + python -> 2.7.18 114 | + gdb -> 10.1 115 | + global -> 6.6.5 116 | + 2020-11-10 增加部分Python和gdb的依赖链 117 | + zlib -> 1.2.11 118 | + libffi -> 3.3 119 | + ncurses -> 6.2 120 | + 2020-11-17 增加部分Python依赖链 121 | + m4 -> 1.4.18 122 | + autoconf -> latest 123 | + automake -> 1.16.2 124 | + libtool -> 2.4.6 125 | + pkgconfig -> 0.29.2 126 | + libexpat -> 2.2.10 127 | + libxcrypt -> 4.4.17 128 | + gdbm -> latest 129 | -------------------------------------------------------------------------------- /GCC Installer/gcc-11/README.md: -------------------------------------------------------------------------------- 1 | # Linux 编译安装 GCC 11 2 | 3 | GCC 11发布啦,本脚本在之前GCC 10的基础上做了稍许更新 。增加了用于rpmbuild的打包文件。 4 | 5 | 由于GCC从5开始[对版本号进行重新规范](https://gcc.gnu.org/develop.html#num_scheme),所以这里的编译脚本以后以主版本号为准。 6 | 7 | GCC 11的大致(C/C++)内容如下: 8 | 9 | 1. 编译GCC时需要工具链支持 C++11(之前是C++98),即如果使用GCC,至少要GCC 4.8以上 10 | 2. 一些调试信息相关的位置变化和选项变化(```-gsplit-dwarf``` 等) 11 | 3. 移除一些老平台支持 12 | 4. 覆盖率工具, ```gov``` 的一些选项变化 13 | 5. ```ThreadSanitizer``` 支持多种运行时 14 | 6. 提示源代码中的“列”时,支持多字节字符集 15 | 7. 引入 ```Hardware-assisted AddressSanitizer``` 支持 16 | 8. DWARF调试信息版本升级到 [DWARF version 5](http://dwarfstd.org/doc/DWARF5.pdf) 17 | 9. 一些编译优化的提升(向量化、条件语句转switch,跨过程调用) 18 | 10. 一些链接优化,优化速度和内存占用 19 | 11. Profile优化 20 | 12. \[C\] 增加一些新的属性和warning 21 | 13. \[C\] C2X的一些新功能 22 | 14. \[C++\] 默认使用 C++17 23 | 15. \[C++\] 优化 ```--enable-cheaders=c_std``` 标记为不推荐使用,转而使用 ```--enable-cheaders=c_global``` 。(行为一样) 24 | 16. \[C++\] 继续增加C++20功能的实现 25 | 17. \[C++\] 部分C++23的功能 26 | 27 | 详见: https://gcc.gnu.org/gcc-11/changes.html 28 | 29 | ## 编译安装 GCC 11.X.X 30 | 31 | ### 准备环境及依赖项 32 | 33 | 1. 支持 ISO C++ 11 的编译器(GCC 4.8及以上) 34 | 2. C标准库及头文件 35 | 3. 用于创建Ada编译器的GNAT 36 | 4. 支持POSIX的shell或GNU bash 37 | 5. POSIX或SVR4的 awk工具 38 | 6. GNU binutils 39 | 7. gzip 版本1.2.4及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 40 | 8. bzip2 版本 1.0.2及以上 (此处可下载 http://www.bzip.org/) 41 | 9. GNU make 工具 版本3.80及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 42 | 10. GNU tar工具 版本1.14及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 43 | 11. perl 版本5.6.1-5.6.24 (此处可下载 http://www.perl.org/) 44 | 12. tar或zip和unzip工具 (此处可下载 http://www.info-zip.org) 45 | 13. gmp库 版本4.3.2及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 46 | 14. mpfr库 版本3.1.0及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 47 | 15. mpc库 版本1.0.1及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 48 | 16. isl 版本 0.15及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 中gcc目录中的infrastructure目录下载 ) 49 | 17. zstd 50 | 18. awk 51 | 19. m4 52 | 20. automake 53 | 21. autoconf 54 | 22. gettext 55 | 23. gperf 56 | 24. cmake 57 | 58 | ## 我编译的环境 59 | 60 | ### 系统 61 | 62 | CentOS 7 & CentOS 8 63 | 64 | ### 编译的依赖库和工具 65 | 66 | + m4 latest 67 | + autoconf latest 68 | + automake 1.16.5 69 | + libtool 2.4.7 70 | + pkgconfig 0.29.2 71 | + gmp 6.2.1 72 | + mpfr 4.1.0 73 | + mpc 1.2.1 74 | + isl 0.18 75 | + libatomic_ops 7.6.12 76 | + bdw-gc 8.0.6 77 | + zstd 1.5.2 78 | + openssl 3.0.2 79 | + libexpat 2.4.8 80 | + libxcrypt 4.4.28 81 | + gdbm latest 82 | + readline 8.1.2 83 | 84 | ### 编译目标 85 | 86 | + gcc 11.3.0 87 | + binutils 2.38 88 | + python 3.9.12 *[按需]* 89 | + gdb 11.2 90 | + global 6.6.8 91 | + lz4 1.9.3 *[非必须]* 92 | + zlib 1.2.11 *[非必须]* 93 | + libffi 3.4.2 *[非必须]* 94 | + ncurses 6.3 *[非必须]* 95 | 96 | ### 注 97 | 98 | + (所有的库都会被安装在**$PREFEX_DIR**里) 99 | 100 | ### 额外建议 101 | 102 | 给特定用户安装 gdb的pretty-printer 用以友好打印stdc++的stl容器 103 | 104 | 1. 在执行 install.sh 脚本前安装 ncurses-devel 和 python-devel, 用于编译gdb和开启python功能 105 | 2. gdb载入后可使用 ```so [安装目录]/load-libstdc++-gdb-printers.py``` 手动加载gdb的pretty printers 106 | 107 | ### History 108 | 109 | + 2021-05-06 Created 110 | + 2021-06-23 Update 111 | + m4: latest, optional 112 | + libexpat: 2.4.1 113 | + libxcrypt: 4.4.23 114 | + zstd: 1.5.0 115 | + 2021-07-28 Update 116 | > 117 | > + gcc: 11.2.0 118 | > + python: 3.9.6 119 | > + global: 6.6.7 120 | > + libffi: 3.4.2 121 | > + binutils: 2.37 122 | > + automake: 1.16.4 123 | > 124 | + 2021-01-21 Update 125 | > 126 | > + automake: 1.16.5 127 | > + isl: 0.24 128 | > + libatomic_ops: 7.6.12 129 | > + bdwgc: 8.0.6 130 | > + openssl: 3.0.1 131 | > + ncurses: 6.3 132 | > + libexpat: 2.4.3 133 | > + libxcrypt: 4.4.27 134 | > + python: 3.10.2 135 | > + gdb: 11.2 136 | > + global: 6.6.8 137 | > + zstd: 1.5.2 138 | > 139 | + 2022-04-13 Update 140 | > 141 | > + libtool: 2.4.7 142 | > + binutils: 2.38 143 | > + openssl: 3.0.2 144 | > + libexpat: 2.4.8 145 | > + libxcrypt: 4.4.28 146 | > + python: 3.9.12(distcc不支持3.10,回滚到3.9) 147 | > 148 | + 2022-04-17 Update 149 | + 软链接 openssl 库的输出目录。 150 | > 某些工具写死了用 `/lib` 来查找库。但是openssl 3.0 开始输出目录为 `/lib64` 。 151 | + 允许指定GNU源镜像 152 | + 2022-04-27 Update 153 | > 154 | > + gcc: 11.3.0 155 | > 156 | + 增加 readline: 8.1.2 (python 内置模块依赖项) 157 | -------------------------------------------------------------------------------- /GCC Installer/gcc-12/README.md: -------------------------------------------------------------------------------- 1 | # Linux 编译安装 GCC 12 2 | 3 | **注意: 使用 `./installer.sh` 前请先将文件Copy到外层,确保路径上没有特殊字符和空格。** 4 | > 某些第三方组件的构建脚本适配不是很好,特殊字符和空格会导致编译不过。 5 | 6 | GCC 12发布啦,本脚本在之前GCC 11的基础上做了稍许更新 。 7 | 8 | 由于GCC从5开始[对版本号进行重新规范](https://gcc.gnu.org/develop.html#num_scheme),所以这里的编译脚本以后以主版本号为准。 9 | 10 | GCC 12的大致(C/C++)内容如下: 11 | 12 | 1. 修订C和C++之间传递对象中包含位域时的ABI兼容性问题 13 | 2. 两个非标准 `std::pair` 开启 deprecated 标记 14 | 3. 移除了一些老的目标平台 15 | 4. `-O2` 默认开启向量化,等于原先的 `-O2 -ftree-vectorize -fvect-cost-model=very-cheap` 16 | 5. 增加 ` -fsanitize=shadow-call-stack` 支持 17 | 6. 更多的C2X和C++2X的支持 18 | 7. 一些和常量表达式相关的内存优化、推断优化和 `thread_local` 优化 19 | 8. 恢复了 `` , 之前由于BUG移除了这个头文件。 20 | 21 | 详见: https://gcc.gnu.org/gcc-12/changes.html 22 | 23 | ## 编译安装 GCC 12.X.X 24 | 25 | ### 准备环境及依赖项 26 | 27 | 1. 支持 ISO C++ 11 的编译器(GCC 4.8及以上) 28 | 2. C标准库及头文件 29 | 3. 用于创建Ada编译器的GNAT 30 | 4. 支持POSIX的shell或GNU bash 31 | 5. POSIX或SVR4的 awk工具 32 | 6. GNU binutils 33 | 7. gzip 版本1.2.4及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 34 | 8. bzip2 版本 1.0.2及以上 (此处可下载 http://www.bzip.org/) 35 | 9. GNU make 工具 版本3.80及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 36 | 10. GNU tar工具 版本1.14及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 37 | 11. perl 版本5.6.1-5.6.24 (此处可下载 http://www.perl.org/) 38 | 12. tar或zip和unzip工具 (此处可下载 http://www.info-zip.org) 39 | 13. gmp库 版本4.3.2及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 40 | 14. mpfr库 版本3.1.0及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 41 | 15. mpc库 版本1.0.1及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 42 | 16. isl 版本 0.15及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 中gcc目录中的infrastructure目录下载 ) 43 | 17. zstd 44 | 18. awk 45 | 19. m4 46 | 20. automake 47 | 21. autoconf 48 | 22. gettext 49 | 23. gperf 50 | 24. cmake 51 | 52 | ## 我编译的环境 53 | 54 | ### 系统 55 | 56 | CentOS 7 & CentOS 8 57 | 58 | ### 编译的依赖库和工具 59 | 60 | + m4 latest 61 | + autoconf latest 62 | + automake 1.16.5 63 | + libtool 2.4.7 64 | + pkgconfig 0.29.2 65 | + gmp 6.2.1 66 | + mpfr 4.2.0 67 | + mpc 1.3.1 68 | + isl 0.24 69 | + libatomic_ops 7.8.0 70 | + bdw-gc 8.2.2 71 | + zstd 1.5.5 72 | + openssl 3.0.8 73 | + libexpat 2.5.0 74 | + libxcrypt 4.4.33 75 | + gdbm latest 76 | + readline 8.2 77 | 78 | ### 编译目标 79 | 80 | + gcc 12.2.0 81 | + bison 3.8.2 82 | + binutils 2.40 83 | + python 3.11.3 *[按需]* 84 | + gdb 13.1 85 | + global 6.6.9 86 | + lz4 1.9.4 *[非必须]* 87 | + zlib 1.2.13 *[非必须]* 88 | + libffi 3.4.4 *[非必须]* 89 | + ncurses 6.4 *[非必须]* 90 | + xz 5.4.2 *[非必须]* 91 | 92 | ### 注 93 | 94 | + (所有的库都会被安装在**$PREFEX_DIR**里) 95 | 96 | ### 额外建议 97 | 98 | 给特定用户安装 gdb的pretty-printer 用以友好打印stdc++的stl容器 99 | 100 | 1. 在执行 install.sh 脚本前安装 ncurses-devel 和 python-devel, 用于编译gdb和开启python功能 101 | 2. gdb载入后可使用 ```so [安装目录]/load-libstdc++-gdb-printers.py``` 手动加载gdb的pretty printers 102 | 103 | ### History 104 | 105 | + 2021-05-06 Created 106 | + 2022-08-02 Update 107 | + python -> 3.9.13 108 | + openssl -> 3.0.5 109 | + 2022-10-03 Update 110 | + gcc -> 12.2.0 111 | + libatomic_ops -> 7.6.14 112 | + bdw-gc -> 8.2.2 113 | + binutils -> 2.39 114 | + Patch: 移除 gprofng 组件的文档,有资源错误 115 | + libffi -> 3.4.3 116 | + libexpat -> 2.4.9 117 | + python -> 3.10.7 118 | + xz -> 5.2.7 119 | + lz4 -> 1.9.4 120 | + 2022-11-29 Update 121 | + python -> 3.10.8 122 | + zlib -> 1.2.13 123 | + libffi -> 3.4.4 124 | + openssl -> 3.0.7 125 | + mpfr -> 4.1.1 126 | + libexpat -> 2.5.0 127 | + libxcrypt -> 4.4.33 128 | + xz -> 5.2.8 129 | + 2023-02-02 Update 130 | + python -> 3.10.9 131 | + openssl -> 3.0.7+quic1 132 | + 2023-04-14 Update 133 | + python -> 3.11.3 134 | + mpfr -> 4.2.0 135 | + mpc -> 1.3.1 136 | + libatomic_ops -> 7.8.0 137 | + binutils -> 2.40 138 | + openssl -> 3.0.8 139 | + ncurses -> 6.4 140 | + gdb -> 13.1 141 | + global -> 6.6.9 142 | + xz -> 5.4.2 143 | + zstd -> 1.5.5 144 | -------------------------------------------------------------------------------- /GCC Installer/gcc-13/README.md: -------------------------------------------------------------------------------- 1 | # Linux 编译安装 GCC 13 2 | 3 | **注意: 使用 `./installer.sh` 前请先将文件Copy到外层,确保路径上没有特殊字符和空格。** 4 | > 某些第三方组件的构建脚本适配不是很好,特殊字符和空格会导致编译不过。 5 | 6 | GCC 13发布啦,本脚本在之前GCC 12的基础上做了稍许更新 。 7 | 8 | 由于GCC从5开始[对版本号进行重新规范](https://gcc.gnu.org/develop.html#num_scheme),所以这里的编译脚本以后以主版本号为准。 9 | 10 | GCC 13的大致(C/C++)内容如下: 11 | 12 | 1. AddressSanitizer在Linux上默认开启 `detect_stack_use_after_return=1` 。 13 | 2. 新的调试符号压缩选项 `-gz=zstd` ,废弃老旧的压缩格式 `-gz=zlib-gnu` 。 14 | 3. 可以使用 [SARIF](https://sarifweb.azurewebsites.net/) 规范输出诊断信息。 15 | 4. 两个非标准 `std::pair` 开启 deprecated 标记 。 16 | 5. 支持 STABS 调式信息格式。 17 | 6. `-Ofast, -ffast-math and -funsafe-math-optimizations` 优化。 18 | 7. 新的Warning选项和属性。 19 | 8. 一些新的C23/C++23特性支持。 20 | 9. 针对C语言常见的动态长度数组的设计模式的支持。 21 | 10. 增加 `-nostdlibc++` 用于告知 g++ 不要默认链接libstdc++库。 22 | 23 | 详见: https://gcc.gnu.org/gcc-13/changes.html 24 | 25 | ## 编译安装 GCC 13.X.X 26 | 27 | ### 准备环境及依赖项 28 | 29 | 1. 支持 ISO C++ 11 的编译器(GCC 4.8及以上) 30 | 2. C标准库及头文件 31 | 3. 用于创建Ada编译器的GNAT 32 | 4. 支持POSIX的shell或GNU bash 33 | 5. POSIX或SVR4的 awk工具 34 | 6. GNU binutils 35 | 7. gzip 版本1.2.4及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 36 | 8. bzip2 版本 1.0.2及以上 (此处可下载 http://www.bzip.org/) 37 | 9. GNU make 工具 版本3.80及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 38 | 10. GNU tar工具 版本1.14及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 39 | 11. perl 版本5.6.1-5.6.24 (此处可下载 http://www.perl.org/) 40 | 12. tar或zip和unzip工具 (此处可下载 http://www.info-zip.org) 41 | 13. gmp库 版本4.3.2及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 42 | 14. mpfr库 版本3.1.0及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 43 | 15. mpc库 版本1.0.1及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 44 | 16. isl 版本 0.15及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 中gcc目录中的infrastructure目录下载 ) 45 | 17. zstd 46 | 18. awk 47 | 19. m4 48 | 20. automake 49 | 21. autoconf 50 | 22. gettext 51 | 23. gperf 52 | 24. cmake 53 | 54 | ## 我编译的环境 55 | 56 | ### 系统 57 | 58 | CentOS 7 & CentOS 8 59 | 60 | ### 编译的依赖库和工具 61 | 62 | + m4 latest 63 | + autoconf latest 64 | + automake 1.16.5 65 | + libtool 2.4.7 66 | + pkgconfig 0.29.2 67 | + gmp 6.3.0 68 | + mpfr 4.2.1 69 | + mpc 1.3.1 70 | + isl 0.24 71 | + libatomic_ops 7.8.2 72 | + bdw-gc 8.2.6 73 | + zstd 1.5.5 74 | + openssl 3.1.2 75 | + libexpat 2.6.1 76 | + libxcrypt 4.4.36 77 | + gdbm latest 78 | + readline 8.2 79 | 80 | ### 编译目标 81 | 82 | + gcc 13.2.0 83 | + bison 3.8.2 84 | + binutils 2.42 85 | + python 3.11.8 *[按需]* 86 | + gdb 14.2 87 | + global 6.6.12 88 | + lz4 1.9.4 *[非必须]* 89 | + zlib 1.3.1 *[非必须]* 90 | + libffi 3.4.6 *[非必须]* 91 | + ncurses 6.4 *[非必须]* 92 | + xz 5.6.1 *[非必须]* 93 | 94 | ### 注 95 | 96 | + (所有的库都会被安装在**$PREFEX_DIR**里) 97 | 98 | ### 额外建议 99 | 100 | 给特定用户安装 gdb的pretty-printer 用以友好打印stdc++的stl容器 101 | 102 | 1. 在执行 install.sh 脚本前安装 ncurses-devel 和 python-devel, 用于编译gdb和开启python功能 103 | 2. gdb载入后可使用 ```so [安装目录]/load-libstdc++-gdb-printers.py``` 手动加载gdb的pretty printers 104 | 105 | ### History 106 | 107 | + 2023-04-28 Created 108 | + 2023-07-15 Update 109 | + python -> 3.11.4 110 | + bdw-gc -> 8.2.4 111 | + openssl -> 3.0.9 112 | + libxcrypt -> 4.4.36 113 | + gdb -> 13.2 114 | + xz -> 5.4.3 115 | + 2023-10-07 Update 116 | + python -> 3.11.6 117 | + gmp -> 6.3.0 118 | + mpfr -> 4.2.1 119 | + gcc -> 13.2.0 120 | + binutils -> 2.41 121 | + openssl -> 3.1.2 122 | + zlib -> 1.3 123 | + global -> 6.6.10 124 | + xz -> 5.4.4 125 | + 2024-03-15 Update, 分离stage1的binutils 126 | + python -> 3.11.8 127 | + zlib -> 1.3.1 128 | + libffi -> 3.4.6 129 | + libatomic_ops -> 7.8.2 130 | + bdwgc -> 8.2.6 131 | + binutils -> 2.42 132 | + openssl -> 3.1.5 133 | + libexpat -> 2.6.1 134 | + gdb -> 14.2 135 | + global -> 6.6.12 136 | + xz -> 5.6.1 137 | -------------------------------------------------------------------------------- /GCC Installer/gcc-14/README.md: -------------------------------------------------------------------------------- 1 | # Linux 编译安装 GCC 14 2 | 3 | **注意: 使用 `./installer.sh` 前请先将文件Copy到外层,确保路径上没有特殊字符和空格。** 4 | > 某些第三方组件的构建脚本适配不是很好,特殊字符和空格会导致编译不过。 5 | 6 | GCC 14发布啦,本脚本在之前GCC 13的基础上做了稍许更新 。 7 | 8 | 由于GCC从5开始[对版本号进行重新规范](https://gcc.gnu.org/develop.html#num_scheme),所以这里的编译脚本以后以主版本号为准。 9 | 10 | GCC 14的大致(C/C++)内容如下: 11 | 12 | 1. 开始支持 `__has_feature` 和 `__has_extension` 。 13 | 2. 一些C23的功能。 14 | 3. 一些C++26的功能特性。 15 | 4. C++模板诊断信息增强。 16 | 5. NRVO支持子代码块。 17 | 6. 常量表达式会跟踪生命周期。 18 | 7. 优化 `#include` 提示。 19 | 8. 优化显示类型转换的诊断信息输出。 20 | 9. 优化修订 `static/thread_local` 符号名。 21 | 10. 支持 `hot` 和 `cold` 可以应用在类上。 22 | 11. 大量 `decltype` 的修订。 23 | 12. 向量化相关的增强和 `#pragma`。 24 | 25 | 详见: https://gcc.gnu.org/gcc-13/changes.html 26 | 27 | ## 编译安装 GCC 14.X.X 28 | 29 | ### 准备环境及依赖项 30 | 31 | 1. 支持 ISO C++ 11 的编译器(GCC 4.8及以上) 32 | 2. C标准库及头文件 33 | 3. 用于创建Ada编译器的GNAT 34 | 4. 支持POSIX的shell或GNU bash 35 | 5. POSIX或SVR4的 awk工具 36 | 6. GNU binutils 37 | 7. gzip 版本1.2.4及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 38 | 8. bzip2 版本 1.0.2及以上 (此处可下载 http://www.bzip.org/) 39 | 9. GNU make 工具 版本3.80及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 40 | 10. GNU tar工具 版本1.14及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 41 | 11. perl 版本5.6.1-5.6.24 (此处可下载 http://www.perl.org/) 42 | 12. tar或zip和unzip工具 (此处可下载 http://www.info-zip.org) 43 | 13. gmp库 版本4.3.2及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 44 | 14. mpfr库 版本3.1.0及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 45 | 15. mpc库 版本1.0.1及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 46 | 16. isl 版本 0.15及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 中gcc目录中的infrastructure目录下载 ) 47 | 17. zstd 48 | 18. awk 49 | 19. m4 50 | 20. automake 51 | 21. autoconf 52 | 22. gettext 53 | 23. gperf 54 | 24. cmake 55 | 56 | ## 我编译的环境 57 | 58 | ### 系统 59 | 60 | CentOS 7 & CentOS 8 61 | 62 | ### 编译的依赖库和工具 63 | 64 | + m4 latest 65 | + autoconf latest 66 | + automake 1.17 67 | + libtool 2.5.4 68 | + pkgconfig 0.29.2 69 | + gmp 6.3.0 70 | + mpfr 4.2.2 71 | + mpc 1.3.1 72 | + isl 0.24 73 | + libatomic_ops 7.8.2 74 | + bdw-gc 8.2.8 75 | + zstd 1.5.7 76 | + openssl 3.3.0 77 | + libexpat 2.7.1 78 | + libxcrypt 4.4.38 79 | + gdbm latest 80 | + readline 8.2 81 | 82 | ### 编译目标 83 | 84 | + gcc 14.2.0 85 | + bison 3.8.2 86 | + binutils 2.44 87 | + python 3.13.3 *[按需]* 88 | + gdb 16.2 89 | + global 6.6.14 90 | + lz4 1.10.0 *[非必须]* 91 | + zlib 1.3.1 *[非必须]* 92 | + libffi 3.4.8 *[非必须]* 93 | + ncurses 6.5 *[非必须]* 94 | + xz 5.8.1 *[非必须]* 95 | + libiconv 1.18 *[非必须]* 96 | 97 | ### 注 98 | 99 | + (所有的库都会被安装在**$PREFEX_DIR**里) 100 | 101 | ### 额外建议 102 | 103 | 给特定用户安装 gdb的pretty-printer 用以友好打印stdc++的stl容器 104 | 105 | 1. 在执行 install.sh 脚本前安装 ncurses-devel 和 python-devel, 用于编译gdb和开启python功能 106 | 2. gdb载入后可使用 ```so [安装目录]/load-libstdc++-gdb-printers.py``` 手动加载gdb的pretty printers 107 | 108 | ### History 109 | 110 | + 2024-05-23 Created 111 | + 2024-08-03 Update 112 | + GCC -> 14.2.0 113 | + automake -> 1.17 114 | + gdb -> 15.1 115 | + global -> 6.6.13 116 | + xz -> 5.6.2 117 | + lz4 -> 1.10.0 118 | + 2024-08-08 Restore GDB->14.2(15.1 always crash), Update binutils to 2.43 119 | + 2024-12-16 Update 120 | + libtool -> 2.5.3 121 | + bdw-gc -> 8.2.8 122 | + openssl -> 3.3.0 with quictls 123 | + python -> 3.11.11 124 | + gdb -> 15.2 125 | + global -> 6.6.14 126 | + xz -> 5.6.3 127 | + libiconv -> 1.18 128 | + 2025-04-14 Add experimental python without GIL, Update 129 | + libtool -> 2.5.4 130 | + mpfr -> 4.2.2 131 | + binutils -> 2.44 132 | + libffi 3.4.8 133 | + libexpat -> 2.7.1 134 | + libxcrypt -> 4.4.38 135 | + Python -> 3.13.3 136 | + gdb -> 16.2 137 | + xz -> 5.8.1 138 | + zstd -> l.5.7 -------------------------------------------------------------------------------- /GCC Installer/gcc-15/README.md: -------------------------------------------------------------------------------- 1 | # Linux 编译安装 GCC 15 2 | 3 | **注意: 使用 `./installer.sh` 前请先将文件Copy到外层,确保路径上没有特殊字符和空格。** 4 | > 某些第三方组件的构建脚本适配不是很好,特殊字符和空格会导致编译不过。 5 | 6 | GCC 15发布啦,本脚本在之前GCC 14的基础上做了稍许更新 。 7 | 8 | 由于GCC从5开始[对版本号进行重新规范](https://gcc.gnu.org/develop.html#num_scheme),所以这里的编译脚本以后以主版本号为准。 9 | 10 | GCC 15的大致(C/C++)内容如下: 11 | 12 | 1. Union类型不再保证零值初始化,可通过 `-fzero-init-padding-bits=unions` 切换到老行为 13 | 2. 改进向量化优化 14 | 3. 改进增量链接优化 15 | 4. 改进大源文件编译 16 | 5. 增加更多的诊断信息格式 17 | 6. 一些代码风格提示 18 | 7. C语言默认切到C23,补全部分C2Y的功能 19 | 8. 部分C++23和C++26的功能 20 | 9. Concepts TS被移除(废弃 `-fconcepts-ts`) 21 | 10. C++ Modules的进一步支持 22 | 11. 优化编译性能,优化模板特化Hash 23 | 12. STL默认开启Debug模式assert 24 | 25 | 26 | 详见: https://gcc.gnu.org/gcc-15/changes.html 27 | 28 | ## 编译安装 GCC 15.X.X 29 | 30 | ### 准备环境及依赖项 31 | 32 | 1. 支持 ISO C++ 11 的编译器(GCC 4.8及以上) 33 | 2. C标准库及头文件 34 | 3. 用于创建Ada编译器的GNAT 35 | 4. 支持POSIX的shell或GNU bash 36 | 5. POSIX或SVR4的 awk工具 37 | 6. GNU binutils 38 | 7. gzip 版本1.2.4及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 39 | 8. bzip2 版本 1.0.2及以上 (此处可下载 http://www.bzip.org/) 40 | 9. GNU make 工具 版本3.80及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 41 | 10. GNU tar工具 版本1.14及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 42 | 11. perl 版本5.6.1-5.6.24 (此处可下载 http://www.perl.org/) 43 | 12. tar或zip和unzip工具 (此处可下载 http://www.info-zip.org) 44 | 13. gmp库 版本4.3.2及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 45 | 14. mpfr库 版本3.1.0及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 46 | 15. mpc库 版本1.0.1及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 47 | 16. isl 版本 0.15及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 中gcc目录中的infrastructure目录下载 ) 48 | 17. zstd 49 | 18. awk 50 | 19. m4 51 | 20. automake 52 | 21. autoconf 53 | 22. gettext 54 | 23. gperf 55 | 24. cmake 56 | 57 | ## 我编译的环境 58 | 59 | ### 系统 60 | 61 | CentOS 7 & CentOS 8 62 | 63 | ### 编译的依赖库和工具 64 | 65 | + m4 latest 66 | + autoconf latest 67 | + automake 1.17 68 | + libtool 2.5.4 69 | + pkgconfig 0.29.2 70 | + gmp 6.3.0 71 | + mpfr 4.2.2 72 | + mpc 1.3.1 73 | + isl 0.24 74 | + libatomic_ops 7.8.2 75 | + bdw-gc 8.2.8 76 | + zstd 1.5.7 77 | + openssl 3.3.0 78 | + libexpat 2.7.1 79 | + libxcrypt 4.4.38 80 | + gdbm latest 81 | + readline 8.2 82 | 83 | ### 编译目标 84 | 85 | + gcc 15.2.0 86 | + bison 3.8.2 87 | + binutils 2.44 88 | + python 3.13.3 *[按需]* 89 | + gdb 16.2 90 | + global 6.6.14 91 | + lz4 1.10.0 *[非必须]* 92 | + zlib 1.3.1 *[非必须]* 93 | + libffi 3.4.8 *[非必须]* 94 | + ncurses 6.5 *[非必须]* 95 | + xz 5.8.1 *[非必须]* 96 | + libiconv 1.18 *[非必须]* 97 | 98 | ### 注 99 | 100 | + (所有的库都会被安装在**$PREFEX_DIR**里) 101 | 102 | ### 额外建议 103 | 104 | 给特定用户安装 gdb的pretty-printer 用以友好打印stdc++的stl容器 105 | 106 | 1. 在执行 install.sh 脚本前安装 ncurses-devel 和 python-devel, 用于编译gdb和开启python功能 107 | 2. gdb载入后可使用 ```so [安装目录]/load-libstdc++-gdb-printers.py``` 手动加载gdb的pretty printers 108 | 109 | ### History 110 | 111 | + 2025-04-27 Created 112 | -------------------------------------------------------------------------------- /GCC Installer/gcc-4.7/README.md: -------------------------------------------------------------------------------- 1 | Linux编译安装GCC 4.7 2 | ====== 3 | 4 | 详见: [Linux编译安装GCC 4.7](http://www.owent.net/?p=584) 5 | 6 | #### 准备环境及依赖项 7 | 1. 支持 ISO C90 的编译器 8 | 2. 用于创建Ada编译器的GNAT 9 | 3. 支持POSIX的shell或GNU bash 10 | 4. POSIX或SVR4的 awk工具 11 | 5. GNU binutils 12 | 6. gzip 版本1.2.4及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 13 | 7. bzip2 版本 1.0.2及以上 (此处可下载 http://www.bzip.org/) 14 | 8. GNU make 工具 版本3.80及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 15 | 9. GNU tar工具 版本1.14及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 16 | 10. perl 版本5.6.1及以上 (此处可下载 http://www.perl.org/) 17 | 11. jar或zip和unzip工具 (此处可下载 http://www.info-zip.org) 18 | 12. gmp库 版本4.3.2及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 19 | 13. mpfr库 版本2.4.2及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 20 | 14. mpc库 版本0.8.1及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 21 | 15. ppl库 版本0.11及以上 (此处可下载 http://www.cs.unipr.it/ppl/Download/) 22 | 16. isl 版本 0.10 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 中gcc目录中的infrastructure目录下载 ) 23 | 17. cloog-ppl 版本0.15 或cloog 版本0.16(注意不能使用更高版本) (此处可下载 http://cloog.org/ ) 24 | 25 | ###### 我编译的环境 26 | **系统**: 27 | 28 | CentOS 6.2 & CentOS 6.3 29 | 30 | **系统库**: 31 | 32 | + gzip 1.1.12 33 | + zip/unzip 3.0 34 | + GNU make 3.81 35 | + tar 1.23 36 | + perl 5.10.1 37 | + bzip2 1.0.5 38 | 39 | **依赖库**: 40 | + gmp 5.0.4 or gmp 5.0.5 41 | + mpfr 3.1.0 42 | + mpc 0.8.2 or mpc 0.9 43 | + ppl 1.12 or ppl 1.12.1 44 | + isl 0.10 45 | + cloog 0.16.1 or cloog 0.16.2 46 | 47 | #### 注: 48 | 49 | + 使用该脚本前保证脚本依赖的源码包文件处于当前目录下 50 | + (所有的库都会被安装在**$PREFEX_DIR**里) 51 | 52 | -------------------------------------------------------------------------------- /GCC Installer/gcc-4.7/installer.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owent/bash-shell/76423dc9b75826db8c4012e716bbcc88c34e7506/GCC Installer/gcc-4.7/installer.sh -------------------------------------------------------------------------------- /GCC Installer/gcc-4.8/README.md: -------------------------------------------------------------------------------- 1 | Linux 编译安装 GCC 4.8 2 | ====== 3 | 4 | 详见: [Linux 编译安装 GCC 4.8](http://www.owent.net/?p=730) 5 | 6 | GCC4.8发布啦,这个脚本在之前4.7的基础上做了点改进,移除一些过时的组件,增加了检测不到时自动下载源码包 7 | 8 | PS:4.8.1开始全面支持C++11特性,并且脱离了ppl库,gdb也开始脱离ppl库了 9 | 10 | 编译安装 GCC 4.8.X 11 |

准备环境及依赖项

12 | 1. 支持 ISO C++ 98 的编译器(GCC 4.7.2 的中期一个patch导致的整个项目开始转为由C++编译) 13 | 2. 用于创建Ada编译器的GNAT 14 | 3. 支持POSIX的shell或GNU bash 15 | 4. POSIX或SVR4的 awk工具 16 | 5. GNU binutils 17 | 6. gzip 版本1.2.4及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 18 | 7. bzip2 版本 1.0.2及以上 (此处可下载 http://www.bzip.org/) 19 | 8. GNU make 工具 版本3.80及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 20 | 9. GNU tar工具 版本1.14及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 21 | 10. perl 版本5.6.1及以上 (此处可下载 http://www.perl.org/) 22 | 11. jar或zip和unzip工具 (此处可下载 http://www.info-zip.org) 23 | 12. gmp库 版本5.0.2及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 24 | 13. mpfr库 版本2.4.2及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 25 | 14. mpc库 版本0.8.1及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 26 | 15. isl 版本 0.11.1 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 中gcc目录中的infrastructure目录下载 ) 27 | 16. cloog 版本0.18.1(此处可下载 ftp://gcc.gnu.org/pub/gcc/infrastructure/ ) 28 | 29 |

我编译的环境

30 |

系统:

31 | CentOS 6.2 & CentOS 6.5 & Suse 的不知道哪个很老的版本 32 | 33 |

系统库:

34 | + gzip 1.3.12 35 | + zip/unzip 3.0 36 | + GNU make 3.81 37 | + tar 1.23 38 | + perl 5.10.1 39 | + bzip2 1.0.5 40 | + gcc 4.4.7 or gcc 4.1.2 or gcc 4.4.5 41 | 42 |

编译的依赖库:

43 | + gmp 6.0.0a 44 | + mpfr 3.1.2 45 | + mpc 1.0.2 46 | + isl 0.11.1 47 | + cloog 0.18.1 48 | 49 |

编译目标:

50 | + gcc 4.8.X 51 | + binutils 2.24 52 | + gdb 7.7.1 53 | 54 |

注:

55 | + (所有的库都会被安装在**$PREFEX_DIR**里) 56 | 57 |

额外建议:

58 | 给特定用户安装 gdb的pretty-printer 用以友好打印stdc++的stl容器 59 | 60 | 1. 在执行 install.sh 脚本前安装 ncurses-devel 和 python-devel, 用于编译gdb和开启python功能 61 | 2. 安装完成后,把[GCC源码目录]/libstdc++-v3/python 复制到[用户目录]/.gdb 62 | 3. 编辑[用户目录]/.gdbinit,添加 63 |
64 | python
65 | import sys
66 | import os
67 | p = os.path.expanduser('~/.gdb/python')
68 | print p
69 | if os.path.exists(p):
70 |     sys.path.insert(0, p)
71 |     from libstdcxx.v6.printers import register_libstdcxx_printers
72 |     register_libstdcxx_printers(None)
73 | end
74 | 
75 | 5. 编译安装gdb 76 | 77 | #### History: 78 | + 2013-03-26 Created 79 | + 2013-04-11 改进脚本,增加统一编译选项,增加对binutils和gdb可选包的编译,增加自动把PREFIX_DIR变为绝对路径的问题,统一目录组织,修复环境变量的一些小问题 80 | + 2013-05-24 增加安装pretty-printer的方法 81 | + 2013-06-03 更新gcc到4.8.1,更新基础库,更新gdb到7.6,添加clean功能,gdb添加python支持(用于pretty-printer) 82 | + 2013-10-29 更新gcc到4.8.2,更新gdb到7.6.1,更新GMP到5.1.3 83 | + 2013-12-13 更新binutils到2.24,更新gdb到7.6.2,移除对ppl的依赖,显式开启gold等一些选项,显式开启链接时优化选项 84 | + 2014-05-23 更新gcc到4.8.3,更新gdb到7.7.1,完全移除对ppl的依赖,同步gcc4.9编译脚本中修复的一些问题,增加编译选项等 85 | + 2015-02-09 更新gcc到4.8.4(未测试,貌似这个版本加入了[jit](https://gcc.gnu.org/wiki/JIT)) 86 | -------------------------------------------------------------------------------- /GCC Installer/gcc-4.9/README.md: -------------------------------------------------------------------------------- 1 | Linux 编译安装 GCC 4.9 2 | ====== 3 | 详情及变更请参照: [Linux 编译安装 GCC 4.9](https://github.com/owt5008137/OWenT-s-Utils/tree/master/Bash%26Shell/GCC%20Installer/gcc-4.9) 4 | 5 | GCC4.9发布啦,本脚本在之前4.8的基础上做了稍许改进,更新 6 | PS:4.9.0 开始支持C++1y特性 7 | GCC 4.9 的大致变更如下,因为我只用C/C++所以更关注**通用性高的C和C++**的部分啦: 8 | 9 | 1. 标记过时系统 10 | 2. 移除mudflag功能 11 | 3. 在ARM架构中引入内存错误检查器AddressSanitizer 12 | 4. 增加运行时错误检测器UndefinedBehaviorSanitizer 13 | 5. 多项链接优化(包含对类型合并功能重写、函数体按需加载等)[Debug模式的Firefox内存消耗从15GB降到3.5GB,链接时间从1700秒降到350秒] 14 | 6. Inter-procedural优化改进(包含新的继承类型分析模型、直接调用转为非直接调用和本地符号别名等) 15 | 7. Feedback优化(包含对c++内联函数性能分析的改进、函数排序等) 16 | 8. 支持OpenMP 4.0[并行计算] 17 | 9. C、C++、Fortran增加date-time警告 18 | 10. GNAT切换到Ada2012 19 | 11. **C/C++ 增加编译信息带颜色输出(-fdiagnostics-color=auto)** 20 | 12. 单指令多数据(SIMD)指令的无循环依赖断言 21 | 13. 支持Cilk Plus(C和C++的数据与任务并行处理插件) 22 | 14. **C11原子操作、线程本地存储** 23 | 15. **C++1y 返回类型检测、lambda函数默认参数支持、可变长度数组、[[deprecated]]属性支持、数字分隔符支持、多态lambda表达式** 24 | 16. **支持正则表达式、部分C++14实验性内容** 25 | 17. Fortran更新的内容我就无情地忽略啦 26 | 18. Go语言1.2.1版本的接口 27 | 19. 还有一系列针对特定编译目标架构的优化 28 | 29 | 30 | 编译安装 GCC 4.9.X 31 | ### 准备环境及依赖项 32 | 33 | 1. 支持 ISO C++ 98 的编译器(GCC 4.7.2 的中期一个patch导致的整个项目开始转为由C++编译) 34 | 2. C标准库及头文件 35 | 3. 用于创建Ada编译器的GNAT 36 | 4. 支持POSIX的shell或GNU bash 37 | 5. POSIX或SVR4的 awk工具 38 | 6. GNU binutils 39 | 7. gzip 版本1.2.4及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 40 | 8. bzip2 版本 1.0.2及以上 (此处可下载 http://www.bzip.org/) 41 | 9. GNU make 工具 版本3.80及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 42 | 10. GNU tar工具 版本1.14及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 43 | 11. perl 版本5.6.1及以上 (此处可下载 http://www.perl.org/) 44 | 12. jar或zip和unzip工具 (此处可下载 http://www.info-zip.org) 45 | 13. gmp库 版本4.3.2及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 46 | 14. mpfr库 版本2.4.2及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 47 | 15. mpc库 版本0.8.1及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 48 | 16. isl 版本 0.10, 0.11 或0.12 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 中gcc目录中的infrastructure目录下载 ) 49 | 17. cloog 版本0.18.1(此处可下载 ftp://gcc.gnu.org/pub/gcc/infrastructure/ ) 50 | 51 | ### 我编译的环境 52 | #### 系统: 53 | CentOS 6.2 & CentOS 6.5 & Fedora 20 & Ubuntu 14.04 LTS 54 | 55 | #### 系统库: 56 | + gzip 1.3.12 57 | + zip/unzip 3.0 58 | + GNU make 3.81 59 | + tar 1.23 60 | + perl 5.10.1 61 | + bzip2 1.0.5 62 | + gcc 4.4.7 or gcc 4.4.5 or gcc 4.8.2 63 | 64 | #### 编译的依赖库: 65 | + gmp 6.0.0a 66 | + mpfr 3.1.2 67 | + mpc 1.0.2 68 | + isl 0.11.1 69 | + cloog 0.18.1 70 | 71 | #### 编译目标: 72 | + gcc 4.9.X 73 | + binutils 2.24 74 | + python 2.7.8 *[按需]* 75 | + gdb 7.7.1 (如果存在ncurses-devel包) 76 | 77 | #### 注: 78 | + (所有的库都会被安装在**$PREFEX_DIR**里) 79 | 80 | #### 额外建议: 81 | 给特定用户安装 gdb的pretty-printer 用以友好打印stdc++的stl容器 82 | 83 | 1. 在执行 install.sh 脚本前安装 ncurses-devel 和 python-devel, 用于编译gdb和开启python功能 84 | 2. 安装完成后,把[GCC源码目录]/libstdc++-v3/python 复制到[用户目录]/.gdb 85 | 3. 编辑[用户目录]/.gdbinit,添加 86 | ```python 87 | import sys 88 | import os 89 | p = os.path.expanduser('~/.gdb/python') 90 | print p 91 | if os.path.exists(p): 92 | sys.path.insert(0, p) 93 | from libstdcxx.v6.printers import register_libstdcxx_printers 94 | register_libstdcxx_printers(None) 95 | end 96 | ``` 97 | 5. 编译安装gdb 98 | 99 | #### History: 100 | + 2014-04-23 Created 101 | + 2014-04-28 增加一些控制选项 102 | + 2014-05-23 更新gdb到7.7.1 103 | + 2014-07-18 更新gcc到4.9.1,更新python到2.7.8 104 | + 2014-11-12 更新gcc到4.9.2,更新gdb到7.8.1 105 | -------------------------------------------------------------------------------- /GCC Installer/gcc-5/README.md: -------------------------------------------------------------------------------- 1 | Linux 编译安装 GCC 5 2 | ====== 3 | 4 | 详情及变更请参照: [Linux 编译安装 GCC 5](https://github.com/owent-utils/bash-shell/tree/master/GCC%20Installer/gcc-5) 5 | 6 | GCC 5发布啦,本脚本在之前4.9的基础上做了稍许改进 7 | 8 | 由于GCC从5开始[对版本号进行重新规范](https://gcc.gnu.org/develop.html#num_scheme),所以这里的编译脚本以后以主版本号为准。 9 | 10 | 另外由于GNU官方已经不建议使用bzip2,所以依赖包会尽量使用xz压缩包 11 | 12 | GCC 5的大致内容如下: 13 | 14 | 1. **默认C标准使用c11,原先是c98** 15 | 2. 移除对cloog的依赖*(虽然gcc 5可以用新版的isl从而不依赖cloog,但是目前的gdb和binutils仍然依赖老版本的isl和cloog,所以编译脚本里用了老板的isl并会编译cloog)* 16 | 3. 移除了一些实验性的编译器命令,转而使用标准里的 17 | 4. 优化跨模块编译优化功能和性能 18 | 5. 优化链接时优化功能、性能和内存消耗 19 | 6. 寄存器分配优化 20 | 7. 指针边界检查 21 | 8. **全面支持c++14** 22 | 9. **不再支持[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3639.html](N3639)里定义的变长数组声明** 23 | 10. **std::string默认情况下使用小字符串优化策略代替写时复制**(关于这个《More Exceptional C++》里有说明) 24 | 11. **默认情况下使用新的std::list策略,std::list::size函数复杂度变为O(1)** 25 | 12. libstdc++完全c++11(STL库完全支持) 26 | 13. 初步的libgccjit功能 27 | 14. 其他的不列举啦,可以参见 https://gcc.gnu.org/gcc-5/changes.html 28 | 29 | 编译安装 GCC 5.X.X 30 | ### 准备环境及依赖项 31 | 32 | 1. 支持 ISO C++ 98 的编译器(GCC 3.4及以上) 33 | 2. C标准库及头文件 34 | 3. 用于创建Ada编译器的GNAT 35 | 4. 支持POSIX的shell或GNU bash 36 | 5. POSIX或SVR4的 awk工具 37 | 6. GNU binutils 38 | 7. gzip 版本1.2.4及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 39 | 8. bzip2 版本 1.0.2及以上 (此处可下载 http://www.bzip.org/) 40 | 9. GNU make 工具 版本3.80及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 41 | 10. GNU tar工具 版本1.14及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 42 | 11. perl 版本5.6.1及以上 (此处可下载 http://www.perl.org/) 43 | 12. jar或zip和unzip工具 (此处可下载 http://www.info-zip.org) 44 | 13. gmp库 版本4.3.2及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 45 | 14. mpfr库 版本2.4.2及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 46 | 15. mpc库 版本0.8.1及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 47 | 16. isl 版本 0.14 或0.12.2 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 中gcc目录中的infrastructure目录下载 ) 48 | 49 | ### 我编译的环境 50 | #### 系统: 51 | CentOS 6.5 & CentOS 7 52 | 53 | #### 系统库: 54 | + gzip 1.3.12 and gzip 1.5 55 | + zip/unzip 3.0/6.0 56 | + GNU make 3.81 and GNU make 3.82 57 | + tar 1.23 and tar 1.26 58 | + perl 5.10.1 and perl 5.16.3 59 | + bzip2 1.0.5 and bzip2 1.0.6 60 | + gcc 4.4.7 and gcc 4.8.3 61 | 62 | #### 编译的依赖库: 63 | + gmp 6.1.0 64 | + mpfr 3.1.3 65 | + mpc 1.0.3 66 | + isl 0.15 67 | 68 | #### 编译目标: 69 | + gcc 5.3.0 70 | + binutils 2.26 71 | + python 2.7.11 *[按需]* 72 | + gdb 7.11 (如果存在ncurses-devel包) 73 | 74 | #### 注: 75 | + (所有的库都会被安装在**$PREFEX_DIR**里) 76 | 77 | #### 额外建议: 78 | 给特定用户安装 gdb的pretty-printer 用以友好打印stdc++的stl容器 79 | 80 | 1. 在执行 install.sh 脚本前安装 ncurses-devel 和 python-devel, 用于编译gdb和开启python功能 81 | 2. 安装完成后,把[GCC源码目录]/libstdc++-v3/python 复制到[用户目录]/.gdb 82 | 3. 编辑[用户目录]/.gdbinit,添加 83 | ```python 84 | import sys 85 | import os 86 | p = os.path.expanduser('~/.gdb/python') 87 | print p 88 | if os.path.exists(p): 89 | sys.path.insert(0, p) 90 | from libstdcxx.v6.printers import register_libstdcxx_printers 91 | register_libstdcxx_printers(None) 92 | end 93 | ``` 94 | 5. 编译安装gdb 95 | 96 | #### History: 97 | + 2015-04-13 Created 98 | + 2015-07-20 更新GCC版本到5.2.0,Python到2.7.10,mpfr到3.1.3, gdb到7.9.1 99 | + 2016-02-03 更新GCC版本到5.3.0,Python到2.7.11,binutils到2.26, gdb到7.10.1,移除**cloog** 100 | + 2016-02-26 更新GDB版本到7.11,这个版本的GDB的include没问题了 -------------------------------------------------------------------------------- /GCC Installer/gcc-6/README.md: -------------------------------------------------------------------------------- 1 | Linux 编译安装 GCC 6 2 | ====== 3 | 4 | 详情及变更请参照: [Linux 编译安装 GCC 6](https://github.com/owent-utils/bash-shell/tree/master/GCC%20Installer/gcc-6) 5 | 6 | GCC 6发布啦,本脚本在之前GCC 5的基础上做了稍许改进 7 | 8 | 由于GCC从5开始[对版本号进行重新规范](https://gcc.gnu.org/develop.html#num_scheme),所以这里的编译脚本以后以主版本号为准。 9 | 10 | 另外由于GNU官方已经不建议使用bzip2,所以依赖包会尽量使用xz压缩包 11 | 12 | GCC 6的大致内容如下: 13 | 14 | 1. **默认C++标准使用c++14(gnu++14),原先是c++98(gnu++98)** 15 | 2. 增加了严格数组越界行为检测(-fsanitize=bounds-strict) 16 | 3. 区分类型别名的指针访问分析。这会影响类型双关的代码,可以加-fno-strict-aliasing移除 17 | 4. 类型别名支持weakref和alias属性,有助于链接时优化。 18 | 5. 移除值范围传播时的this指针有效性检查, 19 | 6. 链接时优化 - 链接声明时warning和error属性 20 | 7. 链接时优化 - C和Fortan的类型合并规则修订并支持Fortan 2008标准 21 | 8. 链接时优化 - 不开启链接优化时保留更多的类型信息 22 | 9. 链接时优化 - 非法的全局变量和声明检测(-Wodr-type-mismatch) 23 | 10. 链接时优化 - 链接中间文件大小减小了约11% 24 | 11. 链接时优化 - 通过减小数据流分区的大小提升并行链接性能,Firefox的IL流减少了66% 25 | 12. 链接时优化 - 插件拓展,支持增量链接和全局程序优化(-r选项) 26 | 13. 跨程序优化 27 | 14. OpenACC 2.0a 28 | 15. OpenMP 4.5 29 | 16. 支持枚举类型的属性声明 30 | 17. 错误代码现在显示一个表达式范围,之前只提供出错点 31 | 18. 诊断提示附加到错误处 32 | 19. 一些新的细节控制选项,不一一列出了 33 | 20. 对SCM附加的merge标记做特殊提示 34 | 21. 支持[C++ Concepts](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4377.pdf) 35 | 22. 支持C++17的折叠表达式,*u8*字符修饰,扩展static_assert和嵌套命名空间的功能 36 | 23. 允许非类型模板参数的常量评估 37 | 24. 支持内存事物(-fgnu-tm) 38 | 25. C++17的一些实验性支持 39 | 40 | 编译安装 GCC 6.X.X 41 | ### 准备环境及依赖项 42 | 43 | 1. 支持 ISO C++ 98 的编译器(GCC 3.4及以上) 44 | 2. C标准库及头文件 45 | 3. 用于创建Ada编译器的GNAT 46 | 4. 支持POSIX的shell或GNU bash 47 | 5. POSIX或SVR4的 awk工具 48 | 6. GNU binutils 49 | 7. gzip 版本1.2.4及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 50 | 8. bzip2 版本 1.0.2及以上 (此处可下载 http://www.bzip.org/) 51 | 9. GNU make 工具 版本3.80及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 52 | 10. GNU tar工具 版本1.14及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 53 | 11. perl 版本5.6.1及以上 (此处可下载 http://www.perl.org/) 54 | 12. jar或zip和unzip工具 (此处可下载 http://www.info-zip.org) 55 | 13. gmp库 版本4.3.2及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 56 | 14. mpfr库 版本2.4.2及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 57 | 15. mpc库 版本0.8.1及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 58 | 16. isl 版本 0.14,0.15或0.16 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 中gcc目录中的infrastructure目录下载 ) 59 | 60 | ### 我编译的环境 61 | #### 系统: 62 | CentOS 6 & CentOS 7 63 | 64 | #### 系统库: 65 | + gzip 1.3.12 and gzip 1.5 66 | + zip/unzip 3.0/6.0 67 | + GNU make 3.81 and GNU make 3.82 68 | + tar 1.23 and tar 1.26 69 | + perl 5.10.1 and perl 5.16.3 70 | + bzip2 1.0.5 and bzip2 1.0.6 71 | + gcc 4.4.7 and gcc 4.8.5 72 | 73 | #### 编译的依赖库: 74 | + gmp 6.1.2 75 | + mpfr 3.1.5 76 | + mpc 1.0.3 77 | + isl 0.16.1 78 | 79 | #### 编译目标: 80 | + gcc 6.3.0 81 | + binutils 2.27 82 | + python 3.6.0 *[按需]* 83 | + gdb 7.12 (如果存在ncurses-devel包) 84 | 85 | #### 注: 86 | + (所有的库都会被安装在**$PREFEX_DIR**里) 87 | 88 | #### 额外建议: 89 | 给特定用户安装 gdb的pretty-printer 用以友好打印stdc++的stl容器 90 | 91 | 1. 在执行 install.sh 脚本前安装 ncurses-devel 和 python-devel, 用于编译gdb和开启python功能 92 | 2. 安装完成后,把[GCC源码目录]/libstdc++-v3/python 复制到[用户目录]/.gdb 93 | 3. 编辑[用户目录]/.gdbinit,添加 94 | ```python 95 | import sys 96 | import os 97 | p = os.path.expanduser('~/.gdb/python') 98 | print p 99 | if os.path.exists(p): 100 | sys.path.insert(0, p) 101 | from libstdcxx.v6.printers import register_libstdcxx_printers 102 | register_libstdcxx_printers(None) 103 | end 104 | ``` 105 | 5. 编译安装gdb 106 | 107 | #### History: 108 | + 2016-04-28 Created 109 | + 2016-09-01 更新gcc到6.2.0,gmp到6.1.1,binutils到2.27,python到3.5.2 110 | + 2016-12-26 更新gcc到6.3.0,gmp到6.1.2,mpfr到3.1.5,python到3.6.0,gdb到7.12 -------------------------------------------------------------------------------- /GCC Installer/gcc-7/README.md: -------------------------------------------------------------------------------- 1 | Linux 编译安装 GCC 7 2 | ====== 3 | 4 | **GCC 30周年纪念** 5 | 6 | 详情及变更请参照: [Linux 编译安装 GCC 7](https://github.com/owent-utils/bash-shell/tree/master/GCC%20Installer/gcc-7) 7 | 8 | GCC 7发布啦,本脚本在之前GCC 6的基础上做了稍许更新 9 | 10 | 由于GCC从5开始[对版本号进行重新规范](https://gcc.gnu.org/develop.html#num_scheme),所以这里的编译脚本以后以主版本号为准。 11 | 12 | GCC 7的大致(C/C++)内容如下: 13 | 14 | 1. 默认使用新的寄存器分配策略(LRA) 15 | 2. 移除一些非标准的type traits 16 | 3. 不推荐使用libstdc++性能分析模式 17 | 4. 不推荐使用Cilk+插件 18 | 5. 修复ARM目标的一处[BUG](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77728) 19 | 6. GCC 7 可以检测某些情况下sprintf族函数的返回值范围并加以优化。( -fprintf-return-value,默认-O1或更高) 20 | 7. 增加了一种新的常量合并策略。(-fstore-merging,默认-O2或更高和-Os启用) 21 | 8. 增加了一种新的代码优化策略,可以加快表达式结束判定,能够减少代码段大小并提升代码生成速度。(-fcode-hoisting,默认-O2或更高和-Os启用) 22 | 9. 替换了新的位操作常量优化。(-fipa-bit-cp和-fipa-cp,默认-O2或更高和-Os启用) 23 | 10. 新的值范围判定优化。(-fipa-vrp,默认-O2或更高和-Os启用) 24 | 11. 循环分割优化。(-fsplit-loops,默认-O3或更高启用) 25 | 12. 某些平台的包装器压缩优化(-fshrink-wrap-separate ,默认启用) 26 | 13. 新的地址范围安全性检测(-fsanitize-address-use-after-scope) 27 | 14. 有符号整数溢出检测(-fsanitize=signed-integer-overflow) 28 | 15. 支持[DWARF调试信息V5](http://www.dwarfstd.org/Download.php) 29 | 16. C语言-新的Warning 30 | > + -Wimplicit-fallthrough : 隐式失败 31 | > + -Wpointer-compare : 指针和0字符常量比较 32 | > + -Wduplicated-branches : if-else有相同分支 33 | > + -Wrestrict : 带约束参数的别名 34 | > + -Wmemset-elt-size : memset时第三个参数是数组的大小而不是字节数 35 | > + -Wint-in-bool-context : 在应该用bool类型的地方可能不正确地使用了整型 36 | > + -Wswitch-unreachable : 不可达的switch分支 37 | > + -Wexpansion-to-defined : 在#if外部的defined宏 38 | > + -Wregister : 在C++17之后***register***关键字被废弃 39 | > + -Wvla-larger-than=N : 变长长度数组越界 40 | > + -Wduplicate-decl-specifier : 重复的const, volatile, restrict 或 _Atomic 标识符 41 | 42 | 17. GCC前端可以建议拼写错误(成员、预处理) 43 | 18. 字符串格式化会有下划线提示 44 | 19. 变量名覆盖提示(-Wshadow=compatible-local/local/global) 45 | 20. 内存分配溢出和误用检测 46 | 21. 一些数值限制的宏,*INT_WIDTH*、*CR_DECIMAL_DIG*等等 47 | 22. 一些用于检测移除的内建API,*__builtin_add_overflow_p*、*__builtin_sub_overflow_p*、*__builtin_mul_overflow_p* 48 | 23. 允许自定义使用的浮点数标准 49 | 24. 原子关键字***_Atomic***兼容*-fopenmp* 50 | 25. *-std=c++1z*和*-std=gnu++1z*的实验性支持,包含if constexpr、模板参数推断、auto模板参数和结构化绑定。详见: https://gcc.gnu.org/projects/cxx-status.html#cxx1z 51 | 26. C++17 new操作符的对齐支持 52 | 27. 允许指定C++17的结算顺序(*-fstrong-eval-order*)。比如指定函数参数的结算顺序。 53 | 28. 默认的继承的结构(内存布局)变化(使用*-fno-new-inheriting-ctors*或者*-fabi-version*低于11时可以强制使用老的内存布局) 54 | 29. 可以提示丢失分号 55 | 30. iostream的异常使用新的[cxx11 ABI](https://gcc.gnu.org/onlinedocs/gcc-7.1.0/libstdc++/manual/using_dual_abi.html) 56 | 31. 一些C++17的实验性STL支持 57 | 32. 新的rehashing策略 58 | 59 | ## 编译安装 GCC 7.X.X 60 | ### 准备环境及依赖项 61 | 62 | 1. 支持 ISO C++ 98 的编译器(GCC 3.4及以上) 63 | 2. C标准库及头文件 64 | 3. 用于创建Ada编译器的GNAT 65 | 4. 支持POSIX的shell或GNU bash 66 | 5. POSIX或SVR4的 awk工具 67 | 6. GNU binutils 68 | 7. gzip 版本1.2.4及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 69 | 8. bzip2 版本 1.0.2及以上 (此处可下载 http://www.bzip.org/) 70 | 9. GNU make 工具 版本3.80及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 71 | 10. GNU tar工具 版本1.14及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 72 | 11. perl 版本5.6.1及以上 (此处可下载 http://www.perl.org/) 73 | 12. tar或zip和unzip工具 (此处可下载 http://www.info-zip.org) 74 | 13. gmp库 版本4.3.2及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 75 | 14. mpfr库 版本2.4.2及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 76 | 15. mpc库 版本0.8.1及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 77 | 16. isl 版本 0.15及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 中gcc目录中的infrastructure目录下载 ) 78 | 17. awk 79 | 80 | ### 我编译的环境 81 | #### 系统 82 | CentOS 7 & CentOS 6.2 83 | 84 | #### 系统库 85 | + gzip 1.5 86 | + zip/unzip 3.0/6.0 87 | + GNU make 3.82 88 | + tar 1.26 89 | + perl 5.16.3 90 | + bzip2 1.0.6 91 | + gcc 4.8.5 92 | 93 | #### 编译的依赖库 94 | + gmp 6.1.2 95 | + mpfr 4.0.0 96 | + mpc 1.1.0 97 | + isl 0.18 98 | + libatomic_ops 7.6.2 99 | + bdw-gc 7.6.4 100 | 101 | #### 编译目标 102 | + gcc 7.3.0 103 | + binutils 2.30 104 | + python 2.7.14 *[按需]* 105 | + gdb 8.1 (如果存在ncurses-devel包) 106 | 107 | #### 注 108 | + (所有的库都会被安装在**$PREFEX_DIR**里) 109 | 110 | #### 额外建议 111 | 给特定用户安装 gdb的pretty-printer 用以友好打印stdc++的stl容器 112 | 113 | 1. 在执行 install.sh 脚本前安装 ncurses-devel 和 python-devel, 用于编译gdb和开启python功能 114 | 2. 安装完成后,把[GCC源码目录]/libstdc++-v3/python 复制到[用户目录]/.gdb 115 | 3. 编辑[用户目录]/.gdbinit,添加 116 | ```python 117 | import sys 118 | import os 119 | p = os.path.expanduser('~/.gdb/python') 120 | print p 121 | if os.path.exists(p): 122 | sys.path.insert(0, p) 123 | from libstdcxx.v6.printers import register_libstdcxx_printers 124 | register_libstdcxx_printers(None) 125 | end 126 | ``` 127 | 5. 编译安装gdb 128 | 129 | #### History 130 | + 2017-05-05 Created 131 | + 2017-09-14 增加仅下载模式,更新mpfr到的3.1.6,libatomic_ops到7.4.6,gcc到7.2.0,binutils 2.29,python到2.7.14,gdb到7.12.1 132 | + 2017-10-14 增加一些低版本环境的适配支持,支持通过CC和CXX指定编译器 133 | + 2018-01-31 更新gcc到7.3.0,更新mpfr到4.0.0,更新mpc到1.1.0,更新isl到0.18,更新libatomic_ops到7.6.2,更新bdw-gc到7.6.4,更新binutils到2.30,更新gdb到8.1 134 | + 2018-02-01 优化脚本,库版本号前置,不再使用ftp协议下载。patch修改bdw-gc的configure脚本,修复语法错误问题 -------------------------------------------------------------------------------- /GCC Installer/gcc-8/README.md: -------------------------------------------------------------------------------- 1 | Linux 编译安装 GCC 8 2 | ====== 3 | 4 | GCC 8发布啦,本脚本在之前GCC 7的基础上做了稍许更新 5 | 6 | 由于GCC从5开始[对版本号进行重新规范](https://gcc.gnu.org/develop.html#num_scheme),所以这里的编译脚本以后以主版本号为准。 7 | 8 | GCC 8的大致(C/C++)内容如下: 9 | 10 | 1. 移除一些老的调试符号支持和插件 11 | 2. 内联和克隆的启发式优化算法和基于Profile的优化机制的优化 12 | 3. 链接优化增加了ELF中DWARF格式的语言相关调试信息,用以支持libstdc++在开启编译优化之后的pretty-print 13 | 4. 增加了实验性的 ```-fcf-protection=[full|branch|return|none]```选项(目前只支持Linux下x86架构)。用以检查控制流跳转后的程序安全性 14 | 5. 默认启用 ```-gcolumn-info``` ,用以在DWARF格式的调试信息中提供文件名和行号 15 | 6. 重构循环嵌套模块优化和新的循环展开优化编译选项和pragma 16 | 7. 增加检测动态还是静态栈的探针 17 | 8. 增强了冲突属性的检测 18 | 9. 覆盖率检测工具gcov增强函数关系分析能力和终端的颜色输出支持 19 | 10. 地址安全性检测模块(AddressSanitizer)增加了一组新的检测机制(比较和相减) 20 | 11. 未定义行为检测模块也增加了两个选项 21 | 12. [C] 新的warning选项: 不安全的宏展开、字符串操作参数不匹配、对齐、缺失属性标记、不兼容的函数指针、指针大小、转换对齐、 22 | 13. [C] 用 ```-fsanitize=signed-integer-overflow``` 代替 ```-Wstrict-overflow``` 23 | 14. [C] 数组溢出检测增强 24 | 14. [C] 重叠访问检测增强 25 | 15. [C] 参数类型检测、format检测、代码提示增强 26 | 16. [C++] C++11 ```alignof``` 对应 C ```_Alignof``` 而不是原来的 GNU ```__alignof__``` 27 | 17. [C++] 有风险的成员变量访问和模板的代码提示增强 28 | 18. [C++] ```-std=c++2a``` 支持 29 | 19. [libstdc++] 继续增加C++17和C++2a的支持和接入 30 | 31 | ## 编译安装 GCC 8.X.X 32 | ### 准备环境及依赖项 33 | 34 | 1. 支持 ISO C++ 98 的编译器(GCC 3.4及以上) 35 | 2. C标准库及头文件 36 | 3. 用于创建Ada编译器的GNAT 37 | 4. 支持POSIX的shell或GNU bash 38 | 5. POSIX或SVR4的 awk工具 39 | 6. GNU binutils 40 | 7. gzip 版本1.2.4及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 41 | 8. bzip2 版本 1.0.2及以上 (此处可下载 http://www.bzip.org/) 42 | 9. GNU make 工具 版本3.80及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 43 | 10. GNU tar工具 版本1.14及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 44 | 11. perl 版本5.6.1及以上 (此处可下载 http://www.perl.org/) 45 | 12. tar或zip和unzip工具 (此处可下载 http://www.info-zip.org) 46 | 13. gmp库 版本4.3.2及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 47 | 14. mpfr库 版本2.4.2及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 48 | 15. mpc库 版本0.8.1及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 49 | 16. isl 版本 0.15及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 中gcc目录中的infrastructure目录下载 ) 50 | 17. awk 51 | 52 | ### 我编译的环境 53 | #### 系统 54 | CentOS 7 & CentOS 6.2 55 | 56 | #### 系统库 57 | 58 | + gzip 1.5 59 | + zip/unzip 3.0/6.0 60 | + GNU make 3.82 61 | + tar 1.26 62 | + perl 5.16.3 63 | + bzip2 1.0.6 64 | + gcc 4.8.5 65 | 66 | #### 编译的依赖库 67 | 68 | + gmp 6.2.0 69 | + mpfr 4.1.0 70 | + mpc 1.2.1 71 | + isl 0.18 72 | + libatomic_ops 7.6.10 73 | + bdw-gc 8.0.4 74 | + openssl 1.1.1h 75 | 76 | #### 编译目标 77 | 78 | + gcc 8.4.0 79 | + binutils 2.35.1 80 | + python 3.9.0 *[按需]* 81 | + gdb 10.1 (如果存在ncurses-devel包) 82 | + global 6.6.5 83 | 84 | #### 注 85 | + (所有的库都会被安装在**$PREFEX_DIR**里) 86 | 87 | #### 额外建议 88 | 给特定用户安装 gdb的pretty-printer 用以友好打印stdc++的stl容器 89 | 90 | 1. 在执行 install.sh 脚本前安装 ncurses-devel 和 python-devel, 用于编译gdb和开启python功能 91 | 2. gdb载入后可使用 ```so [安装目录]/load-libstdc++-gdb-printers.py``` 手动加载gdb的pretty printers 92 | 93 | 94 | #### History 95 | + 2018-05-01 Created 96 | + 2018-08-13 更新GCC到8.2.0,更新libatomic_ops到7.6.6,更新bdwgc到7.6.8,更新binutils到2.31 97 | + 2019-02-01 更新libatomic_ops到7.6.8,更新bdwgc到8.0.2,移除bdwgc的编译脚本patch,还原binutils到2.30(2.31的golden组件有兼容问题),更新gdb到8.2.1,修订开启multilib切重复运行脚本时libatomic_ops部分内容使用了32位的问题。 98 | + 2020-10-26 更新组件,增加工具脚本 ```load-gcc-envs.sh``` 和 ```load-libstdc++-gdb-printers.py``` ,增加内部使用的openssl,增加编译global。 99 | + GCC -> 8.4.0 100 | + mpfr -> 4.1.0 101 | + mpc -> 1.2.0 102 | + libatomic_ops -> 7.6.10 103 | + bdwgc -> 8.0.4 104 | + binutils -> 2.35.1 105 | + openssl -> 1.1.1h 106 | + python -> 2.7.18 107 | + gdb -> 10.1 108 | + global -> 6.6.5 -------------------------------------------------------------------------------- /GCC Installer/gcc-9/README.md: -------------------------------------------------------------------------------- 1 | Linux 编译安装 GCC 9 2 | ====== 3 | 4 | GCC 9发布啦,本脚本在之前GCC 8的基础上做了稍许更新。 5 | 6 | 由于GCC从5开始[对版本号进行重新规范](https://gcc.gnu.org/develop.html#num_scheme),所以这里的编译脚本以后以主版本号为准。 7 | 8 | GCC 9的大致(C/C++)内容如下: 9 | 10 | 1. 修复arm的64位位域的传参对齐问题 11 | 2. 错误和警告提示的代码输出会输出行号 12 | 3. 一系列编译优化相关的提升 13 | 4. 某些条件下的switch语句的复杂度优化 14 | 5. 优化代码优化的性能 15 | 6. 更精确的profile 16 | 7. 增强链接的并发能力 17 | 8. \[C\] -std=c2x/-std=gnu2x 18 | 9. \[C\] 一堆新的warning 19 | 10. \[C++\] 也是一堆新的warning,deprecated掉自动生成拷贝构造函数 20 | 11. \[C++\] 部分-std=c++2a/-std=gnu++2a 的功能 21 | 12. \[C++\] 错误和warning提示会有额外的位置指向提示,format的warning提示会精确到位置,自动生成的return代码会有生成内容的提示 22 | 13. \[C++\] 文件系统支持(需要-lstdc++fs) 23 | 14. \[C++\] 支持Windows下文件系统的宽字符集 24 | 15. \[C++\] 支持部分TS的网络库 25 | 26 | ## 编译安装 GCC 9.X.X 27 | 28 | ### 准备环境及依赖项 29 | 30 | 1. 支持 ISO C++ 98 的编译器(GCC 3.4及以上) 31 | 2. C标准库及头文件 32 | 3. 用于创建Ada编译器的GNAT 33 | 4. 支持POSIX的shell或GNU bash 34 | 5. POSIX或SVR4的 awk工具 35 | 6. GNU binutils 36 | 7. gzip 版本1.2.4及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 37 | 8. bzip2 版本 1.0.2及以上 (此处可下载 http://www.bzip.org/) 38 | 9. GNU make 工具 版本3.80及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 39 | 10. GNU tar工具 版本1.14及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 40 | 11. perl 版本5.6.1-5.6.24 (此处可下载 http://www.perl.org/) 41 | 12. tar或zip和unzip工具 (此处可下载 http://www.info-zip.org) 42 | 13. gmp库 版本4.3.2及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 43 | 14. mpfr库 版本2.4.2及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 44 | 15. mpc库 版本0.8.1及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 下载 ) 45 | 16. isl 版本 0.15及以上 (可由GNU镜像列表 http://www.gnu.org/prep/ftp.html 或自动选择最佳镜像 http://ftpmirror.gnu.org 中gcc目录中的infrastructure目录下载 ) 46 | 17. awk 47 | 18. m4 48 | 19. automake 49 | 20. gettext 50 | 21. gperf 51 | 52 | ### 我编译的环境 53 | 54 | #### 系统 55 | 56 | CentOS 7 57 | 58 | #### 编译的依赖库 59 | 60 | + gmp 6.2.0 61 | + mpfr 4.1.0 62 | + mpc 1.2.1 63 | + isl 0.18 64 | + libatomic_ops 7.6.10 65 | + bdw-gc 8.0.4 66 | + openssl 1.1.1h 67 | 68 | #### 编译目标 69 | 70 | + gcc 9.3.0 71 | + binutils 2.35.1 72 | + python 3.9.0 *[按需]* 73 | + gdb 10.1 (如果存在ncurses-devel包) 74 | + global 6.6.5 75 | 76 | #### 注 77 | 78 | + (所有的库都会被安装在**$PREFEX_DIR**里) 79 | 80 | #### 额外建议 81 | 82 | 给特定用户安装 gdb的pretty-printer 用以友好打印stdc++的stl容器 83 | 84 | 1. 在执行 install.sh 脚本前安装 ncurses-devel 和 python-devel, 用于编译gdb和开启python功能 85 | 2. gdb载入后可使用 ```so [安装目录]/load-libstdc++-gdb-printers.py``` 手动加载gdb的pretty printers 86 | 87 | #### History 88 | 89 | + 2019-06-03 Created 90 | + 2019-08-23 Update gcc to 9.2.0 91 | + 2020-03-23 Update gmp to 6.2.0, gcc to 9.3.0, binutils to 2.34, Python to 2.7.17, gdb to 9.1, global to 6.6.4 92 | + 2020-10-26 更新组件,增加工具脚本 ```load-libstdc++-gdb-printers.py```,增加内部使用的openssl 93 | + mpfr -> 4.1.0 94 | + mpc -> 1.2.1 95 | + binutils -> 2.35.1 96 | + openssl -> 1.1.1h 97 | + python -> 3.9.0 98 | + gdb -> 10.1 99 | + global -> 6.6.5 100 | -------------------------------------------------------------------------------- /LLVM&Clang Installer/10.0/README.md: -------------------------------------------------------------------------------- 1 | Linux 编译安装 LLVM + Clang 10.0 2 | ====== 3 | 4 | LLVM + Clang 10.0 发布啦,本脚本保持之前LLVM + Clang 9.0 的大部分选项参数,但是几乎全部重写了。 5 | 6 | 如果在一些比较老的系统上,自带的gcc版本过低(比如CentOS 7).可以先用 https://github.com/owent-utils/bash-shell/tree/master/GCC%20Installer/gcc-9 编译出新版gcc,再用这个gcc来编译llvm+clang工具链。 7 | 8 | ### 编译脚本使用示例 9 | 10 | ```bash 11 | sudo -b env CC=/usr/local/gcc-9.3.0/gcc CXX=/usr/local/gcc-9.3.0/g++ nohup ./installer.sh 12 | sudo chmod 777 nohup.out && tail -f nohup.out; 13 | 14 | # 或者不需要root权限 15 | env CC=/usr/local/gcc-9.3.0/gcc CXX=/usr/local/gcc-9.3.0/g++ nohup ./installer.sh -p $HOME/prebuilt/llvm-10.0 & 16 | tail -f nohup.out; 17 | ``` 18 | 19 | ### NOTICE 20 | 21 | 1. 第二次自举编译完成后,不再依赖libstdc++,转而依赖编译出来的libc++和libc++abi,但是仍然会依赖libgcc_s.so 22 | 2. 现在采用了git拉取[llvm-project][1]仓库,额外编译[libedit][2]时使用wger下载 23 | 3. CentOS 7下测试通过, 本地测试过的编译命令如下 24 | 25 | > ```bash 26 | > clang -O0 -g -ggdb -std=c++11 -stdlib=libstdc++ -lstdc++ [源文件...] 27 | > clang++ -O0 -g -ggdb -std=c++11 -stdlib=libstdc++ [源文件...] 28 | > clang -O0 -g -ggdb -std=c++11 -stdlib=libc++ -lc++ -lc++abi [源文件...] 29 | > clang -O0 -g -ggdb -std=c++14 -stdlib=libc++ -lc++ -lc++abi [源文件...] 30 | > clang++ -O0 -g -ggdb -std=c++11 -stdlib=libc++ -lc++abi [源文件...] 31 | > clang++ -O0 -g -ggdb -std=c++14 -stdlib=libc++ -lc++abi [源文件...] 32 | > 其他选项参见: llvm-config --cflags ; llvm-config --cxxflags ; llvm-config --ldflags 33 | > ``` 34 | 35 | * 如果使用***clang -stdlib=libc++***则需要加上***-lc++ -lc++abi***的链接选项,或者使用***clang++ -stdlib=libc++ -lc++abi***。(无论如何-lc++abi都要手动加链接符号) 36 | * 如果使用***clang -stdlib=libstdc++***则需要加上***-lstdc++***的链接选项,或者使用***clang++ -stdlib=libstdc++*** 37 | * 建议使用**llvm-config --cflags**,**llvm-config --cxxflags**和**llvm-config --ldflags**来查看需要附加的编译选项 38 | 39 | ### 发行注记 40 | 41 | + llvm : http://llvm.org/releases/10.0.0/docs/ReleaseNotes.html 42 | + clang : http://llvm.org/releases/10.0.0/tools/clang/docs/ReleaseNotes.html 43 | + clang Extra : http://llvm.org/releases/10.0.0/tools/clang/tools/extra/docs/ReleaseNotes.html 44 | + lld: http://llvm.org/releases/10.0.0/tools/lld/docs/ReleaseNotes.html 45 | 46 | ## 编译安装 LLVM + Clang 10.0 47 | 48 | ### 准备环境及依赖项 49 | 50 | 1. cmake 51 | 2. Python 2.7 or higher 52 | 3. **python-devel/python-dev(lldb依赖项)** 53 | 4. **swig(lldb依赖项)** 54 | 5. **libxml2-devel(lldb依赖项)** 55 | 6. **ncurses-devel(lldb依赖项)** 56 | 7. GCC 4.7 or higher 57 | 58 | ### 我编译的环境 59 | 60 | #### 系统: 61 | 62 | CentOS 7 63 | 64 | #### 系统库: 65 | 66 | 详情参见 [llvm官网](http://llvm.org/) 67 | 68 | #### 编译的依赖库: 69 | 70 | + libc++ 10.0.0 71 | + libc++abi 10.0.0 72 | + libunwind 10.0.0 73 | + [libedit][2] 20191231-3.1 74 | 75 | #### 默认编译目标: 76 | 77 | + llvm 10.0.0 78 | + clang 10.0.0 79 | + compiler-rt 10.0.0 80 | + clang-tools-extra 10.0.0 81 | + lldb 10.0.0 82 | + lld 10.0.0 83 | + libc 84 | + libclc 85 | + openmp 86 | + parallel-libs 87 | + polly 88 | + pstl 89 | 90 | #### 注: 91 | 92 | + (所有的库都会被安装在 ```$PREFEX_DIR``` 里) 93 | 94 | #### 额外建议: 95 | 96 | + 如果增加编译组件,比如已装有gtest要编译lld,使用命令 ```./installer.sh -t +debuginfo-tests``` 97 | 98 | #### History: 99 | 100 | + 2020-04-22 Created 101 | + 2020-05-12 更新优化环境变量加载脚本 102 | + 103 | #### 参考文献 104 | 105 | 1. [llvm官网](http://llvm.org/) 106 | 107 | [1]: https://github.com/llvm/llvm-project.git 108 | [2]: http://thrysoee.dk/editline/ 109 | -------------------------------------------------------------------------------- /LLVM&Clang Installer/11.0/README.md: -------------------------------------------------------------------------------- 1 | Linux 编译安装 LLVM + Clang 11.0 2 | ====== 3 | 4 | LLVM + Clang 11.0 发布啦,本脚本在之前LLVM + Clang 10.0 的构建脚本的基础上修改而来,修订了自举编译过程中环境变量 ```RANLIB``` 的名称,增加了内置的Python编译和Python关键性依赖的编译。 5 | 6 | 如果在一些比较老的系统上,自带的gcc版本过低(比如CentOS 7).可以先用 https://github.com/owent-utils/bash-shell/tree/master/GCC%20Installer/gcc-10 编译出新版gcc,再用这个gcc来编译llvm+clang工具链。 7 | 8 | ### 编译脚本使用示例 9 | 10 | ```bash 11 | sudo -b env CC=/usr/local/gcc-10.2.0/gcc CXX=/usr/local/gcc-10.2.0/g++ nohup ./installer.sh 12 | sudo chmod 777 nohup.out && tail -f nohup.out; 13 | 14 | # 或者不需要root权限 15 | env CC=/usr/local/gcc-10.2.0/gcc CXX=/usr/local/gcc-10.2.0/g++ nohup ./installer.sh -p $HOME/prebuilt/llvm-11.0 & 16 | tail -f nohup.out; 17 | ``` 18 | 19 | ### NOTICE 20 | 21 | 1. 第二次自举编译完成后,不再依赖libstdc++,转而依赖编译出来的libc++和libc++abi,但是仍然会依赖libgcc_s.so 22 | 2. 现在采用了git拉取[llvm-project][1]仓库,额外编译[libedit][2]时使用wger下载 23 | 3. CentOS 7下测试通过, 本地测试过的编译命令如下 24 | 25 | > ```bash 26 | > clang -O0 -g -ggdb -std=c++11 -stdlib=libstdc++ -lstdc++ [源文件...] 27 | > clang++ -O0 -g -ggdb -std=c++11 -stdlib=libstdc++ [源文件...] 28 | > clang -O0 -g -ggdb -std=c++11 -stdlib=libc++ -lc++ -lc++abi [源文件...] 29 | > clang -O0 -g -ggdb -std=c++14 -stdlib=libc++ -lc++ -lc++abi [源文件...] 30 | > clang++ -O0 -g -ggdb -std=c++11 -stdlib=libc++ -lc++abi [源文件...] 31 | > clang++ -O0 -g -ggdb -std=c++14 -stdlib=libc++ -lc++abi [源文件...] 32 | > 其他选项参见: llvm-config --cflags ; llvm-config --cxxflags ; llvm-config --ldflags 33 | > ``` 34 | 35 | * 如果使用***clang -stdlib=libc++***则需要加上***-lc++ -lc++abi***的链接选项,或者使用***clang++ -stdlib=libc++ -lc++abi***。(无论如何-lc++abi都要手动加链接符号) 36 | * 如果使用***clang -stdlib=libstdc++***则需要加上***-lstdc++***的链接选项,或者使用***clang++ -stdlib=libstdc++*** 37 | * 建议使用**llvm-config --cflags**,**llvm-config --cxxflags**和**llvm-config --ldflags**来查看需要附加的编译选项 38 | 39 | ### 发行注记 40 | 41 | + llvm : http://llvm.org/releases/11.0.0/docs/ReleaseNotes.html 42 | + clang : http://llvm.org/releases/11.0.0/tools/clang/docs/ReleaseNotes.html 43 | + clang Extra : http://llvm.org/releases/11.0.0/tools/clang/tools/extra/docs/ReleaseNotes.html 44 | + lld: http://llvm.org/releases/11.0.0/tools/lld/docs/ReleaseNotes.html 45 | 46 | ## 编译安装 LLVM + Clang 11.0 47 | 48 | ### 准备环境及依赖项 49 | 50 | 1. cmake 51 | 2. Python 3 or higher 52 | 3. **python-devel/python-dev(lldb依赖项)** 53 | 4. **swig(lldb依赖项)** 54 | 5. **libxml2-devel(lldb依赖项)** 55 | 6. **ncurses-devel(lldb依赖项)** 56 | 7. GCC 5.1 or higher 57 | 8. binutils 2.20.1 or higher 58 | 9. openssl 59 | 60 | ### 我编译的环境 61 | 62 | #### 系统: 63 | 64 | CentOS 7 65 | 66 | #### 系统库: 67 | 68 | 详情参见 [llvm官网](http://llvm.org/) 69 | 70 | #### 编译的依赖项: 71 | 72 | + [x] libc++ 11.0.0 73 | + [x] libc++abi 11.0.0 74 | + [x] libunwind 11.0.0 75 | + [x] [libedit][2] 20191231-3.1 76 | + [x] [Python][3] 3.9.0 77 | + [x] [swig][4] v4.0.2 78 | + [x] [zlib][5] 1.2.11 79 | + [x] [libffi][6] 3.3 80 | 81 | #### 默认编译目标: 82 | 83 | + [x] llvm 11.0.0 84 | + [x] clang 11.0.0 85 | + [x] compiler-rt 11.0.0 86 | + [x] clang-tools-extra 11.0.0 87 | + [x] lldb 11.0.0 88 | + [x] lld 11.0.0 89 | + [ ] libc (这个版本增加了thread模块,对 ```stdatomic.h``` 的适配有问题,故而排除) 90 | + [x] libclc 91 | + [x] openmp 92 | + [x] parallel-libs 93 | + [x] polly 94 | + [x] pstl 95 | 96 | #### 注: 97 | 98 | + (所有的库都会被安装在 ```$PREFEX_DIR``` 里) 99 | 100 | #### 额外建议: 101 | 102 | + 如果增加编译组件,比如已装有gtest要编译lld,使用命令 ```./installer.sh -t +debuginfo-tests``` 103 | 104 | #### History: 105 | 106 | + 2020-11-06 Created 107 | + 2020-11-14 修订clean命令。对git拉取的仓库执行 ```git reset --hard; git clean -dfx;``` ,不再移除目录。 108 | 109 | #### 参考文献 110 | 111 | 1. [llvm官网](http://llvm.org/) 112 | 113 | [1]: https://github.com/llvm/llvm-project.git 114 | [2]: http://thrysoee.dk/editline/ 115 | [3]: https://www.python.org/ 116 | [4]: https://github.com/swig/swig.git 117 | [5]: https://www.zlib.net/ 118 | [6]: https://sourceware.org/libffi/ 119 | -------------------------------------------------------------------------------- /LLVM&Clang Installer/12.0/README.md: -------------------------------------------------------------------------------- 1 | Linux 编译安装 LLVM + Clang 12.0 2 | ====== 3 | 4 | LLVM + Clang 12.0 发布啦,本脚本在之前LLVM + Clang 10.0 的构建脚本的基础上修改而来,增加了rpmbuild的配置,修订在stage 2阶段的 ```--gcc-toolchain ``` 选项。 5 | 6 | > 因为自举编译阶段会失败,临时关闭 ```polly``` 的编译。 7 | 8 | 如果在一些比较老的系统上,自带的gcc版本过低(比如CentOS 7).可以先用 https://github.com/owent-utils/bash-shell/tree/master/GCC%20Installer/gcc-10 编译出新版gcc,再用这个gcc来编译llvm+clang工具链。 9 | 10 | ### 编译脚本使用示例 11 | 12 | ```bash 13 | sudo -b env CC=/usr/local/gcc-11.1.0/gcc CXX=/usr/local/gcc-11.1.0/g++ nohup ./installer.sh 14 | sudo chmod 777 nohup.out && tail -f nohup.out; 15 | 16 | # 或者不需要root权限 17 | env CC=/usr/local/gcc-11.1.0/gcc CXX=/usr/local/gcc-11.1.0/g++ nohup ./installer.sh -p $HOME/prebuilt/llvm-12.0 & 18 | tail -f nohup.out; 19 | ``` 20 | 21 | ### NOTICE 22 | 23 | 1. 第二次自举编译完成后,不再依赖libstdc++,转而依赖编译出来的libc++和libc++abi,但是仍然会依赖libgcc_s.so 24 | 2. 现在采用了git拉取[llvm-project][1]仓库,额外编译[libedit][2]时使用wger下载 25 | 3. CentOS 7下测试通过, 本地测试过的编译命令如下 26 | 27 | > ```bash 28 | > clang -O0 -g -ggdb -std=c++11 -stdlib=libstdc++ -lstdc++ [源文件...] 29 | > clang++ -O0 -g -ggdb -std=c++11 -stdlib=libstdc++ [源文件...] 30 | > clang -O0 -g -ggdb -std=c++11 -stdlib=libc++ -lc++ -lc++abi [源文件...] 31 | > clang -O0 -g -ggdb -std=c++14 -stdlib=libc++ -lc++ -lc++abi [源文件...] 32 | > clang++ -O0 -g -ggdb -std=c++11 -stdlib=libc++ -lc++abi [源文件...] 33 | > clang++ -O0 -g -ggdb -std=c++14 -stdlib=libc++ -lc++abi [源文件...] 34 | > 其他选项参见: llvm-config --cflags ; llvm-config --cxxflags ; llvm-config --ldflags 35 | > ``` 36 | 37 | * 如果使用***clang -stdlib=libc++***则需要加上***-lc++ -lc++abi***的链接选项,或者使用***clang++ -stdlib=libc++ -lc++abi***。(无论如何-lc++abi都要手动加链接符号) 38 | * 如果使用***clang -stdlib=libstdc++***则需要加上***-lstdc++***的链接选项,或者使用***clang++ -stdlib=libstdc++*** 39 | * 建议使用**llvm-config --cflags**,**llvm-config --cxxflags**和**llvm-config --ldflags**来查看需要附加的编译选项 40 | 41 | ### 发行注记 42 | 43 | + llvm : http://llvm.org/releases/12.0.0/docs/ReleaseNotes.html 44 | + clang : http://llvm.org/releases/12.0.0/tools/clang/docs/ReleaseNotes.html 45 | + clang Extra : http://llvm.org/releases/12.0.0/tools/clang/tools/extra/docs/ReleaseNotes.html 46 | + lld: http://llvm.org/releases/12.0.0/tools/lld/docs/ReleaseNotes.html 47 | 48 | ## 编译安装 LLVM + Clang 12.0 49 | 50 | ### 准备环境及依赖项 51 | 52 | 1. cmake 53 | 2. Python 3 or higher 54 | 3. **python-devel/python-dev(lldb依赖项)** 55 | 4. **swig(lldb依赖项)** 56 | 5. **libxml2-devel(lldb依赖项)** 57 | 6. **ncurses-devel(lldb依赖项)** 58 | 7. GCC 5.1 or higher 59 | 8. binutils 2.20.1 or higher 60 | 9. openssl 61 | 62 | ### 我编译的环境 63 | 64 | #### 系统: 65 | 66 | CentOS 7 67 | 68 | #### 系统库: 69 | 70 | 详情参见 [llvm官网](http://llvm.org/) 71 | 72 | #### 编译的依赖项: 73 | 74 | + [x] libc++ 12.0.0 75 | + [x] libc++abi 12.0.0 76 | + [x] libunwind 12.0.0 77 | + [x] [libedit][2] 20210419-3.1 78 | + [x] [Python][3] 3.9.5 79 | + [x] [swig][4] v4.0.2 80 | + [x] [zlib][5] 1.2.11 81 | + [x] [libffi][6] 3.3 82 | 83 | #### 默认编译目标: 84 | 85 | + [x] llvm 12.0.0 86 | + [x] clang 12.0.0 87 | + [x] compiler-rt 12.0.0 88 | + [x] clang-tools-extra 12.0.0 89 | + [x] lldb 12.0.0 90 | + [x] lld 12.0.0 91 | + [ ] libc (这个版本还是无法编译过,故而排除) 92 | + [x] libclc 93 | + [x] openmp 94 | + [x] parallel-libs 95 | + [ ] polly (这个版本自举编译 polly 会失败,故而本版本临时关闭之) 96 | + [x] pstl 97 | 98 | #### 注: 99 | 100 | + (所有的库都会被安装在 ```$PREFEX_DIR``` 里) 101 | 102 | #### 额外建议: 103 | 104 | + 如果增加编译组件,比如已装有gtest要编译lld,使用命令 ```./installer.sh -t +debuginfo-tests``` 105 | 106 | #### History: 107 | 108 | + 2021-05-06 Created 109 | + 2021-06-28 增加 `installer-bootstrap.sh` 工具,使用官方的自举编译流程。 110 | > 默认行为是在在官方Fuchsia配置的基础上增加了一些常用的工具包。 111 | > 新流程有更低的编译链接开销,但是默认的标准库改为 `libc++` ,某些外部的第三方库(纯C库,ABI一致)仍然使用host编译器编译,并且不再自举。 112 | + 2021-07-28 常规更新 113 | > + 更新llvm到12.0.1 114 | > + 更新libedit到20210714-3.1 115 | > + 更新python到3.9.6 116 | > + 更新libffi到3.4.2 117 | 118 | #### 参考文献 119 | 120 | 1. [llvm官网](http://llvm.org/) 121 | 122 | [1]: https://github.com/llvm/llvm-project.git 123 | [2]: http://thrysoee.dk/editline/ 124 | [3]: https://www.python.org/ 125 | [4]: https://github.com/swig/swig.git 126 | [5]: https://www.zlib.net/ 127 | [6]: https://sourceware.org/libffi/ 128 | -------------------------------------------------------------------------------- /LLVM&Clang Installer/12.0/distribution-stage1.cmake: -------------------------------------------------------------------------------- 1 | # This file sets up a CMakeCache for a simple distribution bootstrap build. 2 | # See https://github.com/llvm/llvm-project/blob/release/12.x/clang/cmake/caches/Fuchsia.cmake 3 | 4 | # See LLVM_ALL_RUNTIMES in https://github.com/llvm/llvm-project/blob/main/runtimes/CMakeLists.txt LLVM_ALL_PROJECTS in 5 | # https://github.com/llvm/llvm-project/blob/main/llvm/CMakeLists.txt 6 | 7 | # Enable LLVM projects and runtimes 8 | set(LLVM_ENABLE_PROJECTS "clang;clang-tools-extra;lld;llvm;lldb;libclc;parallel-libs;pstl" CACHE STRING "") 9 | 10 | # Only build the native target in stage1 since it is a throwaway build. 11 | set(LLVM_TARGETS_TO_BUILD Native CACHE STRING "") # X86;ARM;AArch64;RISCV 12 | 13 | # Setup vendor-specific settings. 14 | set(PACKAGE_VENDOR OWenT CACHE STRING "") 15 | 16 | set(CMAKE_INSTALL_RPATH_USE_LINK_PATH ON CACHE BOOL "") 17 | set(CMAKE_BUILD_WITH_INSTALL_RPATH OFF CACHE BOOL "") 18 | set(CMAKE_BUILD_RPATH_USE_ORIGIN OFF CACHE BOOL "") 19 | set(LLVM_BUILD_EXAMPLES OFF CACHE BOOL "") 20 | set(LLVM_BUILD_TESTS OFF CACHE BOOL "") 21 | set(LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN ON CACHE BOOL "") 22 | set(LLVM_ENABLE_EH ON CACHE BOOL "") 23 | set(LLVM_ENABLE_RTTI ON CACHE BOOL "") 24 | set(LLVM_ENABLE_PIC ON CACHE BOOL "") 25 | set(LLVM_USE_INTEL_JITEVENTS ON CACHE BOOL "") 26 | set(CLANG_LINK_CLANG_DYLIB ON CACHE BOOL "") 27 | set(LLVM_BUILD_LLVM_DYLIB ON CACHE BOOL "") 28 | set(LLVM_LINK_LLVM_DYLIB ON CACHE BOOL "") 29 | 30 | if(MSVC) 31 | set(LLVM_USE_CRT_RELEASE "MT" CACHE STRING "") 32 | endif() 33 | 34 | set(CLANG_DEFAULT_CXX_STDLIB libc++ CACHE STRING "") 35 | if(NOT APPLE) 36 | set(CLANG_DEFAULT_LINKER lld CACHE STRING "") 37 | set(CLANG_DEFAULT_OBJCOPY llvm-objcopy CACHE STRING "") 38 | endif() 39 | set(CLANG_DEFAULT_RTLIB compiler-rt CACHE STRING "") 40 | set(CLANG_ENABLE_STATIC_ANALYZER ON CACHE BOOL "") 41 | 42 | set(ENABLE_EXPERIMENTAL_NEW_PASS_MANAGER ON CACHE BOOL "") 43 | set(ENABLE_LINKER_BUILD_ID ON CACHE BOOL "") 44 | set(ENABLE_X86_RELAX_RELOCATIONS ON CACHE BOOL "") 45 | 46 | set(CMAKE_BUILD_TYPE Release CACHE STRING "") 47 | if(APPLE) 48 | set(MACOSX_DEPLOYMENT_TARGET 10.7 CACHE STRING "") 49 | elseif(MSVC) 50 | set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded" CACHE STRING "") 51 | endif() 52 | 53 | if(APPLE) 54 | set(COMPILER_RT_ENABLE_IOS OFF CACHE BOOL "") 55 | set(COMPILER_RT_ENABLE_TVOS OFF CACHE BOOL "") 56 | set(COMPILER_RT_ENABLE_WATCHOS OFF CACHE BOOL "") 57 | endif() 58 | 59 | set(LIBUNWIND_ENABLE_SHARED OFF CACHE BOOL "") 60 | set(LIBUNWIND_INSTALL_LIBRARY OFF CACHE BOOL "") 61 | set(LIBUNWIND_USE_COMPILER_RT ON CACHE BOOL "") 62 | set(LIBCXXABI_ENABLE_SHARED OFF CACHE BOOL "") 63 | set(LIBCXXABI_ENABLE_STATIC_UNWINDER ON CACHE BOOL "") 64 | set(LIBCXXABI_INSTALL_LIBRARY OFF CACHE BOOL "") 65 | set(LIBCXXABI_USE_COMPILER_RT ON CACHE BOOL "") 66 | set(LIBCXXABI_USE_LLVM_UNWINDER ON CACHE BOOL "") 67 | set(LIBCXX_ABI_VERSION 2 CACHE STRING "") 68 | set(LIBCXX_ENABLE_SHARED OFF CACHE BOOL "") 69 | if(WIN32) 70 | set(LIBCXX_HAS_WIN32_THREAD_API ON CACHE BOOL "") 71 | set(LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY OFF CACHE BOOL "") 72 | set(LIBCXX_ENABLE_FILESYSTEM OFF CACHE BOOL "") 73 | set(LIBCXX_ENABLE_ABI_LINKER_SCRIPT OFF CACHE BOOL "") 74 | set(LIBCXX_ENABLE_STATIC_ABI_LIBRARY OFF CACHE BOOL "") 75 | set(BUILTINS_CMAKE_ARGS -DCMAKE_SYSTEM_NAME=Windows CACHE STRING "") 76 | set(RUNTIMES_CMAKE_ARGS -DCMAKE_SYSTEM_NAME=Windows CACHE STRING "") 77 | set(LLVM_ENABLE_RUNTIMES "compiler-rt;libcxx" CACHE STRING "") 78 | else() 79 | set(LIBCXX_ENABLE_STATIC_ABI_LIBRARY ON CACHE BOOL "") 80 | set(LLVM_ENABLE_RUNTIMES "compiler-rt;libcxx;libcxxabi;libunwind" CACHE STRING "") 81 | endif() 82 | 83 | if(BOOTSTRAP_CMAKE_SYSTEM_NAME) 84 | set(target "${BOOTSTRAP_CMAKE_CXX_COMPILER_TARGET}") 85 | if(STAGE2_LINUX_${target}_SYSROOT) 86 | set(LLVM_BUILTIN_TARGETS "${target}" CACHE STRING "") 87 | set(BUILTINS_${target}_CMAKE_SYSTEM_NAME Linux CACHE STRING "") 88 | set(BUILTINS_${target}_CMAKE_BUILD_TYPE Release CACHE STRING "") 89 | set(BUILTINS_${target}_CMAKE_SYSROOT ${STAGE2_LINUX_${target}_SYSROOT} CACHE STRING "") 90 | 91 | set(LLVM_RUNTIME_TARGETS "${target}" CACHE STRING "") 92 | set(RUNTIMES_${target}_CMAKE_SYSTEM_NAME Linux CACHE STRING "") 93 | set(RUNTIMES_${target}_CMAKE_BUILD_TYPE Release CACHE STRING "") 94 | set(RUNTIMES_${target}_CMAKE_SYSROOT ${STAGE2_LINUX_${target}_SYSROOT} CACHE STRING "") 95 | set(RUNTIMES_${target}_COMPILER_RT_USE_BUILTINS_LIBRARY ON CACHE BOOL "") 96 | set(RUNTIMES_${target}_LLVM_ENABLE_ASSERTIONS ON CACHE BOOL "") 97 | set(RUNTIMES_${target}_LIBUNWIND_ENABLE_SHARED OFF CACHE BOOL "") 98 | set(RUNTIMES_${target}_LIBUNWIND_USE_COMPILER_RT ON CACHE BOOL "") 99 | set(RUNTIMES_${target}_LIBUNWIND_INSTALL_LIBRARY OFF CACHE BOOL "") 100 | set(RUNTIMES_${target}_LIBCXXABI_USE_COMPILER_RT ON CACHE BOOL "") 101 | set(RUNTIMES_${target}_LIBCXXABI_ENABLE_SHARED OFF CACHE BOOL "") 102 | set(RUNTIMES_${target}_LIBCXXABI_USE_LLVM_UNWINDER ON CACHE BOOL "") 103 | set(RUNTIMES_${target}_LIBCXXABI_ENABLE_STATIC_UNWINDER ON CACHE BOOL "") 104 | set(RUNTIMES_${target}_LIBCXXABI_INSTALL_LIBRARY OFF CACHE BOOL "") 105 | set(RUNTIMES_${target}_LIBCXX_USE_COMPILER_RT ON CACHE BOOL "") 106 | set(RUNTIMES_${target}_LIBCXX_ENABLE_SHARED OFF CACHE BOOL "") 107 | set(RUNTIMES_${target}_LIBCXX_ENABLE_STATIC_ABI_LIBRARY ON CACHE BOOL "") 108 | set(RUNTIMES_${target}_LIBCXX_ABI_VERSION 2 CACHE STRING "") 109 | set(RUNTIMES_${target}_LLVM_ENABLE_RUNTIMES "compiler-rt;libcxx;libcxxabi;libunwind" CACHE STRING "") 110 | set(RUNTIMES_${target}_SANITIZER_CXX_ABI "libc++" CACHE STRING "") 111 | set(RUNTIMES_${target}_SANITIZER_CXX_ABI_INTREE ON CACHE BOOL "") 112 | endif() 113 | endif() 114 | message(STATUS "Stage1: BOOTSTRAP_CMAKE_SYSTEM_NAME=${BOOTSTRAP_CMAKE_SYSTEM_NAME}") 115 | 116 | if(UNIX) 117 | set(BOOTSTRAP_CMAKE_SHARED_LINKER_FLAGS "-ldl -lpthread" CACHE STRING "") 118 | set(BOOTSTRAP_CMAKE_MODULE_LINKER_FLAGS "-ldl -lpthread" CACHE STRING "") 119 | set(BOOTSTRAP_CMAKE_EXE_LINKER_FLAGS "-ldl -lpthread" CACHE STRING "") 120 | endif() 121 | 122 | set(BOOTSTRAP_LLVM_ENABLE_LTO ON CACHE BOOL "") 123 | if(NOT APPLE) 124 | set(BOOTSTRAP_LLVM_ENABLE_LLD ON CACHE BOOL "") 125 | endif() 126 | 127 | # Expose stage2 targets through the stage1 build configuration. 128 | set(CLANG_BOOTSTRAP_TARGETS 129 | check-all 130 | check-llvm 131 | check-clang 132 | check-lld 133 | llvm-config 134 | test-suite 135 | test-depends 136 | llvm-test-depends 137 | clang-test-depends 138 | lld-test-depends 139 | distribution 140 | install-distribution 141 | install-distribution-stripped 142 | # install-distribution-toolchain 143 | clang 144 | CACHE STRING "") 145 | 146 | get_cmake_property(variableNames VARIABLES) 147 | foreach(variableName ${variableNames}) 148 | if(variableName MATCHES "^STAGE2_") 149 | string(REPLACE "STAGE2_" "" new_name ${variableName}) 150 | list(APPEND EXTRA_ARGS "-D${new_name}=${${variableName}}") 151 | endif() 152 | endforeach() 153 | 154 | # Setup the bootstrap build. 155 | set(CLANG_ENABLE_BOOTSTRAP ON CACHE BOOL "") 156 | set(CLANG_BOOTSTRAP_EXTRA_DEPS builtins runtimes CACHE STRING "") 157 | 158 | if(STAGE2_CACHE_FILE) 159 | set(CLANG_BOOTSTRAP_CMAKE_ARGS -C ${STAGE2_CACHE_FILE} CACHE STRING "") 160 | else() 161 | set(CLANG_BOOTSTRAP_CMAKE_ARGS -C ${CMAKE_CURRENT_LIST_DIR}/distribution-stage2.cmake CACHE STRING "") 162 | endif() 163 | -------------------------------------------------------------------------------- /LLVM&Clang Installer/13.0/README.md: -------------------------------------------------------------------------------- 1 | Linux 编译安装 LLVM + Clang 13.0 2 | ====== 3 | 4 | LLVM + Clang 13.0 发布啦,本脚本在之前LLVM + Clang 12.0 的构建脚本的基础上修改而来,增加了rpmbuild的配置,修订在stage 2阶段的 ```--gcc-toolchain ``` 选项。 5 | 6 | > 因为自举编译阶段会失败,临时关闭 ```polly``` 的编译。 7 | 8 | 如果在一些比较老的系统上,自带的gcc版本过低(比如CentOS 7).可以先用 https://github.com/owent-utils/bash-shell/tree/master/GCC%20Installer/gcc-11 编译出新版gcc,再用这个gcc来编译llvm+clang工具链。 9 | 10 | ### 编译脚本使用示例 11 | 12 | ```bash 13 | sudo -b env CC=/usr/local/gcc-11.1.0/gcc CXX=/usr/local/gcc-11.1.0/g++ nohup ./installer.sh 14 | sudo chmod 777 nohup.out && tail -f nohup.out; 15 | 16 | # 或者不需要root权限 17 | env CC=/usr/local/gcc-11.1.0/gcc CXX=/usr/local/gcc-11.1.0/g++ nohup ./installer.sh -p $HOME/prebuilt/llvm-13.0 & 18 | tail -f nohup.out; 19 | ``` 20 | 21 | ### NOTICE 22 | 23 | 1. 第二次自举编译完成后,不再依赖libstdc++,转而依赖编译出来的libc++和libc++abi,但是仍然会依赖libgcc_s.so 24 | 2. 现在采用了git拉取[llvm-project][1]仓库,额外编译[libedit][2]时使用wger下载 25 | 3. CentOS 7下测试通过, 本地测试过的编译命令如下 26 | 27 | > ```bash 28 | > clang -O0 -g -ggdb -std=c++11 -stdlib=libstdc++ -lstdc++ [源文件...] 29 | > clang++ -O0 -g -ggdb -std=c++11 -stdlib=libstdc++ [源文件...] 30 | > clang -O0 -g -ggdb -std=c++11 -stdlib=libc++ -lc++ -lc++abi [源文件...] 31 | > clang -O0 -g -ggdb -std=c++14 -stdlib=libc++ -lc++ -lc++abi [源文件...] 32 | > clang++ -O0 -g -ggdb -std=c++11 -stdlib=libc++ -lc++abi [源文件...] 33 | > clang++ -O0 -g -ggdb -std=c++14 -stdlib=libc++ -lc++abi [源文件...] 34 | > 其他选项参见: llvm-config --cflags ; llvm-config --cxxflags ; llvm-config --ldflags 35 | > ``` 36 | 37 | * 如果使用***clang -stdlib=libc++***则需要加上***-lc++ -lc++abi***的链接选项,或者使用***clang++ -stdlib=libc++ -lc++abi***。(无论如何-lc++abi都要手动加链接符号) 38 | * 如果使用***clang -stdlib=libstdc++***则需要加上***-lstdc++***的链接选项,或者使用***clang++ -stdlib=libstdc++*** 39 | * 建议使用**llvm-config --cflags**,**llvm-config --cxxflags**和**llvm-config --ldflags**来查看需要附加的编译选项 40 | 41 | ### 发行注记 42 | 43 | + llvm : http://llvm.org/releases/13.0.0/docs/ReleaseNotes.html 44 | + clang : http://llvm.org/releases/13.0.0/tools/clang/docs/ReleaseNotes.html 45 | + clang Extra : http://llvm.org/releases/13.0.0/tools/clang/tools/extra/docs/ReleaseNotes.html 46 | + lld: http://llvm.org/releases/13.0.0/tools/lld/docs/ReleaseNotes.html 47 | 48 | ## 编译安装 LLVM + Clang 13.0 49 | 50 | ### 准备环境及依赖项 51 | 52 | 1. cmake 53 | 2. Python 3 or higher 54 | 3. **python-devel/python-dev(lldb依赖项)** 55 | 4. **swig(lldb依赖项)** 56 | 5. **libxml2-devel(lldb依赖项)** 57 | 6. **ncurses-devel(lldb依赖项)** 58 | 7. GCC 5.1 or higher 59 | 8. binutils 2.20.1 or higher 60 | 9. openssl 61 | 62 | ### 我编译的环境 63 | 64 | #### 系统: 65 | 66 | CentOS 7 67 | 68 | #### 系统库: 69 | 70 | 详情参见 [llvm官网](http://llvm.org/) 71 | 72 | #### 编译的依赖项: 73 | 74 | + [x] libc++ 13.0.0 75 | + [x] libc++abi 13.0.0 76 | + [x] libunwind 13.0.0 77 | + [x] [libedit][2] 20210910-3.1 78 | + [x] [Python][3] 3.10.2 79 | + [x] [swig][4] v4.0.2 80 | + [x] [zlib][5] 1.2.11 81 | + [x] [libffi][6] 3.3 82 | 83 | #### 默认编译目标: 84 | 85 | + [x] llvm 13.0.0 86 | + [x] clang 13.0.0 87 | + [x] compiler-rt 13.0.0 88 | + [x] clang-tools-extra 13.0.0 89 | + [x] lldb 13.0.0 90 | + [x] lld 13.0.0 91 | + [ ] libc (这个版本还是无法编译过,故而排除) 92 | + [x] libclc 93 | + [x] openmp 94 | + [x] parallel-libs 95 | + [ ] polly (这个版本自举编译 polly 会失败,故而本版本临时关闭之) 96 | + [x] pstl 97 | 98 | #### 注: 99 | 100 | + (所有的库都会被安装在 ```$PREFEX_DIR``` 里) 101 | 102 | #### 额外建议: 103 | 104 | + 如果增加编译组件,比如已装有gtest要编译lld,使用命令 ```./installer.sh -t +debuginfo-tests``` 105 | 106 | #### History: 107 | 108 | + 2021-05-06 Created 109 | + 2021-01-21 Update 110 | > + python: 3.10.2 111 | 112 | #### 参考文献 113 | 114 | 1. [llvm官网](http://llvm.org/) 115 | 116 | [1]: https://github.com/llvm/llvm-project.git 117 | [2]: http://thrysoee.dk/editline/ 118 | [3]: https://www.python.org/ 119 | [4]: https://github.com/swig/swig.git 120 | [5]: https://www.zlib.net/ 121 | [6]: https://sourceware.org/libffi/ 122 | -------------------------------------------------------------------------------- /LLVM&Clang Installer/13.0/distribution-stage1.cmake: -------------------------------------------------------------------------------- 1 | # This file sets up a CMakeCache for a simple distribution bootstrap build. 2 | # See https://github.com/llvm/llvm-project/blob/release/13.x/clang/cmake/caches/Fuchsia.cmake 3 | 4 | # See LLVM_ALL_RUNTIMES in https://github.com/llvm/llvm-project/blob/main/runtimes/CMakeLists.txt LLVM_ALL_PROJECTS in 5 | # https://github.com/llvm/llvm-project/blob/main/llvm/CMakeLists.txt 6 | 7 | # Enable LLVM projects and runtimes 8 | set(LLVM_ENABLE_PROJECTS "clang;clang-tools-extra;lld;llvm;lldb;libclc;parallel-libs;pstl" CACHE STRING "") 9 | 10 | # Only build the native target in stage1 since it is a throwaway build. 11 | set(LLVM_TARGETS_TO_BUILD Native CACHE STRING "") # X86;ARM;AArch64;RISCV 12 | 13 | # Setup vendor-specific settings. 14 | set(PACKAGE_VENDOR OWenT CACHE STRING "") 15 | 16 | set(CMAKE_INSTALL_RPATH_USE_LINK_PATH ON CACHE BOOL "") 17 | set(CMAKE_BUILD_WITH_INSTALL_RPATH OFF CACHE BOOL "") 18 | set(CMAKE_BUILD_RPATH_USE_ORIGIN OFF CACHE BOOL "") 19 | set(LLVM_BUILD_EXAMPLES OFF CACHE BOOL "") 20 | set(LLVM_BUILD_TESTS OFF CACHE BOOL "") 21 | set(LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN ON CACHE BOOL "") 22 | set(LLVM_ENABLE_EH ON CACHE BOOL "") 23 | set(LLVM_ENABLE_RTTI ON CACHE BOOL "") 24 | set(LLVM_ENABLE_PIC ON CACHE BOOL "") 25 | set(LLVM_USE_INTEL_JITEVENTS ON CACHE BOOL "") 26 | set(CLANG_LINK_CLANG_DYLIB ON CACHE BOOL "") 27 | set(LLVM_BUILD_LLVM_DYLIB ON CACHE BOOL "") 28 | set(LLVM_LINK_LLVM_DYLIB ON CACHE BOOL "") 29 | 30 | if(MSVC) 31 | set(LLVM_USE_CRT_RELEASE "MT" CACHE STRING "") 32 | endif() 33 | 34 | set(CLANG_DEFAULT_CXX_STDLIB libc++ CACHE STRING "") 35 | if(NOT APPLE) 36 | set(CLANG_DEFAULT_LINKER lld CACHE STRING "") 37 | set(CLANG_DEFAULT_OBJCOPY llvm-objcopy CACHE STRING "") 38 | endif() 39 | set(CLANG_DEFAULT_RTLIB compiler-rt CACHE STRING "") 40 | set(CLANG_ENABLE_STATIC_ANALYZER ON CACHE BOOL "") 41 | 42 | set(ENABLE_EXPERIMENTAL_NEW_PASS_MANAGER ON CACHE BOOL "") 43 | set(ENABLE_LINKER_BUILD_ID ON CACHE BOOL "") 44 | set(ENABLE_X86_RELAX_RELOCATIONS ON CACHE BOOL "") 45 | 46 | set(CMAKE_BUILD_TYPE Release CACHE STRING "") 47 | if(APPLE) 48 | set(MACOSX_DEPLOYMENT_TARGET 10.7 CACHE STRING "") 49 | elseif(MSVC) 50 | set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded" CACHE STRING "") 51 | endif() 52 | 53 | if(APPLE) 54 | set(COMPILER_RT_ENABLE_IOS OFF CACHE BOOL "") 55 | set(COMPILER_RT_ENABLE_TVOS OFF CACHE BOOL "") 56 | set(COMPILER_RT_ENABLE_WATCHOS OFF CACHE BOOL "") 57 | endif() 58 | 59 | set(LIBUNWIND_ENABLE_SHARED OFF CACHE BOOL "") 60 | set(LIBUNWIND_INSTALL_LIBRARY OFF CACHE BOOL "") 61 | set(LIBUNWIND_USE_COMPILER_RT ON CACHE BOOL "") 62 | set(LIBCXXABI_ENABLE_SHARED OFF CACHE BOOL "") 63 | set(LIBCXXABI_ENABLE_STATIC_UNWINDER ON CACHE BOOL "") 64 | set(LIBCXXABI_INSTALL_LIBRARY OFF CACHE BOOL "") 65 | set(LIBCXXABI_USE_COMPILER_RT ON CACHE BOOL "") 66 | set(LIBCXXABI_USE_LLVM_UNWINDER ON CACHE BOOL "") 67 | set(LIBCXX_ABI_VERSION 2 CACHE STRING "") 68 | set(LIBCXX_ENABLE_SHARED OFF CACHE BOOL "") 69 | if(WIN32) 70 | set(LIBCXX_HAS_WIN32_THREAD_API ON CACHE BOOL "") 71 | set(LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY OFF CACHE BOOL "") 72 | set(LIBCXX_ENABLE_FILESYSTEM OFF CACHE BOOL "") 73 | set(LIBCXX_ENABLE_ABI_LINKER_SCRIPT OFF CACHE BOOL "") 74 | set(LIBCXX_ENABLE_STATIC_ABI_LIBRARY OFF CACHE BOOL "") 75 | set(BUILTINS_CMAKE_ARGS -DCMAKE_SYSTEM_NAME=Windows CACHE STRING "") 76 | set(RUNTIMES_CMAKE_ARGS -DCMAKE_SYSTEM_NAME=Windows CACHE STRING "") 77 | set(LLVM_ENABLE_RUNTIMES "compiler-rt;libcxx" CACHE STRING "") 78 | else() 79 | set(LIBCXX_ENABLE_STATIC_ABI_LIBRARY ON CACHE BOOL "") 80 | set(LLVM_ENABLE_RUNTIMES "compiler-rt;libcxx;libcxxabi;libunwind" CACHE STRING "") 81 | endif() 82 | 83 | if(BOOTSTRAP_CMAKE_SYSTEM_NAME) 84 | set(target "${BOOTSTRAP_CMAKE_CXX_COMPILER_TARGET}") 85 | if(STAGE2_LINUX_${target}_SYSROOT) 86 | set(LLVM_BUILTIN_TARGETS "${target}" CACHE STRING "") 87 | set(BUILTINS_${target}_CMAKE_SYSTEM_NAME Linux CACHE STRING "") 88 | set(BUILTINS_${target}_CMAKE_BUILD_TYPE Release CACHE STRING "") 89 | set(BUILTINS_${target}_CMAKE_SYSROOT ${STAGE2_LINUX_${target}_SYSROOT} CACHE STRING "") 90 | 91 | set(LLVM_RUNTIME_TARGETS "${target}" CACHE STRING "") 92 | set(RUNTIMES_${target}_CMAKE_SYSTEM_NAME Linux CACHE STRING "") 93 | set(RUNTIMES_${target}_CMAKE_BUILD_TYPE Release CACHE STRING "") 94 | set(RUNTIMES_${target}_CMAKE_SYSROOT ${STAGE2_LINUX_${target}_SYSROOT} CACHE STRING "") 95 | set(RUNTIMES_${target}_COMPILER_RT_USE_BUILTINS_LIBRARY ON CACHE BOOL "") 96 | # if(NOT EXISTS "/usr/include/gnu/stubs-32.h") set(RUNTIMES_${target}_COMPILER_RT_DEFAULT_TARGET_ONLY ON CACHE BOOL 97 | # "") endif() 98 | set(RUNTIMES_${target}_LLVM_ENABLE_ASSERTIONS ON CACHE BOOL "") 99 | set(RUNTIMES_${target}_LIBUNWIND_ENABLE_SHARED OFF CACHE BOOL "") 100 | set(RUNTIMES_${target}_LIBUNWIND_USE_COMPILER_RT ON CACHE BOOL "") 101 | set(RUNTIMES_${target}_LIBUNWIND_INSTALL_LIBRARY OFF CACHE BOOL "") 102 | set(RUNTIMES_${target}_LIBCXXABI_USE_COMPILER_RT ON CACHE BOOL "") 103 | set(RUNTIMES_${target}_LIBCXXABI_ENABLE_SHARED OFF CACHE BOOL "") 104 | set(RUNTIMES_${target}_LIBCXXABI_USE_LLVM_UNWINDER ON CACHE BOOL "") 105 | set(RUNTIMES_${target}_LIBCXXABI_ENABLE_STATIC_UNWINDER ON CACHE BOOL "") 106 | set(RUNTIMES_${target}_LIBCXXABI_INSTALL_LIBRARY OFF CACHE BOOL "") 107 | set(RUNTIMES_${target}_LIBCXX_USE_COMPILER_RT ON CACHE BOOL "") 108 | set(RUNTIMES_${target}_LIBCXX_ENABLE_SHARED OFF CACHE BOOL "") 109 | set(RUNTIMES_${target}_LIBCXX_ENABLE_STATIC_ABI_LIBRARY ON CACHE BOOL "") 110 | set(RUNTIMES_${target}_LIBCXX_ABI_VERSION 2 CACHE STRING "") 111 | set(RUNTIMES_${target}_LLVM_ENABLE_RUNTIMES "compiler-rt;libcxx;libcxxabi;libunwind" CACHE STRING "") 112 | set(RUNTIMES_${target}_SANITIZER_CXX_ABI "libc++" CACHE STRING "") 113 | set(RUNTIMES_${target}_SANITIZER_CXX_ABI_INTREE ON CACHE BOOL "") 114 | endif() 115 | endif() 116 | message(STATUS "Stage1: BOOTSTRAP_CMAKE_SYSTEM_NAME=${BOOTSTRAP_CMAKE_SYSTEM_NAME}") 117 | 118 | if(UNIX) 119 | set(BOOTSTRAP_CMAKE_SHARED_LINKER_FLAGS "-ldl -lpthread" CACHE STRING "") 120 | set(BOOTSTRAP_CMAKE_MODULE_LINKER_FLAGS "-ldl -lpthread" CACHE STRING "") 121 | set(BOOTSTRAP_CMAKE_EXE_LINKER_FLAGS "-ldl -lpthread" CACHE STRING "") 122 | endif() 123 | 124 | set(BOOTSTRAP_LLVM_ENABLE_LTO ON CACHE BOOL "") 125 | if(NOT APPLE) 126 | set(BOOTSTRAP_LLVM_ENABLE_LLD ON CACHE BOOL "") 127 | endif() 128 | 129 | # Expose stage2 targets through the stage1 build configuration. 130 | set(CLANG_BOOTSTRAP_TARGETS 131 | check-all 132 | check-llvm 133 | check-clang 134 | check-lld 135 | llvm-config 136 | test-suite 137 | test-depends 138 | llvm-test-depends 139 | clang-test-depends 140 | lld-test-depends 141 | distribution 142 | install-distribution 143 | install-distribution-stripped 144 | # install-distribution-toolchain 145 | clang 146 | CACHE STRING "") 147 | 148 | get_cmake_property(variableNames VARIABLES) 149 | foreach(variableName ${variableNames}) 150 | if(variableName MATCHES "^STAGE2_") 151 | string(REPLACE "STAGE2_" "" new_name ${variableName}) 152 | list(APPEND EXTRA_ARGS "-D${new_name}=${${variableName}}") 153 | endif() 154 | endforeach() 155 | 156 | # Setup the bootstrap build. 157 | set(CLANG_ENABLE_BOOTSTRAP ON CACHE BOOL "") 158 | set(CLANG_BOOTSTRAP_EXTRA_DEPS builtins runtimes CACHE STRING "") 159 | 160 | if(STAGE2_CACHE_FILE) 161 | set(CLANG_BOOTSTRAP_CMAKE_ARGS -C ${STAGE2_CACHE_FILE} CACHE STRING "") 162 | else() 163 | set(CLANG_BOOTSTRAP_CMAKE_ARGS -C ${CMAKE_CURRENT_LIST_DIR}/distribution-stage2.cmake CACHE STRING "") 164 | endif() 165 | -------------------------------------------------------------------------------- /LLVM&Clang Installer/14.0/distribution-stage1.12.cmake: -------------------------------------------------------------------------------- 1 | # This file sets up a CMakeCache for a simple distribution bootstrap build. 2 | # See https://github.com/llvm/llvm-project/blob/release/14.x/clang/cmake/caches/Fuchsia.cmake 3 | 4 | # See LLVM_ALL_RUNTIMES in https://github.com/llvm/llvm-project/blob/main/runtimes/CMakeLists.txt LLVM_ALL_PROJECTS in 5 | # https://github.com/llvm/llvm-project/blob/main/llvm/CMakeLists.txt 6 | # https://github.com/llvm/llvm-project/blob/main/llvm/docs/GettingStarted.rst#local-llvm-configuration 7 | 8 | # Enable LLVM projects and runtimes 9 | 10 | # bolt can not be compiled in 14.0.1, the directory of __config_site is not included by now 11 | set(LLVM_ENABLE_PROJECTS "clang;clang-tools-extra;lld;llvm;lldb;libclc;pstl" CACHE STRING "") 12 | 13 | # Only build the native target in stage1 since it is a throwaway build. 14 | set(LLVM_TARGETS_TO_BUILD Native CACHE STRING "") # X86;ARM;AArch64;RISCV 15 | 16 | # Setup vendor-specific settings. 17 | set(PACKAGE_VENDOR OWenT CACHE STRING "") 18 | 19 | set(CMAKE_INSTALL_RPATH_USE_LINK_PATH ON CACHE BOOL "") 20 | set(CMAKE_BUILD_WITH_INSTALL_RPATH OFF CACHE BOOL "") 21 | set(CMAKE_BUILD_RPATH_USE_ORIGIN OFF CACHE BOOL "") 22 | set(LLVM_BUILD_EXAMPLES OFF CACHE BOOL "") 23 | set(LLVM_BUILD_TESTS OFF CACHE BOOL "") 24 | set(LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN ON CACHE BOOL "") 25 | set(LLVM_ENABLE_EH ON CACHE BOOL "") 26 | set(LLVM_ENABLE_RTTI ON CACHE BOOL "") 27 | set(LLVM_ENABLE_PIC ON CACHE BOOL "") 28 | set(LLVM_USE_INTEL_JITEVENTS ON CACHE BOOL "") 29 | set(CLANG_LINK_CLANG_DYLIB ON CACHE BOOL "") 30 | set(LLVM_BUILD_LLVM_DYLIB ON CACHE BOOL "") 31 | set(LLVM_LINK_LLVM_DYLIB ON CACHE BOOL "") 32 | 33 | if(MSVC) 34 | set(LLVM_USE_CRT_RELEASE "MT" CACHE STRING "") 35 | endif() 36 | 37 | set(CLANG_DEFAULT_CXX_STDLIB libc++ CACHE STRING "") 38 | if(NOT APPLE) 39 | set(CLANG_DEFAULT_LINKER lld CACHE STRING "") 40 | set(CLANG_DEFAULT_OBJCOPY llvm-objcopy CACHE STRING "") 41 | endif() 42 | set(CLANG_DEFAULT_RTLIB compiler-rt CACHE STRING "") 43 | set(CLANG_ENABLE_STATIC_ANALYZER ON CACHE BOOL "") 44 | 45 | set(ENABLE_EXPERIMENTAL_NEW_PASS_MANAGER ON CACHE BOOL "") 46 | set(ENABLE_LINKER_BUILD_ID ON CACHE BOOL "") 47 | set(ENABLE_X86_RELAX_RELOCATIONS ON CACHE BOOL "") 48 | 49 | set(CMAKE_BUILD_TYPE Release CACHE STRING "") 50 | if(APPLE) 51 | set(MACOSX_DEPLOYMENT_TARGET 10.7 CACHE STRING "") 52 | elseif(MSVC) 53 | set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded" CACHE STRING "") 54 | endif() 55 | 56 | if(APPLE) 57 | set(COMPILER_RT_ENABLE_IOS OFF CACHE BOOL "") 58 | set(COMPILER_RT_ENABLE_TVOS OFF CACHE BOOL "") 59 | set(COMPILER_RT_ENABLE_WATCHOS OFF CACHE BOOL "") 60 | endif() 61 | 62 | set(LIBUNWIND_ENABLE_SHARED OFF CACHE BOOL "") 63 | set(LIBUNWIND_INSTALL_LIBRARY OFF CACHE BOOL "") 64 | set(LIBCXXABI_ENABLE_SHARED OFF CACHE BOOL "") 65 | set(LIBCXXABI_ENABLE_STATIC_UNWINDER ON CACHE BOOL "") 66 | set(LIBCXXABI_INSTALL_LIBRARY OFF CACHE BOOL "") 67 | set(LIBCXXABI_USE_LLVM_UNWINDER ON CACHE BOOL "") 68 | # set(LIBCXX_ABI_VERSION 2 CACHE STRING "") # ABI 2 is not stable now 69 | set(LIBCXX_ENABLE_SHARED OFF CACHE BOOL "") 70 | if(WIN32) 71 | set(LIBCXX_HAS_WIN32_THREAD_API ON CACHE BOOL "") 72 | set(LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY OFF CACHE BOOL "") 73 | set(LIBCXX_ENABLE_FILESYSTEM OFF CACHE BOOL "") 74 | set(LIBCXX_ENABLE_ABI_LINKER_SCRIPT OFF CACHE BOOL "") 75 | set(LIBCXX_ENABLE_STATIC_ABI_LIBRARY OFF CACHE BOOL "") 76 | set(BUILTINS_CMAKE_ARGS -DCMAKE_SYSTEM_NAME=Windows CACHE STRING "") 77 | set(RUNTIMES_CMAKE_ARGS -DCMAKE_SYSTEM_NAME=Windows CACHE STRING "") 78 | set(LLVM_ENABLE_RUNTIMES "compiler-rt;libcxx" CACHE STRING "") 79 | else() 80 | set(LIBCXX_ENABLE_STATIC_ABI_LIBRARY ON CACHE BOOL "") 81 | set(LLVM_ENABLE_RUNTIMES "compiler-rt;libcxx;libcxxabi;libunwind" CACHE STRING "") 82 | endif() 83 | 84 | # compiler-rt ,see compiler-rt/CMakeLists.txt, this may changes in the future 85 | set(LLVM_BUILD_EXTERNAL_COMPILER_RT ON CACHE BOOL "Build Compiler-RT with just-built clang") 86 | set(COMPILER_RT_BUILD_SANITIZERS OFF CACHE BOOL "") 87 | set(COMPILER_RT_INCLUDE_TESTS OFF CACHE BOOL "") 88 | # set(SANITIZER_TEST_CXX "libc++" CACHE STRING "") set(SANITIZER_CXX_ABI "libc++" CACHE STRING "") 89 | # set(SANITIZER_CXX_ABI_LIBNAME "libc++" CACHE STRING "") set(SANITIZER_TEST_CXX_LIBNAME "libc++" CACHE STRING "") 90 | 91 | if(BOOTSTRAP_CMAKE_SYSTEM_NAME) 92 | set(target "${BOOTSTRAP_CMAKE_CXX_COMPILER_TARGET}") 93 | if(STAGE2_LINUX_${target}_SYSROOT) 94 | set(LLVM_BUILTIN_TARGETS "${target}" CACHE STRING "") 95 | set(BUILTINS_${target}_CMAKE_SYSTEM_NAME Linux CACHE STRING "") 96 | set(BUILTINS_${target}_CMAKE_BUILD_TYPE Release CACHE STRING "") 97 | set(BUILTINS_${target}_CMAKE_SYSROOT ${STAGE2_LINUX_${target}_SYSROOT} CACHE STRING "") 98 | 99 | set(LLVM_RUNTIME_TARGETS "${target}" CACHE STRING "") 100 | set(RUNTIMES_${target}_CMAKE_SYSTEM_NAME Linux CACHE STRING "") 101 | set(RUNTIMES_${target}_CMAKE_BUILD_TYPE Release CACHE STRING "") 102 | set(RUNTIMES_${target}_CMAKE_SYSROOT ${STAGE2_LINUX_${target}_SYSROOT} CACHE STRING "") 103 | set(RUNTIMES_${target}_COMPILER_RT_USE_BUILTINS_LIBRARY ON CACHE BOOL "") 104 | # if(NOT EXISTS "/usr/include/gnu/stubs-32.h") set(RUNTIMES_${target}_COMPILER_RT_DEFAULT_TARGET_ONLY ON CACHE BOOL 105 | # "") endif() 106 | set(RUNTIMES_${target}_LLVM_ENABLE_ASSERTIONS ON CACHE BOOL "") 107 | set(RUNTIMES_${target}_LIBUNWIND_ENABLE_SHARED OFF CACHE BOOL "") 108 | set(RUNTIMES_${target}_LIBUNWIND_USE_COMPILER_RT ON CACHE BOOL "") 109 | set(RUNTIMES_${target}_LIBUNWIND_INSTALL_LIBRARY OFF CACHE BOOL "") 110 | set(RUNTIMES_${target}_LIBCXXABI_USE_COMPILER_RT ON CACHE BOOL "") 111 | set(RUNTIMES_${target}_LIBCXXABI_ENABLE_SHARED OFF CACHE BOOL "") 112 | set(RUNTIMES_${target}_LIBCXXABI_USE_LLVM_UNWINDER ON CACHE BOOL "") 113 | set(RUNTIMES_${target}_LIBCXXABI_ENABLE_STATIC_UNWINDER ON CACHE BOOL "") 114 | set(RUNTIMES_${target}_LIBCXXABI_INSTALL_LIBRARY OFF CACHE BOOL "") 115 | set(RUNTIMES_${target}_LIBCXX_USE_COMPILER_RT ON CACHE BOOL "") 116 | set(RUNTIMES_${target}_LIBCXX_ENABLE_SHARED OFF CACHE BOOL "") 117 | set(RUNTIMES_${target}_LIBCXX_ENABLE_STATIC_ABI_LIBRARY ON CACHE BOOL "") 118 | # set(RUNTIMES_${target}_LIBCXX_ABI_VERSION 2 CACHE STRING "") # ABI 2 is not stable now 119 | set(RUNTIMES_${target}_LLVM_ENABLE_RUNTIMES "compiler-rt;libcxx;libcxxabi;libunwind" CACHE STRING "") 120 | set(RUNTIMES_${target}_SANITIZER_CXX_ABI "libc++" CACHE STRING "") 121 | set(RUNTIMES_${target}_SANITIZER_CXX_ABI_INTREE ON CACHE BOOL "") 122 | endif() 123 | endif() 124 | message(STATUS "Stage1: BOOTSTRAP_CMAKE_SYSTEM_NAME=${BOOTSTRAP_CMAKE_SYSTEM_NAME}") 125 | 126 | if(UNIX) 127 | set(BOOTSTRAP_CMAKE_SHARED_LINKER_FLAGS "-ldl -lpthread" CACHE STRING "") 128 | set(BOOTSTRAP_CMAKE_MODULE_LINKER_FLAGS "-ldl -lpthread" CACHE STRING "") 129 | set(BOOTSTRAP_CMAKE_EXE_LINKER_FLAGS "-ldl -lpthread" CACHE STRING "") 130 | endif() 131 | 132 | set(BOOTSTRAP_LLVM_ENABLE_LTO ON CACHE BOOL "") 133 | if(NOT APPLE) 134 | set(BOOTSTRAP_LLVM_ENABLE_LLD ON CACHE BOOL "") 135 | endif() 136 | 137 | # Expose stage2 targets through the stage1 build configuration. 138 | set(CLANG_BOOTSTRAP_TARGETS 139 | check-all 140 | check-llvm 141 | check-clang 142 | check-lld 143 | llvm-config 144 | test-suite 145 | test-depends 146 | llvm-test-depends 147 | clang-test-depends 148 | lld-test-depends 149 | distribution 150 | install-distribution 151 | install-distribution-stripped 152 | install-distribution-toolchain 153 | clang 154 | CACHE STRING "") 155 | 156 | get_cmake_property(variableNames VARIABLES) 157 | foreach(variableName ${variableNames}) 158 | if(variableName MATCHES "^STAGE2_") 159 | string(REPLACE "STAGE2_" "" new_name ${variableName}) 160 | list(APPEND EXTRA_ARGS "-D${new_name}=${${variableName}}") 161 | endif() 162 | endforeach() 163 | 164 | # Setup the bootstrap build. 165 | set(CLANG_ENABLE_BOOTSTRAP ON CACHE BOOL "") 166 | set(CLANG_BOOTSTRAP_EXTRA_DEPS builtins runtimes CACHE STRING "") 167 | 168 | if(STAGE2_CACHE_FILE) 169 | set(CLANG_BOOTSTRAP_CMAKE_ARGS -C ${STAGE2_CACHE_FILE} CACHE STRING "") 170 | else() 171 | set(CLANG_BOOTSTRAP_CMAKE_ARGS -C ${CMAKE_CURRENT_LIST_DIR}/distribution-stage2.cmake CACHE STRING "") 172 | endif() 173 | -------------------------------------------------------------------------------- /LLVM&Clang Installer/14.0/distribution-stage1.cmake: -------------------------------------------------------------------------------- 1 | # This file sets up a CMakeCache for a Fuchsia toolchain build. 2 | 3 | set(LLVM_TARGETS_TO_BUILD Native CACHE STRING "") # X86;ARM;AArch64;RISCV 4 | 5 | set(PACKAGE_VENDOR OWenT CACHE STRING "") 6 | 7 | set(LLVM_ENABLE_PROJECTS "clang;clang-tools-extra;lld;llvm;lldb;libclc;polly;pstl" CACHE STRING "") 8 | 9 | set(LLVM_ENABLE_BACKTRACES OFF CACHE BOOL "") 10 | set(LLVM_ENABLE_DIA_SDK OFF CACHE BOOL "") 11 | set(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR ON CACHE BOOL "") 12 | set(LLVM_ENABLE_TERMINFO OFF CACHE BOOL "") 13 | set(LLVM_ENABLE_UNWIND_TABLES OFF CACHE BOOL "") 14 | set(LLVM_ENABLE_Z3_SOLVER OFF CACHE BOOL "") 15 | set(LLVM_ENABLE_ZLIB OFF CACHE BOOL "") 16 | set(LLVM_INCLUDE_DOCS OFF CACHE BOOL "") 17 | set(LLVM_INCLUDE_EXAMPLES OFF CACHE BOOL "") 18 | set(LLVM_INCLUDE_GO_TESTS OFF CACHE BOOL "") 19 | 20 | if(WIN32) 21 | set(LLVM_USE_CRT_RELEASE "MT" CACHE STRING "") 22 | endif() 23 | 24 | set(CLANG_DEFAULT_CXX_STDLIB libc++ CACHE STRING "") 25 | if(NOT APPLE) 26 | # TODO: Remove this once we switch to ld64.lld. 27 | set(CLANG_DEFAULT_LINKER lld CACHE STRING "") 28 | set(CLANG_DEFAULT_OBJCOPY llvm-objcopy CACHE STRING "") 29 | endif() 30 | set(CLANG_DEFAULT_RTLIB compiler-rt CACHE STRING "") 31 | set(CLANG_ENABLE_ARCMT OFF CACHE BOOL "") 32 | set(CLANG_ENABLE_STATIC_ANALYZER ON CACHE BOOL "") 33 | set(CLANG_PLUGIN_SUPPORT OFF CACHE BOOL "") 34 | 35 | set(ENABLE_LINKER_BUILD_ID ON CACHE BOOL "") 36 | set(ENABLE_X86_RELAX_RELOCATIONS ON CACHE BOOL "") 37 | 38 | set(LLVM_ENABLE_ASSERTIONS ON CACHE BOOL "") 39 | set(CMAKE_BUILD_TYPE Release CACHE STRING "") 40 | if(APPLE) 41 | set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13" CACHE STRING "") 42 | elseif(WIN32) 43 | set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded" CACHE STRING "") 44 | endif() 45 | 46 | if(APPLE) 47 | set(COMPILER_RT_ENABLE_IOS OFF CACHE BOOL "") 48 | set(COMPILER_RT_ENABLE_TVOS OFF CACHE BOOL "") 49 | set(COMPILER_RT_ENABLE_WATCHOS OFF CACHE BOOL "") 50 | endif() 51 | 52 | if(WIN32) 53 | # set(LIBCXX_ABI_VERSION 2 CACHE STRING "") 54 | set(LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY OFF CACHE BOOL "") 55 | set(LIBCXX_ENABLE_FILESYSTEM OFF CACHE BOOL "") 56 | set(LIBCXX_ENABLE_ABI_LINKER_SCRIPT OFF CACHE BOOL "") 57 | set(LIBCXX_ENABLE_SHARED OFF CACHE BOOL "") 58 | set(BUILTINS_CMAKE_ARGS -DCMAKE_SYSTEM_NAME=Windows CACHE STRING "") 59 | set(RUNTIMES_CMAKE_ARGS -DCMAKE_SYSTEM_NAME=Windows CACHE STRING "") 60 | set(LLVM_ENABLE_RUNTIMES "compiler-rt;libcxx" CACHE STRING "") 61 | else() 62 | set(LIBUNWIND_ENABLE_SHARED OFF CACHE BOOL "") 63 | set(LIBUNWIND_INSTALL_LIBRARY OFF CACHE BOOL "") 64 | set(LIBUNWIND_USE_COMPILER_RT ON CACHE BOOL "") 65 | set(LIBCXXABI_ENABLE_SHARED OFF CACHE BOOL "") 66 | set(LIBCXXABI_ENABLE_STATIC_UNWINDER ON CACHE BOOL "") 67 | set(LIBCXXABI_INSTALL_LIBRARY OFF CACHE BOOL "") 68 | set(LIBCXXABI_USE_COMPILER_RT ON CACHE BOOL "") 69 | set(LIBCXXABI_USE_LLVM_UNWINDER ON CACHE BOOL "") 70 | # set(LIBCXX_ABI_VERSION 2 CACHE STRING "") 71 | set(LIBCXX_ENABLE_SHARED OFF CACHE BOOL "") 72 | set(LIBCXX_ENABLE_STATIC_ABI_LIBRARY ON CACHE BOOL "") 73 | set(LLVM_ENABLE_RUNTIMES "compiler-rt;libcxx;libcxxabi;libunwind" CACHE STRING "") 74 | endif() 75 | 76 | if(BOOTSTRAP_CMAKE_SYSTEM_NAME) 77 | set(target "${BOOTSTRAP_CMAKE_CXX_COMPILER_TARGET}") 78 | if(STAGE2_LINUX_${target}_SYSROOT) 79 | set(LLVM_BUILTIN_TARGETS "${target}" CACHE STRING "") 80 | set(BUILTINS_${target}_CMAKE_SYSTEM_NAME Linux CACHE STRING "") 81 | set(BUILTINS_${target}_CMAKE_BUILD_TYPE Release CACHE STRING "") 82 | set(BUILTINS_${target}_CMAKE_SYSROOT ${STAGE2_LINUX_${target}_SYSROOT} CACHE STRING "") 83 | 84 | set(LLVM_RUNTIME_TARGETS "${target}" CACHE STRING "") 85 | set(RUNTIMES_${target}_CMAKE_SYSTEM_NAME Linux CACHE STRING "") 86 | set(RUNTIMES_${target}_CMAKE_BUILD_TYPE Release CACHE STRING "") 87 | set(RUNTIMES_${target}_CMAKE_SYSROOT ${STAGE2_LINUX_${target}_SYSROOT} CACHE STRING "") 88 | set(RUNTIMES_${target}_COMPILER_RT_USE_BUILTINS_LIBRARY ON CACHE BOOL "") 89 | set(RUNTIMES_${target}_LIBUNWIND_ENABLE_SHARED OFF CACHE BOOL "") 90 | set(RUNTIMES_${target}_LIBUNWIND_USE_COMPILER_RT ON CACHE BOOL "") 91 | set(RUNTIMES_${target}_LIBUNWIND_INSTALL_LIBRARY OFF CACHE BOOL "") 92 | set(RUNTIMES_${target}_LIBCXXABI_USE_COMPILER_RT ON CACHE BOOL "") 93 | set(RUNTIMES_${target}_LIBCXXABI_ENABLE_SHARED OFF CACHE BOOL "") 94 | set(RUNTIMES_${target}_LIBCXXABI_USE_LLVM_UNWINDER ON CACHE BOOL "") 95 | set(RUNTIMES_${target}_LIBCXXABI_ENABLE_STATIC_UNWINDER ON CACHE BOOL "") 96 | set(RUNTIMES_${target}_LIBCXXABI_INSTALL_LIBRARY ON CACHE BOOL "") 97 | set(RUNTIMES_${target}_LIBCXX_USE_COMPILER_RT ON CACHE BOOL "") 98 | set(RUNTIMES_${target}_LIBCXX_ENABLE_SHARED OFF CACHE BOOL "") 99 | set(RUNTIMES_${target}_LIBCXX_ENABLE_STATIC_ABI_LIBRARY ON CACHE BOOL "") 100 | # set(RUNTIMES_${target}_LIBCXX_ABI_VERSION 2 CACHE STRING "") 101 | set(RUNTIMES_${target}_LLVM_ENABLE_ASSERTIONS OFF CACHE BOOL "") 102 | set(RUNTIMES_${target}_LLVM_ENABLE_RUNTIMES "compiler-rt;libcxx;libcxxabi;libunwind" CACHE STRING "") 103 | set(RUNTIMES_${target}_SANITIZER_CXX_ABI "libc++" CACHE STRING "") 104 | set(RUNTIMES_${target}_SANITIZER_CXX_ABI_INTREE ON CACHE BOOL "") 105 | endif() 106 | endif() 107 | 108 | if(UNIX) 109 | set(BOOTSTRAP_CMAKE_SHARED_LINKER_FLAGS "-ldl -lpthread" CACHE STRING "") 110 | set(BOOTSTRAP_CMAKE_MODULE_LINKER_FLAGS "-ldl -lpthread" CACHE STRING "") 111 | set(BOOTSTRAP_CMAKE_EXE_LINKER_FLAGS "-ldl -lpthread" CACHE STRING "") 112 | endif() 113 | 114 | set(BOOTSTRAP_LLVM_ENABLE_LTO ON CACHE BOOL "") 115 | if(NOT APPLE) 116 | # TODO: Remove this once we switch to ld64.lld. 117 | set(BOOTSTRAP_LLVM_ENABLE_LLD ON CACHE BOOL "") 118 | endif() 119 | 120 | set(CLANG_BOOTSTRAP_TARGETS 121 | check-all 122 | check-clang 123 | check-lld 124 | check-llvm 125 | check-polly 126 | llvm-config 127 | clang-test-depends 128 | lld-test-depends 129 | llvm-test-depends 130 | test-suite 131 | test-depends 132 | distribution 133 | install-distribution 134 | install-distribution-stripped 135 | install-distribution-toolchain 136 | clang 137 | CACHE STRING "") 138 | 139 | get_cmake_property(variableNames VARIABLES) 140 | foreach(variableName ${variableNames}) 141 | if(variableName MATCHES "^STAGE2_") 142 | string(REPLACE "STAGE2_" "" new_name ${variableName}) 143 | list(APPEND EXTRA_ARGS "-D${new_name}=${${variableName}}") 144 | endif() 145 | endforeach() 146 | 147 | # Setup the bootstrap build. 148 | set(CLANG_ENABLE_BOOTSTRAP ON CACHE BOOL "") 149 | set(CLANG_BOOTSTRAP_EXTRA_DEPS builtins runtimes CACHE STRING "") 150 | 151 | if(STAGE2_CACHE_FILE) 152 | set(CLANG_BOOTSTRAP_CMAKE_ARGS -C ${STAGE2_CACHE_FILE} CACHE STRING "") 153 | else() 154 | set(CLANG_BOOTSTRAP_CMAKE_ARGS -C ${CMAKE_CURRENT_LIST_DIR}/distribution-stage2.cmake CACHE STRING "") 155 | endif() 156 | -------------------------------------------------------------------------------- /LLVM&Clang Installer/15.0/distribution-stage1.cmake: -------------------------------------------------------------------------------- 1 | # This file sets up a CMakeCache for a Fuchsia toolchain build. 2 | 3 | set(LLVM_TARGETS_TO_BUILD Native CACHE STRING "") # X86;ARM;AArch64;RISCV 4 | 5 | set(PACKAGE_VENDOR OWenT CACHE STRING "") 6 | 7 | set(LLVM_ENABLE_PROJECTS "bolt;clang;clang-tools-extra;lld;llvm;lldb;libclc;polly;pstl" CACHE STRING "") 8 | 9 | set(LLVM_ENABLE_DIA_SDK OFF CACHE BOOL "") 10 | # set(LLVM_ENABLE_LIBEDIT OFF CACHE BOOL "") 11 | set(LLVM_ENABLE_LIBXML2 OFF CACHE BOOL "") 12 | set(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR ON CACHE BOOL "") 13 | set(LLVM_ENABLE_TERMINFO OFF CACHE BOOL "") 14 | set(LLVM_ENABLE_UNWIND_TABLES OFF CACHE BOOL "") 15 | set(LLVM_ENABLE_Z3_SOLVER OFF CACHE BOOL "") 16 | set(LLVM_ENABLE_ZLIB OFF CACHE BOOL "") 17 | set(LLVM_INCLUDE_DOCS OFF CACHE BOOL "") 18 | set(LLVM_INCLUDE_EXAMPLES OFF CACHE BOOL "") 19 | set(LLVM_INCLUDE_GO_TESTS OFF CACHE BOOL "") 20 | 21 | if(WIN32) 22 | set(LLVM_USE_CRT_RELEASE "MT" CACHE STRING "") 23 | endif() 24 | 25 | set(CLANG_DEFAULT_CXX_STDLIB libc++ CACHE STRING "") 26 | set(CLANG_DEFAULT_LINKER lld CACHE STRING "") 27 | set(CLANG_DEFAULT_OBJCOPY llvm-objcopy CACHE STRING "") 28 | set(CLANG_DEFAULT_RTLIB compiler-rt CACHE STRING "") 29 | set(CLANG_DEFAULT_UNWINDLIB libunwind CACHE STRING "") 30 | set(CLANG_ENABLE_ARCMT OFF CACHE BOOL "") 31 | set(CLANG_ENABLE_STATIC_ANALYZER OFF CACHE BOOL "") 32 | set(CLANG_PLUGIN_SUPPORT OFF CACHE BOOL "") 33 | 34 | set(ENABLE_LINKER_BUILD_ID ON CACHE BOOL "") 35 | set(ENABLE_X86_RELAX_RELOCATIONS ON CACHE BOOL "") 36 | 37 | set(LLVM_ENABLE_ASSERTIONS ON CACHE BOOL "") 38 | set(LLVM_ENABLE_BACKTRACES ON CACHE BOOL "") 39 | set(CMAKE_BUILD_TYPE Release CACHE STRING "") 40 | if(APPLE) 41 | set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13" CACHE STRING "") 42 | elseif(WIN32) 43 | set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded" CACHE STRING "") 44 | endif() 45 | 46 | if(APPLE) 47 | set(COMPILER_RT_ENABLE_IOS OFF CACHE BOOL "") 48 | set(COMPILER_RT_ENABLE_TVOS OFF CACHE BOOL "") 49 | set(COMPILER_RT_ENABLE_WATCHOS OFF CACHE BOOL "") 50 | endif() 51 | 52 | if(WIN32) 53 | set(LIBCXX_ABI_VERSION 2 CACHE STRING "") 54 | set(LIBCXX_ENABLE_FILESYSTEM OFF CACHE BOOL "") 55 | set(LIBCXX_ENABLE_ABI_LINKER_SCRIPT OFF CACHE BOOL "") 56 | set(LIBCXX_ENABLE_SHARED OFF CACHE BOOL "") 57 | set(BUILTINS_CMAKE_ARGS -DCMAKE_SYSTEM_NAME=Windows CACHE STRING "") 58 | set(RUNTIMES_CMAKE_ARGS -DCMAKE_SYSTEM_NAME=Windows CACHE STRING "") 59 | set(LLVM_ENABLE_RUNTIMES "compiler-rt;libcxx" CACHE STRING "") 60 | else() 61 | set(LIBUNWIND_ENABLE_SHARED OFF CACHE BOOL "") 62 | set(LIBUNWIND_INSTALL_LIBRARY OFF CACHE BOOL "") 63 | set(LIBUNWIND_USE_COMPILER_RT ON CACHE BOOL "") 64 | set(LIBCXXABI_ENABLE_SHARED OFF CACHE BOOL "") 65 | set(LIBCXXABI_ENABLE_STATIC_UNWINDER ON CACHE BOOL "") 66 | set(LIBCXXABI_INSTALL_LIBRARY OFF CACHE BOOL "") 67 | set(LIBCXXABI_USE_COMPILER_RT ON CACHE BOOL "") 68 | set(LIBCXXABI_USE_LLVM_UNWINDER ON CACHE BOOL "") 69 | set(LIBCXX_ABI_VERSION 2 CACHE STRING "") 70 | set(LIBCXX_ENABLE_SHARED OFF CACHE BOOL "") 71 | set(LIBCXX_ENABLE_STATIC_ABI_LIBRARY ON CACHE BOOL "") 72 | set(LIBCXX_USE_COMPILER_RT ON CACHE BOOL "") 73 | set(LLVM_ENABLE_RUNTIMES "compiler-rt;libcxx;libcxxabi;libunwind" CACHE STRING "") 74 | set(RUNTIMES_CMAKE_ARGS "-DCMAKE_OSX_DEPLOYMENT_TARGET=10.13;-DCMAKE_OSX_ARCHITECTURES=arm64|x86_64" CACHE STRING "") 75 | endif() 76 | 77 | if(BOOTSTRAP_CMAKE_SYSTEM_NAME) 78 | set(target "${BOOTSTRAP_CMAKE_CXX_COMPILER_TARGET}") 79 | if(STAGE2_LINUX_${target}_SYSROOT) 80 | set(LLVM_BUILTIN_TARGETS "${target}" CACHE STRING "") 81 | set(BUILTINS_${target}_CMAKE_SYSTEM_NAME Linux CACHE STRING "") 82 | set(BUILTINS_${target}_CMAKE_BUILD_TYPE Release CACHE STRING "") 83 | set(BUILTINS_${target}_CMAKE_SYSROOT ${STAGE2_LINUX_${target}_SYSROOT} CACHE STRING "") 84 | 85 | set(LLVM_RUNTIME_TARGETS "${target}" CACHE STRING "") 86 | set(RUNTIMES_${target}_CMAKE_SYSTEM_NAME Linux CACHE STRING "") 87 | set(RUNTIMES_${target}_CMAKE_BUILD_TYPE Release CACHE STRING "") 88 | set(RUNTIMES_${target}_CMAKE_SYSROOT ${STAGE2_LINUX_${target}_SYSROOT} CACHE STRING "") 89 | set(RUNTIMES_${target}_COMPILER_RT_USE_BUILTINS_LIBRARY ON CACHE BOOL "") 90 | set(RUNTIMES_${target}_LIBUNWIND_ENABLE_SHARED OFF CACHE BOOL "") 91 | set(RUNTIMES_${target}_LIBUNWIND_USE_COMPILER_RT ON CACHE BOOL "") 92 | set(RUNTIMES_${target}_LIBUNWIND_INSTALL_LIBRARY OFF CACHE BOOL "") 93 | set(RUNTIMES_${target}_LIBCXXABI_USE_COMPILER_RT ON CACHE BOOL "") 94 | set(RUNTIMES_${target}_LIBCXXABI_ENABLE_SHARED OFF CACHE BOOL "") 95 | set(RUNTIMES_${target}_LIBCXXABI_USE_LLVM_UNWINDER ON CACHE BOOL "") 96 | set(RUNTIMES_${target}_LIBCXXABI_ENABLE_STATIC_UNWINDER ON CACHE BOOL "") 97 | set(RUNTIMES_${target}_LIBCXXABI_INSTALL_LIBRARY ON CACHE BOOL "") 98 | set(RUNTIMES_${target}_LIBCXX_USE_COMPILER_RT ON CACHE BOOL "") 99 | set(RUNTIMES_${target}_LIBCXX_ENABLE_SHARED OFF CACHE BOOL "") 100 | set(RUNTIMES_${target}_LIBCXX_ENABLE_STATIC_ABI_LIBRARY ON CACHE BOOL "") 101 | set(RUNTIMES_${target}_LIBCXX_ABI_VERSION 2 CACHE STRING "") 102 | set(RUNTIMES_${target}_LLVM_ENABLE_ASSERTIONS OFF CACHE BOOL "") 103 | set(RUNTIMES_${target}_LLVM_ENABLE_RUNTIMES "compiler-rt;libcxx;libcxxabi;libunwind" CACHE STRING "") 104 | set(RUNTIMES_${target}_SANITIZER_CXX_ABI "libc++" CACHE STRING "") 105 | set(RUNTIMES_${target}_SANITIZER_CXX_ABI_INTREE ON CACHE BOOL "") 106 | endif() 107 | endif() 108 | 109 | if(UNIX) 110 | set(BOOTSTRAP_CMAKE_SHARED_LINKER_FLAGS "-ldl -lpthread" CACHE STRING "") 111 | set(BOOTSTRAP_CMAKE_MODULE_LINKER_FLAGS "-ldl -lpthread" CACHE STRING "") 112 | set(BOOTSTRAP_CMAKE_EXE_LINKER_FLAGS "-ldl -lpthread" CACHE STRING "") 113 | endif() 114 | 115 | set(BOOTSTRAP_LLVM_ENABLE_LLD ON CACHE BOOL "") 116 | set(BOOTSTRAP_LLVM_ENABLE_LTO ON CACHE BOOL "") 117 | 118 | set(CLANG_BOOTSTRAP_TARGETS 119 | check-all 120 | check-clang 121 | check-lld 122 | check-llvm 123 | check-polly 124 | llvm-config 125 | clang-test-depends 126 | lld-test-depends 127 | llvm-test-depends 128 | test-suite 129 | test-depends 130 | distribution 131 | install-distribution 132 | install-distribution-stripped 133 | install-distribution-toolchain 134 | clang 135 | CACHE STRING "") 136 | 137 | get_cmake_property(variableNames VARIABLES) 138 | foreach(variableName ${variableNames}) 139 | if(variableName MATCHES "^STAGE2_") 140 | string(REPLACE "STAGE2_" "" new_name ${variableName}) 141 | list(APPEND EXTRA_ARGS "-D${new_name}=${${variableName}}") 142 | endif() 143 | endforeach() 144 | 145 | # Setup the bootstrap build. 146 | set(CLANG_ENABLE_BOOTSTRAP ON CACHE BOOL "") 147 | set(CLANG_BOOTSTRAP_EXTRA_DEPS builtins runtimes CACHE STRING "") 148 | 149 | if(STAGE2_CACHE_FILE) 150 | set(CLANG_BOOTSTRAP_CMAKE_ARGS -C ${STAGE2_CACHE_FILE} CACHE STRING "") 151 | else() 152 | set(CLANG_BOOTSTRAP_CMAKE_ARGS -C ${CMAKE_CURRENT_LIST_DIR}/distribution-stage2.cmake CACHE STRING "") 153 | endif() 154 | -------------------------------------------------------------------------------- /LLVM&Clang Installer/16.0/bolt-disable-emit-relocs.patch: -------------------------------------------------------------------------------- 1 | diff --git a/bolt/tools/merge-fdata/CMakeLists.txt b/bolt/tools/merge-fdata/CMakeLists.txt 2 | index 9405acb6a..f049c5383 100644 3 | --- a/bolt/tools/merge-fdata/CMakeLists.txt 4 | +++ b/bolt/tools/merge-fdata/CMakeLists.txt 5 | @@ -18,6 +18,6 @@ install(PROGRAMS 6 | ) 7 | 8 | # Emit relocations for BOLT meta test (bolt/test/runtime/meta-merge-fdata.test) 9 | -if (BOLT_INCLUDE_TESTS AND UNIX AND NOT APPLE) 10 | - target_link_options(merge-fdata PRIVATE LINKER:--emit-relocs) 11 | -endif() 12 | +#if (BOLT_INCLUDE_TESTS AND UNIX AND NOT APPLE) 13 | +# target_link_options(merge-fdata PRIVATE LINKER:--emit-relocs) 14 | +#endif() -------------------------------------------------------------------------------- /LLVM&Clang Installer/17.0/bolt-disable-emit-relocs.patch: -------------------------------------------------------------------------------- 1 | diff --git a/bolt/tools/merge-fdata/CMakeLists.txt b/bolt/tools/merge-fdata/CMakeLists.txt 2 | index 9405acb6a..f049c5383 100644 3 | --- a/bolt/tools/merge-fdata/CMakeLists.txt 4 | +++ b/bolt/tools/merge-fdata/CMakeLists.txt 5 | @@ -18,6 +18,6 @@ install(PROGRAMS 6 | ) 7 | 8 | # Emit relocations for BOLT meta test (bolt/test/runtime/meta-merge-fdata.test) 9 | -if (BOLT_INCLUDE_TESTS AND UNIX AND NOT APPLE) 10 | - target_link_options(merge-fdata PRIVATE LINKER:--emit-relocs) 11 | -endif() 12 | +#if (BOLT_INCLUDE_TESTS AND UNIX AND NOT APPLE) 13 | +# target_link_options(merge-fdata PRIVATE LINKER:--emit-relocs) 14 | +#endif() -------------------------------------------------------------------------------- /LLVM&Clang Installer/18.1/bolt-disable-emit-relocs.patch: -------------------------------------------------------------------------------- 1 | diff --git a/bolt/tools/merge-fdata/CMakeLists.txt b/bolt/tools/merge-fdata/CMakeLists.txt 2 | index f6a87a226898..d20b578ed43d 100644 3 | --- a/bolt/tools/merge-fdata/CMakeLists.txt 4 | +++ b/bolt/tools/merge-fdata/CMakeLists.txt 5 | @@ -12,6 +12,6 @@ add_bolt_tool(merge-fdata 6 | add_dependencies(bolt merge-fdata) 7 | 8 | # Emit relocations for BOLT meta test (bolt/test/runtime/meta-merge-fdata.test) 9 | -if (BOLT_INCLUDE_TESTS AND UNIX AND NOT APPLE) 10 | - target_link_options(merge-fdata PRIVATE LINKER:--emit-relocs) 11 | -endif() 12 | +#if (BOLT_INCLUDE_TESTS AND UNIX AND NOT APPLE) 13 | +# target_link_options(merge-fdata PRIVATE LINKER:--emit-relocs) 14 | +#endif() 15 | -------------------------------------------------------------------------------- /LLVM&Clang Installer/19.1/bolt-disable-emit-relocs.patch: -------------------------------------------------------------------------------- 1 | diff --git a/bolt/tools/merge-fdata/CMakeLists.txt b/bolt/tools/merge-fdata/CMakeLists.txt 2 | index f6a87a226898..d20b578ed43d 100644 3 | --- a/bolt/tools/merge-fdata/CMakeLists.txt 4 | +++ b/bolt/tools/merge-fdata/CMakeLists.txt 5 | @@ -12,6 +12,6 @@ add_bolt_tool(merge-fdata 6 | add_dependencies(bolt merge-fdata) 7 | 8 | # Emit relocations for BOLT meta test (bolt/test/runtime/meta-merge-fdata.test) 9 | -if (BOLT_INCLUDE_TESTS AND UNIX AND NOT APPLE) 10 | - target_link_options(merge-fdata PRIVATE LINKER:--emit-relocs) 11 | -endif() 12 | +#if (BOLT_INCLUDE_TESTS AND UNIX AND NOT APPLE) 13 | +# target_link_options(merge-fdata PRIVATE LINKER:--emit-relocs) 14 | +#endif() 15 | -------------------------------------------------------------------------------- /LLVM&Clang Installer/20.1/bolt-disable-emit-relocs.patch: -------------------------------------------------------------------------------- 1 | diff --git a/bolt/tools/merge-fdata/CMakeLists.txt b/bolt/tools/merge-fdata/CMakeLists.txt 2 | index f6a87a226898..d20b578ed43d 100644 3 | --- a/bolt/tools/merge-fdata/CMakeLists.txt 4 | +++ b/bolt/tools/merge-fdata/CMakeLists.txt 5 | @@ -12,6 +12,6 @@ add_bolt_tool(merge-fdata 6 | add_dependencies(bolt merge-fdata) 7 | 8 | # Emit relocations for BOLT meta test (bolt/test/runtime/meta-merge-fdata.test) 9 | -if (BOLT_INCLUDE_TESTS AND UNIX AND NOT APPLE) 10 | - target_link_options(merge-fdata PRIVATE LINKER:--emit-relocs) 11 | -endif() 12 | +#if (BOLT_INCLUDE_TESTS AND UNIX AND NOT APPLE) 13 | +# target_link_options(merge-fdata PRIVATE LINKER:--emit-relocs) 14 | +#endif() 15 | -------------------------------------------------------------------------------- /LLVM&Clang Installer/3.5/README.md: -------------------------------------------------------------------------------- 1 | Linux 编译安装 LLVM + Clang 3.5 2 | ====== 3 | 4 | LLVM和Clang工具链的生成配置文件写得比较搓,所以略微麻烦,另外这个脚本没有经过多环境测试,不保证在其他Linux发行版里正常使用。 5 | 6 | **如果第一次执行出现安装失败,可以再执行一次。llvm的安装脚本问题多多** 7 | 8 | 编译安装 LLVM + Clang 3.5 9 | ### 准备环境及依赖项 10 | 11 | 1. cmake 12 | 2. Python 13 | 3. **python-devel/python-dev** 14 | 4. **swig** 15 | 5. **libedit/libedit-devel/libedit-dev** 16 | 6. *gtest, gtest-devel/gtest-dev(lld依赖项)* 17 | 7. GCC 4.7 or higher 18 | 19 | ### 我编译的环境 20 | #### 系统: 21 | CentOS 6.2 & CentOS 7.0 22 | 23 | #### 系统库: 24 | 详情参见 [llvm官网](http://llvm.org/) 25 | 26 | #### 编译的依赖库: 27 | + libc++ 3.5.1 28 | + libc++abi 3.5.1 29 | 30 | 31 | #### 默认编译目标: 32 | + llvm 3.5.1 33 | + clang 3.5.1 34 | + lldb 3.5.1 35 | 36 | #### 注: 37 | + (所有的库都会被安装在**$PREFEX_DIR**里) 38 | 39 | #### 额外建议: 40 | + 如果增加编译组件,比如已装有gtest要编译lld,使用命令***./install.sh -t +lld*** 41 | 42 | #### History: 43 | + 2014-09-12 Created 44 | + 2014-09-15 Tested under CentOS 7.0 45 | + 2015-03-10 更新到 llvm 3.5.1 46 | 47 | 48 | #### 参考文献 49 | 1. [llvm官网](http://llvm.org/) 50 | 2. [Linux下编译clang、libcxx及其相关库——C++11环境搭建](http://www.cnblogs.com/soaliap/archive/2012/07/23/2605278.html) 51 | 3. [linux下编译clang, libc++, libc++abi,以及第二遍自举编译 ](http://blog.csdn.net/heartszhang/article/details/17652461) 52 | -------------------------------------------------------------------------------- /LLVM&Clang Installer/3.6/README.md: -------------------------------------------------------------------------------- 1 | Linux 编译安装 LLVM + Clang 3.6 2 | ====== 3 | 4 | LLVM和Clang工具链的生成配置文件写得比较搓,所以略微麻烦,另外这个脚本没有经过多环境测试,不保证在其他Linux发行版里正常使用。 5 | 6 | ### CHANGE 7 | 8 | #### 相对于上一个版本[Linux 编译安装 LLVM + Clang 3.5](../3.5)的变化: 9 | 10 | 1. 这个版本llvm的源码修复了一个会导致开启exception功能之后的编译bug,所以编译脚本不再会修改llvm的源代码 11 | 2. 编译过程改成了两次编译 12 | 3. 编译过程完全使用cmake。 13 | 4. **终于自举编译成功啦**,第二次自举编译完成后,不再依赖libstdc++,转而依赖编译出来的libc++和libc++abi,但是仍然会依赖libgcc_s.so 14 | 5. 多线程编译的时候时不时会出现奇怪的失败,所以默认改成单线程编译 15 | 6. 修复编译完成后的提示输出 16 | 17 | ### NOTICE 18 | 19 | 由于生成动态库会出现一些问题,所以目前都是采用llvm默认的静态链接的方式。但是静态链接生成的文件比较大,并且链接的东西很多,有可能会出现链接超时的错误。 20 | 这时候可以通过手动cd到编译目录,执行 make && make install 即可 21 | 22 | 编译安装 LLVM + Clang 3.6 23 | ### 准备环境及依赖项 24 | 25 | 1. cmake 26 | 2. Python 27 | 3. **python-devel/python-dev** 28 | 4. **swig** 29 | 5. **libedit/libedit-devel/libedit-dev(lldb依赖项)** 30 | 6. *gtest, gtest-devel/gtest-dev(lld依赖项)* 31 | 7. GCC 4.7 or higher 32 | 33 | ### 我编译的环境 34 | #### 系统: 35 | CentOS 7 36 | 37 | #### 系统库: 38 | 详情参见 [llvm官网](http://llvm.org/) 39 | 40 | #### 编译的依赖库: 41 | + libc++ 3.6.2 42 | + libc++abi 3.6.2 43 | 44 | 45 | #### 默认编译目标: 46 | + llvm 3.6.2 47 | + clang 3.6.2 48 | + compiler_rt 49 | + clang_tools_extra 50 | 51 | #### 注: 52 | + (所有的库都会被安装在**$PREFEX_DIR**里) 53 | 54 | #### 额外建议: 55 | + 如果增加编译组件,比如已装有gtest要编译lld,使用命令***./install.sh -t +lld*** 56 | 57 | #### History: 58 | + 2015-03-10 Created 59 | + 2015-04-08 修订,完成自举编译,优化编译流程 60 | + 2015-07-20 默认采用动态链接,默认关闭LLDB编译(各种链接问题,解决不了,反正已经支持gdb了就用gdb吧) 61 | 62 | 63 | #### 参考文献 64 | 1. [llvm官网](http://llvm.org/) 65 | 2. [Linux下编译clang、libcxx及其相关库——C++11环境搭建](http://www.cnblogs.com/soaliap/archive/2012/07/23/2605278.html) 66 | 3. [linux下编译clang, libc++, libc++abi,以及第二遍自举编译 ](http://blog.csdn.net/heartszhang/article/details/17652461) 67 | -------------------------------------------------------------------------------- /LLVM&Clang Installer/3.7/README.md: -------------------------------------------------------------------------------- 1 | Linux 编译安装 LLVM + Clang 3.7 2 | ====== 3 | 4 | LLVM和Clang工具链的生成配置文件写得比较搓,所以略微麻烦,另外这个脚本没有经过多环境测试,不保证在其他Linux发行版里正常使用。 5 | 6 | ### CHANGE 7 | 8 | #### 相对于上一个版本[Linux 编译安装 LLVM + Clang 3.6](../3.6)的变化: 9 | 10 | 1. 更新版本到3.7.1 11 | 2. 第二次自举编译完成后,不再依赖libstdc++,转而依赖编译出来的libc++和libc++abi,但是仍然会依赖libgcc_s.so 12 | 3. llvm内部分组件没有使用LIBCXX_LIBCXXABI_INCLUDE_PATHS来查找c++abi的头文件,故而编译的时候直接把这个目录加到了C_INCLUDE_PATH里 13 | 4. 使用动态库,原先使用静态库会导致编译出来的二进制非常大,现在全部使用动态库 14 | 5. CentOS 7下测试默认包+lld通过, 本地测试过的编译命令如下 15 | > clang -O0 -g -ggdb -std=c++11 -stdlib=libstdc++ -lstdc++ *[源文件...]* 16 | > 17 | > clang++ -O0 -g -ggdb -std=c++11 -stdlib=libstdc++ *[源文件...]* 18 | > 19 | > clang -O0 -g -ggdb -std=c++11 -stdlib=libc++ -lc++ -lc++abi *[源文件...]* 20 | > 21 | > clang -O0 -g -ggdb -std=c++14 -stdlib=libc++ -lc++ -lc++abi *[源文件...]* 22 | > 23 | > clang++ -O0 -g -ggdb -std=c++11 -stdlib=libc++ -lc++abi *[源文件...]* 24 | > 25 | > clang++ -O0 -g -ggdb -std=c++14 -stdlib=libc++ -lc++abi *[源文件...]* 26 | > 27 | > 其他选项参加: http://clang.llvm.org/docs/UsersManual.html 28 | 29 | ### NOTICE 30 | 31 | 由于生成动态库会出现一些问题,所以目前都是采用llvm默认的静态链接的方式。但是静态链接生成的文件比较大,并且链接的东西很多,有可能会出现链接超时的错误。 32 | 这时候可以通过手动cd到编译目录,执行 make && make install 即可 33 | 34 | 35 | * 如果使用***clang -stdlib=libc++***则需要加上***-lc++ -lc++abi***的链接选项,或者使用***clang++ -stdlib=libc++ -lc++abi***。(无论如何-lc++abi都要手动加链接符号) 36 | * 如果使用***clang -stdlib=libstdc++***则需要加上***-lstdc++***的链接选项,或者使用***clang++ -stdlib=libstdc++*** 37 | 38 | 编译安装 LLVM + Clang 3.7 39 | ### 准备环境及依赖项 40 | 41 | 1. cmake 42 | 2. Python 43 | 3. **python-devel/python-dev** 44 | 4. **swig** 45 | 5. **libedit/libedit-devel/libedit-dev(lldb依赖项)** 46 | 6. *gtest, gtest-devel/gtest-dev(lld依赖项)* 47 | 7. GCC 4.7 or higher 48 | 49 | ### 我编译的环境 50 | #### 系统: 51 | CentOS 7.1 52 | 53 | #### 系统库: 54 | 详情参见 [llvm官网](http://llvm.org/) 55 | 56 | #### 编译的依赖库: 57 | + libc++ 3.7.7 58 | + libc++abi 3.7.1 59 | 60 | #### 默认编译目标: 61 | + llvm 3.7.1 62 | + clang 3.7.1 63 | + compiler_rt 64 | + clang_tools_extra 65 | 66 | #### 注: 67 | + (所有的库都会被安装在**$PREFEX_DIR**里) 68 | 69 | #### 额外建议: 70 | + 如果增加编译组件,比如已装有gtest要编译lld,使用命令***./install.sh -t +lld*** 71 | 72 | #### History: 73 | + 2016-02-26 Created 74 | 75 | 76 | #### 参考文献 77 | 1. [llvm官网](http://llvm.org/) 78 | 2. [Linux下编译clang、libcxx及其相关库——C++11环境搭建](http://www.cnblogs.com/soaliap/archive/2012/07/23/2605278.html) 79 | 3. [linux下编译clang, libc++, libc++abi,以及第二遍自举编译 ](http://blog.csdn.net/heartszhang/article/details/17652461) 80 | -------------------------------------------------------------------------------- /LLVM&Clang Installer/3.8/README.md: -------------------------------------------------------------------------------- 1 | Linux 编译安装 LLVM + Clang 3.8 2 | ====== 3 | 4 | LLVM和Clang工具链的生成配置文件写得比较搓,所以略微麻烦,另外这个脚本没有经过多环境测试,不保证在其他Linux发行版里正常使用。 5 | 6 | ### CHANGE 7 | 8 | #### 相对于上一个版本[Linux 编译安装 LLVM + Clang 3.7(../3.7)的变化: 9 | 1. 更新版本到3.8.0 10 | 2. 源码列表里多了一个libunwind,但是没找到什么模块需要加这个,所以暂时没加 11 | 3. 开启LLVM_ENABLE_LTO 12 | 13 | ### NOTICE 14 | 15 | 1. 第二次自举编译完成后,不再依赖libstdc++,转而依赖编译出来的libc++和libc++abi,但是仍然会依赖libgcc_s.so 16 | 2. llvm内部分组件没有使用LIBCXX_LIBCXXABI_INCLUDE_PATHS来查找c++abi的头文件,故而编译的时候直接把这个目录加到了C_INCLUDE_PATH里 17 | 3. 使用动态库,原先使用静态库会导致编译出来的二进制非常大,现在全部使用动态库 18 | 4. CentOS 7下测试默认包+lld通过, 本地测试过的编译命令如下 19 | > clang -O0 -g -ggdb -std=c++11 -stdlib=libstdc++ -lstdc++ *[源文件...]* 20 | > 21 | > clang++ -O0 -g -ggdb -std=c++11 -stdlib=libstdc++ *[源文件...]* 22 | > 23 | > clang -O0 -g -ggdb -std=c++11 -stdlib=libc++ -lc++ -lc++abi *[源文件...]* 24 | > 25 | > clang -O0 -g -ggdb -std=c++14 -stdlib=libc++ -lc++ -lc++abi *[源文件...]* 26 | > 27 | > clang++ -O0 -g -ggdb -std=c++11 -stdlib=libc++ -lc++abi *[源文件...]* 28 | > 29 | > clang++ -O0 -g -ggdb -std=c++14 -stdlib=libc++ -lc++abi *[源文件...]* 30 | > 31 | > 其他选项参加: http://clang.llvm.org/docs/UsersManual.html 32 | 33 | 34 | * 如果使用***clang -stdlib=libc++***则需要加上***-lc++ -lc++abi***的链接选项,或者使用***clang++ -stdlib=libc++ -lc++abi***。(无论如何-lc++abi都要手动加链接符号) 35 | * 如果使用***clang -stdlib=libstdc++***则需要加上***-lstdc++***的链接选项,或者使用***clang++ -stdlib=libstdc++*** 36 | 37 | 编译安装 LLVM + Clang 3.8 38 | ### 准备环境及依赖项 39 | 40 | 1. cmake 41 | 2. Python 42 | 3. **python-devel/python-dev** 43 | 4. **swig** 44 | 5. **libedit/libedit-devel/libedit-dev(lldb依赖项)** 45 | 6. *gtest, gtest-devel/gtest-dev(lld依赖项)* 46 | 7. GCC 4.7 or higher 47 | 48 | ### 我编译的环境 49 | #### 系统: 50 | CentOS 7.1 51 | 52 | #### 系统库: 53 | 详情参见 [llvm官网](http://llvm.org/) 54 | 55 | #### 编译的依赖库: 56 | + libc++ 3.8.1 57 | + libc++abi 3.8.1 58 | 59 | #### 默认编译目标: 60 | + llvm 3.8.1 61 | + clang 3.8.1 62 | + compiler_rt 3.8.1 63 | + clang_tools_extra 3.8.1 64 | 65 | #### 注: 66 | + (所有的库都会被安装在**$PREFEX_DIR**里) 67 | 68 | #### 额外建议: 69 | + 如果增加编译组件,比如已装有gtest要编译lld,使用命令***./install.sh -t +openmp*** 70 | 71 | #### History: 72 | + 2016-07-20 Created 73 | 74 | 75 | #### 参考文献 76 | 1. [llvm官网](http://llvm.org/) 77 | 2. [Linux下编译clang、libcxx及其相关库——C++11环境搭建](http://www.cnblogs.com/soaliap/archive/2012/07/23/2605278.html) 78 | 3. [linux下编译clang, libc++, libc++abi,以及第二遍自举编译 ](http://blog.csdn.net/heartszhang/article/details/17652461) 79 | -------------------------------------------------------------------------------- /LLVM&Clang Installer/3.9/README.md: -------------------------------------------------------------------------------- 1 | Linux 编译安装 LLVM + Clang 3.9 2 | ====== 3 | 4 | LLVM和Clang工具链的生成脚本全部重写了,因为原来的流程是从GCC那个脚本copy过来然后改的,使用的时候各种问题。 5 | 6 | 每次升级版本都要折腾下,一开始是编译的默认静态库巨大无比,后来改成动态库后一会儿好一会儿不好。 7 | 目测3.9.0版本的问题是开启动态库的编译模式以后有些子工程还是静态库,并且会漏掉加-fPIC,即便我在cmake的选项里加了也没用。 8 | 之前的版本有时候是用gcc编译正常,用clang自举编译的时候失败。 9 | 然后每次测试一次都要花费巨量的时间,巨慢无比。我只是编译出来玩+当某些工具使用啊喂。要不要这么折腾我啊喂。 10 | 11 | 所以索性重写了,然后这回干脆不适用原来的动态库命令了,llvm的文档里说那个命令仅供llvm的developer。然后有新的选项是把编译出来的各种.a都动态链接到一起(我试了下保留Debug信息的话这个libLLVM.so有900MB)。所以干脆不保留Debug信息了。 12 | 然而之前发现的make install的时候的python目录的bug依然存在,所以就还是保留了那个bug的处理。 13 | 14 | 也是醉,现在的脚本终于第一次编译个自举编译都又OK了,然后建议的额外的编译flags也改成了使用llvm-config来显示。希望不要下次版本有各种问题吧,唉。 15 | 16 | ### NOTICE 17 | 18 | 1. 第二次自举编译完成后,不再依赖libstdc++,转而依赖编译出来的libc++和libc++abi,但是仍然会依赖libgcc_s.so 19 | 2. llvm内部分组件没有使用LIBCXX_LIBCXXABI_INCLUDE_PATHS来查找c++abi的头文件,故而编译的时候直接把这个目录加到了C_INCLUDE_PATH里 20 | 3. 使用动态库,原先使用静态库会导致编译出来的二进制非常大,现在全部使用动态库 21 | 4. CentOS 7下测试默认包+lld通过, 本地测试过的编译命令如下 22 | > clang -O0 -g -ggdb -std=c++11 -stdlib=libstdc++ -lstdc++ *[源文件...]* 23 | > 24 | > clang++ -O0 -g -ggdb -std=c++11 -stdlib=libstdc++ *[源文件...]* 25 | > 26 | > clang -O0 -g -ggdb -std=c++11 -stdlib=libc++ -lc++ -lc++abi *[源文件...]* 27 | > 28 | > clang -O0 -g -ggdb -std=c++14 -stdlib=libc++ -lc++ -lc++abi *[源文件...]* 29 | > 30 | > clang++ -O0 -g -ggdb -std=c++11 -stdlib=libc++ -lc++abi *[源文件...]* 31 | > 32 | > clang++ -O0 -g -ggdb -std=c++14 -stdlib=libc++ -lc++abi *[源文件...]* 33 | > 34 | > 其他选项参见: llvm-config --cflags ; llvm-config --cxxflags ; llvm-config --ldflags 35 | 36 | 37 | * 如果使用***clang -stdlib=libc++***则需要加上***-lc++ -lc++abi***的链接选项,或者使用***clang++ -stdlib=libc++ -lc++abi***。(无论如何-lc++abi都要手动加链接符号) 38 | * 如果使用***clang -stdlib=libstdc++***则需要加上***-lstdc++***的链接选项,或者使用***clang++ -stdlib=libstdc++*** 39 | * 建议使用**llvm-config --cflags**,**llvm-config --cxxflags**和**llvm-config --ldflags**来查看需要附加的编译选项 40 | 41 | 编译安装 LLVM + Clang 3.9 42 | ### 准备环境及依赖项 43 | 44 | 1. cmake 45 | 2. Python 46 | 3. **python-devel/python-dev(lldb依赖项)** 47 | 4. **swig(lldb依赖项)** 48 | 5. **libedit/libedit-devel/libedit-dev(lldb依赖项)** 49 | 6. **libxml2-devel(lldb依赖项)** 50 | 7. **ncurses-devel(lldb依赖项)** 51 | 8. GCC 4.7 or higher 52 | 53 | ### 我编译的环境 54 | #### 系统: 55 | CentOS 7.1 56 | 57 | #### 系统库: 58 | 详情参见 [llvm官网](http://llvm.org/) 59 | 60 | #### 编译的依赖库: 61 | + libc++ 3.9.1 62 | + libc++abi 3.9.1 63 | + libunwind 3.9.1(这个库不会install) 64 | 65 | #### 默认编译目标: 66 | + llvm 3.9.1 67 | + clang 3.9.1 68 | + compiler_rt 3.9.1 69 | + clang_tools_extra 3.9.1 70 | + lldb 3.9.1 71 | + lld 3.9.1 72 | 73 | #### 注: 74 | + (所有的库都会被安装在**$PREFEX_DIR**里) 75 | 76 | #### 额外建议: 77 | + 如果增加编译组件,比如已装有gtest要编译lld,使用命令***./install.sh -t +openmp*** 78 | 79 | #### History: 80 | + 2016-11-14 Created 81 | + 2016-12-26 更新版本到3.9.1 82 | 83 | 84 | #### 参考文献 85 | 1. [llvm官网](http://llvm.org/) -------------------------------------------------------------------------------- /LLVM&Clang Installer/4.0/README.md: -------------------------------------------------------------------------------- 1 | Linux 编译安装 LLVM + Clang 4.0 2 | ====== 3 | 4 | 详情及变更请参照: [Linux 编译安装 LLVM + Clang 4.0](https://github.com/owent-utils/bash-shell/tree/master/LLVM%26Clang%20Installer/4.0) 5 | 6 | LLVM + Clang 4.0 发布啦,本脚本在之前LLVM + Clang 3.9.1的基础上做了稍许更新 7 | 8 | ### NOTICE 9 | 10 | 1. 第二次自举编译完成后,不再依赖libstdc++,转而依赖编译出来的libc++和libc++abi,但是仍然会依赖libgcc_s.so 11 | 2. llvm内部分组件没有使用LIBCXX_LIBCXXABI_INCLUDE_PATHS来查找c++abi的头文件,故而编译的时候直接把这个目录加到了C_INCLUDE_PATH里 12 | 3. 使用动态库,原先使用静态库会导致编译出来的二进制非常大,现在全部使用动态库 13 | 4. CentOS 7下测试默认包+lld通过, 本地测试过的编译命令如下 14 | > clang -O0 -g -ggdb -std=c++11 -stdlib=libstdc++ -lstdc++ *[源文件...]* 15 | > 16 | > clang++ -O0 -g -ggdb -std=c++11 -stdlib=libstdc++ *[源文件...]* 17 | > 18 | > clang -O0 -g -ggdb -std=c++11 -stdlib=libc++ -lc++ -lc++abi *[源文件...]* 19 | > 20 | > clang -O0 -g -ggdb -std=c++14 -stdlib=libc++ -lc++ -lc++abi *[源文件...]* 21 | > 22 | > clang++ -O0 -g -ggdb -std=c++11 -stdlib=libc++ -lc++abi *[源文件...]* 23 | > 24 | > clang++ -O0 -g -ggdb -std=c++14 -stdlib=libc++ -lc++abi *[源文件...]* 25 | > 26 | > 其他选项参见: llvm-config --cflags ; llvm-config --cxxflags ; llvm-config --ldflags 27 | 28 | 29 | * 如果使用***clang -stdlib=libc++***则需要加上***-lc++ -lc++abi***的链接选项,或者使用***clang++ -stdlib=libc++ -lc++abi***。(无论如何-lc++abi都要手动加链接符号) 30 | * 如果使用***clang -stdlib=libstdc++***则需要加上***-lstdc++***的链接选项,或者使用***clang++ -stdlib=libstdc++*** 31 | * 建议使用**llvm-config --cflags**,**llvm-config --cxxflags**和**llvm-config --ldflags**来查看需要附加的编译选项 32 | 33 | ### 发行注记 34 | + llvm : http://llvm.org/releases/4.0.0/docs/ReleaseNotes.html 35 | + clang : http://llvm.org/releases/4.0.0/tools/clang/docs/ReleaseNotes.html 36 | + clang Extra : http://llvm.org/releases/4.0.0/tools/clang/tools/extra/docs/ReleaseNotes.html 37 | + lld: http://llvm.org/releases/4.0.0/tools/lld/docs/ReleaseNotes.html 38 | 39 | ## 编译安装 LLVM + Clang 4.0 40 | ### 准备环境及依赖项 41 | 42 | 1. cmake 43 | 2. Python 44 | 3. **python-devel/python-dev(lldb依赖项)** 45 | 4. **swig(lldb依赖项)** 46 | 5. **libedit/libedit-devel/libedit-dev(lldb依赖项)** 47 | 6. **libxml2-devel(lldb依赖项)** 48 | 7. **ncurses-devel(lldb依赖项)** 49 | 8. GCC 4.7 or higher 50 | 51 | ### 我编译的环境 52 | #### 系统: 53 | CentOS 7.3 54 | 55 | #### 系统库: 56 | 详情参见 [llvm官网](http://llvm.org/) 57 | 58 | #### 编译的依赖库: 59 | + libc++ 4.0.0 60 | + libc++abi 4.0.0 61 | + libunwind 4.0.0(这个库不会install) 62 | 63 | #### 默认编译目标: 64 | + llvm 4.0.0 65 | + clang 4.0.0 66 | + compiler_rt 4.0.0 67 | + clang_tools_extra 4.0.0 68 | + lldb 4.0.0 69 | + lld 4.0.0 70 | 71 | #### 注: 72 | + (所有的库都会被安装在**$PREFEX_DIR**里) 73 | 74 | #### 额外建议: 75 | + 如果增加编译组件,比如已装有gtest要编译lld,使用命令***./install.sh -t +openmp*** 76 | 77 | #### History: 78 | + 2017-05-05 Created 79 | 80 | 81 | #### 参考文献 82 | 1. [llvm官网](http://llvm.org/) -------------------------------------------------------------------------------- /LLVM&Clang Installer/5.0/README.md: -------------------------------------------------------------------------------- 1 | Linux 编译安装 LLVM + Clang 5.0 2 | ====== 3 | 4 | LLVM + Clang 5.0 发布啦,本脚本在之前LLVM + Clang 4.0 的基础上做了稍许更新并增加了仅下载模式 5 | 6 | 如果在一些比较老的系统上,自带的gcc版本过低(比如CentOS 6).可以先用 https://github.com/owent-utils/bash-shell/tree/master/GCC%20Installer/gcc-7 编译出新版gcc,再用这个gcc来编译llvm+clang工具链。 7 | 8 | ### NOTICE 9 | 10 | 1. 第二次自举编译完成后,不再依赖libstdc++,转而依赖编译出来的libc++和libc++abi,但是仍然会依赖libgcc_s.so 11 | 2. llvm内部分组件没有使用LIBCXX_LIBCXXABI_INCLUDE_PATHS来查找c++abi的头文件,故而编译的时候直接把这个目录加到了C_INCLUDE_PATH里 12 | 3. 使用动态库,原先使用静态库会导致编译出来的二进制非常大,现在全部使用动态库 13 | 4. CentOS 7下测试默认包+lld通过, 本地测试过的编译命令如下 14 | > clang -O0 -g -ggdb -std=c++11 -stdlib=libstdc++ -lstdc++ *[源文件...]* 15 | > 16 | > clang++ -O0 -g -ggdb -std=c++11 -stdlib=libstdc++ *[源文件...]* 17 | > 18 | > clang -O0 -g -ggdb -std=c++11 -stdlib=libc++ -lc++ -lc++abi *[源文件...]* 19 | > 20 | > clang -O0 -g -ggdb -std=c++14 -stdlib=libc++ -lc++ -lc++abi *[源文件...]* 21 | > 22 | > clang++ -O0 -g -ggdb -std=c++11 -stdlib=libc++ -lc++abi *[源文件...]* 23 | > 24 | > clang++ -O0 -g -ggdb -std=c++14 -stdlib=libc++ -lc++abi *[源文件...]* 25 | > 26 | > 其他选项参见: llvm-config --cflags ; llvm-config --cxxflags ; llvm-config --ldflags 27 | 28 | 29 | * 如果使用***clang -stdlib=libc++***则需要加上***-lc++ -lc++abi***的链接选项,或者使用***clang++ -stdlib=libc++ -lc++abi***。(无论如何-lc++abi都要手动加链接符号) 30 | * 如果使用***clang -stdlib=libstdc++***则需要加上***-lstdc++***的链接选项,或者使用***clang++ -stdlib=libstdc++*** 31 | * 建议使用**llvm-config --cflags**,**llvm-config --cxxflags**和**llvm-config --ldflags**来查看需要附加的编译选项 32 | 33 | ### 发行注记 34 | + llvm : http://llvm.org/releases/5.0.1/docs/ReleaseNotes.html 35 | + clang : http://llvm.org/releases/5.0.1/tools/clang/docs/ReleaseNotes.html 36 | + clang Extra : http://llvm.org/releases/5.0.1/tools/clang/tools/extra/docs/ReleaseNotes.html 37 | + lld: http://llvm.org/releases/5.0.1/tools/lld/docs/ReleaseNotes.html 38 | 39 | ## 编译安装 LLVM + Clang 5.0 40 | ### 准备环境及依赖项 41 | 42 | 1. cmake 43 | 2. Python 2.7 or higher 44 | 3. **python-devel/python-dev(lldb依赖项)** 45 | 4. **swig(lldb依赖项)** 46 | 5. **libedit/libedit-devel/libedit-dev(lldb依赖项)** 47 | 6. **libxml2-devel(lldb依赖项)** 48 | 7. **ncurses-devel(lldb依赖项)** 49 | 8. GCC 4.7 or higher 50 | 51 | ### 我编译的环境 52 | #### 系统: 53 | CentOS 7.3 & CentOS 6.2 54 | 55 | #### 系统库: 56 | 详情参见 [llvm官网](http://llvm.org/) 57 | 58 | #### 编译的依赖库: 59 | + libc++ 5.0.1 60 | + libc++abi 5.0.1 61 | + libunwind 5.0.1(这个库不会install) 62 | 63 | #### 默认编译目标: 64 | + llvm 5.0.1 65 | + clang 5.0.1 66 | + compiler_rt 5.0.1 67 | + clang_tools_extra 5.0.1 68 | + lldb 5.0.1 69 | + lld 5.0.1 70 | 71 | #### 注: 72 | + (所有的库都会被安装在**$PREFEX_DIR**里) 73 | 74 | #### 额外建议: 75 | + 如果增加编译组件,比如已装有gtest要编译lld,使用命令***./install.sh -t +openmp*** 76 | 77 | #### History: 78 | + 2017-09-13 Created 79 | + 2017-10-14 增加一些低版本环境的适配支持,支持通过CC和CXX指定编译器 80 | + 2018-02-01 升级到5.0.1,使用HTTPS下载,修复cmake失败流程没有正确提示的问题 81 | 82 | 83 | #### 参考文献 84 | 1. [llvm官网](http://llvm.org/) -------------------------------------------------------------------------------- /LLVM&Clang Installer/6.0/README.md: -------------------------------------------------------------------------------- 1 | Linux 编译安装 LLVM + Clang 6.0 2 | ====== 3 | 4 | LLVM + Clang 6.0 发布啦,本脚本在之前LLVM + Clang 5.0 的基础上做了稍许更新 5 | 6 | 如果在一些比较老的系统上,自带的gcc版本过低(比如CentOS 6).可以先用 https://github.com/owent-utils/bash-shell/tree/master/GCC%20Installer/gcc-7 编译出新版gcc,再用这个gcc来编译llvm+clang工具链。 7 | 8 | ### NOTICE 9 | 10 | 1. 第二次自举编译完成后,不再依赖libstdc++,转而依赖编译出来的libc++和libc++abi,但是仍然会依赖libgcc_s.so 11 | 2. llvm内部分组件没有使用LIBCXX_LIBCXXABI_INCLUDE_PATHS来查找c++abi的头文件,故而编译的时候直接把这个目录加到了C_INCLUDE_PATH里 12 | 3. 使用动态库,原先使用静态库会导致编译出来的二进制非常大,现在全部使用动态库 13 | 4. CentOS 7下测试默认包+lld通过, 本地测试过的编译命令如下 14 | > clang -O0 -g -ggdb -std=c++11 -stdlib=libstdc++ -lstdc++ *[源文件...]* 15 | > 16 | > clang++ -O0 -g -ggdb -std=c++11 -stdlib=libstdc++ *[源文件...]* 17 | > 18 | > clang -O0 -g -ggdb -std=c++11 -stdlib=libc++ -lc++ -lc++abi *[源文件...]* 19 | > 20 | > clang -O0 -g -ggdb -std=c++14 -stdlib=libc++ -lc++ -lc++abi *[源文件...]* 21 | > 22 | > clang++ -O0 -g -ggdb -std=c++11 -stdlib=libc++ -lc++abi *[源文件...]* 23 | > 24 | > clang++ -O0 -g -ggdb -std=c++14 -stdlib=libc++ -lc++abi *[源文件...]* 25 | > 26 | > 其他选项参见: llvm-config --cflags ; llvm-config --cxxflags ; llvm-config --ldflags 27 | 28 | 29 | * 如果使用***clang -stdlib=libc++***则需要加上***-lc++ -lc++abi***的链接选项,或者使用***clang++ -stdlib=libc++ -lc++abi***。(无论如何-lc++abi都要手动加链接符号) 30 | * 如果使用***clang -stdlib=libstdc++***则需要加上***-lstdc++***的链接选项,或者使用***clang++ -stdlib=libstdc++*** 31 | * 建议使用**llvm-config --cflags**,**llvm-config --cxxflags**和**llvm-config --ldflags**来查看需要附加的编译选项 32 | 33 | ### 发行注记 34 | + llvm : http://llvm.org/releases/6.0.1/docs/ReleaseNotes.html 35 | + clang : http://llvm.org/releases/6.0.1/tools/clang/docs/ReleaseNotes.html 36 | + clang Extra : http://llvm.org/releases/6.0.1/tools/clang/tools/extra/docs/ReleaseNotes.html 37 | + lld: http://llvm.org/releases/6.0.1/tools/lld/docs/ReleaseNotes.html 38 | 39 | ## 编译安装 LLVM + Clang 6.0 40 | ### 准备环境及依赖项 41 | 42 | 1. cmake 43 | 2. Python 2.7 or higher 44 | 3. **python-devel/python-dev(lldb依赖项)** 45 | 4. **swig(lldb依赖项)** 46 | 5. **libedit/libedit-devel/libedit-dev(lldb依赖项)** 47 | 6. **libxml2-devel(lldb依赖项)** 48 | 7. **ncurses-devel(lldb依赖项)** 49 | 8. GCC 4.7 or higher 50 | 51 | ### 我编译的环境 52 | #### 系统: 53 | CentOS 7.3 & CentOS 6.2 54 | 55 | #### 系统库: 56 | 详情参见 [llvm官网](http://llvm.org/) 57 | 58 | #### 编译的依赖库: 59 | + libc++ 6.0.1 60 | + libc++abi 6.0.1 61 | + libunwind 6.0.1(这个库不会install) 62 | 63 | #### 默认编译目标: 64 | + llvm 6.0.1 65 | + clang 6.0.1 66 | + compiler_rt 6.0.1 67 | + clang_tools_extra 6.0.1 68 | + lldb 6.0.1 69 | + lld 6.0.1 70 | 71 | #### 注: 72 | + (所有的库都会被安装在**$PREFEX_DIR**里) 73 | 74 | #### 额外建议: 75 | + 如果增加编译组件,比如已装有gtest要编译lld,使用命令***./install.sh -t +openmp*** 76 | 77 | #### History: 78 | + 2018-03-19 Created 79 | + 2018-08-14 Update to 6.0.1 80 | 81 | 82 | #### 参考文献 83 | 1. [llvm官网](http://llvm.org/) -------------------------------------------------------------------------------- /LLVM&Clang Installer/7.0/README.md: -------------------------------------------------------------------------------- 1 | Linux 编译安装 LLVM + Clang 7.0 2 | ====== 3 | 4 | LLVM + Clang 7.0 发布啦,本脚本在之前LLVM + Clang 6.0 的基础上做了稍许更新。 5 | 6 | 不知道哪个版本开始,使用开了gold链接器的gcc需要用 -fuse-ld=gold 才能链接通过。所以本次脚本主要增加检测是否支持 ```-fuse-ld=gold``` 选项,如果支持则链接选项增加 ```-fuse-ld=gold``` 。另外调整了 libunwind 的编译过程。 7 | 8 | 如果在一些比较老的系统上,自带的gcc版本过低(比如CentOS 6).可以先用 https://github.com/owent-utils/bash-shell/tree/master/GCC%20Installer/gcc-8 编译出新版gcc,再用这个gcc来编译llvm+clang工具链。 9 | 10 | ### 编译脚本使用示例 11 | ```bash 12 | sudo -b env CC=/usr/local/gcc-8.2.0/gcc CXX=/usr/local/gcc-8.2.0/g++ nohup ./install.sh 13 | sudo chmod 777 nohup.out && tail -f nohup.out; 14 | 15 | # 或者不需要root权限 16 | env CC=/usr/local/gcc-8.2.0/gcc CXX=/usr/local/gcc-8.2.0/g++ nohup ./install.sh -p $HOME/prebuilt/llvm-7.0 & 17 | tail -f nohup.out; 18 | ``` 19 | 20 | ### NOTICE 21 | 22 | 1. 第二次自举编译完成后,不再依赖libstdc++,转而依赖编译出来的libc++和libc++abi,但是仍然会依赖libgcc_s.so 23 | 2. llvm内部分组件没有使用LIBCXX_LIBCXXABI_INCLUDE_PATHS来查找c++abi的头文件,故而编译的时候直接把这个目录加到了C_INCLUDE_PATH里 24 | 3. 使用动态库,原先使用静态库会导致编译出来的二进制非常大,现在全部使用动态库 25 | 4. CentOS 7下测试默认包+lld通过, 本地测试过的编译命令如下 26 | > clang -O0 -g -ggdb -std=c++11 -stdlib=libstdc++ -lstdc++ *[源文件...]* 27 | > 28 | > clang++ -O0 -g -ggdb -std=c++11 -stdlib=libstdc++ *[源文件...]* 29 | > 30 | > clang -O0 -g -ggdb -std=c++11 -stdlib=libc++ -lc++ -lc++abi *[源文件...]* 31 | > 32 | > clang -O0 -g -ggdb -std=c++14 -stdlib=libc++ -lc++ -lc++abi *[源文件...]* 33 | > 34 | > clang++ -O0 -g -ggdb -std=c++11 -stdlib=libc++ -lc++abi *[源文件...]* 35 | > 36 | > clang++ -O0 -g -ggdb -std=c++14 -stdlib=libc++ -lc++abi *[源文件...]* 37 | > 38 | > 其他选项参见: llvm-config --cflags ; llvm-config --cxxflags ; llvm-config --ldflags 39 | 40 | 41 | * 如果使用***clang -stdlib=libc++***则需要加上***-lc++ -lc++abi***的链接选项,或者使用***clang++ -stdlib=libc++ -lc++abi***。(无论如何-lc++abi都要手动加链接符号) 42 | * 如果使用***clang -stdlib=libstdc++***则需要加上***-lstdc++***的链接选项,或者使用***clang++ -stdlib=libstdc++*** 43 | * 建议使用**llvm-config --cflags**,**llvm-config --cxxflags**和**llvm-config --ldflags**来查看需要附加的编译选项 44 | 45 | ### 发行注记 46 | + llvm : http://llvm.org/releases/7.0.0/docs/ReleaseNotes.html 47 | + clang : http://llvm.org/releases/7.0.0/tools/clang/docs/ReleaseNotes.html 48 | + clang Extra : http://llvm.org/releases/7.0.0/tools/clang/tools/extra/docs/ReleaseNotes.html 49 | + lld: http://llvm.org/releases/7.0.0/tools/lld/docs/ReleaseNotes.html 50 | 51 | ## 编译安装 LLVM + Clang 7.0 52 | ### 准备环境及依赖项 53 | 54 | 1. cmake 55 | 2. Python 2.7 or higher 56 | 3. **python-devel/python-dev(lldb依赖项)** 57 | 4. **swig(lldb依赖项)** 58 | 5. **libedit/libedit-devel/libedit-dev(lldb依赖项)** 59 | 6. **libxml2-devel(lldb依赖项)** 60 | 7. **ncurses-devel(lldb依赖项)** 61 | 8. GCC 4.7 or higher 62 | 63 | ### 我编译的环境 64 | #### 系统: 65 | CentOS 7.3 & CentOS 6.2 66 | 67 | #### 系统库: 68 | 详情参见 [llvm官网](http://llvm.org/) 69 | 70 | #### 编译的依赖库: 71 | + libc++ 7.0.0 72 | + libc++abi 7.0.0 73 | + libunwind 7.0.0 74 | 75 | #### 默认编译目标: 76 | + llvm 7.0.0 77 | + clang 7.0.0 78 | + compiler_rt 7.0.0 79 | + clang_tools_extra 7.0.0 80 | + lldb 7.0.0 81 | + lld 7.0.0 82 | 83 | #### 注: 84 | + (所有的库都会被安装在**$PREFEX_DIR**里) 85 | 86 | #### 额外建议: 87 | + 如果增加编译组件,比如已装有gtest要编译lld,使用命令 ```./install.sh -t +openmp``` 88 | 89 | #### History: 90 | + 2018-09-28 Created 91 | + 2019-02-05 更新版本到7.0.1,修订编译流程中的libunwind流程,在第二遍自举中,libc++abi必须依赖Libunwind,优先使用ninja来构建 92 | + 2019-03-05 改成默认Release编译,RelWithDebInfo出的包太大了 93 | 94 | 95 | #### 参考文献 96 | 1. [llvm官网](http://llvm.org/) -------------------------------------------------------------------------------- /LLVM&Clang Installer/8.0/README.md: -------------------------------------------------------------------------------- 1 | Linux 编译安装 LLVM + Clang 8.0 2 | ====== 3 | 4 | LLVM + Clang 8.0 发布啦,本脚本在之前LLVM + Clang 7.0 的基础上做了稍许更新。 5 | 6 | 不知道哪个版本开始,使用开了gold链接器的gcc需要用 -fuse-ld=gold 才能链接通过。所以本次脚本主要增加检测是否支持 ```-fuse-ld=gold``` 选项,如果支持则链接选项增加 ```-fuse-ld=gold``` 。 7 | 8 | 如果在一些比较老的系统上,自带的gcc版本过低(比如CentOS 6).可以先用 https://github.com/owent-utils/bash-shell/tree/master/GCC%20Installer/gcc-9 编译出新版gcc,再用这个gcc来编译llvm+clang工具链。 9 | 10 | ### 编译脚本使用示例 11 | 12 | ```bash 13 | sudo -b env CC=/usr/local/gcc-9.1.0/gcc CXX=/usr/local/gcc-9.1.0/g++ nohup ./install.sh 14 | sudo chmod 777 nohup.out && tail -f nohup.out; 15 | 16 | # 或者不需要root权限 17 | env CC=/usr/local/gcc-9.1.0/gcc CXX=/usr/local/gcc-9.1.0/g++ nohup ./install.sh -p $HOME/prebuilt/llvm-8.0 & 18 | tail -f nohup.out; 19 | ``` 20 | 21 | ### NOTICE 22 | 23 | 1. 第二次自举编译完成后,不再依赖libstdc++,转而依赖编译出来的libc++和libc++abi,但是仍然会依赖libgcc_s.so 24 | 2. llvm内部分组件没有使用LIBCXX_LIBCXXABI_INCLUDE_PATHS来查找c++abi的头文件,故而编译的时候直接把这个目录加到了C_INCLUDE_PATH里 25 | 3. 使用动态库,原先使用静态库会导致编译出来的二进制非常大,现在全部使用动态库 26 | 4. CentOS 7下测试默认包+lld通过, 本地测试过的编译命令如下 27 | > clang -O0 -g -ggdb -std=c++11 -stdlib=libstdc++ -lstdc++ *[源文件...]* 28 | > 29 | > clang++ -O0 -g -ggdb -std=c++11 -stdlib=libstdc++ *[源文件...]* 30 | > 31 | > clang -O0 -g -ggdb -std=c++11 -stdlib=libc++ -lc++ -lc++abi *[源文件...]* 32 | > 33 | > clang -O0 -g -ggdb -std=c++14 -stdlib=libc++ -lc++ -lc++abi *[源文件...]* 34 | > 35 | > clang++ -O0 -g -ggdb -std=c++11 -stdlib=libc++ -lc++abi *[源文件...]* 36 | > 37 | > clang++ -O0 -g -ggdb -std=c++14 -stdlib=libc++ -lc++abi *[源文件...]* 38 | > 39 | > 其他选项参见: llvm-config --cflags ; llvm-config --cxxflags ; llvm-config --ldflags 40 | 41 | 42 | * 如果使用***clang -stdlib=libc++***则需要加上***-lc++ -lc++abi***的链接选项,或者使用***clang++ -stdlib=libc++ -lc++abi***。(无论如何-lc++abi都要手动加链接符号) 43 | * 如果使用***clang -stdlib=libstdc++***则需要加上***-lstdc++***的链接选项,或者使用***clang++ -stdlib=libstdc++*** 44 | * 建议使用**llvm-config --cflags**,**llvm-config --cxxflags**和**llvm-config --ldflags**来查看需要附加的编译选项 45 | 46 | ### 发行注记 47 | 48 | + llvm : http://llvm.org/releases/8.0.1/docs/ReleaseNotes.html 49 | + clang : http://llvm.org/releases/8.0.1/tools/clang/docs/ReleaseNotes.html 50 | + clang Extra : http://llvm.org/releases/8.0.1/tools/clang/tools/extra/docs/ReleaseNotes.html 51 | + lld: http://llvm.org/releases/8.0.1/tools/lld/docs/ReleaseNotes.html 52 | 53 | ## 编译安装 LLVM + Clang 8.0 54 | 55 | ### 准备环境及依赖项 56 | 57 | 1. cmake 58 | 2. Python 2.7 or higher 59 | 3. **python-devel/python-dev(lldb依赖项)** 60 | 4. **swig(lldb依赖项)** 61 | 5. **libedit/libedit-devel/libedit-dev(lldb依赖项)** 62 | 6. **libxml2-devel(lldb依赖项)** 63 | 7. **ncurses-devel(lldb依赖项)** 64 | 8. GCC 4.7 or higher 65 | 66 | ### 我编译的环境 67 | 68 | #### 系统: 69 | CentOS 7 & Manjaro 14 70 | 71 | #### 系统库: 72 | 73 | 详情参见 [llvm官网](http://llvm.org/) 74 | 75 | #### 编译的依赖库: 76 | 77 | + libc++ 8.0.1 78 | + libc++abi 8.0.1 79 | + libunwind 8.0.1 80 | 81 | #### 默认编译目标: 82 | 83 | + llvm 8.0.1 84 | + clang 8.0.1 85 | + compiler_rt 8.0.1 86 | + clang_tools_extra 8.0.1 87 | + lldb 8.0.1 88 | + lld 8.0.1 89 | 90 | #### 注: 91 | 92 | + (所有的库都会被安装在**$PREFEX_DIR**里) 93 | 94 | #### 额外建议: 95 | 96 | + 如果增加编译组件,比如已装有gtest要编译lld,使用命令 ```./install.sh -t +openmp``` 97 | 98 | #### History: 99 | + 2019-08-23 Update to 8.0.1, using github sources 100 | + 2019-06-03 Created 101 | 102 | #### 参考文献 103 | 104 | 1. [llvm官网](http://llvm.org/) 105 | -------------------------------------------------------------------------------- /LLVM&Clang Installer/9.0/README.md: -------------------------------------------------------------------------------- 1 | Linux 编译安装 LLVM + Clang 9.0 2 | ====== 3 | 4 | LLVM + Clang 9.0 发布啦,本脚本在之前LLVM + Clang 8.0 的基础上做了稍许更新。 5 | 6 | 不知道哪个版本开始,使用开了gold链接器的gcc需要用 -fuse-ld=gold 才能链接通过。所以本次脚本主要增加检测是否支持 ```-fuse-ld=gold``` 选项,如果支持则链接选项增加 ```-fuse-ld=gold``` 。 7 | 8 | 如果在一些比较老的系统上,自带的gcc版本过低(比如CentOS 7).可以先用 https://github.com/owent-utils/bash-shell/tree/master/GCC%20Installer/gcc-9 编译出新版gcc,再用这个gcc来编译llvm+clang工具链。 9 | 10 | ### 编译脚本使用示例 11 | 12 | ```bash 13 | sudo -b env CC=/usr/local/gcc-9.2.0/gcc CXX=/usr/local/gcc-9.2.0/g++ nohup ./install.sh 14 | sudo chmod 777 nohup.out && tail -f nohup.out; 15 | 16 | # 或者不需要root权限 17 | env CC=/usr/local/gcc-9.2.0/gcc CXX=/usr/local/gcc-9.2.0/g++ nohup ./install.sh -p $HOME/prebuilt/llvm-9.0 & 18 | tail -f nohup.out; 19 | ``` 20 | 21 | ### NOTICE 22 | 23 | 1. 第二次自举编译完成后,不再依赖libstdc++,转而依赖编译出来的libc++和libc++abi,但是仍然会依赖libgcc_s.so 24 | 2. llvm内部分组件没有使用LIBCXX_LIBCXXABI_INCLUDE_PATHS来查找c++abi的头文件,故而编译的时候直接把这个目录加到了C_INCLUDE_PATH里 25 | 3. 使用动态库,原先使用静态库会导致编译出来的二进制非常大,现在全部使用动态库 26 | 4. CentOS 7下测试默认包+lld通过, 本地测试过的编译命令如下 27 | > clang -O0 -g -ggdb -std=c++11 -stdlib=libstdc++ -lstdc++ *[源文件...]* 28 | > 29 | > clang++ -O0 -g -ggdb -std=c++11 -stdlib=libstdc++ *[源文件...]* 30 | > 31 | > clang -O0 -g -ggdb -std=c++11 -stdlib=libc++ -lc++ -lc++abi *[源文件...]* 32 | > 33 | > clang -O0 -g -ggdb -std=c++14 -stdlib=libc++ -lc++ -lc++abi *[源文件...]* 34 | > 35 | > clang++ -O0 -g -ggdb -std=c++11 -stdlib=libc++ -lc++abi *[源文件...]* 36 | > 37 | > clang++ -O0 -g -ggdb -std=c++14 -stdlib=libc++ -lc++abi *[源文件...]* 38 | > 39 | > 其他选项参见: llvm-config --cflags ; llvm-config --cxxflags ; llvm-config --ldflags 40 | 41 | 42 | * 如果使用***clang -stdlib=libc++***则需要加上***-lc++ -lc++abi***的链接选项,或者使用***clang++ -stdlib=libc++ -lc++abi***。(无论如何-lc++abi都要手动加链接符号) 43 | * 如果使用***clang -stdlib=libstdc++***则需要加上***-lstdc++***的链接选项,或者使用***clang++ -stdlib=libstdc++*** 44 | * 建议使用**llvm-config --cflags**,**llvm-config --cxxflags**和**llvm-config --ldflags**来查看需要附加的编译选项 45 | 46 | ### 发行注记 47 | 48 | + llvm : http://llvm.org/releases/9.0.1/docs/ReleaseNotes.html 49 | + clang : http://llvm.org/releases/9.0.1/tools/clang/docs/ReleaseNotes.html 50 | + clang Extra : http://llvm.org/releases/9.0.1/tools/clang/tools/extra/docs/ReleaseNotes.html 51 | + lld: http://llvm.org/releases/9.0.1/tools/lld/docs/ReleaseNotes.html 52 | 53 | ## 编译安装 LLVM + Clang 9.0 54 | 55 | ### 准备环境及依赖项 56 | 57 | 1. cmake 58 | 2. Python 2.7 or higher 59 | 3. **python-devel/python-dev(lldb依赖项)** 60 | 4. **swig(lldb依赖项)** 61 | 5. **libedit/libedit-devel/libedit-dev(lldb依赖项)** 62 | 6. **libxml2-devel(lldb依赖项)** 63 | 7. **ncurses-devel(lldb依赖项)** 64 | 8. GCC 4.7 or higher 65 | 66 | ### 我编译的环境 67 | 68 | #### 系统: 69 | CentOS 7 70 | 71 | #### 系统库: 72 | 73 | 详情参见 [llvm官网](http://llvm.org/) 74 | 75 | #### 编译的依赖库: 76 | 77 | + libc++ 9.0.1 78 | + libc++abi 9.0.1 79 | + libunwind 9.0.1 80 | 81 | #### 默认编译目标: 82 | 83 | + llvm 9.0.1 84 | + clang 9.0.1 85 | + compiler_rt 9.0.1 86 | + clang_tools_extra 9.0.1 87 | + lldb 9.0.1 88 | + lld 9.0.1 89 | 90 | #### 注: 91 | 92 | + (所有的库都会被安装在**$PREFEX_DIR**里) 93 | 94 | #### 额外建议: 95 | 96 | + 如果增加编译组件,比如已装有gtest要编译lld,使用命令 ```./install.sh -t +openmp``` 97 | 98 | #### History: 99 | 100 | + 2020-03-23 Update to 9.0.1 101 | + 2019-09-20 Created 102 | 103 | #### 参考文献 104 | 105 | 1. [llvm官网](http://llvm.org/) 106 | -------------------------------------------------------------------------------- /LNMP/README.md: -------------------------------------------------------------------------------- 1 | Lnmp yum 安装脚本 (for CentOS) 2 | ====== 3 | 详情见: [Lnmp yum 安装脚本 (for CentOS)](http://www.owent.net/?p=740) 4 | 脚本执行完后**有几个需要注意的地方** 5 | 6 | 文件列表 7 | ------ 8 | 1. **lnmp.sh** 可用于CentOS 6及Redhat 6 9 | 2. **lnmp_for_el7.sh** 可用于CentOS 7及Redhat 7(m替换成了MySQL开分支:mariadb) 10 | 3. **lnmp_configure_log.sh** 用于CentOS 7及Redhat 7的LNMP缓存配置脚本 11 | 4. **setup_swapfile.sh** 用于CentOS 7及Redhat 7的交换区配置脚本(mariadb的内存占用比较大,需要开启一下以防崩溃) 12 | 13 | ## 脚本选项 14 | ```shell 15 | -a <加速器缓存目录路径> ext cache dir path 16 | -c path of php.ini(Notice: must match rpm packages) 17 | -d dir path of php.d(Notice: must match rpm packages) 18 | -l dir path of php ext logs 19 | -f path of php-fpm.d/www.conf path(Notice: must match rpm packages) 20 | -m <数据库数据目录> (仅限lnmp_for_el7.sh) 21 | -o <要安装的 php 加速器> 可以是这几个 [xcache, zendopcache, eaccelerator, apcu, none] 22 | 其中apcu和其他的不冲突,另外几个互相冲突的只会安装第一个指定的加速器 23 | -h 帮助信息 24 | 25 | # apcu会导致Centos 7下php-fpm 5.4崩溃,故已禁用 26 | # eaccelerator 在Centos 7下无软件源,故已禁用 27 | 28 | ``` 29 | 30 | ## php加速器UI组件 31 | php加速组件安装以后只有加速核心,没有UI部分,各个组件的UI安装不一样。可以安如下方式安装 32 | 33 | 1. **eaccelerator** 34 | 35 | > 从 http://eaccelerator.net/ 下载 对应版本 36 | > 37 | > 把源码包内的所有php文件放置到网站目录即可 38 | > 39 | > **注意设置admin用户名和密码** 40 | 41 | 2. **xcache** 42 | 43 | > 从 http://xcache.lighttpd.net/ 下载 对应版本源码包 44 | > 45 | > 把htdoc目录内所有文件放置到网站目录即可 46 | > 47 | > **注意设置admin用户名和密码** 48 | 49 | 3. **zendopcache** 50 | 51 | > zendopcache官方没有提供UI管理器,可以使用第三方管理器 52 | > + 方案一: https://github.com/amnuts/opcache-gui 53 | > + 方案二: https://github.com/rlerdorf/opcache-status/ 54 | > + 方案三: https://github.com/PeeHaa/OpCacheGUI 55 | > + 方案四: https://github.com/carlosbuenosvinos/opcache-dashboard 56 | > 57 | > **注意设置admin用户名和密码** 58 | 59 | 4. **apcu** 60 | 61 | > 从 http://pecl.php.net/package/APCU 下载 对应版本源码包 62 | > 63 | > 把源码包内的所有php文件放置到网站目录即可 64 | > 65 | > **注意设置admin用户名和密码** 66 | 67 | ## 配置建议 68 | 69 | 脚本执行完后,有几个配置建议 70 | 71 | 1. 建议**php-fpm运行方式改为类似 unix:/var/run/php-fpm.sock** 这样,而不是绑定IP和端口,据说可以减少内存消耗和网络开销。修改方法为,*php-fpm.conf*或*php-fpm.d/www.conf* 内的**listen**设置改成 */var/run/php-fpm.sock* 然后 nginx内网站的server内*fastcgi_pass*节点改为*fastcgi_pass unix:/var/run/php-fpm.sock;*(其他sock路劲类似) 72 | 73 | 2. 建议**nginx.conf**内的**event**节点增加*use epoll;*选项,即为 74 | ```nginx 75 | events { 76 | use epoll; 77 | worker_connections 51200; 78 | } 79 | ``` 80 | 3. 建议 server include的cgi通用配置(默认是*fastcgi_params*)中添加以下选项 81 | ```nginx 82 | fastcgi_connect_timeout 300; 83 | fastcgi_send_timeout 300; 84 | fastcgi_read_timeout 300; 85 | fastcgi_buffer_size 128k; 86 | fastcgi_buffers 4 256k; 87 | fastcgi_busy_buffers_size 256k; 88 | fastcgi_temp_file_write_size 256k; 89 | fastcgi_intercept_errors on; 90 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 91 | # 并且server节点内的 fastcgi_param SCRIPT_FILENAME使用上诉文件的配置 92 | 93 | ``` 94 | 4. 建议**nginx.conf**内的http节点增加以下配置,开启*gzip*压缩 95 | ```nginx 96 | gzip on; 97 | gzip_min_length 1k; 98 | gzip_buffers 16 64k; 99 | gzip_http_version 1.0; 100 | gzip_comp_level 5; 101 | gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript; 102 | gzip_vary on; 103 | 104 | ``` 105 | 5. 建议**/etc/php-fpm.conf**内配置*sendmail*选项 106 | ```ini 107 | 108 | php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f admin@owent.net 109 | ``` 110 | 6. 根据服务器具体情况配置**/etc/php-fpm.d/*.conf**的的参数 111 | ```ini 112 | pm.max_children = 10 113 | pm.start_servers = 2 114 | pm.min_spare_servers = 3 115 | pm.max_spare_servers = 5 116 | ;pm.max_requests = 500 117 | php_admin_value[memory_limit] = 300M 118 | 119 | ;以上是我的配置 120 | ``` 121 | 7. 建议修改php,nginx,php-fpm,nginx 内 server所有***日志***文件位置 122 | 123 | # 测试新版本 124 | ## PHP7 125 | ```bash 126 | # PHP7-基本包 127 | yum install php71 php71-php-bcmath php71-php-cli php71-php-common php71-php-devel php71-php-enchant php71-php-fpm php71-php-gd php71-php-imap php71-php-intl php71-php-ldap php71-php-mbstring php71-php-mcrypt php71-php-mysql php71-php-odbc php71-php-pdo php71-php-pear php71-php-pecl-mailparse php71-php-pecl-memcache php71-php-pecl-memprof php71-php-pecl-oauth php71-php-pecl-redis php71-php-pecl-uuid php71-php-pecl-mysql php71-php-pecl-pq php71-php-pecl-redis php71-php-pear-http php71-php-pecl-mongodb php71-php-pecl-zip php71-php-pgsql php71-php-process php71-php-pspell php71-php-recode php71-php-soap php71-php-tidy php71-php-xml php71-php-xmlrpc 128 | 129 | # zend guard not available 130 | # eaccelerator not available 131 | # apcu 132 | yum install php71-php-pecl-apcu php71-php-pecl-apcu-bc 133 | # xcache not available 134 | # Zend OPcache 135 | yum install php71-php-opcache 136 | ``` -------------------------------------------------------------------------------- /LNMP/nginx_with_http2_for_el7.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # 最好在执行完lnmp_for_el7.sh后,在使用本脚本覆盖安装nginx,最好不要直接使用本脚本(直接使用的话我没有测试) 4 | # CentOS 7默认使用openssl 1.0.1,但是这个版本不支持ALPN, 详见: http://nginx.org/en/docs/http/ngx_http_v2_module.html#issues 5 | # 但是nginx 1.10.0以后,只有HTTP/2模块,不再有spdy,并且除chrome外的浏览器都必须支持ALPN才能开启HTTP/2 6 | # 本脚本用于在CentOS 7上编译openssl 1.0.2并且重新编译nginx(除openssl外其他配置和官方版本一样) 7 | # 编译选项参考: http://nginx.org/en/linux_packages.html#arguments 8 | 9 | WORKING_DIR="$PWD"; 10 | OPENSSL_PREFIX_DIR=/usr/local/openssl-1.1.1; 11 | OPENSSL_VERSION=1.1.1d; 12 | OPENSSL_BUILD_OPTIONS=("--release" "no-deprecated" "no-dso" "no-shared" 13 | "no-tests" "no-external-tests" "no-external-tests" 14 | "no-aria" "no-bf" "no-blake2" "no-camellia" "no-cast" "no-idea" 15 | "no-md2" "no-md4" "no-mdc2" "no-rc2" "no-rc4" "no-rc5" "no-hw" "no-ssl3"); 16 | NGINX_VERSION=1.16.1; 17 | 18 | OPENSSL_DIR_NAME="openssl-$OPENSSL_VERSION"; 19 | OPENSSL_PKG_NAME="$OPENSSL_DIR_NAME.tar.gz"; 20 | NGINX_DIR_NAME="nginx-$NGINX_VERSION"; 21 | NGINX_PKG_NAME="$NGINX_DIR_NAME.tar.gz"; 22 | 23 | 24 | # 软件源 25 | yum repolist | grep "\\bepel\\b" ; 26 | if [ 0 -ne $? ]; then 27 | yum install epel-release ; 28 | fi 29 | yum repolist | grep "\\bnginx\\b" ; 30 | if [ 0 -ne $? ]; then 31 | rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm ; 32 | fi 33 | 34 | # 安装依赖项 35 | yum install -y gcc gdb make automake gcc-c++ libtool yum-utils yum-plugin-remove-with-leaves yum-cron yum-plugin-upgrade-helper yum-plugin-fastestmirror rpm-build; 36 | yum-builddep -y nginx; 37 | 38 | # 下载openssl 39 | if [ ! -e "$OPENSSL_PKG_NAME" ]; then 40 | wget "https://www.openssl.org/source/$OPENSSL_PKG_NAME"; 41 | fi 42 | 43 | tar -axvf "$OPENSSL_PKG_NAME"; 44 | if [ ! -e "$OPENSSL_PREFIX_DIR" ]; then 45 | cd "$OPENSSL_DIR_NAME"; 46 | ./config --prefix="$OPENSSL_PREFIX_DIR" ${OPENSSL_BUILD_OPTIONS[@]}; 47 | make ; # -j; 48 | make install; 49 | cd - ; 50 | fi 51 | 52 | # build nginx 53 | if [ ! -e "$NGINX_PKG_NAME" ]; then 54 | wget "http://nginx.org/download/$NGINX_PKG_NAME"; 55 | fi 56 | 57 | tar -axvf "$NGINX_PKG_NAME"; 58 | cd "$NGINX_DIR_NAME"; 59 | 60 | # 编译选项参考: http://nginx.org/en/linux_packages.html#arguments 61 | 62 | ./configure \ 63 | --prefix=/etc/nginx \ 64 | --sbin-path=/usr/sbin/nginx \ 65 | --modules-path=/usr/lib64/nginx/modules \ 66 | --conf-path=/etc/nginx/nginx.conf \ 67 | --error-log-path=/var/log/nginx/error.log \ 68 | --http-log-path=/var/log/nginx/access.log \ 69 | --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock \ 70 | --http-client-body-temp-path=/var/cache/nginx/client_temp \ 71 | --http-proxy-temp-path=/var/cache/nginx/proxy_temp \ 72 | --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \ 73 | --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \ 74 | --http-scgi-temp-path=/var/cache/nginx/scgi_temp \ 75 | --user=nginx \ 76 | --group=nginx \ 77 | --with-compat \ 78 | --with-file-aio \ 79 | --with-threads \ 80 | --with-http_addition_module \ 81 | --with-http_auth_request_module \ 82 | --with-http_dav_module \ 83 | --with-http_flv_module \ 84 | --with-http_gunzip_module \ 85 | --with-http_gzip_static_module \ 86 | --with-http_mp4_module \ 87 | --with-http_random_index_module \ 88 | --with-http_realip_module \ 89 | --with-http_secure_link_module \ 90 | --with-http_slice_module \ 91 | --with-http_ssl_module \ 92 | --with-http_stub_status_module \ 93 | --with-http_sub_module \ 94 | --with-http_v2_module \ 95 | --with-mail \ 96 | --with-mail_ssl_module \ 97 | --with-stream \ 98 | --with-stream_realip_module \ 99 | --with-stream_ssl_module \ 100 | --with-stream_ssl_preread_module \ 101 | --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' \ 102 | --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' \ 103 | --with-openssl="$WORKING_DIR/$OPENSSL_DIR_NAME" \ 104 | --with-openssl-opt="-fPIC" ; 105 | 106 | make ; # -j; 107 | make install; 108 | -------------------------------------------------------------------------------- /MIT-LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (C) 2023 OWenT and other contributors 2 | http://www.owent.net 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining 5 | a copy of this software and associated documentation files (the 6 | "Software"), to deal in the Software without restriction, including 7 | without limitation the rights to use, copy, modify, merge, publish, 8 | distribute, sublicense, and/or sell copies of the Software, and to 9 | permit persons to whom the Software is furnished to do so, subject to 10 | the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be 13 | included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 19 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 20 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /Others/aria2-rpc.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | chcp 65001 4 | 5 | where pwsh 6 | 7 | if ERRORLEVEL 0 goto USE_POWERSHELL_CORE 8 | 9 | exit %ERRORLEVEL% 10 | 11 | :USE_POWERSHELL 12 | 13 | @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Interactive -NoExit -File %~dp0\aria2-rpc.ps1 14 | 15 | :USE_POWERSHELL_CORE 16 | 17 | @pwsh.exe -NoProfile -InputFormat None -ExecutionPolicy Bypass -Interactive -NoExit -File %~dp0\aria2-rpc.ps1 18 | -------------------------------------------------------------------------------- /Others/aria2-rpc.ps1: -------------------------------------------------------------------------------- 1 | Write-Output "Try loading environment ARIA2_HOME,ARIA2_BIN,ARIA2_CONF ..."; 2 | 3 | if ([string]::IsNullOrEmpty($Env:ARIA2_HOME)) { 4 | $Env:ARIA2_HOME = Split-Path $MyInvocation.MyCommand.Path 5 | } 6 | 7 | if ([string]::IsNullOrEmpty($Env:ARIA2_BIN)) { 8 | $Env:ARIA2_BIN = "aria2c" 9 | } 10 | 11 | if ([string]::IsNullOrEmpty($Env:ARIA2_CONF)) { 12 | if (Test-Path "$Env:ARIA2_HOME/etc/aria2.conf") { 13 | $Env:ARIA2_CONF = "$Env:ARIA2_HOME/etc/aria2.conf"; 14 | } 15 | elseif (Test-Path "$Env:ARIA2_HOME/conf/aria2.conf") { 16 | $Env:ARIA2_CONF = "$Env:ARIA2_HOME/conf/aria2.conf"; 17 | } 18 | else { 19 | $Env:ARIA2_CONF = "$Env:ARIA2_HOME/aria2.conf"; 20 | } 21 | } 22 | 23 | if (-Not (Test-Path "$Env:ARIA2_HOME/log")) { 24 | mkdir "$Env:ARIA2_HOME/log" 25 | } 26 | if (-Not (Test-Path "$Env:ARIA2_HOME/download")) { 27 | mkdir "$Env:ARIA2_HOME/download" 28 | } 29 | if (-Not (Test-Path "$Env:ARIA2_HOME/session")) { 30 | mkdir "$Env:ARIA2_HOME/session" 31 | } 32 | 33 | # client 34 | # https://github.com/ziahamza/webui-aria2 35 | # https://ziahamza.github.io/webui-aria2/ 36 | # https://github.com/mayswind/AriaNg 37 | # http://ariang.mayswind.net 38 | 39 | Write-Output "Clients: " 40 | Write-Output " WebUI-Aria2: https://ziahamza.github.io/webui-aria2/" 41 | Write-Output " AriaNg: http://ariang.mayswind.net" 42 | 43 | if (Test-Path "$Env:ARIA2_HOME/session/aria2.session") { 44 | Write-Output "Run: $Env:ARIA2_BIN --conf-path=$Env:ARIA2_CONF --daemon --input-file=$Env:ARIA2_HOME/session/aria2.session" 45 | . $Env:ARIA2_BIN --conf-path=$Env:ARIA2_CONF --daemon --input-file=$Env:ARIA2_HOME/session/aria2.session 46 | } 47 | else { 48 | Write-Output "Run: $Env:ARIA2_BIN --conf-path=$Env:ARIA2_CONF --daemon" 49 | . $Env:ARIA2_BIN --conf-path=$Env:ARIA2_CONF --daemon 50 | } 51 | -------------------------------------------------------------------------------- /Others/aria2-rpc.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "Try loading environment ARIA2_HOME,ARIA2_BIN,ARIA2_CONF ..."; 4 | 5 | if [ -z "$ARIA2_HOME" ]; then 6 | export ARIA2_HOME="$(dirname $0)"; 7 | fi 8 | 9 | if [ -z "$ARIA2_BIN" ]; then 10 | export ARIA2_BIN="aria2c"; 11 | fi 12 | 13 | if [ -z "$ARIA2_CONF" ]; then 14 | if [ -e "$ARIA2_HOME/etc/aria2.conf" ]; then 15 | export ARIA2_CONF="$ARIA2_HOME/etc/aria2.conf"; 16 | elif [ -e "$ARIA2_HOME/conf/aria2.conf" ]; then 17 | export ARIA2_CONF="$ARIA2_HOME/conf/aria2.conf"; 18 | else 19 | export ARIA2_CONF="$ARIA2_HOME/aria2.conf"; 20 | fi 21 | fi 22 | 23 | if [ ! -e "$ARIA2_CONF" ]; then 24 | echo "aria2 configure file $ARIA2_CONF not found."; 25 | exit 1; 26 | fi 27 | 28 | mkdir -p "$ARIA2_HOME/log"; 29 | mkdir -p "$ARIA2_HOME/download"; 30 | mkdir -p "$ARIA2_HOME/session"; 31 | 32 | # client 33 | # https://github.com/ziahamza/webui-aria2 34 | # https://ziahamza.github.io/webui-aria2/ 35 | # https://github.com/mayswind/AriaNg 36 | # http://ariang.mayswind.net 37 | 38 | echo "Clients:"; 39 | echo " WebUI-Aria2: https://ziahamza.github.io/webui-aria2/"; 40 | echo " AriaNg: http://ariang.mayswind.net/"; 41 | 42 | if [ -e "$ARIA2_HOME/session/aria2.session" ]; then 43 | echo "Run: $ARIA2_BIN --conf-path=$ARIA2_CONF --daemon --input-file=$ARIA2_HOME/session/aria2.session;"; 44 | chmod +x "$ARIA2_BIN"; 45 | $ARIA2_BIN --conf-path=$ARIA2_CONF --daemon --input-file=$ARIA2_HOME/session/aria2.session; 46 | else 47 | echo "Run: $ARIA2_BIN --conf-path=$ARIA2_CONF --daemon;"; 48 | chmod +x "$ARIA2_BIN"; 49 | $ARIA2_BIN --conf-path=$ARIA2_CONF --daemon; 50 | fi 51 | -------------------------------------------------------------------------------- /Others/aria2.conf: -------------------------------------------------------------------------------- 1 | dir=download 2 | log=log/aria2.log 3 | save-session=session/aria2.session 4 | save-session-interval=60 5 | # debug, info, notice, warn or error 6 | log-level=warn 7 | max-concurrent-downloads=5 8 | continue=true 9 | 10 | # HTTP/FTP/SFTP 11 | split=20 12 | max-tries=5 13 | max-connection-per-server=10 14 | connect-timeout=60 15 | timeout=60 16 | min-split-size=1M 17 | 18 | # HTTP 19 | http-accept-gzip=true 20 | user-agent=owent-downloader/1.0 21 | check-certificate=false 22 | 23 | # BT/Metalink 24 | # show-files=true # 这个会导致启动不了 25 | enable-dht=true 26 | bt-enable-lpd=true 27 | enable-peer-exchange=true 28 | # https://github.com/ngosang/trackerslist 29 | bt-tracker=udp://tracker.coppersurfer.tk:6969/announce,udp://tracker.opentrackr.org:1337/announce,udp://tracker.openbittorrent.com:80/announce,udp://tracker.internetwarriors.net:1337/announce,udp://p4p.arenabg.com:1337/announce,udp://9.rarbg.to:2710/announce,udp://9.rarbg.me:2710/announce,udp://exodus.desync.com:6969/announce,udp://tracker.cyberia.is:6969/announce,udp://retracker.lanta-net.ru:2710/announce,udp://open.stealth.si:80/announce,udp://tracker3.itzmx.com:6961/announce,udp://tracker.torrent.eu.org:451/announce,udp://tracker.tiny-vps.com:6969/announce,http://tracker1.itzmx.com:8080/announce,udp://tracker.moeking.me:6969/announce,udp://ipv4.tracker.harry.lu:80/announce,udp://bt2.archive.org:6969/announce,udp://bt1.archive.org:6969/announce,http://tracker.nyap2p.com:8080/announce 30 | max-overall-upload-limit=128K 31 | max-upload-limit=64K 32 | 33 | # Advance 34 | optimize-concurrent-downloads=true 35 | auto-save-interval=600 36 | disk-cache=256M 37 | piece-length=1M 38 | 39 | # Set max overall download speed in bytes/sec. 0 means unrestricted. You can append K or M (1K = 1024, 1M = 1024K). 40 | max-overall-download-limit=0 41 | # Set max download speed per each download in bytes/sec. 0 means unrestricted. You can append K or M (1K = 1024, 1M = 1024K) 42 | max-download-limit=0 43 | max-download-result=120 44 | 45 | # enable-mmap=false 46 | # epoll, kqueue, port, poll, select 47 | # event-poll=epoll 48 | # none, prealloc, trunc, fallo 49 | # file-allocation=prealloc 50 | # human-readable=true 51 | 52 | # SSLv3, TLSv1, TLSv1.1, TLSv1.2 53 | # min-tls-version=TLSv1 54 | 55 | # RPC 56 | enable-rpc=true 57 | pause=false 58 | rpc-listen-all=true 59 | rpc-allow-origin-all=true 60 | rpc-listen-port=6800 61 | # client's secret => token:123456 62 | rpc-secret=123456 63 | rpc-max-request-size=20M 64 | 65 | rpc-secure=false 66 | # rpc-certificate= 67 | # rpc-private-key= 68 | -------------------------------------------------------------------------------- /Others/centos_7_bbr_install_kernel.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | yum repolist | grep "\\belrepo\\b" ; 4 | if [ 0 -ne $? ]; then 5 | rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org ; 6 | rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm ; 7 | fi 8 | 9 | yum --enablerepo=elrepo-kernel install -y kernel-ml ; 10 | 11 | yum remove -y kernel-headers kernel-tools kernel-tools-libs ; 12 | 13 | yum --enablerepo=elrepo-kernel install -y kernel-ml-headers kernel-ml-tools kernel-ml-tools-libs ; 14 | 15 | # 装回gcc 16 | yum install -y gcc gcc-c++ libtool ; 17 | 18 | yum --enablerepo=elrepo-kernel update -y; 19 | 20 | # 确认一遍启动顺序 21 | awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg ; 22 | SELECT_KERNEL_INDEXS=($(awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg | grep -n '[(]\s*[4-9]\.' | cut -d: -f 1)); 23 | if [ ${#SELECT_KERNEL_INDEXS} -gt 0 ]; then 24 | ((SELECT_KERNEL_INDEX=${SELECT_KERNEL_INDEXS[0]}-1)); 25 | grub2-set-default $SELECT_KERNEL_INDEX ; 26 | echo "Now, you can reboot to use kernel $(awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg | grep '[(]\s*[4-9]\.' | head -n 1) "; 27 | echo -e "Please to rerun this script if you want to update componments in this system, or use \\033[33;1myum --enablerepo=elrepo-kernel update -y\\033[0m to update system"; 28 | else 29 | echo -e "\\033[31;1mError: kernel 4.X or upper not found.\\033[0m"; 30 | fi -------------------------------------------------------------------------------- /Others/centos_7_bbr_sysctl.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | SYSCTL_CONF=/etc/sysctl.conf ; 4 | 5 | sed -i "/net.core.default_qdisc/d" "$SYSCTL_CONF"; 6 | sed -i "/net.ipv4.tcp_congestion_control/d" "$SYSCTL_CONF"; 7 | 8 | echo "net.core.default_qdisc = fq 9 | net.ipv4.tcp_congestion_control = bbr" >> "$SYSCTL_CONF"; 10 | 11 | sysctl -p $SYSCTL_CONF ; 12 | 13 | # cat /proc/sys/net/ipv4/tcp_congestion_control 14 | # cat /proc/sys/net/core/default_qdisc -------------------------------------------------------------------------------- /Others/common.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # 公共变量 4 | WORKING_DIR=$PWD 5 | 6 | # 获取当前脚本目录 7 | function get_script_dir() 8 | { 9 | echo "$( cd "$( dirname "$0" )" && pwd )"; 10 | } 11 | 12 | # 设置本地语言 13 | function set_local_lang() 14 | { 15 | TARGET_LANG="zh_CN.UTF-8"; 16 | if [ $# -gt 0 ]; then 17 | TARGET_LANG="$1"; 18 | fi 19 | 20 | export LANG="$TARGET_LANG" 21 | export LC_CTYPE="$TARGET_LANG" 22 | export LC_NUMERIC="$TARGET_LANG" 23 | export LC_TIME="$TARGET_LANG" 24 | export LC_COLLATE="$TARGET_LANG" 25 | export LC_MONETARY="$TARGET_LANG" 26 | export LC_MESSAGES="$TARGET_LANG" 27 | export LC_PAPER="$TARGET_LANG" 28 | export LC_NAME="$TARGET_LANG" 29 | export LC_ADDRESS="$TARGET_LANG" 30 | export LC_TELEPHONE="$TARGET_LANG" 31 | export LC_MEASUREMENT="$TARGET_LANG" 32 | export LC_IDENTIFICATION="$TARGET_LANG" 33 | export LC_ALL="$TARGET_LANG" 34 | export RC_LANG="$TARGET_LANG" 35 | export RC_LC_CTYPE="$TARGET_LANG" 36 | export AUTO_DETECT_UTF8="yes" 37 | } 38 | 39 | # 保留指定个数的文件 40 | function remove_more_than() 41 | { 42 | filter="$1"; 43 | number_left=$2 44 | 45 | FILE_LIST=( $(ls -dt $filter) ); 46 | for (( i=$number_left; i<${#FILE_LIST[@]}; i++)); do 47 | rm -rf "${FILE_LIST[$i]}"; 48 | done 49 | } 50 | 51 | # 远程指令 52 | function auto_scp() 53 | { 54 | src="$1"; 55 | dst="$2"; 56 | pass="$3"; 57 | port="" 58 | if [ $# -gt 3 ]; then 59 | port="-P $4"; 60 | fi 61 | expect -c "set timeout -1; 62 | spawn scp -p -o StrictHostKeyChecking=no -r $port $src $dst; 63 | expect "*assword:*" { send $pass\r\n; }; 64 | expect eof {exit;}; 65 | " 66 | } 67 | 68 | function auto_ssh_exec() 69 | { 70 | host_ip="$1"; 71 | host_port="$2"; 72 | host_user="$3"; 73 | host_pwd="$4"; 74 | cmd="$5"; 75 | cmd="${cmd//\\/\\\\}"; 76 | cmd="${cmd//\"/\\\"}"; 77 | cmd="${cmd//\$/\\\$}"; 78 | expect -c "set timeout -1; 79 | spawn ssh -o StrictHostKeyChecking=no ${host_user}@${host_ip} -p ${host_port} \"${cmd}\"; 80 | expect "*assword:*" { send $host_pwd\r\n; }; 81 | expect eof {exit;}; 82 | " 83 | } 84 | 85 | # 清空Linux缓存 86 | function free_useless_memory() 87 | { 88 | CURRENT_USER_NAME=$(whoami) 89 | if [ "$CURRENT_USER_NAME" != "root" ]; then 90 | echo "Must run as root"; 91 | exit -1; 92 | fi 93 | 94 | sync 95 | echo 3 > /proc/sys/vm/drop_caches 96 | } 97 | 98 | # 清空未被引用的用户共享内存 99 | function remove_user_empty_ipc() 100 | { 101 | CURRENT_USER_NAME=$(whoami) 102 | for i in $(ipcs | grep $CURRENT_USER_NAME | awk '{ if( $6 == 0 ) print $2}'); do 103 | ipcrm -m $i 104 | ipcrm -s $i 105 | done 106 | } 107 | 108 | # 清空用户共享内存 109 | function remove_user_ipc() 110 | { 111 | CURRENT_USER_NAME=$(whoami) 112 | for i in $(ipcs | grep $CURRENT_USER_NAME | awk '{print $2}'); do 113 | ipcrm -m $i 114 | ipcrm -s $i 115 | done 116 | } 117 | 118 | # 获取系统IPv4地址 119 | function get_ipv4_address() 120 | { 121 | ALL_IP_ADDRESS=(ip -f inet -oneline address show scope global | awk '{print $4}' | awk 'BEGIN{FS="/"}{print $1}'); 122 | if [ $# -gt 0 ]; then 123 | if [ "$1" == "count" ] || [ "$1" == "number" ]; then 124 | echo ${#ALL_IP_ADDRESS[@]}; 125 | else 126 | echo ${ALL_IP_ADDRESS[$1]}; 127 | fi 128 | return; 129 | fi 130 | echo ${ALL_IP_ADDRESS[@]}; 131 | } 132 | 133 | # 获取系统IPv6地址 134 | function get_ipv6_address() 135 | { 136 | ALL_IP_ADDRESS=(ip -f inet6 -oneline address show scope global | awk '{print $4}' | awk 'BEGIN{FS="/"}{print $1}'); 137 | if [ $# -gt 0 ]; then 138 | if [ "$1" == "count" ] || [ "$1" == "number" ]; then 139 | echo ${#ALL_IP_ADDRESS[@]}; 140 | else 141 | echo ${ALL_IP_ADDRESS[$1]}; 142 | fi 143 | return; 144 | fi 145 | echo ${ALL_IP_ADDRESS[@]}; 146 | } 147 | -------------------------------------------------------------------------------- /Others/git-clone-for-ci.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # ====== SSH Key方式鉴权(推荐) ====== 4 | 5 | CI_SSH_KEY=~/.ssh/id_rsa.ci 6 | 7 | # 清理意外情况导致的长期ssh-agent 8 | for PENDING_TO_KILL in $(ps --sort start_time -u $USER -o pid,state,etimes,start_time,command | grep "ssh-agent" | grep -v grep | awk '{if($3 > 259200) { print $1;}}'); do 9 | kill $PENDING_TO_KILL 10 | done 11 | 12 | # 启用ssh-agent来控制鉴权 13 | eval $(timeout 3h ssh-agent) 14 | 15 | # 默认ssh会检查key的权限,所以设置权限600 16 | chmod 600 "$CI_SSH_KEY" 17 | ssh-add "$CI_SSH_KEY" 18 | 19 | # 设置忽略未知Host 20 | export GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" 21 | 22 | # echo "Host github.com 23 | # HostName github.com 24 | # IdentityFile $CI_SSH_KEY 25 | # Port 22 26 | # AddKeysToAgent yes" > $HOME/.ssh/config; 27 | 28 | if [ -e repo ]; then 29 | cd repo 30 | git reset --hard 31 | git clean -dfx 32 | git fetch origin 33 | if [ $? -ne 0 ]; then 34 | echo "Fetch from remote failed" 35 | exit $? 36 | fi 37 | 38 | git reset --hard origin/master 39 | if [ $? -ne 0 ]; then 40 | git reset --hard 41 | git clean -dfx 42 | git reset --hard origin/master 43 | fi 44 | 45 | # 替换submodule里的http地址到ssh地址 46 | if [ -e .gitmodules ]; then 47 | sed -E -i.bak "s;https\\?://github.com/;git@github.com:;" .gitmodules 48 | sed -E -i.bak "s;https\\?://github.com/;git@github.com:;" .git/config 49 | git submodule foreach "git reset --hard && git clean -dfx" 50 | git submodule update --init -f 51 | fi 52 | else 53 | git clone --depth=1 -b master git@github.com:owent-utils/bash-shell.git repo 54 | cd repo 55 | 56 | git lfs install 57 | 58 | # 替换submodule里的http地址到ssh地址 59 | if [ -e .gitmodules ]; then 60 | sed -E -i.bak "s;https\\?://github.com/;git@github.com:;" .gitmodules 61 | sed -E -i.bak "s;https\\?://github.com/;git@github.com:;" .git/config 62 | git submodule update --init -f 63 | fi 64 | fi 65 | 66 | git lfs pull 67 | 68 | #if [ "x$GIT_SETUP_USE_SSH_AGENT" != "x" ] && [ "x$GIT_SETUP_REUSE_SSH_AGENT" == "x" ]; then 69 | ssh-agent -k 70 | #fi 71 | 72 | # ====== 备份http/https方式用户名密码鉴权(明文存储,不推荐) ====== 73 | GIT_CREDENTIAL_FILE=~/.git-credentials # [密码文件存储地址] 74 | git config --global user.[域名].name [用户名] # 也可以不指定域名直接写 user.name ,但不建议写全局 75 | git config --global user.[域名].email [邮箱] # 也可以不指定域名直接写 user.email ,但不建议写全局 76 | git config --global credential.[域名].helper "store --file $GIT_CREDENTIAL_FILE" # 也可以不指定域名直接写 credential.helper ,但不建议写全局 77 | 78 | ### protocol 注意区分http和https,注意不能有多余的空格 79 | echo "protocol=http 80 | host=[域名] 81 | username=[用户名] 82 | password=[密码]" | git credential-store --file $GIT_CREDENTIAL_FILE store 83 | 84 | chmod 600 [密码文件存储地址] 85 | 86 | # ====== 地址别名(共享鉴权配置) ====== 87 | git config --global --unset-all url.[Git地址].insteadOf || true 88 | git config --add --global url.[Git地址前缀].insteadOf "[Git别名地址前缀]" 89 | # git config --global credential.git@github.com.helper "store --file $GIT_CREDENTIAL_FILE" 90 | # git config --global --unset-all url.git@github.com:.insteadOf || true 91 | # git config --add --global url.git@github.com:.insteadOf "https://github.com.com/" 92 | 93 | # 以下环境变量可能会影响鉴权配置: 94 | # https://git-scm.com/docs/git-config#_environment 95 | 96 | # Linux XDG目录规范(https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html) 97 | # https://git-scm.com/docs/git-config#Documentation/git-config.txt---global 98 | echo "XDG_CONFIG_HOME=$XDG_CONFIG_HOME" # 默认值 $HOME/.config 99 | # https://git-scm.com/docs/git-config#Documentation/git-config.txt---fileconfig-file 100 | echo "GIT_CONFIG=$GIT_CONFIG" # .git/config 101 | echo "GIT_CONFIG_GLOBAL=$GIT_CONFIG_GLOBAL" 102 | echo "GIT_CONFIG_SYSTEM=$GIT_CONFIG_SYSTEM" 103 | echo "GIT_CONFIG_NOSYSTEM=$GIT_CONFIG_NOSYSTEM" 104 | -------------------------------------------------------------------------------- /Others/git-mirror.md: -------------------------------------------------------------------------------- 1 | 新建同步仓库 2 | ============ 3 | 4 | ```bash 5 | git clone --mirror https://github.com/atframework/atframe_utils.git atframe_utils 6 | cd UnrealEngine 7 | git push --mirror https://gitlab.com/atframework/atframe_utils.git 8 | ``` 9 | 10 | 更新同步仓库 11 | ============ 12 | 13 | ```bash 14 | cd atframe_utils 15 | git remote update 16 | git push --mirror https://gitlab.com/atframework/atframe_utils.git 17 | ``` 18 | 19 | 手动指定更新的引用 20 | ============ 21 | 22 | ```bash 23 | cd atframe_utils 24 | git remote update 25 | # git show-ref --head 26 | git push --progress --prune --force https://gitlab.com/atframework/atframe_utils.git "+refs/heads/*:refs/heads/*" "+refs/tags/*:refs/tags/*" 27 | ``` 28 | 29 | CI示例 30 | ============ 31 | 32 | ```bash 33 | export LANG=en_US.UTF-8 34 | export LANGUAGE=en_US.UTF-8 35 | export LC_ALL=en_US.UTF-8 36 | 37 | mkdir ~/.ssh -p; 38 | chmod 700 ~/.ssh; 39 | 40 | # mkdir -p ~/.ssh/.git-config ; 41 | # export XDG_CONFIG_HOME=$HOME/.ssh/.git-config ; 42 | # chmod 700 ~/.ssh/.git-config ; 43 | 44 | echo "-----BEGIN OPENSSH PRIVATE KEY----- 45 | 私钥内容 46 | -----END OPENSSH PRIVATE KEY-----" > ~/.ssh/id_rsa.ci ; 47 | 48 | chmod 600 ~/.ssh/id_rsa.ci; 49 | 50 | for PENDING_TO_KILL in $(ps --sort start_time -u $(whoami) -o pid,state,etimes,start_time,command | grep "ssh-agent" | grep -v grep | awk '{if($3 > 259200) { print $1;}}') ; do 51 | kill $PENDING_TO_KILL ; 52 | done 53 | 54 | eval $(timeout 3h ssh-agent); 55 | 56 | ssh-add ~/.ssh/id_rsa.ci; 57 | 58 | export GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o Port=22 -o User=owentou -o IdentityFile=$HOME/.ssh/id_rsa.ci" ; 59 | 60 | # git config --global --unset-all url.git@gitlab.com:.insteadOf || true 61 | # git config --add --global url.git@gitlab.com:.insteadOf "https://gitlab.com/" 62 | 63 | echo " 64 | https://github.com/Tencent/rapidjson.git git@gitlab.com:atframework/rapidjson.git 65 | https://github.com/lua/lua.git git@gitlab.com:atframework/lua.git 66 | https://github.com/warmcat/libwebsockets.git git@gitlab.com:atframework/libwebsockets.git 67 | https://github.com/libuv/libuv.git git@gitlab.com:atframework/libuv.git 68 | https://github.com/protocolbuffers/protobuf.git git@gitlab.com:atframework/protobuf.git 69 | https://github.com/google/flatbuffers.git git@gitlab.com:atframework/flatbuffers.git 70 | https://github.com/ARMmbed/mbedtls.git git@gitlab.com:atframework/mbedtls.git 71 | https://github.com/jemalloc/jemalloc.git git@gitlab.com:atframework/jemalloc.git 72 | https://github.com/openssl/openssl.git git@gitlab.com:atframework/openssl.git 73 | https://github.com/libressl-portable/portable.git git@gitlab.com:atframework/libressl.git 74 | https://github.com/git/git.git git@gitlab.com:atframework/git.git 75 | " | while read line; do 76 | REPOS=($line); 77 | if [ ${#REPOS[@]} -lt 2 ]; then 78 | continue; 79 | fi 80 | 81 | DIRNAME=$(basename ${REPOS[0]}) ; 82 | if [[ ! -e "$DIRNAME" ]]; then 83 | mkdir "$DIRNAME"; 84 | cd "$DIRNAME"; 85 | git init --bare ; 86 | git remote add origin ${REPOS[0]} ; 87 | else 88 | cd "$DIRNAME"; 89 | fi 90 | 91 | git fetch --prune --prune-tags origin "+refs/heads/*:refs/heads/*" "+refs/tags/*:refs/tags/*" ; 92 | 93 | HAS_FAILED_REFS=0; 94 | 95 | echo "" > ../git-push.log ; 96 | git push --progress --prune --force ${REPOS[1]} "+refs/heads/*:refs/heads/*" "+refs/tags/*:refs/tags/*" 2>../git-push.log || HAS_FAILED_REFS=1; 97 | 98 | if [[ $HAS_FAILED_REFS -ne 0 ]]; then 99 | cat ../git-push.log ; 100 | for BAD_REF_NAME in $(cat ../git-push.log | grep "remote rejected" | awk '{print $4}'); do 101 | BAD_REF_PATH=$(git show-ref | grep "$BAD_REF_NAME\$" | awk '{print $2}'); 102 | if [[ ! -z "$BAD_REF_PATH" ]]; then 103 | git update-ref -d "$BAD_REF_PATH" ; 104 | fi 105 | done 106 | 107 | git push --progress --prune --force ${REPOS[1]} "+refs/heads/*:refs/heads/*" "+refs/tags/*:refs/tags/*" ; 108 | else 109 | cat ../git-push.log ; 110 | fi 111 | 112 | cd .. 113 | done; 114 | 115 | ssh-agent -k ; 116 | ``` 117 | -------------------------------------------------------------------------------- /Others/lets_encrypt_ssl_cert/README.md: -------------------------------------------------------------------------------- 1 | # Let's Encrypt 使用说明和常用配置 2 | 3 | Let's Encrypt 官方网站 https://letsencrypt.org/ 4 | 5 | 6 | # certbot 7 | 现在Let's Encrypt正式开始使用[**certbot**](https://certbot.eff.org)来生成证书 8 | 9 | 官网: https://certbot.eff.org 10 | 11 | GitHub: https://github.com/certbot/certbot 12 | 13 | ## 初始化 14 | 15 | 参考 [init.sh](init.sh) 脚本,这是CentOS 7的脚本,其他系统类似,查看[官网](https://certbot.eff.org)可以获取安装[**certbot**](https://certbot.eff.org)的方法 16 | 17 | ## 续期脚本 18 | 19 | 参考 [renew.sh](renew.sh) 脚本,这是CentOS 7+nginx的脚本,其他系统类似。 20 | 21 | 请修改网站目录和证书拷贝脚本以适应自己的环境 22 | 23 | # 关于续期 24 | 默认情况下renew命令只在证书快过期的时候(现在是剩余有效期30天内)允许续期,其他情况跳过,所以最好定时执行续期脚本。建议是一周或每天一次 25 | 26 | 1. crontab -e 27 | 2. 17 3 * * 1,4 /home/website/letsencrypt/renew.sh 28 | 3. 注意权限问题 29 | 30 | # 限制 31 | 对每天每个域名,每3小时每台机器,一个域名最多签证的子域名数量等都有限制 32 | 33 | 详情见: https://letsencrypt.org/docs/rate-limits/ 34 | 35 | 截止至目前,限制如下: 36 | 37 | + 吊销证书不会重置速率限制 38 | 39 | 限制项目 | 限制量 | 计量周期 40 | -------------------------------------|--------|-------- 41 | 每个证书的域名数量 | 100 | 永久 42 | 每个注册域名每周处理证书数量 | 50 | 一周 43 | 每个完整域名每周处理证书数量 | 5 | 一周 44 | 每个周每账户(ACME)自动认证数 | 300 | 一周 45 | 每个账户最多验证失败次数 | 5 | 一小时 46 | 每个IP创建个账户数 | 10 | 三小时 47 | 每个IPv6 /48 地址段创建个账户数 | 500 | 三小时 48 | ACME v2 API用户每个帐户创建新订单数 | 300 | 三小时 49 | -------------------------------------------------------------------------------- /Others/lets_encrypt_ssl_cert/acme-init.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # see https://github.com/Neilpang/acme.sh for detail 4 | # see https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert 5 | 6 | # curl https://get.acme.sh | sh 7 | 8 | # export CF_Key="GOT TOKEN FROM https://dash.cloudflare.com/profile" 9 | # export CF_Email="admin@owent.net" 10 | 11 | # In order to use the new token, the token currently needs access read access to Zone.Zone, and write access to Zone.DNS, across all Zones. 12 | export CF_Token="GOT TOKEN FROM https://dash.cloudflare.com/profile" ; 13 | export CF_Account_ID="6896d432a993ce19d72862cc8450db09" ; 14 | 15 | # Get CF_Account_ID using 16 | # curl -X GET "https://api.cloudflare.com/client/v4/zones" \ 17 | # -H "Content-Type:application/json" \ 18 | # -H "Authorization: Bearer $CF_Token" 19 | # Or add read access to Account.Account Settings and then using 20 | # curl -X GET "https://api.cloudflare.com/client/v4/accounts" \ 21 | # -H "Content-Type: application/json" \ 22 | # -H "Authorization: Bearer $CF_Token" 23 | 24 | 25 | DOMAIN_NAME=owent.net; 26 | ADMIN_EMAIL=$CF_Email; 27 | INSTALL_CERT_DIR=/home/website/ssl; 28 | 29 | ~/.acme.sh/acme.sh --issue \ 30 | -d $DOMAIN_NAME \ 31 | -d "*.$DOMAIN_NAME" \ 32 | -d "atframe.work" \ 33 | -d "*.atframe.work" \ 34 | -d "r-ci.com" \ 35 | -d "*.r-ci.com" \ 36 | -d "w-oa.com" \ 37 | -d "*.w-oa.com" \ 38 | -d "f-ha.com" \ 39 | -d "*.f-ha.com" \ 40 | -d "x-ha.com" \ 41 | -d "*.x-ha.com" \ 42 | -d "g-ha.com" \ 43 | -d "*.g-ha.com" \ 44 | --dns dns_cf \ 45 | --keylength ec-256 ; # 2048, 3072, 4096, 8192 or ec-256, ec-384 46 | 47 | cp -f ~/.acme.sh/${DOMAIN_NAME}_*/* $INSTALL_CERT_DIR; 48 | chown nginx:users -R $INSTALL_CERT_DIR; 49 | 50 | 51 | # ~/.acme.sh/acme.sh --cron; 52 | -------------------------------------------------------------------------------- /Others/lets_encrypt_ssl_cert/acme-renew.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # see https://github.com/Neilpang/acme.sh for detail 4 | # see https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert 5 | 6 | # curl https://get.acme.sh | sh 7 | 8 | DOMAIN_NAME=owent.net; 9 | INSTALL_CERT_DIR=/home/website/ssl; 10 | 11 | # using a custom port 12 | # ACME_SH_HTTP_PROT=88; 13 | # firewall-cmd --add-port=tcp/$ACME_SH_TLS_PROT/tcp; 14 | # firewall-cmd --reload; 15 | 16 | # using a custom tls port 17 | # ACME_SH_TLS_PROT=8443; 18 | # firewall-cmd --add-port=tcp/$ACME_SH_TLS_PROT/tcp; 19 | # firewall-cmd --reload; 20 | 21 | ~/.acme.sh/acme.sh --renew-all --ecc ; 22 | 23 | cp -f ~/.acme.sh/${DOMAIN_NAME}_*/* $INSTALL_CERT_DIR; 24 | chown nginx:users -R $INSTALL_CERT_DIR; 25 | 26 | systemctl reload nginx; 27 | 28 | # using a custom port 29 | # firewall-cmd --add-port=$ACME_SH_HTTP_PROT/tcp; 30 | # firewall-cmd --reload; 31 | 32 | # using a custom tls port 33 | # firewall-cmd --add-port=$ACME_SH_TLS_PROT/tcp; 34 | # firewall-cmd --reload; 35 | -------------------------------------------------------------------------------- /Others/lets_encrypt_ssl_cert/init.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # see https://certbot.eff.org/ for detail 4 | 5 | CERT_DIR=/etc/letsencrypt/live; 6 | DOMAIN_NAME=owent.net; 7 | ADMIN_EMAIL=admin@owent.net; 8 | 9 | yum install epel-release; 10 | yum install certbot; 11 | 12 | certbot certonly -m $ADMIN_EMAIL --webroot \ 13 | -w /home/website/owent_blog -d owent.net -d www.owent.net \ 14 | -w /home/website/angel_blog -d angel.owent.net -d gf.owent.net \ 15 | ; 16 | 17 | cp -f $CERT_DIR/$DOMAIN_NAME/* /home/website/ssl/angel; 18 | 19 | chown nginx:users -R /home/website/ssl/angel; 20 | -------------------------------------------------------------------------------- /Others/lets_encrypt_ssl_cert/renew.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | CERT_DIR=/etc/letsencrypt/live; 4 | DOMAIN_NAME=owent.net; 5 | 6 | certbot renew --quiet; 7 | 8 | cp $CERT_DIR/$DOMAIN_NAME/* /home/website/ssl/angel; 9 | 10 | chown nginx:users -R /home/website/ssl/angel; 11 | 12 | systemctl reload nginx; 13 | -------------------------------------------------------------------------------- /Others/run_as_admin.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | :AQUIRE_ADMINISTRATOR_PRIVILEGE 4 | rem 获取管理员权限 5 | rem 首先在%windir%尝试新建文件夹,查看是否有管理员权限 6 | rem 如果新建文件夹成功则删除文件夹,继续操作 7 | rem 如果失败文件夹则新建vbs脚本,通过UAC窗口,获取管理员权限 8 | rem 运行脚本后,删除vbs脚本 9 | md "%windir%\TestAdminPrivilege" > nul 10 | cls 11 | if '%errorlevel%' == '0' ( 12 | rmdir "%windir%\TestAdminPrivilege" & goto gotAdmin 13 | ) else (goto UACPrompt) 14 | :UACPrompt 15 | echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" 16 | echo UAC.ShellExecute %0, "", "", "runas", 1 >> "%temp%\getadmin.vbs" 17 | "%temp%\getadmin.vbs" 18 | exit /B 19 | :gotAdmin 20 | if exist "%temp%\getadmin.vbs" (del "%temp%\getadmin.vbs") 21 | CD /D "%~dp0" 22 | 23 | rem run your code here -------------------------------------------------------------------------------- /Others/setup_swapfile.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # @see https://www.vultr.com/docs/setup-swap-file-on-linux 4 | WORKING_DIR="$PWD"; 5 | 6 | SWAPFILE_PATH=/swapfile ; 7 | SWAPFILE_COUNT=1M; 8 | SWAPFILE_BS=2048; 9 | FSTAB_PATH=/etc/fstab ; 10 | 11 | # try to detect physic memory 12 | PHY_MEM=$(cat /proc/meminfo | grep MemTotal | grep -v grep | awk '{print $2}'); 13 | if [ ! -z "$PHY_MEM" ]; then 14 | ((PHY_MEM=$PHY_MEM/1024)); 15 | ((SWAPFILE_BS=$PHY_MEM*3/2)); 16 | echo "Detect physic memory=$PHY_MEM MB"; 17 | fi 18 | 19 | while getopts "p:h:b:c:" arg; do 20 | case $arg in 21 | c) 22 | SWAPFILE_COUNT="$OPTARG"; 23 | ;; 24 | b) 25 | SWAPFILE_BS="$OPTARG"; 26 | ;; 27 | p) 28 | SWAPFILE_PATH="$OPTARG"; 29 | ;; 30 | h) 31 | echo "usage: $0 [options] 32 | options: 33 | -c path of php.ini(default: $SWAPFILE_COUNT) 34 | -b dir path of php.d(default: $SWAPFILE_BS) 35 | -p path of php-fpm.conf(default: $SWAPFILE_PATH) 36 | -h help message 37 | "; 38 | exit 0; 39 | ;; 40 | ?) #当有不认识的选项的时候arg为? 41 | echo "unkonw argument $arg"; 42 | ;; 43 | esac 44 | done 45 | 46 | echo "Try to setup swapfile \"$SWAPFILE_PATH\" with block number = $SWAPFILE_COUNT and block size = $SWAPFILE_BS."; 47 | 48 | mkdir -p "$(dirname $SWAPFILE_PATH)"; 49 | 50 | swapoff -a ; 51 | dd if=/dev/zero of="$SWAPFILE_PATH" bs=$SWAPFILE_BS count=$SWAPFILE_COUNT ; 52 | chmod 600 "$SWAPFILE_PATH"; 53 | mkswap "$SWAPFILE_PATH" ; 54 | swapon "$SWAPFILE_PATH" ; 55 | 56 | # auto setup 57 | sed -i "/\\bswap\\b/d" "$FSTAB_PATH"; 58 | echo "$SWAPFILE_PATH none swap sw 0 0" >> "$FSTAB_PATH"; 59 | 60 | swapon -s ; 61 | echo "vm.swappiness=$(cat /proc/sys/vm/swappiness)" ; 62 | echo "Setup swapfile \"$SWAPFILE_PATH\" done. now you can run"; 63 | echo -e "\techo 'sysctl vm.swappiness=PERCENT' > /etc/sysctl.d/99-swapfile.conf"; 64 | echo -e "\tsysctl -p /etc/sysctl.d/99-swapfile.conf"; 65 | echo "to control swappiness policy"; 66 | # sysctl vm.swappiness=10 ; 67 | # cat /proc/sys/vm/swappiness 68 | 69 | free -h ; -------------------------------------------------------------------------------- /Others/x509_ssl_cert/cfssl-ca-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "signing": { 3 | "default": { 4 | "expiry": "175200h" 5 | }, 6 | "profiles": { 7 | "server": { 8 | "expiry": "175200h", 9 | "usages": [ 10 | "signing", 11 | "key encipherment", 12 | "server auth" 13 | ] 14 | }, 15 | "client": { 16 | "expiry": "175200h", 17 | "usages": [ 18 | "signing", 19 | "key encipherment", 20 | "client auth" 21 | ] 22 | }, 23 | "peer": { 24 | "expiry": "175200h", 25 | "usages": [ 26 | "signing", 27 | "key encipherment", 28 | "server auth", 29 | "client auth" 30 | ] 31 | } 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /Others/x509_ssl_cert/cfssl-csr.json: -------------------------------------------------------------------------------- 1 | { 2 | "key": { 3 | "algo": "ecdsa", 4 | "size": 384 5 | }, 6 | "CN": "owent", 7 | "hosts": [ 8 | "owent.net", 9 | "*.owent.net", 10 | "atframe.work", 11 | "w-oa.com", 12 | "*.w-oa.com", 13 | "r-ci.com", 14 | "*.r-ci.com", 15 | "x-ha.com", 16 | "*.x-ha.com", 17 | "g-ha.com", 18 | "*.g-ha.com", 19 | "f-ha.com", 20 | "172.18.1.1", 21 | "172.18.1.10", 22 | "172.18.10.1", 23 | "172.18.31.1", 24 | "172.31.1.1", 25 | "172.20.1.1" 26 | ], 27 | "names": [ 28 | { 29 | "C": "CN", 30 | "L": "ShangHai", 31 | "O": "OWenT", 32 | "OU": "OWenT", 33 | "ST": "ShangHai" 34 | } 35 | ] 36 | } 37 | -------------------------------------------------------------------------------- /Others/x509_ssl_cert/cfssl_cert.sh: -------------------------------------------------------------------------------- 1 | # 默认配置见 cfssl-ca-config.json 和 cfssl-csr.json 2 | 3 | CERT_PROFILE_NAME=peer; 4 | CERT_NAME=peer; 5 | CERT_PROFILE_PATH=cfssl-ca-config.json; 6 | CERT_CONF_PATH=cfssl-csr.json; 7 | 8 | #CERT_RSA_CRYPTO_LEN=384; # 256,384,521 for ecdsa 9 | #CERT_ECC_CURVE=ecdsa; # ecdsa,rsa 10 | CERT_CA_NAME=ca; 11 | 12 | while getopts "c:f:hp:r:s:" OPTION; do 13 | case $OPTION in 14 | a) 15 | CERT_CA_NAME="$OPTARG"; 16 | ;; 17 | c) 18 | CERT_NAME="$OPTARG"; 19 | ;; 20 | f) 21 | CERT_CONF_PATH="$OPTARG"; 22 | ;; 23 | h) 24 | echo "usage: $0 [options]"; 25 | echo "options:"; 26 | echo "-a=[ca cert name] set ca cert name(default=$CERT_CA_NAME)."; 27 | echo "-c=[cert name] set cert name(default=$CERT_NAME)."; 28 | echo "-f=[configure file] set configure file(default=$CERT_CONF_PATH)."; 29 | echo "-h help message."; 30 | echo "-p=[profile name] set cert profile name(default=$CERT_PROFILE_NAME)."; 31 | echo "-r=[profiles file] set configure file(default=$CERT_PROFILE_PATH)."; 32 | echo "-s=[server cert name] set server cert name(default=$CERT_SVR_NAME)."; 33 | exit 0; 34 | ;; 35 | p) 36 | CERT_PROFILE_NAME="$OPTARG"; 37 | ;; 38 | r) 39 | CERT_PROFILE_PATH="$OPTARG"; 40 | ;; 41 | s) 42 | CERT_SVR_NAME="$OPTARG"; 43 | ;; 44 | ?) #当有不认识的选项的时候arg为? 45 | echo "unkonw argument detected"; 46 | exit 1; 47 | ;; 48 | esac 49 | done 50 | 51 | # 生成CA证书文件 52 | if [[ -e $CERT_CA_NAME.key ]] && [[ -e $CERT_CA_NAME.crt ]]; then 53 | CERT_CA_KEY_PATH=$CERT_CA_NAME.key; 54 | CERT_CA_CERT_PATH=$CERT_CA_NAME.crt; 55 | elif [[ -e $CERT_CA_NAME-key.pem ]] && [[ -e $CERT_CA_NAME.pem ]]; then 56 | CERT_CA_KEY_PATH=$CERT_CA_NAME-key.pem; 57 | CERT_CA_CERT_PATH=$CERT_CA_NAME.pem; 58 | else 59 | echo "generate ca cert"; 60 | cfssl genkey -config=$CERT_PROFILE_PATH -initca $CERT_CONF_PATH | cfssljson -bare $CERT_CA_NAME ; 61 | CERT_CA_KEY_PATH=$CERT_CA_NAME-key.pem; 62 | CERT_CA_CERT_PATH=$CERT_CA_NAME.pem; 63 | fi 64 | 65 | if [[ -e $CERT_NAME.key ]] && [[ -e $CERT_NAME.crt ]]; then 66 | echo "$CERT_NAME.key and $CERT_NAME.crt found, skip generate cert". 67 | elif [[ -e $CERT_NAME-key.pem ]] && [[ -e $CERT_NAME.pem ]]; then 68 | echo "$CERT_NAME-key.pem and $CERT_NAME.pem found, skip generate cert". 69 | else 70 | echo "Generate $CERT_NAME-key.pem and $CERT_NAME.pem with ca $CERT_CA_CERT_PATH and $CERT_CA_KEY_PATH;"; 71 | cfssl gencert -config=$CERT_PROFILE_PATH -profile=$CERT_PROFILE_NAME -ca $CERT_CA_CERT_PATH -ca-key $CERT_CA_KEY_PATH cfssl-csr.json | cfssljson -bare $CERT_NAME 72 | fi -------------------------------------------------------------------------------- /Others/x509_ssl_cert/mk_ssl_cert.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owent/bash-shell/76423dc9b75826db8c4012e716bbcc88c34e7506/Others/x509_ssl_cert/mk_ssl_cert.sh -------------------------------------------------------------------------------- /Redmine Installer/install/README.md: -------------------------------------------------------------------------------- 1 | 2 | 软件源 3 | ====== 4 | 1. using https://ruby.taobao.org/ as gem source(@see https://ruby.taobao.org/) 5 | 6 | ```bash 7 | gem sources --remove https://rubygems.org/ 8 | gem sources -a https://ruby.taobao.org/ 9 | gem sources -l 10 | ``` 11 | 12 | 2. edit Gemfile and change https://rubygems.org/ to https://ruby.taobao.org/ or http://rubygems.org/ 13 | 14 | 安装 15 | ====== 16 | ```bash 17 | 18 | # 初始化命令 19 | bundle exec rake generate_secret_token 20 | 21 | RAILS_ENV=production bundle exec rake db:migrate 22 | 23 | RAILS_ENV=production REDMINE_LANG=zh bundle exec rake redmine:load_default_data 24 | 25 | # 权限设置 26 | mkdir -p tmp tmp/pdf public/plugin_assets 27 | sudo chown -R redmine:redmine files log tmp public/plugin_assets 28 | sudo chmod -R 755 files log tmp public/plugin_assets 29 | 30 | ``` 31 | 32 | 升级 33 | ====== 34 | ```bash 35 | 36 | # 1. 下载源码包并解压到新目录 37 | # 2. 复制config目录中涉及的几个配置文件(注意不要用老的config/settings.yml覆盖新的) 38 | # 3. 复制插件 39 | # 4. 复制(迁移)files、log、tmp目录,复制(迁移)public/themes目录 40 | 41 | # 升级安装(有ImageMagick ) 42 | bundle install --without development test 43 | 44 | # 升级安装(无ImageMagick ) 45 | bundle install --without development test rmagick 46 | 47 | # 生成密钥 48 | bundle exec rake generate_secret_token 49 | 50 | # 升级数据库和插件数据库 51 | bundle exec rake db:migrate RAILS_ENV=production 52 | 53 | bundle exec rake redmine:plugins:migrate RAILS_ENV=production 54 | 55 | # 清理临时目录 56 | 57 | bundle exec rake tmp:cache:clear tmp:sessions:clear RAILS_ENV=production 58 | 59 | # 权限设置 60 | mkdir -p tmp tmp/pdf public/plugin_assets 61 | sudo chown -R redmine:redmine files log tmp public/plugin_assets 62 | sudo chmod -R 755 files log tmp public/plugin_assets 63 | 64 | ``` 65 | 66 | 测试 67 | ====== 68 | ```bash 69 | bundle exec rails server webrick -e production 70 | ``` 71 | 72 | 73 | 配置Web服务 74 | ====== 75 | 76 | thin 77 | ------ 78 | 79 | ``bash 80 | # 在redmine目录的Gemfile中添加 81 | gem "thin" 82 | 83 | # 回到redmine根目录 84 | bundle install thin; 85 | # 注意不要直接 gem install thin , 会导致依赖关系错乱 86 | 87 | thin install; 88 | thin config -C /etc/thin/redmine.yml -c /usr/local/redmine -e production --server 4; 89 | cp -f etc/thin/redmine.yml /etc/thin/redmine.yml 90 | 91 | mkdir -p /var/run/thin; 92 | chown nginx:users /var/run/thin -R 93 | 94 | # 启动脚本 95 | thin start -C /etc/thin/redmine.yml 96 | 97 | # 自启动systemd配置见 usr/lib/systemd/system 98 | ``` 99 | 100 | 备份 101 | ====== 102 | ```bash 103 | # Database 104 | /usr/bin/mysqldump -u -p | gzip > /path/to/backup/db/redmine_`date +%y_%m_%d`.gz 105 | 106 | # Attachments 107 | rsync -a /path/to/redmine/files /path/to/backup/files 108 | ``` 109 | -------------------------------------------------------------------------------- /Redmine Installer/install/config/additional_environment.rb: -------------------------------------------------------------------------------- 1 | # Copy this file to additional_environment.rb and add any statements 2 | # that need to be passed to the Rails::Initializer. `config` is 3 | # available in this context. 4 | # 5 | # Example: 6 | # 7 | # config.log_level = :debug 8 | # ... 9 | # 10 | 11 | config.logger = Logger.new('/home/website/redmine.root/log/info.log', 2, 1000000) 12 | config.logger.level = Logger::INFO 13 | -------------------------------------------------------------------------------- /Redmine Installer/install/config/database.yml: -------------------------------------------------------------------------------- 1 | # Default setup is given for MySQL with ruby1.9. 2 | # Examples for PostgreSQL, SQLite3 and SQL Server can be found at the end. 3 | # Line indentation must be 2 spaces (no tabs). 4 | 5 | production: 6 | adapter: mysql2 7 | database: redmine 8 | host: localhost 9 | username: redmine 10 | password: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 11 | encoding: utf8 12 | 13 | #development: 14 | # adapter: mysql2 15 | # database: redmine_development 16 | # host: localhost 17 | # username: root 18 | # password: "" 19 | # encoding: utf8 20 | 21 | # Warning: The database defined as "test" will be erased and 22 | # re-generated from your development database when you run "rake". 23 | # Do not set this db to the same as development or production. 24 | #test: 25 | # adapter: mysql2 26 | # database: redmine_test 27 | # host: localhost 28 | # username: root 29 | # password: "" 30 | # encoding: utf8 31 | 32 | # PostgreSQL configuration example 33 | #production: 34 | # adapter: postgresql 35 | # database: redmine 36 | # host: localhost 37 | # username: postgres 38 | # password: "postgres" 39 | 40 | # SQLite3 configuration example 41 | #production: 42 | # adapter: sqlite3 43 | # database: db/redmine.sqlite3 44 | 45 | # SQL Server configuration example 46 | #production: 47 | # adapter: sqlserver 48 | # database: redmine 49 | # host: localhost 50 | # username: jenkins 51 | # password: jenkins 52 | -------------------------------------------------------------------------------- /Redmine Installer/install/etc/nginx/conf.d/thin.redmine.conf: -------------------------------------------------------------------------------- 1 | upstream thin_redmine { 2 | server unix:/var/run/thin/thin.redmine.0.sock; 3 | server unix:/var/run/thin/thin.redmine.1.sock; 4 | server unix:/var/run/thin/thin.redmine.2.sock; 5 | server unix:/var/run/thin/thin.redmine.3.sock; 6 | } 7 | 8 | server { 9 | listen *:80; 10 | server_name work.muyo.co; 11 | root /home/website/redmine.root/public; 12 | 13 | ## Individual nginx logs for this GitLab vhost 14 | access_log /home/nginx/log/thin_redmine_access.log; 15 | error_log /home/nginx/log/thin_redmine_error.log; 16 | 17 | # Send sensitive stuff via https 18 | rewrite ^/login(.*) https://work.muyo.co$request_uri permanent; 19 | rewrite ^/my/account(.*) https://work.muyo.co$request_uri permanent; 20 | rewrite ^/my/password(.*) https://work.muyo.co$request_uri permanent; 21 | rewrite ^/admin(.*) https://work.muyo.co$request_uri permanent; 22 | 23 | location / { 24 | ## Serve static files from defined root folder. 25 | ## @gitlab is a named location for the upstream fallback, see below. 26 | try_files $uri $uri/index.html $uri.html @thin_redmine; 27 | } 28 | 29 | ## If a file, which is not found in the root folder is requested, 30 | ## then the proxy passes the request to the upsteam (gitlab unicorn). 31 | location @thin_redmine { 32 | proxy_redirect off; 33 | 34 | proxy_set_header Host $http_host; 35 | proxy_set_header X-Real-IP $remote_addr; 36 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 37 | proxy_set_header X-Forwarded-Proto $scheme; 38 | 39 | client_max_body_size 10m; 40 | client_body_buffer_size 128k; 41 | 42 | proxy_connect_timeout 90; 43 | proxy_send_timeout 90; 44 | proxy_read_timeout 90; 45 | 46 | proxy_buffer_size 4k; 47 | proxy_buffers 4 32k; 48 | proxy_busy_buffers_size 64k; 49 | proxy_temp_file_write_size 64k; 50 | 51 | proxy_pass http://thin_redmine; 52 | } 53 | 54 | error_page 404 /404.html; 55 | error_page 500 502 503 504 /500.html; 56 | } 57 | 58 | server { 59 | listen *:443 ssl spdy; 60 | server_name work.muyo.co; 61 | root /home/website/redmine.root/public; 62 | 63 | ssl on; 64 | ssl_certificate /home/website/ssl/server.crt; 65 | ssl_certificate_key /home/website/ssl/server.key; 66 | ssl_ciphers 'AES256+EECDH:AES256+EDH'; 67 | ssl_prefer_server_ciphers on; 68 | ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 69 | ssl_session_cache builtin:1000 shared:SSL:10m; 70 | ssl_session_timeout 5m; 71 | add_header Strict-Transport-Security max-age=63072000; 72 | add_header X-Frame-Options SAMEORIGIN; 73 | add_header X-Content-Type-Options nosniff; 74 | 75 | ## Individual nginx logs for this GitLab vhost 76 | access_log /home/nginx/log/thin_redmine_access.log; 77 | error_log /home/nginx/log/thin_redmine_error.log; 78 | 79 | proxy_redirect off; 80 | 81 | location / { 82 | ## Serve static files from defined root folder. 83 | try_files $uri $uri/index.html $uri.html @thin_redmine; 84 | } 85 | 86 | ## If a file, which is not found in the root folder is requested, 87 | location @thin_redmine { 88 | proxy_redirect off; 89 | 90 | proxy_set_header Host $http_host; 91 | proxy_set_header X-Real-IP $remote_addr; 92 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 93 | proxy_set_header X-Forwarded-Proto $scheme; 94 | 95 | client_max_body_size 10m; 96 | client_body_buffer_size 128k; 97 | 98 | proxy_connect_timeout 90; 99 | proxy_send_timeout 90; 100 | proxy_read_timeout 90; 101 | 102 | proxy_buffer_size 4k; 103 | proxy_buffers 4 32k; 104 | proxy_busy_buffers_size 64k; 105 | proxy_temp_file_write_size 64k; 106 | 107 | proxy_pass http://thin_redmine; 108 | } 109 | 110 | error_page 404 /404.html; 111 | error_page 500 502 503 504 /500.html; 112 | } 113 | -------------------------------------------------------------------------------- /Redmine Installer/install/etc/thin/redmine.yml: -------------------------------------------------------------------------------- 1 | --- 2 | chdir: /usr/local/redmine 3 | group: users 4 | user: nginx 5 | environment: production 6 | socket: /var/run/thin/thin.redmine.sock 7 | timeout: 30 8 | log: /home/website/redmine.root/log/thin.log 9 | pid: tmp/pids/thin.pid 10 | max_conns: 1024 11 | max_persistent_conns: 100 12 | require: [] 13 | wait: 30 14 | threadpool_size: 20 15 | servers: 4 16 | daemonize: true 17 | -------------------------------------------------------------------------------- /Redmine Installer/install/init.sql: -------------------------------------------------------------------------------- 1 | CREATE DATABASE redmine CHARACTER SET utf8; 2 | CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; 3 | GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost'; 4 | -------------------------------------------------------------------------------- /Redmine Installer/install/usr/lib/systemd/system/redmine.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=redmine - workflow 3 | Documentation=http://www.redmine.org/projects/redmine/wiki 4 | After=network.target remote-fs.target nss-lookup.target 5 | 6 | [Service] 7 | Type=forking 8 | PIDFile=/usr/local/redmine/tmp/pids/thin.0.pid 9 | ExecStart=/usr/local/bin/thin start -C /etc/thin/redmine.yml 10 | ExecStop=/usr/local/bin/thin stop -C /etc/thin/redmine.yml 11 | PrivateTmp=true 12 | 13 | [Install] 14 | WantedBy=multi-user.target 15 | -------------------------------------------------------------------------------- /Redmine Installer/style/add.css: -------------------------------------------------------------------------------- 1 | /** ==================== fix style of theme Pixel-cookers =============== **/ 2 | #top-menu { left: 0px; } 3 | 4 | #main-menu ul li a.*:before { 5 | content: counter(menu-list-item-flag, disc); 6 | } 7 | 8 | /** ==================== added by owent =============== **/ 9 | body { 10 | font-size: 14px; 11 | font-family: 'Anonymous Pro', 'DejaVu Sans Mono', 'DejaVu Serif', Arial, 'Microsoft YaHei', Verdana, 'BitStream vera Sans', Tahoma, Helvetica, sans-serif !important; 12 | } 13 | 14 | .description * { 15 | font-size: 16px; 16 | } 17 | 18 | .subject { 19 | font-size: large !important; 20 | } 21 | 22 | .subject a { 23 | font-weight: bolder; 24 | color: #800080 !important; 25 | } 26 | 27 | .subject h3 { 28 | font-weight: bolder; 29 | color: #800080; 30 | font-size: xx-large; 31 | } 32 | 33 | .tracker { 34 | color: #800000 !important; 35 | } 36 | 37 | .priority { 38 | font-weight: bold; 39 | color: #404000; 40 | } 41 | 42 | table.list thead th { 43 | font-size: 14px !important; 44 | } 45 | 46 | table.list td, table.list td * { 47 | font-size: larger !important; 48 | } 49 | 50 | table.list tr td.id a { 51 | color: darkblue; 52 | } 53 | 54 | #context-menu, #context-menu * { 55 | font-size: large; 56 | } 57 | 58 | #checklist p, .description>p, .description>p>strong, #issue_tree p, #relations p { 59 | padding: 5px 0 5px 10px; 60 | background-color: #C0C0C0; 61 | font-size: large; 62 | } 63 | 64 | #checklist #checklist_items li { 65 | font-size: larger; 66 | font-weight: bold; 67 | color: #6020A0; 68 | } 69 | 70 | .wiki { 71 | font-size: larger; 72 | color: Black; 73 | } 74 | 75 | .has-notes { 76 | border: 1px solid #800000; 77 | padding: 10px 5px 5px 10px; 78 | } 79 | 80 | .has-details h4, .has-details ul{ 81 | display: inline-block; 82 | } 83 | 84 | 85 | -------------------------------------------------------------------------------- /distcc/distccd.service.tmpl: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Distcc Service 3 | After=network.target 4 | Wants=network.target 5 | 6 | [Service] 7 | User=distcc 8 | Group=distcc 9 | Type=forking 10 | PIDFile=%DISTCCD_PIDFILE% 11 | ExecStart=%DISTCCD_PREFIX%/bin/distccd -p %DISTCCD_PORT% %DISTCCD_HOST_STR% -P %DISTCCD_PIDFILE% %DISTCCD_USER% --log-level=info --daemon --enable-tcp-insecure 12 | Restart=on-failure 13 | # Don't restart in the case of configuration error 14 | RestartPreventExitStatus=23 15 | 16 | [Install] 17 | WantedBy=multi-user.target 18 | -------------------------------------------------------------------------------- /distcc/generate_systemd.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ -z "$DISTCCD_PREFIX" ]; then 4 | DISTCCD_PREFIX="/data/prebuilt/distcc-3.3.2"; 5 | fi 6 | 7 | if [ -z "$DISTCCD_PORT" ]; then 8 | DISTCCD_PORT=6371; 9 | fi 10 | 11 | if [ -z "$DISTCCD_HOST" ]; then 12 | DISTCCD_HOST=(); 13 | else 14 | DISTCCD_HOST=($(echo "$DISTCCD_HOST" | awk -F "[[:blank:],;]" '{$1=$1; print $0}')); 15 | fi 16 | 17 | if [ -z "$DISTCCD_PIDFILE" ]; then 18 | DISTCCD_PIDFILE="$DISTCCD_PREFIX/run/distccd.pid"; 19 | fi 20 | 21 | # DISTCCD_USER = distcc 22 | # 23 | 24 | DISTCCD_HOST_STR=""; 25 | 26 | for HOST in ${DISTCCD_HOST[@]}; do 27 | DISTCCD_HOST_STR="$DISTCCD_HOST_STR -a $HOST"; 28 | done 29 | 30 | 31 | if [ ! -z "$DISTCCD_USER" ]; then 32 | DISTCCD_USER="--user $DISTCCD_USER"; 33 | fi 34 | 35 | TEMPLATE_CONTENT="$(cat $(dirname $0)/distccd.service.tmpl)"; 36 | 37 | # TEMPLATE_CONTENT="$(echo "$TEMPLATE_CONTENT" | perl -p -e "s;\\%DISTCCD_PREFIX\\%;$DISTCCD_PREFIX;g")"; 38 | # echo "$TEMPLATE_CONTENT" 39 | 40 | echo "$TEMPLATE_CONTENT" | perl -p -e "s;\\%DISTCCD_PREFIX\\%;$DISTCCD_PREFIX;g" | 41 | perl -p -e "s;\\%DISTCCD_PORT\\%;$DISTCCD_PORT;g" | 42 | perl -p -e "s;\\%DISTCCD_HOST_STR\\%;$DISTCCD_HOST_STR;g" | 43 | perl -p -e "s;\\%DISTCCD_USER\\%;$DISTCCD_USER;g" | 44 | perl -p -e "s;\\%DISTCCD_PIDFILE\\%;$DISTCCD_PIDFILE;g" 45 | -------------------------------------------------------------------------------- /samba/README.md: -------------------------------------------------------------------------------- 1 | # Samba 2 | 3 | 服务启动: 4 | 5 | ```bash 6 | # smb服务 7 | sudo systemctl enable smb.service 8 | sudo systemctl restart smb.service 9 | 10 | # 网络发现(NetBIOS name server to provide NetBIOS over IP naming services to clients) 11 | sudo systemctl enable nmb.service 12 | sudo systemctl restart nmb.service 13 | 14 | # 添加用户 15 | sudo smbpasswd -a root 16 | sudo smbpasswd -a admin 17 | sudo smbpasswd -a owent 18 | ``` 19 | 20 | ## Samba 服务器配置 21 | 22 | 文件: **/etc/samba/smb.conf** 23 | 24 | ``` 25 | [global] 26 | workgroup = WORKGROUP 27 | dns proxy = no 28 | log file = /data/logs/samba/%m.log # LOG 目录 29 | max log size = 1000 30 | client min protocol = SMB2 31 | server role = standalone server 32 | server services = +smb # LOG 目录 33 | passdb backend = tdbsam 34 | obey pam restrictions = yes 35 | unix password sync = yes 36 | passwd program = /usr/bin/passwd %u 37 | passwd chat = *New*UNIX*password* %n\n *ReType*new*UNIX*password* %n\n *passwd:*all*authentication*tokens*updated*successfully* 38 | pam password change = yes 39 | map to guest = Bad User # 默认的 Bad Password 会让游客也必须输入正确的用户名才能打开 40 | usershare allow guests = yes 41 | name resolve order = lmhosts bcast host wins 42 | security = user 43 | guest account = nobody 44 | guest ok = yes 45 | usershare path = /data/samba # 数据共享目录 46 | usershare max shares = 256 47 | usershare owner only = yes 48 | force create mode = 0777 49 | force directory mode = 0777 50 | # socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=2097152 SO_SNDBUF=2097152 # 连接优化 51 | socket options = TCP_NODELAY SO_RCVBUF=2097152 SO_SNDBUF=2097152 # 连接优化 52 | 53 | [share] 54 | comment = Shared Directories(Guest account: nobody) 55 | path = /data/samba 56 | browseable = yes 57 | read only = no 58 | create mask = 0777 59 | directory mask = 0777 60 | guest ok = yes 61 | 62 | [download] 63 | comment = Download Directory(Guest account: nobody) 64 | path = /data/aria2/download 65 | browseable = yes 66 | read only = no 67 | create mask = 0777 68 | directory mask = 0777 69 | guest ok = yes 70 | 71 | [data] 72 | comment = Data Directories(require login) 73 | path = /data 74 | browseable = yes 75 | read only = no 76 | create mask = 0777 77 | directory mask = 0777 78 | security = user 79 | guest ok = no 80 | valid users = admin,owent,root 81 | 82 | [printers] 83 | comment = All Printers 84 | browseable = no 85 | path = /var/spool/samba 86 | printable = yes 87 | guest ok = yes 88 | read only = yes 89 | create mask = 0700 90 | 91 | [print$] 92 | comment = Printer Drivers 93 | path = /var/lib/samba/printers 94 | browseable = yes 95 | read only = yes 96 | guest ok = yes 97 | ``` 98 | 99 | 100 | 101 | ## Windows关闭老连接 102 | 103 | 连接提示: **不允许一个用户使用一个以上用户名与一个服务器或共享资源的多重连接** 104 | 105 | 执行: 106 | 107 | ```bash 108 | net use * /del /y 109 | ``` 110 | -------------------------------------------------------------------------------- /shadowsock&kcptun/centos_7_build_ssr.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # All available environments 4 | # PREFIX 5 | # MAXFD 6 | # USER 7 | # VERSION 8 | # LIBSODIUM_VERSION 9 | # PYTHON_BIN 10 | 11 | if [ -z "$PREFIX" ]; then 12 | PREFIX="/usr/local/shadowsocksr"; 13 | fi 14 | if [ -z "$MAXFD" ]; then 15 | MAXFD=$(ulimit -n); 16 | fi 17 | if [ -z "$MAXFD" ]; then 18 | MAXFD=32768; 19 | fi 20 | if [ -z "$USER" ]; then 21 | USER="shadowsocksr"; 22 | fi 23 | if [ -z "$VERSION" ]; then 24 | VERSION="3.2.2"; 25 | fi 26 | if [ -z "$LIBSODIUM_VERSION" ]; then 27 | LIBSODIUM_VERSION="1.0.16"; 28 | fi 29 | DOWN_URL="https://github.com/shadowsocksrr/shadowsocksr/archive/$VERSION.tar.gz" 30 | LIBSODIUM_URL="https://download.libsodium.org/libsodium/releases/libsodium-$LIBSODIUM_VERSION.tar.gz"; 31 | SSR_HOME_DIR=ssr; 32 | 33 | which yum > /dev/null 2>&1; 34 | if [ 0 -eq $? ]; then 35 | sudo yum install -y gcc autoconf libtool automake make zlib-devel openssl-devel python wget; 36 | else 37 | which apt; 38 | which apt > /dev/null 2>&1; 39 | if [ 0 -eq $? ]; then 40 | sudo apt install -y --no-install-recommends build-essential autoconf libtool libssl-dev libpcre3-dev python wget; 41 | fi 42 | fi 43 | 44 | if [ ! -e "$PREFIX/libsodium-$LIBSODIUM_VERSION" ]; then 45 | if [ ! -e "libsodium-$LIBSODIUM_VERSION.tar.gz" ]; then 46 | wget -c "$LIBSODIUM_URL"; 47 | fi 48 | tar -axvf libsodium-$LIBSODIUM_VERSION.tar.gz; 49 | $(cd libsodium-$LIBSODIUM_VERSION && ./autogen.sh && ./configure --prefix=$PREFIX/libsodium-$LIBSODIUM_VERSION && make install -j4); 50 | echo "$PREFIX/libsodium-$LIBSODIUM_VERSION/lib" > /etc/ld.so.conf.d/libsodium.conf; 51 | ldconfig; 52 | fi 53 | 54 | 55 | PYTHON_BIN=$(which python); 56 | if [ -z "$PYTHON_BIN" ]; then 57 | echo ""python not found; 58 | exit 1; 59 | fi 60 | 61 | # backup configure files 62 | if [ -e "$PREFIX/$SSR_HOME_DIR/userapiconfig.py" ]; then 63 | cp -f "$PREFIX/userapiconfig.py" userapiconfig.py; 64 | fi 65 | 66 | if [ -e "$PREFIX/$SSR_HOME_DIR/mudb.json" ]; then 67 | cp -f "$PREFIX/mudb.json" mudb.json; 68 | fi 69 | 70 | if [ -e "$PREFIX/$SSR_HOME_DIR/user-config.json" ]; then 71 | cp -f "$PREFIX/$SSR_HOME_DIR/user-config.json" user-config.json; 72 | fi 73 | 74 | if [ -e "shadowsocksr-$VERSION" ]; then 75 | rm -rf "shadowsocksr-$VERSION"; 76 | fi 77 | 78 | if [ ! -e "shadowsocksr-$VERSION.tar.gz" ]; then 79 | wget "$DOWN_URL" -O "shadowsocksr-$VERSION.tar.gz" --no-check-certificate; 80 | fi 81 | 82 | tar -xvf "shadowsocksr-$VERSION.tar.gz"; 83 | 84 | mkdir -p "$PREFIX/log"; 85 | 86 | if [ -e "$PREFIX/$SSR_HOME_DIR" ]; then 87 | rm -rf "$PREFIX/$SSR_HOME_DIR"; 88 | fi 89 | cp -rf "shadowsocksr-$VERSION" "$PREFIX/$SSR_HOME_DIR"; 90 | cd "shadowsocksr-$VERSION"; 91 | 92 | chmod +x *; 93 | ./initcfg.sh; 94 | 95 | # restore configure 96 | if [ -e userapiconfig.py ]; then 97 | mv -f userapiconfig.py "$PREFIX/$SSR_HOME_DIR/userapiconfig.py"; 98 | fi 99 | 100 | if [ -e mudb.json ]; then 101 | mv -f mudb.json "$PREFIX/$SSR_HOME_DIR/mudb.json"; 102 | fi 103 | 104 | if [ -e user-config.json ]; then 105 | mv -f user-config.json "$PREFIX/$SSR_HOME_DIR/user-config.json"; 106 | fi 107 | 108 | # add systemd 109 | echo "# This file is part of shadowsocksr. 110 | # 111 | # shadowsocksr is free software; you can redistribute it and/or modify 112 | # it under the terms of the GNU General Public License as published by 113 | # the Free Software Foundation; either version 3 of the License, or 114 | # (at your option) any later version. 115 | # 116 | # This file is default for Debian packaging. See also 117 | # /etc/default/shadowsocksr for environment variables. 118 | 119 | [Unit] 120 | Description=shadowsocksr Default Server Service 121 | Documentation=man:shadowsocksr(8) 122 | After=network.target 123 | 124 | [Service] 125 | Type=simple 126 | User=$USER 127 | Group=$USER 128 | LimitNOFILE=$MAXFD 129 | ExecStart=$PYTHON_BIN $PREFIX/$SSR_HOME_DIR/server.py m > /dev/null 2>&1 130 | ExecStop=/bin/kill -s QUIT 131 | PrivateTmp=true 132 | Restart=on-failure 133 | RestartPreventExitStatus=SIGTERM 134 | 135 | [Install] 136 | WantedBy=multi-user.target 137 | " > shadowsocksr.service; 138 | 139 | # add user 140 | cat /etc/passwd | grep $USER ; 141 | if [ 0 -ne $? ]; then 142 | sudo useradd $USER -M -s /sbin/nologin ; 143 | fi 144 | chown $USER:$USER -R "$PREFIX"; 145 | 146 | # systemd and firewall 147 | if [ -e "/usr/lib/systemd/system" ] && [ ! -e "/usr/lib/systemd/system/shadowsocksr.service" ]; then 148 | sudo cp shadowsocksr.service "/usr/lib/systemd/system/shadowsocksr.service" -f; 149 | sudo systemctl daemon-reload ; 150 | sudo systemctl enable shadowsocksr ; 151 | sudo systemctl restart shadowsocksr ; 152 | fi 153 | 154 | FIREWALLD_CONF_FILE_PATH=/etc/firewalld/services/shadowsocksr.xml; 155 | if [ -e "/etc/firewalld/services" ] && [ ! -e "$FIREWALLD_CONF_FILE_PATH" ]; then 156 | echo "setup firewalld"; 157 | sudo echo ' 158 | 159 | shadowsocksr 160 | shadowsocksr 161 | 162 | 163 | ' > "$FIREWALLD_CONF_FILE_PATH" ; 164 | sudo firewall-cmd --reload ; 165 | sudo firewall-cmd --permanent --add-service shadowsocksr ; 166 | sudo firewall-cmd --reload ; 167 | fi 168 | 169 | echo "All configure done."; 170 | echo "Please edit $PREFIX/$SSR_HOME_DIR/userapiconfig.py and set API_INTERFACE = 'mudbjson', SERVER_PUB_ADDR = 'your ip address'"; 171 | echo "You can edit $PREFIX/$SSR_HOME_DIR/mudb.json to set multi-user configure or using mujson_mgr.py"; 172 | if [ -e "$FIREWALLD_CONF_FILE_PATH" ]; then 173 | echo "firewalld configured at $FIREWALLD_CONF_FILE_PATH, please run firewall-cmd --reload after edit it"; 174 | fi 175 | if [ -e "/usr/lib/systemd/system/shadowsocksr.service" ]; then 176 | echo "systemd configured at /usr/lib/systemd/system/shadowsocksr.service, please run systemctl daemon-reload or systemctl disable/enable/restart shadowsocksr after edit it"; 177 | fi 178 | echo "Example:"; 179 | echo " $PYTHON_BIN mujson_mgr.py -a -m chacha20-ietf -O auth_sha1_v4 -o tls1.2_ticket_auth -p 8351 -k YOURPASSWORD"; 180 | if [ -e "$FIREWALLD_CONF_FILE_PATH" ]; then 181 | echo ' sed -i "/<\\/service>/i ' $FIREWALLD_CONF_FILE_PATH; 182 | fi 183 | -------------------------------------------------------------------------------- /shadowsock&kcptun/centos_7_kcptun.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # @see https://github.com/xtaci/kcptun ; 4 | 5 | if [ -z "$KCPTUN_VERSION" ]; then 6 | KCPTUN_VERSION=20171201; 7 | fi 8 | KCPTUN_HOME=/home/kcptun ; 9 | KCPTUN_SYSTEMD=/usr/lib/systemd/system/kcptun.service ; 10 | KCPTUN_URL=https://github.com/xtaci/kcptun/releases/download/v$KCPTUN_VERSION/kcptun-linux-amd64-$KCPTUN_VERSION.tar.gz ; 11 | KCPTUN_PORTS=($@) ; 12 | KCPTUN_PORT_OFF=200 ; 13 | KCPTUN_OPTIONS="--crypt none --mtu 1350 --nocomp --mode fast --dscp 46"; 14 | KCPTUN_SS_LOCAL=127.0.0.1 ; 15 | 16 | mkdir -p "$KCPTUN_HOME/log"; 17 | 18 | FILENAME="$(basename $KCPTUN_URL)"; 19 | 20 | if [ ! -e "$KCPTUN_HOME/$FILENAME" ]; then 21 | wget "$KCPTUN_URL" -O "$KCPTUN_HOME/$FILENAME" ; 22 | fi 23 | 24 | tar -xvf "$KCPTUN_HOME/$FILENAME" -C "$KCPTUN_HOME" ; 25 | 26 | function gen_kcptun_port() { 27 | KCPTUN_PORT=$1; 28 | let LOCAL_PORT=$KCPTUN_PORT+$KCPTUN_PORT_OFF; 29 | if [ -e "/usr/lib/systemd/system" ]; then 30 | echo "[Unit] 31 | Description=kcptun-$KCPTUN_PORTS services 32 | After=syslog.target network.target 33 | 34 | [Service] 35 | Type=simple 36 | ExecStart=$KCPTUN_HOME/server_linux_amd64 -l :$LOCAL_PORT -t $KCPTUN_SS_LOCAL:$KCPTUN_PORT $KCPTUN_OPTIONS --log $KCPTUN_HOME/log/kcptun-$KCPTUN_PORTS.log 37 | ExecStop=/bin/kill -s QUIT \$MAINPID 38 | PrivateTmp=true 39 | Restart=on-failure 40 | SuccessExitStatus=SIGTERM 41 | 42 | [Install] 43 | WantedBy=multi-user.target" > /usr/lib/systemd/system/kcptun-$KCPTUN_PORT.service ; 44 | sudo sudo systemctl daemon-reload ; 45 | sudo systemctl enable kcptun-$KCPTUN_PORT ; 46 | sudo systemctl start kcptun-$KCPTUN_PORT ; 47 | echo "systemd configured at /usr/lib/systemd/system/kcptun-$KCPTUN_PORT.service, please run systemctl daemon-reload or systemctl disable/enable/restart kcptun-$KCPTUN_PORT after edit it"; 48 | fi 49 | 50 | if [ -e "/etc/firewalld/services" ] && [ ! -e "/etc/firewalld/services/kcptun-$KCPTUN_PORT.xml" ]; then 51 | echo "setup firewalld"; 52 | sudo echo " 53 | 54 | kcptun-$KCPTUN_PORT 55 | kcptun-$KCPTUN_PORT 56 | 57 | 58 | " > "/etc/firewalld/services/kcptun-$KCPTUN_PORT.xml" ; 59 | sudo firewall-cmd --reload ; 60 | sudo firewall-cmd --permanent --add-service "kcptun-$KCPTUN_PORT" ; 61 | sudo firewall-cmd --reload ; 62 | fi 63 | 64 | if [ -e "/etc/firewalld/services/kcptun-$KCPTUN_PORT.xml" ]; then 65 | echo "firewalld configured at /etc/firewalld/services/kcptun-$KCPTUN_PORT.xml, please run firewall-cmd --reload after edit it"; 66 | fi 67 | } 68 | 69 | for PORT in ${KCPTUN_PORTS[@]}; do 70 | gen_kcptun_port $PORT; 71 | done 72 | -------------------------------------------------------------------------------- /shadowsock&kcptun/centos_7_shadowsocks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # @see https://copr.fedorainfracloud.org/coprs/librehat/shadowsocks/ ; 4 | 5 | SHADOWSOCKS_PORT=8380 ; 6 | SHADOWSOCKS_CONF=/etc/shadowsocks-libev/config.json ; 7 | 8 | wget https://copr.fedorainfracloud.org/coprs/librehat/shadowsocks/repo/epel-7/librehat-shadowsocks-epel-7.repo -O /etc/yum.repos.d/librehat-shadowsocks-epel-7.repo ; 9 | 10 | yum install shadowsocks-libev ; 11 | 12 | systemctl enable shadowsocks-libev ; 13 | systemctl start shadowsocks-libev ; 14 | 15 | sed -i "/\"server\"\\s*:\\s*.*/d" "$SHADOWSOCKS_CONF"; 16 | sed -i "s/\"server_port\"\\s*:\\s*[0-9]*/\"server_port\":$SHADOWSOCKS_PORT/" "$SHADOWSOCKS_CONF"; 17 | 18 | firewall-cmd --permanent --add-port=$SHADOWSOCKS_PORT/tcp ; 19 | firewall-cmd --permanent --add-port=$SHADOWSOCKS_PORT/udp ; 20 | firewall-cmd --reload ; 21 | 22 | echo "please edit $SHADOWSOCKS_CONF and then run systemctl restart shadowsocks-libev"; -------------------------------------------------------------------------------- /v2ray/centos_7_setup_v2ray_server.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # All available environments 4 | # PREFIX 5 | # V2RAY_USER 6 | # VERSION 7 | # ARCH 8 | 9 | export LC_ALL="zh_CN.UTF-8"; 10 | export LC_CTYPE="zh_CN.UTF-8"; 11 | export LANG="zh_CN.UTF-8"; 12 | 13 | if [ -z "$PREFIX" ]; then 14 | PREFIX="/usr/local/v2ray"; 15 | fi 16 | if [ -z "$V2RAY_USER" ]; then 17 | V2RAY_USER="v2ray"; 18 | fi 19 | if [ -z "$VERSION" ]; then 20 | VERSION="4.25.0"; 21 | fi 22 | if [ -z "$ARCH" ]; then 23 | ARCH="linux-64"; 24 | fi 25 | DOWN_URL="https://github.com/v2ray/v2ray-core/releases/download/v$VERSION/v2ray-$ARCH.zip" 26 | HOME_DIR="v2ray-v$VERSION-$ARCH"; 27 | if [ -z "$V2RAY_PKG_NAME" ]; then 28 | V2RAY_PKG_NAME="$(basename $DOWN_URL)"; 29 | fi 30 | 31 | which yum > /dev/null 2>&1; 32 | if [ 0 -eq $? ]; then 33 | sudo yum install -y zlib-devel openssl openssl-devel openssl-libs wget curl vim unzip perl; 34 | else 35 | which apt; 36 | which apt > /dev/null 2>&1; 37 | if [ 0 -eq $? ]; then 38 | sudo apt install -y --no-install-recommends openssl libssl-dev libpcre3-dev wget curl vim unzip perl; 39 | fi 40 | fi 41 | 42 | mkdir -p "$PREFIX"; 43 | cd "$PREFIX"; 44 | 45 | # download pkg 46 | if [ ! -e "$PREFIX/$HOME_DIR" ]; then 47 | curl -k -L "$DOWN_URL" -o "$V2RAY_PKG_NAME"; 48 | if [ 0 -ne $? ]; then 49 | rm -f "$V2RAY_PKG_NAME"; 50 | exit 1; 51 | fi 52 | 53 | # unzip 54 | unzip -uo "$V2RAY_PKG_NAME" -d "$PREFIX/$HOME_DIR"; 55 | if [ ! -e "$HOME_DIR" ]; then 56 | echo "Can not find $HOME_DIR"; 57 | exit 1; 58 | fi 59 | fi 60 | 61 | chmod +x $PREFIX/$HOME_DIR/v2* ; 62 | 63 | mkdir -p log; 64 | mkdir -p etc; 65 | mkdir -p run; 66 | 67 | # add user 68 | cat /etc/passwd | grep $V2RAY_USER ; 69 | if [ 0 -ne $? ]; then 70 | sudo useradd $V2RAY_USER -M -s /sbin/nologin ; 71 | fi 72 | 73 | # setup config.json 74 | if [ ! -e "$PREFIX/etc/config.json" ]; then 75 | cp -f "$PREFIX/$HOME_DIR/vpoint_vmess_freedom.json" "$PREFIX/etc/config.json"; 76 | perl -p -i -e "s;\"access\"\\s*\\:.*;\"access\": \"$PREFIX\\/log\\/access.log\",;g" "$PREFIX/etc/config.json"; 77 | perl -p -i -e "s;\"error\"\\s*\\:.*;\"error\": \"$PREFIX\\/log\\/error.log\",;g" "$PREFIX/etc/config.json"; 78 | fi 79 | 80 | # chown ... 81 | chown $V2RAY_USER:$V2RAY_USER -R "$PREFIX"; 82 | 83 | # setup systemd 84 | if [ -e "/usr/lib/systemd/system" ]; then 85 | SYSTEMD_CONFIG_PATH="/usr/lib/systemd/system/v2ray.service"; 86 | elif [ -e "/lib/systemd/system" ] ; then 87 | SYSTEMD_CONFIG_PATH="/lib/systemd/system/v2ray.service"; 88 | else 89 | SYSTEMD_CONFIG_PATH=""; 90 | fi 91 | 92 | # systemd and firewall 93 | if [ "x" != "x${SYSTEMD_CONFIG_PATH}" ]; then 94 | if [ ! -e "$SYSTEMD_CONFIG_PATH" ]; then 95 | sudo cp -f "$PREFIX/$HOME_DIR/systemd/v2ray.service" "$SYSTEMD_CONFIG_PATH"; 96 | sudo perl -p -i -e "s;.*User\\s*\\=.*;User=$V2RAY_USER;" "$SYSTEMD_CONFIG_PATH"; 97 | sudo perl -p -i -e "s;.*Group\\s*\\=.*;Group=$V2RAY_USER;" "$SYSTEMD_CONFIG_PATH"; 98 | sudo perl -p -i -e "s;.*PIDFile\\s*\\=.*;PIDFile=$PREFIX/run/v2ray-server.pid;" "$SYSTEMD_CONFIG_PATH"; 99 | sudo perl -p -i -e "s;.*ExecStart\\s*\\=.*;ExecStart=$PREFIX/$HOME_DIR/v2ray -config $PREFIX/etc/config.json;" "$SYSTEMD_CONFIG_PATH"; 100 | 101 | sudo systemctl daemon-reload ; 102 | sudo systemctl enable v2ray ; 103 | sudo systemctl start v2ray ; 104 | else 105 | sudo perl -p -i -e "s;.*ExecStart\\s*\\=.*;ExecStart=$PREFIX/$HOME_DIR/v2ray -config $PREFIX/etc/config.json;" "$SYSTEMD_CONFIG_PATH"; 106 | sudo systemctl daemon-reload ; 107 | sudo systemctl restart v2ray ; 108 | fi 109 | else 110 | echo "Can not find systemd config dictionary, skip setup for systemd." 111 | fi 112 | 113 | FIREWALLD_CONF_FILE_PATH=/etc/firewalld/services/v2ray.xml; 114 | if [ -e "/etc/firewalld/services" ] && [ ! -e "$FIREWALLD_CONF_FILE_PATH" ]; then 115 | echo "setup firewalld"; 116 | sudo echo ' 117 | 118 | v2ray 119 | v2ray 120 | ' > "$FIREWALLD_CONF_FILE_PATH" ; 121 | sudo firewall-cmd --reload ; 122 | sudo firewall-cmd --permanent --add-service v2ray ; 123 | sudo firewall-cmd --reload ; 124 | fi 125 | 126 | echo "All configure done."; 127 | echo "Please edit $PREFIX/etc/config.json to change your vpoints"; 128 | if [ -e "$FIREWALLD_CONF_FILE_PATH" ]; then 129 | echo "firewalld configured at $FIREWALLD_CONF_FILE_PATH, please run firewall-cmd --reload after edit it"; 130 | fi 131 | if [ -e "$SYSTEMD_CONFIG_PATH" ]; then 132 | echo "systemd configured at $SYSTEMD_CONFIG_PATH, please run systemctl daemon-reload or systemctl disable/enable/restart v2ray after edit it"; 133 | fi 134 | echo "Example:"; 135 | echo " inbound.port: 10086, inbound.protocol: vmess"; 136 | if [ -e "$FIREWALLD_CONF_FILE_PATH" ]; then 137 | echo ' sed -i "/<\\/service>/i ' $FIREWALLD_CONF_FILE_PATH; 138 | fi 139 | -------------------------------------------------------------------------------- /v2ray/update_google_play.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # crontab -e 4 | # 13 * * * * /root/update_google_play.sh > /root/update_google_play.log 2>&1 5 | 6 | RESOLVE_IPS=($(dig services.googleapis.com | grep -e "IN\\s*AA*\\s*..*" | awk '{ print $(NF) }')); 7 | 8 | if [ ${#RESOLVE_IPS} -gt 0 ]; then 9 | echo "${#RESOLVE_IPS} address detected."; 10 | sed -i "/services\\.googleapis\\.cn/d" /etc/hosts; 11 | echo "# ============ redirect services.googleapis.cn ============" >> /etc/hosts; 12 | for IP in ${RESOLVE_IPS[@]}; do 13 | IP_PADDING=$(printf "%-48s" $IP); 14 | echo "$IP_PADDING services.googleapis.cn" >> /etc/hosts; 15 | echo "$IP_PADDING services.googleapis.cn"; 16 | done 17 | fi 18 | --------------------------------------------------------------------------------