安装

以下所有说明适用于 Linux、macOS 和 Windows。

二进制文件

安装 LFortran 的推荐方法是使用 Conda。例如,按照你的平台的说明安装 Miniconda,安装 Conda。然后创建一个新环境(你可以选择任何名称,这里我们选择了lf)并激活它:

conda create -n lf
conda activate lf

然后通过以下方式安装 LFortran:

conda install lfortran -c conda-forge

现在 lf 环境有 lfortran 编译器可用,你可以通过执行 lfortran 启动交互式提示,或使用 lfortran -h 查看命令行选项。

Jupyter 内核是通过上面的命令自动安装的,所以在安装 Jupyter 本身之后:

conda install jupyter -c conda-forge

你可以通过执行以下命令来创建基于 Fortran 的 Jupyter 笔记本:

jupyter notebook

并选择 New->Fortran

从源代码构建

如果你只想自己或在包管理器(Spack、Conda、Debian 等)中安装 LFortran,建议使用此方法。源代码包含所有生成的文件,并且具有最小的依赖关系。

The source tarball of LFortran only depends on:

  • Python

  • cmake

  • LLVM 10-16 (versions 17 and 18 not supported yet)

首先,我们必须安装依赖项,例如使用 Conda:

conda create -n lf python cmake llvmdev
conda activate lf

然后从 https://lfortran.org/download/ 下载源代码,例如:

wget https://github.com/lfortran/lfortran/releases/download/v0.42.0/lfortran-0.42.0.tar.gz
tar xzf lfortran-0.42.0.tar.gz
cd lfortran-0.42.0.tar.gz

并构建:

cmake -DWITH_LLVM=yes -DCMAKE_INSTALL_PREFIX=`pwd`/inst .
make -j8
make install

This will install lfortran into inst/bin. It assumes that c++ and cc are available, which on Linux are typically the GNU C++/C compilers.

从 Git 构建

我们假设你安装了 C++ 编译器,以及 gitwget。在 Ubuntu 中,你还可以为 stacktraces 安装 binutils-dev

如果你没有安装 Conda,你可以在 Linux 上安装(在其他平台上类似):

wget --no-check-certificate https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh
bash miniconda.sh -b -p $HOME/conda_root
export PATH="$HOME/conda_root/bin:$PATH"

然后准备环境:

conda create -n lf -c conda-forge llvmdev=11.0.1 bison=3.4 re2c python cmake make toml zstd-static pandoc gcc gxx libcxx
conda activate lf

克隆 LFortran git 存储库:

git clone https://github.com/lfortran/lfortran.git
cd lfortran

生成构建所需的文件(此步骤取决于 re2cbisonpython):

./build0.sh

Now you can use our script ./build1.sh to build in Debug mode:

./build1.sh

and can use ninja to rebuild.

To do a clean rebuild, you can use:

# NOTE: the below git command deletes all untracked files
git clean -dfx  # reset repository to a clean state by removing artifacts generated during the build process
./build0.sh
./build1.sh

运行测试:

ctest
./run_tests.py

运行交互式提示符:

./src/bin/lfortran

在 Windows 上使用 Visual Studio 从 Git 构建

安装 Visual Studio (MSVC),例如 2022 版本,可以免费下载社区版本:https://visualstudio.microsoft.com/downloads/ 。

使用来自 https://github.com/conda-forge/miniforge 的 Windows 安装程序安装 miniforge。

从桌面上启动 Miniforge Prompt。

在 shell 中,用以下方法初始化 MSVC 编译器:

call "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd" -arch=x64

你可以选择通过以下方式测试 MSVC 是否工作:

cl /?
link /?

这两个命令都必须打印帮助信息(若干页)。

现在你可以下载并建立 LFortran:

git clone https://github.com/lfortran/lfortran.git
cd lfortran
conda env create -f environment_win.yml
conda activate lf
build0.bat
build1.bat

如果一切都编译好了,那么你就可以使用 LFortran,如下所示:

inst\bin\lfortran examples/expr2.f90
expr2.exe
inst\bin\lfortran

等等 。

注意:LFortran 目前使用 MSVC 的链接器程序(link),只有在运行上面的 MSVC bat 脚本时才能使用。如果你忘记激活它,LFortran 的链接就会失败。

注意:miniforge shell 似乎在运行某个版本的 git-bash(尽管它是cmd.exe),它有一些类似 unix 的文件系统挂载在 /usr,有几个命令可用,如lswhichgitvim。 由于这个原因,Conda 构建的 environment_win.yml 包含了所有需要的东西,包括 git

用 WSL 在 Windows上 从 Git 构建

  • 在 Windows 中搜索“打开或关闭 Windows 功能”。

  • 标记适用于Linux 的 Windows 子系统。

  • 按“确定”并重新启动计算机。

  • 到微软商店下载 Ubuntu 20.04,并启动它。

  • 运行下列程序语句。

wget  https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh -O miniconda.sh
bash miniconda.sh -b -p $HOME/conda_root
export PATH="$HOME/conda_root/bin:$PATH"
  • 现在做以下工作来配置路径

sudo nano .bashrc
  • 然后转到文件底部,粘贴以下内容

export PATH="$HOME/conda_root/bin:$PATH"
  • 然后按 ctrl + O(保存),Enter(确认),ctrl + X(退出)

  • 之后,重新启动 Ubuntu

  • 运行以下内容

conda create -n lf -c conda-forge llvmdev=11.0.1 bison=3.4 re2c python cmake make toml
conda init bash
  • 再次重启 Ubuntu

conda activate lf
sudo apt update
sudo apt-get install build-essential
sudo apt-get install zlib1g-dev libzstd-dev
sudo apt install clang
  • 你可以使用 cd /mnt/[drive letter]/[windows location]将路径改为 Windows 位置。

  • 例如:cd mnt/c/Users/name/source/repos/

  • 现在克隆 LFortran 的 git 仓库

git clone https://github.com/lfortran/lfortran.git
cd lfortran
  • 运行以下命令

conda activate lf
./build0.sh
cmake -DCMAKE_BUILD_TYPE=Debug -DWITH_LLVM=yes -DCMAKE_INSTALL_PREFIX=`pwd`/inst .
make -j8
  • 如果一切都能编译,你可以使用 LFortran,如下所示

./src/bin/lfortran ./examples/expr2.f90
./expr2.out
  • 运行交互式提示符

./src/bin/lfortran
  • 运行测试

ctest
./run_tests.py

启用 Jupyter 内核

要安装 Jupyter 内核,还要安装以下 Conda 软件包:

conda install xeus=5.1.0 xeus-zmq=3.0.0 nlohmann_json

并通过 -DWITH_XEUS=yes 启用内核,然后安装到 $CONDA_PREFIX。比如:

cmake \
    -DCMAKE_BUILD_TYPE=Debug \
    -DWITH_LLVM=yes \
    -DWITH_XEUS=yes \
    -DCMAKE_PREFIX_PATH="$CONDA_PREFIX" \
    -DCMAKE_INSTALL_PREFIX="$CONDA_PREFIX" \
    .
cmake --build . -j4 --target install

要使用它,请安装 Jupyter(conda install jupyter)并测试是否找到 LFortran 内核:

jupyter kernelspec list --json

然后启动 Jupyter notebook,如下所示:

jupyter notebook

单击 New - > Fortran。启动 jupyter LFortran 终端控制台:

jupyter console --kernel=fortran

使用 Nix 从 Git 构建

确保精确环境和依赖关系的方法之一是使用 nix。这将确保系统的依赖性不会干扰到开发环境。如果你愿意,你可以在 nix-shell 环境下报告 bug,以方便别人复制。

带有 root 权限

我们从获得 nix 开始。下面的多用户安装将在任何装有 Linux 发行版、MacOS 或 Windows(通过 WSL)的机器上工作:

sh <(curl -L https://nixos.org/nix/install) --daemon

不带有 root 权限

如果你想不给nix提供机器的root权限,在Linux发行版上,我们可以使用 nix-portable.。

wget https://github.com/DavHau/nix-portable/releases/download/v003/nix-portable

现在只要在所有 nix-shell 命令前加上 NP_RUNTIME=bwrap . /nix-portable。所以:

# Do not
nix-shell --run "bash"
# Do
NP_RUNTIME=bwrap ./nix-portable nix-shell --run "bash"

开发

现在进入开发环境:

nix-shell --run "bash" --cores 4 -j4 --pure ci/shell.nix

--pure 标志确保在环境中不使用系统依赖。

构建步骤与 ci 相同:

./build0.sh
./build1.sh

要把编译环境从 gcc(默认)改为 clang,我们可以使用 --argstr

nix-shell --run "bash" --cores 4 -j4 --pure ci/shell.nix --argstr clangOnly "yes"

关于依赖性的说明

我们鼓励终端用户(和发行版)使用来自 https://lfortran.org/download/的tarball,它只依赖于LLVM、CMake和C++编译器。

这个 tarball 是由我们的 CI(持续集成)自动生成的,包含一些自动生成的文件:解析器、AST 和 ASR 节点,由 ASDL 翻译器生成(需要 Python)。

在开发 LFortran 本身时要使用来自 git 的指令。

不使用 Conda 的用户注意

以下是在开发模式下安装此版本库的必要依赖,

堆栈跟踪

LFortran 可以在出现未处理的异常时打印堆栈跟踪,也可以在任何编译器错误时使用 --show-stacktrace 选项。这对开发编译器本身很有帮助,可以看到 LFortran 中的问题所在。默认情况下,堆栈跟踪支持是关闭的,要启用它,需要在每个平台上按照下面的说明安装先决条件后,用-DWITH_STACKTRACE=yes cmake 选项编译 LFortran。

LLVM

In all platforms having LLVM, stacktraces can be shown with LLVM, so no additional prerequisites are required. If LLVM is not available, you can use the following instructions, depending on your platform.

Ubuntu

在 Ubuntu 系统,apt install binutils-dev

macOS

如果你在 macOS 上使用默认的 Clang 编译器,那么堆栈跟踪应该正好在基于 Intel 和 M1 的 macOS 上工作(CMake 构建系统自动调用 dsymtuil 工具和我们的 Python 脚本来存储调试信息,更多细节见 src/bin/CMakeLists.txt)。如果不能工作,请报告一个错误。

如果你不喜欢默认的方式,另一个选择是使用bintutils。为此,首先安装 Spack,然后:

spack install binutils
spack find -p binutils

最后一条命令将显示已安装的 binutils 软件包的完整路径。把这个路径添加到你的 shell 配置文件中,例如:

export CMAKE_PREFIX_PATH_LFORTRAN=/Users/ondrej/repos/spack/opt/spack/darwin-catalina-broadwell/apple-clang-11.0.0/binutils-2.36.1-wy6osfm6bp2323g3jpv2sjuttthwx3gd

并使用 -DCMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH_LFORTRAN;$CONDA_PREFIX" cmake 选项编译 LFortran。$CONDA_PREFIX 是在你使用 Conda 安装了一些其他的依赖项(如 llvm)的情况下出现的,否则你可以把它删除。