You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
2.0 KiB
54 lines
2.0 KiB
# syntax=docker/dockerfile:1 |
|
# |
|
# Remote machine: runs codelldb as a DAP server. The developer station's |
|
# nvim-dap connects to it over TCP and sends a standard DAP "launch" |
|
# request — codelldb starts the program locally, so there is no |
|
# gdbserver entry-point assembly issue and source paths resolve cleanly. |
|
# |
|
# Build (run from repository root): |
|
# docker build -t dap-debug-remote -f remote/Dockerfile . |
|
|
|
FROM alpine:latest |
|
|
|
ARG CODELLDB_VERSION=1.12.2 |
|
|
|
RUN apk add --no-cache \ |
|
build-base cmake gdb \ |
|
curl unzip gcompat socat |
|
|
|
WORKDIR /project |
|
COPY common/project/ /project/ |
|
|
|
# Build with full debug info for a meaningful debugging experience. |
|
RUN mkdir -p build \ |
|
&& cd build \ |
|
&& cmake -DCMAKE_BUILD_TYPE=Debug .. \ |
|
&& make -j"$(nproc)" |
|
|
|
# codelldb DAP adapter — a glibc binary; gcompat provides the compatibility |
|
# layer so it runs on musl/Alpine. |
|
RUN mkdir -p /opt/codelldb \ |
|
&& curl -fsSL "https://github.com/vadimcn/codelldb/releases/download/v${CODELLDB_VERSION}/codelldb-linux-x64.vsix" \ |
|
-o /tmp/codelldb.vsix \ |
|
&& cd /opt/codelldb && unzip -q /tmp/codelldb.vsix \ |
|
&& rm /tmp/codelldb.vsix \ |
|
&& chmod +x /opt/codelldb/extension/adapter/codelldb |
|
|
|
# codelldb needs __res_init / __res_ninit (glibc DNS resolver init) which |
|
# gcompat does not provide. A tiny no-op shim fills the gap, then a wrapper |
|
# script applies LD_PRELOAD transparently. |
|
RUN printf 'int __res_init(void) { return 0; }\nint __res_ninit(void *s) { (void)s; return 0; }\n' \ |
|
> /tmp/resolv_shim.c \ |
|
&& gcc -shared -fPIC -o /usr/lib/libresolv_compat.so /tmp/resolv_shim.c \ |
|
&& rm /tmp/resolv_shim.c \ |
|
&& mv /opt/codelldb/extension/adapter/codelldb \ |
|
/opt/codelldb/extension/adapter/codelldb.bin \ |
|
&& printf '#!/bin/sh\nLD_PRELOAD=/usr/lib/libresolv_compat.so exec /opt/codelldb/extension/adapter/codelldb.bin "$@"\n' \ |
|
> /opt/codelldb/extension/adapter/codelldb \ |
|
&& chmod +x /opt/codelldb/extension/adapter/codelldb |
|
|
|
COPY remote/entrypoint.sh /entrypoint.sh |
|
|
|
EXPOSE 13000 |
|
|
|
ENTRYPOINT ["/entrypoint.sh"]
|
|
|