Skip to content

Commit cfa6e35

Browse files
committed
Build test binaries in docker
1 parent a4197ea commit cfa6e35

File tree

4 files changed

+104
-0
lines changed

4 files changed

+104
-0
lines changed

README.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,17 @@ To run test suit use 'check' target, e.g in build directory run:
107107

108108
make check
109109

110+
note that sio2jail may not support newer gcc / libc versions you may be using
111+
(#40). If so you can enable compiling test binaries in docker with cmake option:
112+
113+
-DTEST_COMPILER_IN_DOCKER=YES
114+
115+
By default debian bullseye and gcc 10 will be used. You use other versions with
116+
following cmake options:
117+
118+
-DTEST_COMPILER_IN_DOCKER_DEBIAN_TAG="bookworm"
119+
-DTEST_COMPILER_IN_DOCKER_GCC_VERSION="12"
120+
110121
Notes for developers
111122
--------------------
112123

test/src/CMakeLists.txt

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,36 @@ SET(CMAKE_CXX_FLAGS "-std=c++17 -lm -static -O2")
55
SET(CMAKE_CXX_FLAGS_DEBUG "")
66
SET(CMAKE_CXX_FLAGS_RELEASE "")
77

8+
IF(NOT DEFINED TEST_COMPILER_IN_DOCKER)
9+
SET(TEST_COMPILER_IN_DOCKER "NO")
10+
ENDIF()
11+
12+
IF(TEST_COMPILER_IN_DOCKER STREQUAL "YES")
13+
IF(NOT DEFINED TEST_COMPILER_IN_DOCKER_DEBIAN_TAG)
14+
SET(TEST_COMPILER_IN_DOCKER_DEBIAN_TAG "bullseye")
15+
ENDIF()
16+
17+
IF(NOT DEFINED TEST_COMPILER_IN_DOCKER_GCC_VERSION)
18+
SET(TEST_COMPILER_IN_DOCKER_GCC_VERSION "10")
19+
ENDIF()
20+
21+
SET(CMAKE_C_COMPILER "${CMAKE_CURRENT_SOURCE_DIR}/compiler/docker-gcc.sh")
22+
SET(CMAKE_C_FLAGS "-s2j-debian-image-tag ${TEST_COMPILER_IN_DOCKER_DEBIAN_TAG} \
23+
-s2j-gcc-version ${TEST_COMPILER_IN_DOCKER_GCC_VERSION} \
24+
-s2j-gcc-command gcc-${TEST_COMPILER_IN_DOCKER_GCC_VERSION} \
25+
-s2j-mount ${CMAKE_SOURCE_DIR} \
26+
-s2j-mount ${CMAKE_BINARY_DIR} \
27+
${CMAKE_C_FLAGS}")
28+
SET(CMAKE_CXX_COMPILER "${CMAKE_CURRENT_SOURCE_DIR}/compiler/docker-gcc.sh")
29+
SET(CMAKE_CXX_FLAGS "-s2j-debian-image-tag ${TEST_COMPILER_IN_DOCKER_DEBIAN_TAG} \
30+
-s2j-gcc-version ${TEST_COMPILER_IN_DOCKER_GCC_VERSION} \
31+
-s2j-gcc-command g++-${TEST_COMPILER_IN_DOCKER_GCC_VERSION} \
32+
-s2j-mount ${CMAKE_SOURCE_DIR} \
33+
-s2j-mount ${CMAKE_BINARY_DIR} \
34+
${CMAKE_CXX_FLAGS}")
35+
ENDIF()
36+
37+
838
# Time tests
939
ADD_EXECUTABLE(1-sec-prog 1-sec-prog.c)
1040
ADD_EXECUTABLE(infinite-loop infinite-loop.c)

test/src/compiler/Dockerfile

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
ARG DEBIAN_IMAGE_TAG
2+
FROM debian:${DEBIAN_IMAGE_TAG}
3+
4+
ARG GCC_VERSION
5+
RUN apt update && \
6+
apt install -y \
7+
build-essential \
8+
gcc-${GCC_VERSION} \
9+
gcc-${GCC_VERSION}-multilib \
10+
g++-${GCC_VERSION} \
11+
g++-${GCC_VERSION}-multilib

test/src/compiler/docker-gcc.sh

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
#!/usr/bin/env bash
2+
3+
set -e
4+
5+
s2j_debian_image_tag="bullseye"
6+
s2j_gcc_command="gcc"
7+
s2j_gcc_version="10"
8+
s2j_mounts=()
9+
gcc_args=()
10+
11+
while [ -n "$1" ]; do
12+
case "$1" in
13+
"-s2j-debian-image-tag")
14+
shift
15+
s2j_debian_image_tag="$1"
16+
;;
17+
"-s2j-gcc-command")
18+
shift
19+
s2j_gcc_command="$1"
20+
;;
21+
"-s2j-gcc-version")
22+
shift
23+
s2j_gcc_version="$1"
24+
;;
25+
"-s2j-mount")
26+
shift
27+
s2j_mounts+=("--volume=$1:$1")
28+
;;
29+
*)
30+
gcc_args+=("$1")
31+
;;
32+
esac
33+
shift 1
34+
done
35+
36+
gcc_image_name="sio2jail-compiler-${s2j_debian_image_tag}-${s2j_gcc_version}"
37+
38+
docker build \
39+
--tag "${gcc_image_name}:latest" \
40+
--build-arg "DEBIAN_IMAGE_TAG=${s2j_debian_image_tag}" \
41+
--build-arg "GCC_VERSION=${s2j_gcc_version}" \
42+
"$(dirname "${BASH_SOURCE}")"
43+
44+
docker run \
45+
--rm \
46+
--interactive \
47+
--user="$(id -u):$(id -g)" \
48+
--workdir="$PWD" \
49+
"${s2j_mounts[@]}" \
50+
"${gcc_image_name}" \
51+
"${s2j_gcc_command}" \
52+
"${gcc_args[@]}"

0 commit comments

Comments
 (0)