Skip to content

Commit e1ed334

Browse files
authored
Add Dockerfile and build script for c2rust (#105)
* Add Dockerfile and build script for c2rust * Set rpath to $ORIGIN so correct SOs get used
1 parent 9542267 commit e1ed334

File tree

2 files changed

+76
-0
lines changed

2 files changed

+76
-0
lines changed

Dockerfile.c2rust

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
FROM ubuntu:20.04
2+
3+
ARG DEBIAN_FRONTEND=noninteractive
4+
RUN dpkg --add-architecture i386
5+
RUN apt update -y -q && apt upgrade -y -q && apt update -y -q && \
6+
apt install -y -q \
7+
build-essential \
8+
clang \
9+
cmake \
10+
curl \
11+
git \
12+
libclang-dev \
13+
libssl-dev \
14+
llvm \
15+
patchelf \
16+
pkg-config \
17+
python3
18+
19+
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain none
20+
21+
RUN mkdir -p /root
22+
COPY c2rust /root/
23+
COPY common.sh /root/
24+
25+
WORKDIR /root

c2rust/build.sh

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#!/bin/bash
2+
3+
set -exu
4+
source common.sh
5+
source $HOME/.cargo/env
6+
7+
## $1 : version, like v0.9 (tag) or master (branch)
8+
## $2 : destination: a directory or S3 path (eg. s3://...)
9+
## $3 : last revision successfully built (optional)
10+
11+
VERSION=$1
12+
13+
# TODO: Add support for building tagged releases.
14+
if [[ "${VERSION}" != "master" ]]; then
15+
echo "Only support building master"
16+
exit 1
17+
fi
18+
19+
VERSION=master-$(date +%Y%m%d)
20+
BRANCH=master
21+
22+
URL=https://github.com/immunant/c2rust
23+
24+
FULLNAME=c2rust-${VERSION}.tar.xz
25+
OUTPUT=$2/${FULLNAME}
26+
27+
REVISION="c2rust-$(get_remote_revision "${URL}" "heads/${BRANCH}")"
28+
LAST_REVISION="${3:-}"
29+
30+
initialise "${REVISION}" "${OUTPUT}" "${LAST_REVISION}"
31+
32+
OUT=$(pwd)/out
33+
DIR=$(pwd)/c2rust
34+
BUILD=${DIR}/target/release
35+
36+
git clone --depth 1 -b "${BRANCH}" "${URL}" "${DIR}"
37+
38+
cd $DIR
39+
rustup toolchain install
40+
cargo build --release
41+
mkdir -p "${OUT}"
42+
43+
cp "${BUILD}/c2rust" "${BUILD}/c2rust-transpile" "${OUT}"
44+
45+
# Copy all dependency .so files into the output dir and then set the RPATH to
46+
# $ORIGIN so that the local version gets used instead of whatever is insalled
47+
# globally.
48+
cp $(ldd "${OUT}"/* | grep -E '=> /' | grep -Ev 'lib(pthread|c|dl|rt)\.so' | awk '{print $3}' | uniq) "${OUT}"
49+
patchelf --set-rpath '$ORIGIN' $"$OUT"/*
50+
51+
complete "${OUT}" "c2rust-${VERSION}" "${OUTPUT}"

0 commit comments

Comments
 (0)