CentOS 7 - RISC-V + LLVM 環境架設

這篇文章主要參考於這個 github: https://github.com/sifive/riscv-llvm


---廢話區---

這個本來是大四上 Compiler 的時候有用 Ubuntu 建置過

雖然明明只是照指令一行一行打

但對當時的我還是很頭痛


所以上次剛進碩班老師要我建這個環境的時候

我心裡充滿了恐懼

尤其是又要在我完全沒用過的 CentOS 上用

因此我還為此逃避了好幾個月不弄

老師沒把我趕出去真的是佛心來的

不過後來還是終於面對現實去把環境弄起來了

但不得不說 當時真的遇到很多瓶頸

絕對不像在 Ubuntu 上指令照著打一打東西就會順利出來了 (因為裡面文件指令適用於 Ubuntu)

當時經過蠻多各種 ERROR 試了又試 東查西查 才終於把整個環境架出來

所以這次趁著要重新建置整個環境的機會

希望這篇文章能幫助日後自己想起來建置步驟

也能幫助其他想在 CentOS 上建置這個環境的人


---正文區---


(安裝懶人包在這,但還是建議往下跟著一步一步做才知道哪裡有問題~)

riscv_build.sh


先更新好軟體包


sudo yum update


安裝相依的軟體包 (由於是 CentOS ,有些名稱跟原本網站不太一樣要注意)


# 這些跟網站給的安裝軟體名稱都是一樣的

sudo yum install binutils libtool texinfo gzip zip unzip patchutils curl git make cmake automake bison flex gperf grep sed gawk python bc


# 這些是名稱不同的要注意

sudo yum groupinstall "Development Tools" "Development Libraries" #sudo yum install build-essential(?)

sudo yum install http://repo.okay.com.mx/centos/7/x86_64/release/okay-release-1-1.noarch.rpm #sudo yum install ninja-build

sudo yum install ninja-build

sudo yum install zlib-devel #sudo yum install zlib1g-dev

sudo yum install expat-devel #sudo yum install libexpat1-dev

sudo yum install libmpc-devel #sudo yum install libmpc-dev

sudo yum install glib2-devel #sudo yum install libglib2.0-dev

sudo yum install libfdt-devel #sudo yum install libfdt-dev

sudo yum install pixman-devel #sudo yum install libpixman-1-dev


# 沒有 python3 的要先裝

sudo yum python3


建立 riscv 資料夾


mkdir riscv


進入 riscv 資料夾


cd riscv


設定暫時的環境變數 (紅色可以自己指定你想安裝 riscv 的路徑)


export PATH=/opt/riscv/bin:$PATH

hash -r


下載 riscv-gnu-toolchain


git clone --recursive https://github.com/riscv/riscv-gnu-toolchain

(這一步會需要好幾十分鐘)


進入 riscv-gnu-toolchain 資料夾


pushd riscv-gnu-toolchain


進行設定 (--prefix=你想安裝 riscv 的路徑)


./configure --prefix=/opt/riscv --enable-multilib


執行安裝 (-j 表示多線程處理,例如 8核就可以打 -j8,-j`nproc`則是會自動抓你系統的總核心數)


make -j`nproc`


跳出資料夾


popd


下載 riscv-llvm


git clone https://github.com/llvm/llvm-project.git riscv-llvm


進入資料夾


pushd riscv-llvm/


建立 softlink


ln -s ../../clang llvm/tools || true


建立 _build 資料夾


mkdir _build


進入 _build 資料夾


cd _build


安裝 (藍色部分可以自己設定想安裝 llvm 的路徑,跟前面紅色不一樣唷!)


cmake3 -G Ninja -DCMAKE_BUILD_TYPE="Release" \
-DBUILD_SHARED_LIBS=True -DLLVM_USE_SPLIT_DWARF=True \
-DCMAKE_INSTALL_PREFIX="/opt/llvm" \
-DLLVM_OPTIMIZED_TABLEGEN=True -DLLVM_BUILD_TESTS=False \
-DDEFAULT_SYSROOT="/opt/llvm/riscv64-unknown-elf" \
-DLLVM_DEFAULT_TARGET_TRIPLE="riscv64-unknown-elf" \
-DLLVM_TARGETS_TO_BUILD="RISCV" \
../llvm


這時候會出現一個錯誤!





很明顯的是 CMake 版本太低

不過經過 yum search cmake 發現了 cmake3

所以要透過 yum 先安裝 CMake 3


sudo yum install cmake3


然後把指令的 cmake 改成 cmake3


cmake3 -G Ninja -DCMAKE_BUILD_TYPE="Release" \
-DBUILD_SHARED_LIBS=True -DLLVM_USE_SPLIT_DWARF=True \
-DCMAKE_INSTALL_PREFIX="/opt/llvm" \
-DLLVM_OPTIMIZED_TABLEGEN=True -DLLVM_BUILD_TESTS=False \
-DDEFAULT_SYSROOT="/opt/llvm/riscv64-unknown-elf" \
-DLLVM_DEFAULT_TARGET_TRIPLE="riscv64-unknown-elf" \
-DLLVM_TARGETS_TO_BUILD="RISCV" \
../llvm

結果又出現錯誤!






這也很明顯的是 GCC 版本過舊

所以我選擇安裝 GCC 7

先使用 yum 安裝這兩個軟體


sudo yum install centos-release-scl

sudo yum install devtoolset-7-gcc*


在 scl 虛擬環境中啟動 gcc 7 (**啟動的效果只存在於當前這個 bash,關掉後就不見了)


scl enable devtoolset-7 bash


確認 GCC 7 安裝成功


gcc --version


版本號有正確出現就表示成功了唷!


不過再回到上個 cmake3 的步驟前

請先做以下步驟


rm -f CMakeCache.txt

export CC="你的 gcc 7 路徑" #用 which gcc 就可以看到 gcc 7 路徑了

export CXX="你的 g++ 7 路徑" #用 which g++ 就可以看到 g++ 7 路徑了


前面都做完後,接著安裝


cmake --build . --target install

(這步驟也會需要蠻久時間的)


然後跳出資料夾


popd


到這裡如果都沒錯誤發生的話,就是已經安裝好了唷!


這裡也提供 .sh 檔直接執行就可以跑上面的所有指令了

riscv_build.sh


接著就可以進行測試了!


---測試區---


剛裝好的東西不要忘記加到環境路徑!


export PATH=/opt/riscv/bin:/opt/llvm/bin:$PATH


接著建立測試檔案 hello.c


vim hello.c


int main(){

  printf("Hello RISCV!\n");

  return 0;

}

(這裡刪掉了 #include <stdio.h> 因為clang 會報錯)


用 64bit RISC-V 測試


clang -O -c hello.c #Compile C Code 

riscv64-unknown-elf-gcc hello.o -o hello -march=rv64imac -mabi=lp64

qemu-riscv64 hello #run the program


最後顯示出這個畫面就是大功告成了!




*小技巧: 

上面用 export 設定的環境變數都只會於當前這個 bash 下生效

關掉後就會失效了

如果想要讓他在你每次登入時都可以自動生效

打開  bashrc 檔案


vim ~/.bashrc


把你想自動生效的環境設定指令直接寫進去檔案裏面

ex. 

source scl_source enable devtoolset-7 # 讓 devtoolset-7 生效

export PATH=/opt/riscv/bin:/opt/llvm/bin:$PATH
...

留言

這個網誌中的熱門文章

Formal Verification(正規驗證)介紹和如何使用 SVA(System Verilog Assertion) 做驗證

Quartus Qsys + Nios II 入門使用

Quartus Qsys + Nios II + SDRAM 進階使用