# SPDX-License-Identifier: CC0-1.0 # FORTRAN77(gfortran-14.2) インストールスクリプト # fortran-stdlib をビルドする. # OS: Ubuntu 24.04.1 # カレントディレクトリ: /judge # 環境変数: HOME=/home/runner # LANG=C.UTF-8 # PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin # ATCODER=1 language = 'FORTRAN77' display = 'FORTRAN77 (GCC 14.2.0)' license = [{ name = 'GPL-3.0-or-later', url = 'https://gcc.gnu.org/onlinedocs/gcc-14.2.0/gcc/Copying.html' }] library.stdlib = { license = [ { name = 'MIT', url = 'https://stdlib.fortran-lang.org/page/License.html' }, ], version = 'v0.7.0' } filename = 'Main.f' install = ''' sudo apt update -y sudo apt upgrade -y sudo apt install -y gfortran gfortran-14 sudo update-alternatives --install /usr/bin/f77 f77 /usr/bin/gfortran-14 0 sudo update-alternatives --set f77 /usr/bin/gfortran-14 sudo apt install -y wget git # fpm をインストール. wget -O fpm https://github.com/fortran-lang/fpm/releases/download/v0.10.1/fpm-0.10.1-linux-x86_64 chmod +x fpm mkdir -p $HOME/.local/bin export PATH="$HOME/.local/bin:$PATH" mv fpm $HOME/.local/bin export FPM_FC="gfortran-14" export FPM_FFLAGS="-O2 -cpp" # stdlib-0.7.0 をインストール. # 静的ライブラリは $HOME/.local/lib へ # モジュールは $HOME/.local/include へ cd /tmp wget https://github.com/fortran-lang/stdlib/archive/refs/tags/v0.7.0.tar.gz tar xvf v0.7.0.tar.gz cd stdlib-0.7.0 cat << EOF >> fpm.toml [install] library = true EOF sudo apt install -y python3 fypp python3-joblib libstdc++-14-dev python3 config/fypp_deployment.py fpm build --profile release fpm test --profile release fpm install --prefix="$HOME/.local" --profile release export LD_LIBRARY_PATH="$HOME/.local/lib" # F77でコンパイルできるか試す. cd /judge cat << EOF > Main.f program test_stdlib use, intrinsic :: iso_fortran_env use stdlib_version use stdlib_sorting implicit none integer(int32) :: arr(10) = [10, 2, 1, 5, 7, 8, 3, 9, 6, 4] write(output_unit, '(a)') stdlib_version_string call sort(arr) write(error_unit, '(*(i0, 1x))') arr(:) if (any(arr(:) /= [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])) & error stop "Something error" end program EOF f77 -L$HOME/.local/lib -I$HOME/.local/include -O2 -cpp -ffixed-form Main.f -lstdlib ./a.out # 要らないものを消す. rm Main.f a.out rm -f $HOME/.local/bin/fpm rm -rf $HOME/fortran sudo apt purge -y git fypp python3-joblib sudo apt autoremove -y ''' compile = ''' export PATH="$HOME/.local/bin:$PATH" export LD_LIBRARY_PATH="$HOME/.local/lib" f77 -L$HOME/.local/lib -I$HOME/.local/include -O2 -cpp -ffixed-form Main.f -lstdlib ''' object = 'a.out' execution = [ './a.out' ]