+++ /dev/null
-# Compiling LLVM on RISC-V
-
-By simply copying & pasting the following, absolutely verbatim with no
-changes, you can get a working clang from the head of the official llvm
-master branch. I've tested it on a completely virgin install of Ubuntu
-16.04 LTS server. It should work on other versions of Ubuntu and on
-other Debian-based distros. (If it doesn't then please let me know)
-
-Note that you currently must use a soft float version of the rv32 compiler
-and libraries.
-
-You can skip the gnu toolchain and/or qemu parts if you already have
-those.
-
- # about 17 GB of disk space is needed
- # entire process takes (not including apt-get, which is about 90 seconds on AWS):
- # 87m10s on i7-8650U Intel NUC with 32 GB RAM (on 30 Mbps VDSL internet in NZ)
- # 20m40s on server with Xeon E5-2667v4 @3.20GHz (16 cores)
- # 17m30s on an AWS m5.12xlarge with fresh Ubuntu 16.04 AMI (ami-4e79ed36)
-
- #harmless if things are already installed. Obviously you can't do it if
- #you're not an admin
- sudo apt-get update
- sudo apt-get -y dist-upgrade
- sudo apt-get -y install \
- binutils build-essential libtool texinfo \
- gzip zip unzip patchutils curl git \
- make cmake ninja-build automake bison flex gperf \
- grep sed gawk python bc \
- zlib1g-dev libexpat1-dev libmpc-dev \
- libglib2.0-dev libfdt-dev libpixman-1-dev
-
- mkdir riscv
- cd riscv
- mkdir _install
- export PATH=`pwd`/_install/bin:$PATH
-
- git clone --recursive https://github.com/riscv/riscv-gnu-toolchain
- pushd riscv-gnu-toolchain
- ./configure --prefix=`pwd`/../_install --with-arch=rv32gc --with-abi=ilp32
- make -j`nproc`
- popd
-
- git clone https://github.com/riscv/riscv-qemu
- pushd riscv-qemu
- ./configure --prefix=`pwd`/../_install --target-list=riscv32-linux-user
- make -j`nproc` install
- popd
-
- git clone https://github.com/llvm-project/llvm-project-20170507 llvm
- pushd llvm
- (cd llvm/tools; ln -s ../../clang .)
- mkdir _build
- cd _build
- cmake -G Ninja -DCMAKE_BUILD_TYPE="Release" \
- -DBUILD_SHARED_LIBS=True -DLLVM_USE_SPLIT_DWARF=True \
- -DLLVM_OPTIMIZED_TABLEGEN=True -DLLVM_BUILD_TESTS=False \
- -DDEFAULT_SYSROOT="../../_install/riscv32-unknown-elf" \
- -DGCC_INSTALL_PREFIX="../../_install" \
- -DLLVM_DEFAULT_TARGET_TRIPLE="riscv32-unknown-elf" \
- -DLLVM_TARGETS_TO_BUILD="" \
- -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="RISCV" \
- ../llvm
- cmake --build .
- alias clang-rv32="`pwd`/bin/clang -Xclang -iwithsysroot -Xclang /include \
- -ccc-gcc-name riscv32-unknown-elf-gcc \
- -target riscv32 -march=rv32imc"
- popd
-
- cat >hello.c <<END
- #include <stdio.h>
-
- int main(){
- printf("Hello RISCV!\n");
- return 0;
- }
- END
-
- clang-rv32 -O1 hello.c -o hello
- qemu-riscv32 hello
-