搜索

PythonReactSEOPDF
GitHub Skill

compile-compcert

Guide for building CompCert, the formally verified C compiler, from source. This skill should be used when compiling, building, or installing CompCert, or when working with Coq-based software that has strict dependency version requirements. Covers OCaml/opam setup, Coq version compatibility, memory management, and common build pitfalls.

letta-ai☆ 46 仓库 Stars7 仓库 Forks

安装与使用

请根据来源仓库和你的 AI 工具说明安装此技能。先阅读技能文件和依赖要求,再添加到工作流。

查看来源 ↗使用指南

技能说明

Compile CompCert

Overview

CompCert is a formally verified C compiler built with Coq proof assistant. Building it from source requires careful attention to dependency versions, particularly Coq compatibility, and resource constraints in containerized environments.

Pre-Build Investigation (Critical First Step)

Before installing any dependencies, download and examine CompCert's requirements:

  1. Download CompCert source first

    • Obtain the source tarball or clone the repository
    • Check the configure script for version requirements: grep -i "coq" configure
    • Review README or INSTALL files for dependency specifications
  2. Identify exact Coq version requirements

    • CompCert has strict Coq version bounds (e.g., CompCert 3.13.1 requires Coq ≤ 8.16.1)
    • Installing an incompatible Coq version wastes significant time and resources
    • Check both minimum and maximum supported versions
  3. Assess system environment

    • Check architecture: uname -m (typically x86_64)
    • Check available memory: free -h
    • Determine if running in container (affects swap, permissions)
    • Verify privileged operations availability (swap creation usually fails in containers)

Dependency Chain

Install dependencies in this order, with version awareness:

1. System Packages

Install all system dependencies in a single command:

apt-get update && apt-get install -y opam gcc g++ make libgmp-dev pkg-config
2. OCaml/opam Setup
opam init -y --disable-sandboxing
eval $(opam env)

Memory optimization: Set job limit immediately after init to prevent OOM:

opam config set-global jobs 1
3. Coq Installation (Version Critical)
  • Do NOT install latest Coq - check CompCert's requirements first
  • Install the correct version: opam install coq.X.Y.Z menhir
  • Common compatible versions:
    • CompCert 3.13.x: Coq 8.16.1 or earlier
    • CompCert 3.12.x: Coq 8.15.x or earlier
4. CompCert Build
./configure <target-arch>   # e.g., x86_64-linux
make
make install PREFIX=<path>

Memory Management in Constrained Environments

Coq and CompCert compilation are memory-intensive:

  1. Limit parallel jobs: opam config set-global jobs 1 before any opam install
  2. Do NOT attempt swap creation in containers - swapon fails with "Operation not permitted"
  3. Monitor memory usage during compilation: watch free -h
  4. If OOM occurs: Kill stuck processes and retry with lower parallelism

Verification Strategy

After build completion, verify:

  1. Binary exists and is executable

    test -x /path/to/ccomp && echo "exists"
    
  2. Compiler functions correctly

    echo 'int main() { return 0; }' > /tmp/test.c
    ccomp -o /tmp/test /tmp/test.c
    /tmp/test && echo "success"
    
  3. Expected behavior for unsupported features

    • CompCert should reject certain C features (e.g., some GNU extensions)
    • Test with known unsupported constructs to verify proper rejection

Common Pitfalls

Version Mismatch (Most Common)
  • Symptom: Build fails with Coq compatibility errors
  • Cause: Installed Coq version outside CompCert's supported range
  • Prevention: Always check configure script before installing Coq
OOM During Coq Installation
  • Symptom: Process killed, system becomes unresponsive
  • Cause: Parallel compilation exceeds available memory
  • Prevention: Set jobs 1 immediately after opam init
Missing System Dependencies
  • Symptom: Configure or build fails with missing library errors
  • Cause: Incremental dependency installation
  • Prevention: Install all system packages upfront (libgmp-dev, pkg-config, etc.)
Binary Path Confusion
  • Symptom: make install places binary in unexpected location
  • Cause: Default PREFIX vs expected installation path differ
  • Prevention: Specify exact paths during configure, or create symlinks post-install
Swap Creation Failure in Containers
  • Symptom: swapon failed: Operation not permitted
  • Cause: Container lacks privileges for swap operations
  • Prevention: Do not attempt swap creation; rely on job limiting instead

Efficient Build Workflow Summary

  1. Download CompCert source
  2. Check version requirements in configure script
  3. Assess system resources and environment
  4. Install ALL system packages in one command
  5. Initialize opam with job limit set to 1
  6. Install correct Coq version (not latest)
  7. Configure and build CompCert
  8. Verify binary location and create symlinks if needed
  9. Run verification tests

使用示例

查看来源仓库中的使用示例与配置说明。

查看来源 ↗

来源历史

收录时间
2026-01-20
索引更新时间
2026-02-04
Branch
main

收录与同步日期属于本站记录。源码修改历史请查看来源仓库。

GitHub ↗

chat Comments (0)

chat_bubble_outline

No comments yet. Be the first to share your thoughts!