# [Infer](https://github.com/facebook/infer/commits/main/) ###### tags: `rv32emu` 目前使用 infer 有兩個方法 - Build from source (建議使用這個) - 使用官方 2021 年的 [v1.1.0](https://github.com/facebook/infer/releases)(已經年代久遠了) # Build from source 建立一個 Dockerfile ```dockerfile= FROM ubuntu:22.04 RUN apt-get update && \ mkdir -p /usr/share/man/man1 && \ apt-get install --yes --no-install-recommends \ git ca-certificates build-essential autoconf automake cmake python3 curl sqlite3 \ opam zlib1g-dev libgmp-dev libsqlite3-dev pkg-config && \ rm -rf /var/lib/apt/lists/* RUN opam init --disable-sandboxing -y RUN git clone https://github.com/facebook/infer.git && \ cd infer && \ # Compile Infer to support C and Python3 ./build-infer.sh -y clang python && \ # Install Infer system-wide make install ``` 建立 docker image (記得設定 commit number) -> 此步驟在 node11 上花費約 90 分鐘 ```bash= docker buildx build --progress=plain --platform linux/amd64 --tag sysprog21/infer:{commit_number} . ``` 執行 docker image 建立 container ```bash= docker run --rm -v ${PWD}:/root/rv32emu -it sysprog21/infer:{commit_number} ``` 執行以下命令使用 infer ```bash= make distclean infer -- make ENABLE_SDL=0 ENABLE_LTO=0 ENABLE_JIT=1 ENABLE_EXT_F=0 ``` # 使用 v1.1.0 建立一個 Dockerfile,打包 infer 進一個 docker image 中 ```dockerfile= FROM debian:bullseye-slim LABEL maintainer "Infer team" # mkdir the man/man1 directory due to Debian bug #863199 RUN apt-get update && \ mkdir -p /usr/share/man/man1 && \ apt-get install --yes --no-install-recommends \ curl \ libc6-dev \ openjdk-11-jdk-headless \ sqlite3 \ xz-utils \ zlib1g-dev && \ rm -rf /var/lib/apt/lists/* # Download the Infer release RUN INFER_VERSION=v1.1.0; \ cd /opt && \ curl -sL \ https://github.com/facebook/infer/releases/download/${INFER_VERSION}/infer-linux64-${INFER_VERSION}.tar.xz | \ tar xJ && \ rm -f /infer && \ ln -s ${PWD}/infer-linux64-$INFER_VERSION /infer # Install infer ENV PATH /infer/bin:${PATH} ``` 建立 docker image ```bash= docker build -t infer:1.1.0 . ``` 執行對 rv32emu 的檢查 ```dockerfile= FROM infer:1.1.0 # copy in the source code WORKDIR /home/root/rv32emu COPY . . make distclean infer -- make ENABLE_SDL=0 ENABLE_LTO=0 ENABLE_JIT=1 ENABLE_EXT_F=0 ``` # Known issues - 如果開啟 LTO 會觸發 infer 的 BUG,目前無解。 - 目前 build from source 在 M1 上面無法正常編譯,所遺執行環境目前都是使用 node11。