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