add docker setup

This commit is contained in:
Chris Copeland 2022-08-02 02:21:14 -07:00
parent 6756465ce8
commit 40bf42ecba
Signed by: chrisnc
GPG Key ID: 14550DA72485DF30
11 changed files with 124 additions and 70 deletions

1
.dockerignore Normal file
View File

@ -0,0 +1 @@
*

2
.gitignore vendored
View File

@ -1,2 +1,2 @@
/dist/
/build/
.sconsign.dblite

12
Dockerfile Normal file
View File

@ -0,0 +1,12 @@
FROM debian:bookworm
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update \
&& apt-get install -y \
clang \
llvm \
scons
RUN useradd rt
USER rt

View File

@ -1,64 +0,0 @@
import os
import sys
llvm_flags = [
"-g",
"-Os",
"-ffunction-sections",
"-fdata-sections",
"-flto",
]
env = Environment(
CPPPATH=["include"],
CCFLAGS=llvm_flags,
CFLAGS=["-std=c99"],
LINKFLAGS=llvm_flags,
)
# for color terminal output when available
if "TERM" in os.environ:
env["ENV"]["TERM"] = os.environ["TERM"]
if "darwin" in sys.platform:
env["CC"] = "clang"
env.Append(
CCFLAGS=[
"-Weverything",
"-Werror",
"-Wno-padded",
"-Wno-poison-system-directories",
],
LINKFLAGS=["-dead_strip"],
)
elif "linux" in sys.platform:
env["CC"] = "gcc"
env.Append(CPPDEFINES=[("_POSIX_C_SOURCE", "200809L")])
env.Append(LINKFLAGS=["-Wl,--gc-sections"])
librt = env.StaticLibrary(
target="rt",
source=[
"src/rt.c",
"src/tick.c",
"src/critical.c",
"src/delay.c",
"src/queue.c",
"src/sem.c",
],
)
posix_env = env.Clone()
posix_env.Append(
CCFLAGS="-pthread",
LINKFLAGS="-pthread",
)
posix_port = posix_env.Object("src/port/posix.c")
posix_simple = posix_env.Object(target="posix_simple", source="examples/simple.c")
posix_delay = posix_env.Object(target="posix_delay", source="examples/delay.c")
posix_queue = posix_env.Object(target="posix_queue", source="examples/queue.c")
posix_env.Program([posix_simple, librt, posix_port])
posix_env.Program([posix_delay, librt, posix_port])
posix_env.Program([posix_queue, librt, posix_port])

View File

@ -1,5 +1,66 @@
SConscript(
dirs=".",
variant_dir="dist",
duplicate=False,
import os
import sys
llvm_flags = [
"-g",
"-Os",
"-ffunction-sections",
"-fdata-sections",
"-flto",
]
env = Environment(
CPPPATH=[Dir("include").srcnode()],
CCFLAGS=llvm_flags,
CFLAGS=["-std=c99"],
LINKFLAGS=llvm_flags,
)
# for color terminal output when available
if "TERM" in os.environ:
env["ENV"]["TERM"] = os.environ["TERM"]
env["CC"] = "clang"
env.Append(
CCFLAGS=[
"-Weverything",
"-Werror",
"-Wno-padded",
"-Wno-poison-system-directories",
"-Wno-declaration-after-statement",
"-Wno-disabled-macro-expansion",
],
)
if "darwin" in sys.platform:
env.Append(
LINKFLAGS=["-dead_strip"],
)
elif "linux" in sys.platform:
env.Append(
CPPDEFINES={"_POSIX_C_SOURCE": "200809L"}, LINKFLAGS=["-Wl,--gc-sections"]
)
librt = SConscript(
dirs="src", variant_dir="build/lib", duplicate=False, exports=["env"]
)
posix_env = env.Clone()
posix_env.Append(
CCFLAGS="-pthread",
LINKFLAGS="-pthread",
)
libposix = SConscript(
"arch/posix/SConscript",
variant_dir="build/lib/posix",
duplicate=False,
exports={"env": posix_env},
)
example_env = posix_env.Clone()
example_env.Append(LIBS=[librt, libposix])
SConscript(
dirs="examples", variant_dir="build", duplicate=False, exports={"env": example_env}
)

5
arch/posix/SConscript Normal file
View File

@ -0,0 +1,5 @@
Import("env")
libposix = env.StaticLibrary("posix.c")
Return("libposix")

19
docker.bash Executable file
View File

@ -0,0 +1,19 @@
#!/bin/bash
set -xe
name="rt"
image="$name-builder"
docker build --tag "$image" .
workdir="/home/$name/$name"
docker run \
--rm \
--tty \
--interactive \
--volume "$(pwd):$workdir" \
--workdir "$workdir" \
--cap-add SYS_PTRACE \
"$image"

5
examples/SConscript Normal file
View File

@ -0,0 +1,5 @@
Import("env")
env.Program("simple.c")
env.Program("delay.c")
env.Program("queue.c")

15
src/SConscript Normal file
View File

@ -0,0 +1,15 @@
Import("env")
librt = env.StaticLibrary(
target="rt",
source=[
"rt.c",
"tick.c",
"critical.c",
"delay.c",
"queue.c",
"sem.c",
],
)
Return("librt")

View File

@ -9,7 +9,7 @@ static rt_tick_t rt_ticks;
void rt_tick(void)
{
++rt_ticks;
#if RT_LOG
#ifdef RT_LOG
printf("tick %lu\n", rt_ticks);
fflush(stdout);
#endif