mirror of
https://chromium.googlesource.com/libyuv/libyuv
synced 2025-12-06 08:46:47 +08:00
1. Provide script to build qemu & clang locally 2. Enable risc-v cmake build with clang 3. Enable test with qemu 4. Update doc to introduce how to cross-build & test with qemu Signed-off-by: Bruce Lai <bruce.lai@sifive.com> Change-Id: I7ce8315993b0e8300e8fd5b1632610a91a4e9f52 Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/4401740 Reviewed-by: Frank Barchard <fbarchard@chromium.org> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
75 lines
2.2 KiB
Bash
Executable File
75 lines
2.2 KiB
Bash
Executable File
#!/bin/bash
|
|
set -ev
|
|
|
|
# Download & build RISC-V Clang toolchain & QEMU emulator.
|
|
# RISC-V Clang is for cross compile with the RISC-V Vector ISA.
|
|
# RISC-V QEMU is used to run the test suite.
|
|
#
|
|
# Requirements: Linux host w/ working C++ compiler, git, cmake, ninja, wget, tar
|
|
|
|
# NOTE: this script must be run from the top-level directory of the LIBYUV_SRC_DIR.
|
|
|
|
RISCV_TRIPLE="riscv64-unknown-linux-gnu"
|
|
RISCV_QEMU="qemu-riscv64"
|
|
|
|
LIBYUV_SRC_DIR=$(pwd)
|
|
BUILD_DIR="$LIBYUV_SRC_DIR"/build-toolchain-qemu
|
|
INSTALL_QEMU="$BUILD_DIR"/riscv-qemu
|
|
INSTALL_CLANG="$BUILD_DIR"/riscv-clang
|
|
|
|
LLVM_VERSION="16.0.0"
|
|
LLVM_NAME=llvm-project-"$LLVM_VERSION".src
|
|
|
|
RISCV_GNU_TOOLCHAIN="$BUILD_DIR"/riscv-gnu-toolchain
|
|
RISCV_CLANG_TOOLCHAIN="$BUILD_DIR"/"$LLVM_NAME"
|
|
|
|
QEMU_NAME="qemu-7.0.0"
|
|
|
|
mkdir -p "$BUILD_DIR"
|
|
cd "$BUILD_DIR"
|
|
|
|
# Download and install RISC-V GNU Toolchain (needed to build Clang)
|
|
if [ ! -d "$RISCV_GNU_TOOLCHAIN" ]
|
|
then
|
|
git clone git@github.com:riscv/riscv-gnu-toolchain.git
|
|
pushd "$RISCV_GNU_TOOLCHAIN"
|
|
git submodule update --init --recursive
|
|
./configure --with-cmodel=medany --prefix="$INSTALL_CLANG"
|
|
ionice nice make linux -j `nproc` install
|
|
popd
|
|
fi
|
|
|
|
# Download Clang toolchain & build cross compiler
|
|
if [ ! -d "$RISCV_CLANG_TOOLCHAIN" ]
|
|
then
|
|
wget https://github.com/llvm/llvm-project/releases/download/llvmorg-"$LLVM_VERSION"/"$LLVM_NAME".tar.xz
|
|
tar xvJf "$LLVM_NAME".tar.xz
|
|
pushd "$RISCV_CLANG_TOOLCHAIN"
|
|
cmake -DCMAKE_INSTALL_PREFIX="$INSTALL_CLANG" \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DLLVM_TARGETS_TO_BUILD="RISCV" \
|
|
-DLLVM_ENABLE_PROJECTS="clang" \
|
|
-DLLVM_DEFAULT_TARGET_TRIPLE="$RISCV_TRIPLE" \
|
|
-DLLVM_INSTALL_TOOLCHAIN_ONLY=On \
|
|
-DDEFAULT_SYSROOT=../sysroot \
|
|
-G "Ninja" "$RISCV_CLANG_TOOLCHAIN"/llvm
|
|
ionice nice ninja -j `nproc`
|
|
ionice nice ninja -j `nproc` install
|
|
popd
|
|
pushd "$INSTALL_CLANG"/bin
|
|
ln -sf clang "$RISCV_TRIPLE"-clang
|
|
ln -sf clang++ "$RISCV_TRIPLE"-clang++
|
|
popd
|
|
fi
|
|
|
|
# Download QEMU and build the riscv64 Linux usermode emulator
|
|
if [ ! -d "$QEMU_NAME" ]
|
|
then
|
|
wget https://download.qemu.org/"$QEMU_NAME".tar.xz
|
|
tar xvJf "$QEMU_NAME".tar.xz
|
|
pushd "$QEMU_NAME"
|
|
./configure --target-list=riscv64-linux-user --prefix="$INSTALL_QEMU"
|
|
ionice nice make -j `nproc` install
|
|
popd
|
|
fi
|