基于Ubuntu构建LLVM-Tutor开发环境的Docker指南
2025-07-10 01:53:01作者:裴麒琰
概述
本文将详细介绍如何使用Docker快速搭建LLVM-Tutor项目的开发环境。LLVM-Tutor是一个面向LLVM初学者的教程项目,通过这个Docker配置,开发者可以轻松获得一个包含所有必要依赖的隔离开发环境。
环境准备
基础镜像选择
我们选择Ubuntu 22.04作为基础镜像,这是一个长期支持版本(LTS),提供了良好的稳定性和兼容性。
时区设置
为了避免在安装过程中出现交互式时区选择提示,我们预先设置了环境变量:
ENV TZ=Europe/London
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
依赖安装
基础工具
安装构建LLVM-Tutor所需的基础工具链:
- Git:用于代码版本控制
- CMake:项目构建系统
- Ninja:高效的构建工具
- Build-essential:基础编译工具链
- Python3:测试框架依赖
RUN apt-get update && apt-get install -y \
git \
cmake \
ninja-build \
build-essential \
python3-minimal python3-pip\
wget \
libzstd-dev \
software-properties-common
LLVM安装
我们通过LLVM官方APT仓库安装LLVM-19版本:
- 添加LLVM官方GPG密钥
- 添加APT仓库源
- 安装LLVM-19相关组件
RUN wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add -
RUN apt-add-repository "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-19 main"
RUN apt-get install -y llvm-19 llvm-19-dev llvm-19-tools clang-19
测试环境配置
LIT安装
LLVM集成测试框架(LIT)是LLVM项目的标准测试工具,我们通过pip安装:
RUN pip3 install lit
LLVM-Tutor项目构建
项目克隆
从代码仓库克隆LLVM-Tutor项目到容器内的指定目录:
RUN git clone https://github.com/banach-space/llvm-tutor $TUTOR_DIR
HelloWorld示例构建
构建HelloWorld示例项目,这是一个简单的LLVM pass示例:
RUN mkdir -p $TUTOR_DIR/hello-world-build \
&& cd $TUTOR_DIR/hello-world-build \
&& cmake -G Ninja -DLT_LLVM_INSTALL_DIR=$LLVM_DIR ../HelloWorld \
&& ninja
HelloWorld测试
使用clang生成LLVM IR,然后通过opt工具运行HelloWorld pass进行测试:
RUN cd $TUTOR_DIR/hello-world-build && /usr/bin/clang-19 -S -O1 -emit-llvm ../inputs/input_for_hello.c -o input_for_hello.ll
RUN cd $TUTOR_DIR/hello-world-build && /usr/bin/opt-19 -load-pass-plugin ./libHelloWorld.so -passes=hello-world -disable-output input_for_hello.ll 2>&1 | grep "(llvm-tutor) Hello from: foo"
完整项目构建与测试
构建整个LLVM-Tutor项目并运行所有测试用例:
RUN mkdir -p $TUTOR_DIR/build \
&& cd $TUTOR_DIR/build \
&& cmake -DLT_LLVM_INSTALL_DIR=$LLVM_DIR ../ \
&& make -j $(nproc --all) \
&& lit test/
使用指南
- 构建Docker镜像:
docker build -t=llvm-tutor:llvm-19 .
- 运行容器:
docker run --rm -it --hostname=llvm-tutor llvm-tutor:llvm-19 /bin/bash
进入容器后,您可以直接开始LLVM pass的开发工作,所有必要的工具和环境都已配置完成。
总结
这个Docker配置为LLVM-Tutor项目提供了一个完整的开发环境,包含了从LLVM工具链到测试框架的所有必要组件。通过容器化部署,开发者可以避免复杂的本地环境配置,快速投入到LLVM pass的学习和开发中。