跳轉到內容

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 :)

華夏公益教科書