rose-docker-build-skill

DevOps & Cloud
v0.1.1
Benign

Build the ROSE compiler in a Docker container using autotools or CMake.

1K downloads1K installsby @chunhualiao

Setup & Installation

Install command

clawhub install chunhualiao/rose-docker-build-skill

If the CLI is not installed:

Install command

npx clawhub@latest install chunhualiao/rose-docker-build-skill

Or install with OpenClaw CLI:

Install command

openclaw skills install chunhualiao/rose-docker-build-skill

or paste the repo link into your assistant's chat

Install command

https://github.com/openclaw/skills/tree/main/skills/chunhualiao/rose-docker-build-skill

What This Skill Does

Builds the ROSE source-to-source compiler inside a Docker container using either autotools or CMake. ROSE requires GCC 7-10, which conflicts with GCC 11+ on modern hosts, making Docker the practical build environment. Supports editing source on the host while compiling inside the container.

Avoids GCC version conflicts by isolating the build in a container, so users don't need to downgrade or maintain a separate toolchain on their host system.

When to Use It

  • Setting up a ROSE development environment on a machine with GCC 11+
  • Building ROSE from the weekly branch with EDG C++ frontend binaries
  • Running source-to-source transformations on C/C++ programs
  • Comparing autotools and CMake build times for ROSE
  • Troubleshooting EDG binary linking or ROSETTA generation failures
View original SKILL.md file
# ROSE Docker Build

Build the ROSE source-to-source compiler in an isolated Docker container.

## Why Docker?

ROSE requires GCC 7-10. Modern systems have GCC 11+, causing build failures. Docker provides:
- Correct GCC version (9.x recommended)
- All dependencies pre-installed
- Reproducible builds
- Edit on host, build in container

## Quick Start (Autotools)

```bash
# 1. Clone ROSE
git clone git@github.com:rose-compiler/rose.git
cd rose && git checkout weekly

# 2. Create Docker environment
mkdir ../rose-docker && cd ../rose-docker

# 3. Build and run container (see Dockerfile below)
docker build -t rose-dev .
docker run -d --name rose-dev -v $(pwd)/../rose:/rose/src rose-dev

# 4. Build ROSE inside container
docker exec rose-dev bash -c 'cd /rose/src && ./build'
docker exec rose-dev bash -c 'mkdir -p /rose/build && cd /rose/build && \
  /rose/src/configure --prefix=/rose/install \
    --enable-languages=c,c++ \
    --with-boost=/usr \
    --with-boost-libdir=/usr/lib/x86_64-linux-gnu \
    --disable-binary-analysis \
    --disable-java'
docker exec rose-dev bash -c 'cd /rose/build && make core -j$(nproc)'
docker exec rose-dev bash -c 'cd /rose/build && make install-core'
```

## Quick Start (CMake)

CMake builds require CMake 4.x (3.16 fails at ROSETTA generation).

```bash
# 1. Clone ROSE
git clone git@github.com:rose-compiler/rose.git
cd rose && git checkout weekly

# 2. Create Docker environment and build container
mkdir ../rose-docker && cd ../rose-docker
docker build -t rose-dev -f Dockerfile.cmake .
docker run -d --name rose-cmake -v $(pwd)/../rose:/rose/src:ro rose-dev

# 3. Configure with CMake
docker exec -w /rose/build rose-cmake cmake /rose/src \
  -DCMAKE_INSTALL_PREFIX=/rose/install \
  -DENABLE_C=ON \
  -DENABLE_TESTS=OFF \
  -DCMAKE_BUILD_TYPE=Release

# 4. Build (use -j4 to avoid OOM on 16GB systems)
docker exec -w /rose/build rose-cmake make -j4

# 5. Test
docker exec rose-cmake /rose/build/bin/rose-compiler --version
```

### CMake Options

| Option | Description |
|--------|-------------|
| `ENABLE_C=ON` | Enable C/C++ analysis (uses EDG frontend) |
| `ENABLE_BINARY_ANALYSIS=ON` | Enable binary analysis (no EDG needed) |
| `ENABLE_TESTS=OFF` | Skip test compilation (faster build) |
| `CMAKE_BUILD_TYPE=Release` | Optimized build |

### CMake vs Autotools

| Feature | Autotools | CMake |
|---------|-----------|-------|
| Stability | ✅ Mature | ⚠️ Newer |
| C/C++ analysis | ✅ Works | ✅ Works (with fixes) |
| Build target | `make core` | `make` (full build) |
| Incremental builds | Slower | Faster |
| IDE integration | Limited | Excellent |

## Dockerfiles

### Dockerfile (Autotools)

```dockerfile
FROM ubuntu:20.04
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=America/Los_Angeles

RUN apt-get update && apt-get install -y \
    build-essential g++ gcc gfortran \
    automake autoconf libtool flex bison \
    libboost-all-dev libxml2-dev \
    git wget curl vim \
    && rm -rf /var/lib/apt/lists/*

RUN useradd -m -s /bin/bash developer
RUN mkdir -p /rose/src /rose/build /rose/install && chown -R developer:developer /rose
USER developer
WORKDIR /rose
CMD ["tail", "-f", "/dev/null"]
```

### Dockerfile.cmake (CMake)

```dockerfile
FROM ubuntu:20.04
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=America/Los_Angeles

# Install build dependencies
RUN apt-get update && apt-get install -y \
    build-essential g++ gcc gfortran \
    flex bison \
    libboost-all-dev libxml2-dev libreadline-dev \
    zlib1g-dev libsqlite3-dev libpq-dev libyaml-dev \
    libgmp-dev libmpc-dev libmpfr-dev \
    git wget curl vim \
    gnupg software-properties-common \
    && rm -rf /var/lib/apt/lists/*

# Install CMake 4.x from Kitware (Ubuntu 20.04 has 3.16 which is too old)
RUN wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | apt-key add - \
    && echo 'deb https://apt.kitware.com/ubuntu/ focal main' > /etc/apt/sources.list.d/kitware.list \
    && apt-get update && apt-get install -y cmake \
    && rm -rf /var/lib/apt/lists/*

RUN useradd -m -s /bin/bash developer
RUN mkdir -p /rose/src /rose/build /rose/install && chown -R developer:developer /rose
USER developer
WORKDIR /rose
CMD ["tail", "-f", "/dev/null"]
```

## EDG Binary Handling

EDG (C++ frontend) binaries are required for C/C++ analysis. The build checks:

### Autotools
1. Build directory for existing tarball
2. Source tree at `src/frontend/CxxFrontend/roseBinaryEDG-*.tar.gz`
3. Network download from `edg-binaries.rosecompiler.org`

### CMake
1. Source tree at `src/frontend/CxxFrontend/roseBinaryEDG-*.tar.gz` (auto-detected)
2. Extracts matching tarball based on GCC version at build time
3. Links `libroseEDG.a` to `librose.so` automatically

If server is down, ensure source tree has EDG binaries (included in `weekly` branch).

## Common Commands

### Autotools
```bash
# Rebuild after source changes
docker exec rose-dev bash -c 'cd /rose/build && make core -j8'

# Install
docker exec rose-dev bash -c 'cd /rose/build && make install-core'
```

### CMake
```bash
# Rebuild after source changes  
docker exec -w /rose/build rose-cmake make -j4

# Install
docker exec -w /rose/build rose-cmake make install
```

### Both
```bash
# Test ROSE compiler
docker exec rose-dev /rose/install/bin/rose-compiler --version
docker exec rose-cmake /rose/build/bin/rose-compiler --version

# Source-to-source test
docker exec rose-dev bash -c 'echo "int main(){return 0;}" > /tmp/test.c && \
  /rose/install/bin/rose-compiler -c /tmp/test.c && cat rose_test.c'

# Enter container shell
docker exec -it rose-dev bash
docker exec -it rose-cmake bash
```

## Build Time

| Build System | First Build | Incremental |
|--------------|-------------|-------------|
| Autotools (`make core -j8`) | ~60-90 min | seconds-minutes |
| CMake (`make -j4`) | ~35 min | seconds-minutes |

- `librose.so`: ~200 MB (CMake) to ~1.3 GB (autotools with debug)
- Memory: Use `-j4` on 16GB systems to avoid OOM

## Troubleshooting

| Issue | Solution |
|-------|----------|
| EDG download fails | Use `weekly` branch (has EDG binaries in source tree) |
| CMake: ROSETTA fails | Upgrade to CMake 4.x |
| CMake: EDG link errors | Ensure using latest CMake fixes (PR #250) |
| CMake: quadmath errors | Add `-lquadmath` or use latest fixes |
| Permission denied | Check volume mount permissions |
| Out of memory | Reduce `-j` parallelism |
| Boost not found | Verify boost paths in configure/cmake |

## Testing with Sample Code

```bash
# Create factorial test
cat << 'EOF' | docker exec -i rose-cmake tee /tmp/factorial.cpp
#include <iostream>
int factorial(int n) { return n <= 1 ? 1 : n * factorial(n-1); }
int main() {
    for(int i = 0; i <= 10; i++)
        std::cout << "factorial(" << i << ") = " << factorial(i) << std::endl;
    return 0;
}
EOF

# Run through ROSE (source-to-source transformation)
docker exec -w /tmp rose-cmake /rose/build/bin/rose-compiler factorial.cpp

# Compile and run the transformed code
docker exec -w /tmp rose-cmake g++ rose_factorial.cpp -o factorial_test
docker exec -w /tmp rose-cmake ./factorial_test
```

Expected output:
```
factorial(0) = 1
factorial(1) = 1
...
factorial(10) = 3628800
```

Example Workflow

Here's how your AI assistant might use this skill in practice.

INPUT

User asks: Setting up a ROSE development environment on a machine with GCC 11+

AGENT
  1. 1Setting up a ROSE development environment on a machine with GCC 11+
  2. 2Building ROSE from the weekly branch with EDG C++ frontend binaries
  3. 3Running source-to-source transformations on C/C++ programs
  4. 4Comparing autotools and CMake build times for ROSE
  5. 5Troubleshooting EDG binary linking or ROSETTA generation failures
OUTPUT
Build the ROSE compiler in a Docker container using autotools or CMake.

Share this skill

Security Audits

VirusTotalBenign
OpenClawBenign
View full report

These signals reflect official OpenClaw status values. A Suspicious status means the skill should be used with extra caution.

Details

LanguageMarkdown
Last updatedFeb 28, 2026