跳转到内容

ROSE 编译器框架/安装

来自维基教科书,开放世界中的开放书籍

ROSE 发布为一个开源软件包。用户需要编译并安装软件。

不喜欢安装 ROSE 吗?

[编辑 | 编辑源代码]

用户从头开始安装 ROSE 需要相当多的步骤。我们提供了一个包含已安装 ROSE 版本的虚拟机镜像。您可以下载并尝试它,然后再投入大量时间。

有关此内容的更多信息请参见 ROSE_Compiler_Framework/Virtual_Machine_Image

平台要求

[编辑 | 编辑源代码]

ROSE 可移植到 IA-32 和 x86-64 平台上的 Linux 和 Mac OS X。特别是,ROSE 开发人员经常使用以下开发环境

  • Red Hat Enterprise Linux 7 或其开源等价物 Centos 7
  • Ubuntu 18.04

最小磁盘空间

  • 30 GB

软件要求

[编辑 | 编辑源代码]

以下是安装 ROSE 的先决条件软件包列表

  • GCC:支持的 GCC 版本范围在配置过程中由 support-rose.m4 检查。
    • gcc
    • g++
  • boost 库:同样,支持的 Boost 版本范围在配置过程中由 support-rose.m4 检查
  • GNU autoconf 和 automake
  • libtool
  • bison (byacc),
  • flex
  • glibc-devel
  • git
  • ZGRViewer,一个 GraphViz/DOT 查看器:对于查看 ROSE AST 的点图至关重要
    • 首先安装 Graphviz - 图形可视化软件

可选软件包,用于提供额外功能或为高级用户提供支持

  • gfortran(可选,用于 Fortran 支持)
  • Sun Java JDK 或 OpenJDK:仅当您对 ROSE 中的 Fortran 和 Java 支持感兴趣时才需要。
  • libxml2-devel
  • sqlite
  • texlive-full,用于构建 LaTeX 文档

Ubuntu 18.04 的安装说明

[编辑 | 编辑源代码]

从头到尾的完整过程。如果使用具有 -j8 的 Amazon t2.2xlarge(AWS 8 个 vCPU + 32 GB 内存)实例,则大约需要 1 小时才能完成。

sudo apt-get update
sudo apt-get upgrade
  
sudo apt-get install git wget build-essential libtool flex bison python3-dev unzip perl-doc doxygen texlive libboost-all-dev gdb gcc-7 g++-7 gfortran-7 autoconf automake libxml2-dev libdwarf-dev graphviz openjdk-8-jdk lsb-core ghostscript perl-doc

git clone https://github.com/rose-compiler/rose
cd rose/

./build
 
cd ..
mkdir build-rose
cd build-rose/

../rose/configure --prefix=/home/demo/opt/rose-inst --enable-edg_version=5.0 --with-boost-libdir=/usr/lib/x86_64-linux-gnu --with-boost=/usr

make core -j4
make install-core -j4

通常,最好在 ROSE 的顶层源代码目录中重新构建配置文件。只需键入

 rose_sourcetree>./build

下一步是在独立的构建树中运行配置。如果您尝试在源代码目录中构建 ROSE,它会报错。

有很多配置选项。您可以通过键入 ../sourcetree/configure --help 查看所有选项列表。但 --prefix 和 --with-boost 是必需的最小选项。

 mkdir buildrose
 cd buildrose
 /home/liao6/rose/freshmaster/sourcetree/configure --prefix=/home/liao6/rose/freshmaster/install --with-boost=/nfs/casc/overture/ROSE/opt/rhel6/x86_64/boost/1_45_0/gcc/4.4.5 --with-C_OPTIMIZE=-O0 --with-CXX_OPTIMIZE=-O0 

默认情况下,所有支持的语言都尽可能启用,这可能会减慢您的编译过程。您可以使用以下方法指定所需的语言集

 --enable-languages=LIST Build specific languages:
                          all,none,binaries,c,c++,cuda,fortran,java,x10,opencl,php,matlab,python
                          (default=all)

例如,如果您只对 C++ 和 Fortran 语言支持感兴趣,可以使用 "--enable-languages=c++,fortran"

其他有用的配置选项

  • 指定 gcc 的 OpenMP 运行时库 libgomp.a 所在的位置。应仅使用 GCC 4.4(及更高版本)的 gomp 库才能获得 OpenMP 3.0 支持
    • --with-gomp_omp_runtime_library=/usr/apps/gcc/4.4.1/lib/


默认情况下,ROSE 使用 GCC 的 -O2 和 -g 选项进行配置,因此与 ROSE 附带的翻译器一起提供的翻译器应该已经具有一些调试信息可用。但某些变量可能会被优化掉。要保留最大调试信息,您可能需要重新配置/重新编译 rose 以关闭 GCC 优化。

  • --with-C_OPTIMIZE=-O0 --with-CXX_OPTIMIZE=-O0 // 在配置选项列表中
  • --without-CXX_OPTIMIZE --without-C_OPTIMIZE // 替代方法
  • --with-C_OPTIMIZE=no --with-CXX_OPTIMIZE=no // 第三种方法

在键入 make check 时启用更全面的测试

  • --with-ROSE_LONG_MAKE_CHECK_RULE=yes

如果您对 ROSE 中的 OpenMP 下降翻译感兴趣并让它自动链接到 GCC 的 libgomp.a,您应该添加一个选项

  • --with-gomp_omp_runtime_library=/usr/lib/gcc/x86_64-redhat-linux/4.4.5/

其他有用的选项

  • --enable-boost-version-check=false // 禁用 boost 版本检查

EDG 版本

[编辑 | 编辑源代码]

注意:使用 EDG 4.9 配置和 GNU 编译器 4.9 及更高版本时,不支持将 C++11 输入文件输入到 ROSE(使用 EDG 4.12 配置 ROSE)。


 ../sourcetree/configure --enable-edg_version=4.12

请参阅 ROSE 编译器框架/cmake 了解详细信息。

基于 EDG 4.x 的 ROSE 也支持 cmake 构建系统。

以下是用于配置 ROSE 的 CMake 命令

需要

  • boost
  • jdk:export JAVA_HOME=/home/demo/opt/jdk1.8.0_25/
  • libxml2


$ CC=gcc CXX=g++ cmake ../rose/ -DBOOST_ROOT="$BOOST_HOME" -Denable-cuda:BOOL=off -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_INSTALL_PREFIX:PATH="$(pwd)/../install"

之后,只需运行 "make" 然后 "ctest" 即可。

在 ROSE 的构建树中,键入

 cd buildrose
 make core -j4  # This may take a long time depending on your machine configuration

将构建核心 ROSE,包括 librose.so、教程、项目、测试等。-j4 表示使用四个进程来执行构建。如果您的机器支持更多并发进程,您可以使用更大的数字。但是,整个过程将需要几个小时才能完成。

对于大多数用户来说,构建 librose.so 应该足以满足他们的大部分工作。在这种情况下,只需键入

 make -C src/ -j4  # this is much faster. 

关闭静默构建

[编辑 | 编辑源代码]

默认情况下,Automake 构建系统将使用静默构建以减少屏幕输出。有关编译/链接命令行和选项的详细信息被隐藏。如果您想查看完整的命令行,您可以向 make 传递一个选项,例如 "make V=1"。

有关此主题的更多背景信息,请访问 https://autotools.io/automake/silent.html

make check

[编辑 | 编辑源代码]

可选地,您可以键入 make check 以确保编译后的 rose 通过所有附带的测试。这将再次花费几个小时才能完成项目、教程和测试目录中的所有 make check 规则。

为了节省时间,您可以在选定目录(例如 buildrose/tests)下仅运行部分测试。

 make -C tests/ check -j4

make install

[编辑 | 编辑源代码]

在“make”之后,建议运行“make install”,以便将 ROSE 的库(librose.so)、头文件(rose.h)和一些预先构建的基于 ROSE 的工具安装到使用 --prefix 指定的安装路径下。

要安装所有内容,请在 ROSE 构建树下键入以下命令行

 make install -j8  

一个简化的安装目标是 install-core,它只安装必要的二进制文件和预先构建的工具。

 make install-core -j8

设置环境变量

[编辑 | 编辑源代码]

安装完成后,您应该设置一些标准环境变量,以便您可以使用 ROSE。对于 bash,以下是一个示例

ROSE_INS=/home/userx/opt/rose_installation_tree
PATH=$PATH:$ROSE_INS/bin
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ROSE_INS/lib
# Don't forget to export variables !!!
export PATH LD_LIBRARY_PATH

尝试一个 ROSE 翻译器

[编辑 | 编辑源代码]

在 $ROSE_INS/bin 下安装了相当多的预先构建的 ROSE 翻译器。

您可以尝试 identityTranslator,它只解析输入代码,生成 AST,然后将其反解析回原始代码。

  identityTranslator -c helloWorld.c

它应该生成一个名为 rose_helloWorld.c 的输出文件,它应该看起来与您的输入代码一样。



一些示例选项

[编辑 | 编辑源代码]

identityTranslator --help

  -rose:skip_unparse      read and process input file but skip generation of
                             final C++ output file
 -rose:skipfinalCompileStep
                             read and process input file, 
                             but skip invoking the backend compiler

故障排除

[编辑 | 编辑源代码]

我们列出了与 ROSE 安装相关的常见问题。

EDG 二进制文件

[编辑 | 编辑源代码]

如果您没有 EDG 前端源代码,ROSE 的构建系统将自动尝试使用以下方法下载合适的 EDG 二进制文件wget在构建过程中(即make -C src/frontend/CxxFrontend)。这是一个 ROSE 构建系统生成的示例下载 URL

$ http://www.rosecompiler.org/edg_binaries/roseBinaryEDG-4-7-x86_64-pc-linux-gnu-GNU-4.4-968750cb07c75694948532c55bfb097684144cc4.tar.gz

tarball 文件的通用格式如下

roseBinaryEDG-<EDG_VERSION>-<ARCHITECTURE>-<GCC_VERSION>-<BINARY_COMPATIBILITY_SIGNATURE.tar.gz

二进制兼容性签名可以通过执行以下命令手动生成ROSE/scripts/edg-generate-sig脚本。例如

$ cd ROSE/
$ ./scripts/edg-generate-sig
968750cb07c75694948532c55bfb097684144cc4

EDG 二进制文件是特定于平台的,历史上一直是问题的原因,例如 Autoconf 检测到错误的主机/构建/平台类型。解决这些问题的可能方法是使用 Autoconf 构建和主机选项

1. 检查 Autoconf 认为您拥有什么构建系统

$ ./config/config.guess 
x86_64-unknown-linux-gnu

2. 在配置 ROSE 时使用适当的 Autoconf 选项

$ $ROSE/configure [--build|--host|--target|...]

参见 使用目标类型

真实用户的解决方案

Hi Justin,

Checking the config.guess file in source tree, I search the apple darwin for detail information in  --build option, 
then  I found that  UNAME-PROCESSOR and UNAME_RELEASE are needed in --build

First, I type uname  -m (for finding UNAME_PROCESSOR in config.guess)
 result :  x86_64 
Second, I type uname -r (for finding UNAME_RELEASE)
 result : 10.8.0 (darwin kernel version)

Third, I type command to configure again, but I added  --build option, then autoconf can directly find the detail platform type
 
/Users/ma23/ROSE/configure --with-CXX_DEBUG=-ggdb3 --with-CXX_WARNINGS=-Wall --with-boost=/Users/ma23/Desktop/ROSE/boost/BOOST_INSTALL 
--with-gfortran=/Users/ma23/Desktop/macports/bin/gfortran-mp-4.4 --with-alternate_backend_fortran_compiler=gfortran-mp-4.4 
GFORTRAN_PATH=/Users/ma23/Desktop/macports/bin/gfortran-mp-4.4 --build=x86_64-apple-darwin10 

At last, make :)

华夏公益教科书