#!/usr/bin/bash
set -e
set -v on
### 本文件为 gcc 的安装脚本，在执行本脚本之前，需要修改本文件中的一些配置

wget https://mirrors.qiql.net/pkgs/m4-1.4.19.tar.gz
wget https://mirrors.qiql.net/pkgs/mpc-1.2.1.tar.gz
wget https://mirrors.qiql.net/pkgs/mpfr-4.1.0.tar.gz
wget https://mirrors.qiql.net/pkgs/gmp-6.2.1.tar.xz
wget https://mirrors.qiql.net/pkgs/isl-0.15.tar.bz2
wget https://mirrors.qiql.net/pkgs/gcc-5.4.0.tar.gz

### 开始指定/配置
## 指定 gcc 的安装包路径（默认与本脚本在同一目录）
gcc_pkg_dir=$(dirname $(readlink -f "$0"))
## 指定 gcc 的版本号
gcc_version=5.4.0
## 指定 gcc 的 build 目录【可选】（默认与安装包在同一路径）
gcc_build_dir=${gcc_pkg_dir}/build
## 指定 gcc 的安装目录
gcc_install_dir=/public/compiler/gcc/${gcc_version}
## 指定 gcc 的五个依赖的安装包目录【可选】（默认与本脚本在同一目录）
gcc_rely_pkg_dir=$(dirname $(readlink -f "$0"))
## 指定这五个依赖的 build 目录【可选】（默认与安装包在同一路径）
gcc_rely_build_dir=${gcc_rely_pkg_dir}/build
## 指定这五个依赖的安装目录
gcc_rely_install_dir=/public/library/gcc/${gcc_version}
## 指定 m4 的版本号
m4_version=1.4.19
## 指定 gmp 的版本号
gmp_version=6.2.1
## 指定 mpfr 的版本号
mpfr_version=4.1.0
## 指定 mpc 的版本号
mpc_version=1.2.1
## 指定 isl 的版本号
isl_version=0.15
### 指定完毕，配置完成


### 开始指定/配置
## 指定 gcc 的安装包路径（默认与本脚本在同一目录）
gcc_pkg_dir=$(dirname $(readlink -f "$0"))
## 指定 gcc 的版本号
gcc_version=11.2.0
## 指定 gcc 的 build 目录【可选】（默认与安装包在同一路径）
gcc_build_dir=${gcc_pkg_dir}/../build
## 指定 gcc 的安装目录
gcc_install_dir=/usr/qiql/compiler/gcc/${gcc_version}
## 指定 gcc 的五个依赖的安装包目录【可选】（默认与本脚本在同一目录）
gcc_rely_pkg_dir=$(dirname $(readlink -f "$0"))
## 指定这五个依赖的 build 目录【可选】（默认与安装包在同一路径）
gcc_rely_build_dir=${gcc_rely_pkg_dir}/../build
## 指定这五个依赖的安装目录
gcc_rely_install_dir=/usr/qiql/rely/gcc
## 指定 m4 的版本号
m4_version=1.4.19
## 指定 gmp 的版本号
gmp_version=6.2.1
## 指定 mpfr 的版本号
mpfr_version=4.1.0
## 指定 mpc 的版本号
mpc_version=1.2.1
## 指定 isl 的版本号
isl_version=0.24
### 指定完毕，配置完成

### 创建 gcc 的 build 目录
mkdir -p ${gcc_build_dir}
### 创建五个依赖的 build 目录
mkdir -p ${gcc_rely_build_dir}

## 开始安装 m4
tar -zxvf ${gcc_rely_pkg_dir}/m4-${m4_version}.tar.gz -C ${gcc_rely_build_dir}
cd ${gcc_rely_build_dir}/m4-${m4_version}
./configure --prefix=${gcc_rely_install_dir}/m4/${m4_version}
make
make install
export PATH=${gcc_rely_install_dir}/m4/${m4_version}/bin:$PATH
## 安装 m4 完毕

## 开始安装 gmp
tar -xf ${gcc_rely_pkg_dir}/gmp-${gmp_version}.tar.xz -C ${gcc_rely_build_dir}
cd ${gcc_rely_build_dir}/gmp-${gmp_version}
./configure --prefix=${gcc_rely_install_dir}/gmp/${gmp_version}
make
make check
make install
## 安装 gmp 完毕

## 开始安装 mpfr
tar -zxvf ${gcc_rely_pkg_dir}/mpfr-${mpfr_version}.tar.gz -C ${gcc_rely_build_dir}
cd ${gcc_rely_build_dir}/mpfr-${mpfr_version}
./configure --prefix=${gcc_rely_install_dir}/mpfr/${mpfr_version} --with-gmp=${gcc_rely_install_dir}/gmp/${gmp_version}
make
make check
make install
## 安装 mpfr 完毕

## 开始安装 mpc
tar -zxvf ${gcc_rely_pkg_dir}/mpc-${mpc_version}.tar.gz -C ${gcc_rely_build_dir}
cd ${gcc_rely_build_dir}/mpc-${mpc_version}
./configure --prefix=${gcc_rely_install_dir}/mpc/${mpc_version} --with-gmp=${gcc_rely_install_dir}/gmp/${gmp_version} --with-mpfr=${gcc_rely_install_dir}/mpfr/${mpfr_version}
make
make check
make install
## 安装 mpc 完毕

## 开始安装 isl
tar -jxvf ${gcc_rely_pkg_dir}/isl-${isl_version}.tar.bz2 -C ${gcc_rely_build_dir}
cd ${gcc_rely_build_dir}/isl-${isl_version}
./configure --prefix=${gcc_rely_install_dir}/isl/${isl_version} --with-gmp-prefix=${gcc_rely_install_dir}/gmp/${gmp_version}
make
make check
make install
## 安装 isl 完毕

## 将安装得到的库文件路径写入到环境变量 LD_LIBRARY_PATH 中去
export LD_LIBRARY_PATH=${gcc_rely_install_dir}/m4/${m4_version}:${gcc_rely_install_dir}/gmp/${gmp_version}/lib:${gcc_rely_install_dir}/mpfr/${mpfr_version}/lib:${gcc_rely_install_dir}/mpc/${mpc_version}/lib:${gcc_rely_install_dir}/isl/${isl_version}/lib:$LD_LIBRARY_PATH

## 开始安装 gcc
tar -zxvf ${gcc_pkg_dir}/gcc-${gcc_version}.tar.gz -C ${gcc_build_dir}
cd ${gcc_build_dir}/gcc-${gcc_version}
./configure --prefix=${gcc_install_dir} --enable-threads=posix --enable-languages=c,c++,fortran --disable-checking --disable-multilib --disable-multilib --disable-libcc1cd --with-gmp=${gcc_rely_install_dir}/gmp/${gmp_version} --with-mpfr=${gcc_rely_install_dir}/mpfr/${mpfr_version} --with-mpc=${gcc_rely_install_dir}/mpc/${mpc_version} --with-isl=${gcc_rely_install_dir}/isl/${isl_version}
make -j
make install
## 安装完毕

echo "gcc has been installed to " ${gcc_install_dir}
echo `${gcc_install_dir}/bin/gcc -v`
set +e
### END
