DragonOS/tools/qemu/build-qemu-la64-for-ubuntu.sh
LoGin e80796eb82
feat: la64 boot (#1132)
* la64能够进入到kernel_main
* ci: 添加为ubuntu编译qemu-loongarch64的脚本
* feat: la64能输出hello world
* la64 安装gcc && 配置github ci
* chore: 更新CI工作流和构建脚本中的Docker镜像版本至v1.10

Signed-off-by: longjin <longjin@DragonOS.org>
2025-04-20 18:51:45 +08:00

156 lines
3.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
set -e
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# 默认参数
QEMU_VERSION="9.2.1"
TARGET_LIST="loongarch64-softmmu"
USE_MIRROR=0
DEST_DIR="${HOME}/opt/qemu-${QEMU_VERSION}"
SOURCE_PACKAGES_DIR="$SCRIPT_DIR/source_packages"
BUILD_DIR="$SCRIPT_DIR/build_dir"
SUDO=sudo
FORCE=0
# 检查是否为root用户
if [ "$(id -u)" -eq 0 ]; then
SUDO=""
fi
# 参数解析
while [[ $# -gt 0 ]]; do
case "$1" in
--version)
QEMU_VERSION="$2"
shift 2
DEST_DIR="${HOME}/opt/qemu-${QEMU_VERSION}" # 更新默认路径
;;
--target-list)
TARGET_LIST="$2"
shift 2
;;
--use-mirror)
USE_MIRROR=1
shift
;;
--dest-dir)
DEST_DIR="$2"
shift 2
;;
-f|--force)
FORCE=1
shift
;;
*)
echo "未知参数: $1"
exit 1
;;
esac
done
# 检查是否已存在qemu-system-loongarch64
QEMU_BINARY="${DEST_DIR}/bin/qemu-system-loongarch64"
if [ -f "$QEMU_BINARY" ] && [ "$FORCE" -eq 0 ]; then
echo "检测到已存在 qemu-system-loongarch64 在 ${QEMU_BINARY}"
echo "如需强制重新构建,请使用 -f 或 --force 参数"
exit 1
fi
# 依赖检查函数
check_dependency() {
if ! dpkg -l | grep -q "^ii $1 "; then
echo "安装依赖: $1"
${SUDO} apt-get install -y "$1"
fi
}
# 镜像源设置
if [[ $USE_MIRROR -eq 1 ]]; then
echo "使用国内镜像源..."
# APT镜像
${SUDO} sed -i \
's|//.*archive.ubuntu.com|//mirrors.ustc.edu.cn|g' \
/etc/apt/sources.list
# PyPI镜像
PIP_MIRROR="https://pypi.mirrors.ustc.edu.cn/simple"
else
PIP_MIRROR="https://pypi.org/simple"
fi
# 更新源
${SUDO} apt-get update
# 安装基础依赖
check_dependency build-essential
check_dependency ninja-build
check_dependency meson
check_dependency pkg-config
check_dependency libglib2.0-dev
check_dependency libslirp-dev
check_dependency wget
check_dependency git
# Python环境配置
if ! command -v python3 &> /dev/null; then
${SUDO} apt-get install -y python3 python3-pip
elif ! command -v pip3 &> /dev/null; then
${SUDO} apt-get install -y python3-pip
fi
if ! pip3 show tomli &> /dev/null; then
pip3 install --user -i $PIP_MIRROR tomli
fi
# 创建目录结构
mkdir -p "$DEST_DIR"
mkdir -p $SOURCE_PACKAGES_DIR
mkdir -p $BUILD_DIR
# 下载源码包
QEMU_TAR="qemu-${QEMU_VERSION}.tar.xz"
QEMU_SRC_DIR="$SOURCE_PACKAGES_DIR/qemu-${QEMU_VERSION}"
if [ ! -f "$SOURCE_PACKAGES_DIR/${QEMU_TAR}" ]; then
echo "正在下载QEMU源码包..."
wget "https://download.qemu.org/${QEMU_TAR}" -O "$SOURCE_PACKAGES_DIR/${QEMU_TAR}"
fi
# 解压源码
if [ ! -d "${QEMU_SRC_DIR}" ]; then
echo "解压QEMU源码..."
tar xf "$SOURCE_PACKAGES_DIR/${QEMU_TAR}" -C $SOURCE_PACKAGES_DIR
fi
# 配置构建目录
BUILD_DIR="$BUILD_DIR/qemu-${QEMU_VERSION}_${TARGET_LIST//,/}"
mkdir -p "${BUILD_DIR}"
pushd $(pwd)
cd "${BUILD_DIR}"
# 运行配置
echo "配置编译参数..."
"${QEMU_SRC_DIR}/configure" \
--prefix="$DEST_DIR" \
--enable-slirp \
--target-list="$TARGET_LIST" \
--enable-kvm
# 编译和安装
echo "开始编译(使用$(nproc)线程)..."
make -j "$(nproc)"
make install
popd
# 清理
rm -rf "./${BUILD_DIR}"
rm -rf "${QEMU_SRC_DIR}"
echo -e "\n编译完成安装路径: ${DEST_DIR}"
echo -e "运行以下命令使用QEMU"
echo -e " 或者将其添加到你的shell配置文件中例如~/.bashrc或~/.zshrc"
echo "export PATH=\"${DEST_DIR}/bin:\$PATH\""