diff --git a/Makefile b/Makefile index 06a4e5e..1f319af 100644 --- a/Makefile +++ b/Makefile @@ -39,6 +39,7 @@ $(PORTABLE_WORSPACE)CONTAINER_PROJECT_ROOT = $(abspath $(PROJECT_ROOT)) $(PORTABLE_WORSPACE)CONTAINER_OUT = $(abspath $(OUT)) UBUNTU_CODENAME ?= bionic +DEBIAN_CODENAME ?= testing-slim # Dependencies @@ -80,12 +81,17 @@ MARCH := $(MARCH) MARCH_AMD64 := $(filter-out amd64,$(MARCH)) $(MARCH_AMD64)MARCHS += amd64 -$(MARCH_AMD64)TARGETS += amd64-ubuntu-builder +$(MARCH_AMD64)$(BUILDTARGET)TARGETS += amd64-ubuntu-builder $(OUT)/amd64-ubuntu-builder/rules.mk: TARGET := amd64-ubuntu-builder +MARCH_AMD64 := $(filter-out amd64,$(MARCH)) +$(MARCH_AMD64)MARCHS += amd64 +$(MARCH_AMD64)$(BUILDTARGET)TARGETS += amd64-debian-builder +$(OUT)/amd64-debian-builder/rules.mk: TARGET := amd64-debian-builder + MARCH_ARM32V7 := $(filter-out arm32v7,$(MARCH)) $(MARCH_ARM32V7)MARCHS += arm32v7 -$(MARCH_ARM32V7)TARGETS += arm32v7-ubuntu-builder +$(MARCH_ARM32V7)$(BUILDTARGET)TARGETS += arm32v7-ubuntu-builder $(OUT)/arm32v7-ubuntu-builder/rules.mk: TARGET := arm32v7-ubuntu-builder $(MARCH_AMD64)MEMCHECK_TARGETS += $(addprefix memcheck-,$(TARGETS)) @@ -96,6 +102,9 @@ $(addprefix $(OUT)/docker/,$(ARM_TARGETS)): $(OUT)/docker/qemu-arm-static-$(QEMU UBUNTU_TARGETS = $(filter $(addsuffix -ubuntu%,$(MARCHS)),$(TARGETS)) $(addprefix $(OUT)/docker/,$(UBUNTU_TARGETS)): CODENAME := $(UBUNTU_CODENAME) +DEBIAN_TARGETS = $(filter $(addsuffix -debian%,$(MARCHS)),$(TARGETS)) +$(addprefix $(OUT)/docker/,$(DEBIAN_TARGETS)): CODENAME := $(DEBIAN_CODENAME) + # Common rule target configuration CMAKEFLAGS += '-GNinja' @@ -142,6 +151,7 @@ EXTRACT_TARGETS += $(patsubst $(OUT)/%.tar.gz,$(OUT)/src/%,$(FETCH_TARGETS)) DISCOVER_CC_TARGETS += $(addprefix discover-cc-,$(firstword $(TARGETS))) RULE_TARGETS += $(addsuffix /rules.mk,$(OUT_TARGETS)) +MARCHS := $(sort $(MARCHS)) TARGETS := $(sort $(TARGETS)) # Macros diff --git a/build/amd64-debian-builder.dockerfile b/build/amd64-debian-builder.dockerfile new file mode 100644 index 0000000..fb774f6 --- /dev/null +++ b/build/amd64-debian-builder.dockerfile @@ -0,0 +1,103 @@ +ARG CODENAME=testing-slim + +FROM debian:$CODENAME as builder + +RUN set -x \ + && apt update \ + && apt upgrade -y \ + && apt install --yes --no-install-recommends \ + build-essential \ + cmake \ + ninja-build \ + pkg-config \ + rsync \ + gdb \ + gdbserver \ + valgrind + +COPY src /usr/local/src + +ARG PARALLELMFLAGS=-j2 + +ARG DUMB_INIT_VERISON=1.2.2 + +RUN set -x \ + && builddeps="xxd" \ + && apt install --yes --no-install-recommends $builddeps \ + && builddir="/tmp/out" \ + && mkdir -p "$builddir" \ + && cd "$builddir" \ + && cp -R "/usr/local/src/dumb-init-$DUMB_INIT_VERISON" . \ + && cd dumb-init-$DUMB_INIT_VERISON \ + && make "$PARALLELMFLAGS" \ + && chmod +x dumb-init \ + && mv dumb-init /usr/local/bin/dumb-init \ + && dumb-init --version \ + && rm -rf "$builddir" \ + && apt purge -y $builddeps + +ARG GTEST_VERSION=1.8.1 + +RUN set -x \ + && builddir="/tmp/out" \ + && mkdir -p "$builddir" \ + && cd "$builddir" \ + && cmake "/usr/local/src/googletest-release-$GTEST_VERSION" \ + && make "$PARALLELMFLAGS" install \ + && rm -rf "$builddir" + +ARG FUSE_VERSION=3.1.1 + +RUN set -x \ + && builddeps="libtool automake gettext" \ + && apt install --yes --no-install-recommends $builddeps \ + && cd "/usr/local/src/libfuse-fuse-$FUSE_VERSION" \ + && ./makeconf.sh \ + && builddir="/tmp/out" \ + && mkdir -p "$builddir" \ + && cd "$builddir" \ + && "/usr/local/src/libfuse-fuse-$FUSE_VERSION/configure" \ + && make "$PARALLELMFLAGS" install \ + && rm -rf "$builddir" \ + && apt purge -y $builddeps + +ARG WEBSOCKETS_VERSION=3.1.0 + +RUN set -x \ + && apt install --yes --no-install-recommends \ + ca-certificates \ + openssl \ + libssl-dev \ + && builddir="/tmp/out" \ + && mkdir -p "$builddir" \ + && cd "$builddir" \ + && cmake "/usr/local/src/libwebsockets-$WEBSOCKETS_VERSION" \ + && make "$PARALLELMFLAGS" install \ + && rm -rf "$builddir" + +ARG JANSSON_VERSION=2.12 + +RUN set -x \ + && builddir="/tmp/out" \ + && mkdir -p "$builddir" \ + && cd "$builddir" \ + && cmake -DJANSSON_BUILD_DOCS=OFF "/usr/local/src/jansson-$JANSSON_VERSION" \ + && make "$PARALLELMFLAGS" install \ + && rm -rf "$builddir" + +ENV LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib" + +ARG USERID=1000 + +ARG PROJECT_ROOT=/workspace/src +ARG OUT=/workspace/out + +RUN set -x \ + && useradd -u "$USERID" -ms /bin/bash user \ + && mkdir -p "$PROJECT_ROOT" "$OUT" \ + && chown user:user "$PROJECT_ROOT" "$OUT" + +WORKDIR "$OUT" + +ENTRYPOINT ["dumb-init", "--"] +