From c23dbf461bb3834a3dc62a4cd0cfa0825f94eda9 Mon Sep 17 00:00:00 2001
From: Florian Fischer <florian.fischer@muhq.space>
Date: Fri, 30 Jul 2021 14:56:48 +0200
Subject: [PATCH] add docker tooling

---
 Makefile             |  5 ++++-
 docker.sh            | 16 ++++++++++++++++
 tools/docker-prepare | 19 +++++++++++++++++++
 3 files changed, 39 insertions(+), 1 deletion(-)
 create mode 100755 docker.sh
 create mode 100755 tools/docker-prepare

diff --git a/Makefile b/Makefile
index a86621d..f926c3d 100644
--- a/Makefile
+++ b/Makefile
@@ -8,11 +8,14 @@ LDFLAGS := -luring -pthread -lrt
 # CFLAGS := -Werror -Wall -g -O3
 CFLAGS := -Werror -Wall -g -O0
 
-.PHONY: all clean eval
+.PHONY: all clean eval docker-eval
 
 eval: all
 	@for syscall in $(SYSCALLS); do echo -n "$$syscall " ; ./bench-$$syscall; done
 
+docker-eval:
+	./docker.sh make eval
+
 all: $(OBJ)
 
 define generateTargets
diff --git a/docker.sh b/docker.sh
new file mode 100755
index 0000000..07ced4a
--- /dev/null
+++ b/docker.sh
@@ -0,0 +1,16 @@
+#!/usr/bin/env bash
+
+# The directory of this script is also the project's root directory.
+ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
+
+IMAGE=$(sed --regexp-extended --quiet 's;^image: "([^"]*)"$;\1;p' "${ROOT}/.gitlab-ci.yml")
+
+docker run \
+	   --volume="${ROOT}:${ROOT}" \
+	   --interactive \
+	   --tty \
+	   --security-opt seccomp=.docker-seccomp-profile.json \
+	   --env USER_ID="${UID}" \
+	   --env GROUP_ID="$(id -g ${USER})" \
+	   "${IMAGE}" \
+	   "${ROOT}/tools/docker-prepare" "${ROOT}" $@
diff --git a/tools/docker-prepare b/tools/docker-prepare
new file mode 100755
index 0000000..ca7d8a5
--- /dev/null
+++ b/tools/docker-prepare
@@ -0,0 +1,19 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+useradd -u "${USER_ID}" -o -m user
+groupmod -g "${GROUP_ID}" user
+
+if [[ ! -f "/usr/lib/libomp.so" ]] && [[ -f /usr/lib/llvm-12/lib/libomp.so ]]; then
+	ln -s /usr/lib/llvm-12/lib/libomp.so /usr/lib
+fi
+
+ln -s /usr/bin/perf_5.10 /usr/bin/perf
+
+OUTSIDE_ROOT="${1}"
+shift
+
+cd "${OUTSIDE_ROOT}"
+
+# shellcheck disable=SC2068
+exec sudo -u user $@
-- 
GitLab