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 文档
从头到尾的完整过程。如果使用具有 -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 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 以确保编译后的 rose 通过所有附带的测试。这将再次花费几个小时才能完成项目、教程和测试目录中的所有 make check 规则。
为了节省时间,您可以在选定目录(例如 buildrose/tests)下仅运行部分测试。
make -C tests/ check -j4
在“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_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 前端源代码,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 :)