|
1 | 1 | ARG IHD_TAG=intel-media-26.1.6 |
2 | 2 | ARG GMM_TAG=intel-gmmlib-22.10.0 |
3 | 3 |
|
| 4 | +# ── Builder ─────────────────────────────────────────────────────────────────── |
4 | 5 | FROM alpine:latest AS builder |
5 | 6 | ARG IHD_TAG |
6 | 7 | ARG GMM_TAG |
7 | 8 |
|
8 | | -RUN apk add --no-cache alpine-sdk cmake libva-dev libdrm-dev libpciaccess-dev git patchelf |
| 9 | +RUN apk add --no-cache \ |
| 10 | + alpine-sdk \ |
| 11 | + cmake \ |
| 12 | + git \ |
| 13 | + libdrm-dev \ |
| 14 | + libpciaccess-dev \ |
| 15 | + libva-dev \ |
| 16 | + patchelf |
9 | 17 |
|
10 | | -# Build without RELR (packed relative relocations) and with static C++ runtime. |
11 | | -# Plex's bundled musl is pre-1.2.3 and silently skips .relr.dyn sections, leaving |
12 | | -# .init_array entries unrelocated → SIGSEGV at raw file offset 0x4310. |
13 | | -ENV LF="-Wl,-z,nopackrelocs -static-libstdc++ -static-libgcc" |
| 18 | +# Plex ships musl < 1.2.3, which silently skips RELR (.relr.dyn) sections when |
| 19 | +# loading shared libraries. Unrelocated .init_array entries cause a segfault on |
| 20 | +# the first constructor call. Both flags are required on every target in this |
| 21 | +# build: -z,nopackrelocs suppresses RELR output; -static-libstdc++ and |
| 22 | +# -static-libgcc eliminate the C++ runtime .so dependencies, which also carry |
| 23 | +# RELR in current Alpine toolchain builds. |
| 24 | +ARG LDFLAGS="-Wl,-z,nopackrelocs -static-libstdc++ -static-libgcc" |
14 | 25 |
|
15 | 26 | RUN git clone --depth=1 --branch "${GMM_TAG}" \ |
16 | | - https://github.com/intel/gmmlib /tmp/gmmlib && \ |
17 | | - cmake -S /tmp/gmmlib -B /tmp/gmmlib/build \ |
18 | | - -DCMAKE_BUILD_TYPE=Release \ |
19 | | - -DCMAKE_INSTALL_PREFIX=/tmp/sdk \ |
20 | | - -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \ |
21 | | - -DCMAKE_SHARED_LINKER_FLAGS="${LF}" \ |
22 | | - -DCMAKE_EXE_LINKER_FLAGS="${LF}" && \ |
23 | | - cmake --build /tmp/gmmlib/build --target install -- -j$(nproc) |
| 27 | + https://github.com/intel/gmmlib /src/gmmlib \ |
| 28 | + && cmake -S /src/gmmlib -B /build/gmmlib \ |
| 29 | + -DCMAKE_BUILD_TYPE=Release \ |
| 30 | + -DCMAKE_INSTALL_PREFIX=/sdk \ |
| 31 | + -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \ |
| 32 | + "-DCMAKE_SHARED_LINKER_FLAGS=${LDFLAGS}" \ |
| 33 | + "-DCMAKE_EXE_LINKER_FLAGS=${LDFLAGS}" \ |
| 34 | + && cmake --build /build/gmmlib -j$(nproc) \ |
| 35 | + && cmake --install /build/gmmlib |
24 | 36 |
|
25 | 37 | RUN git clone --depth=1 --branch "${IHD_TAG}" \ |
26 | | - https://github.com/intel/media-driver /tmp/ihd && \ |
27 | | - cmake -S /tmp/ihd -B /tmp/ihd/build \ |
28 | | - -DCMAKE_BUILD_TYPE=Release \ |
29 | | - -DCMAKE_PREFIX_PATH=/tmp/sdk \ |
30 | | - -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \ |
31 | | - -DBUILD_TESTING=OFF \ |
32 | | - -DMEDIA_RUN_TEST_SUITE=OFF \ |
33 | | - -DCMAKE_SHARED_LINKER_FLAGS="${LF}" \ |
34 | | - -DCMAKE_EXE_LINKER_FLAGS="${LF}" && \ |
35 | | - cmake --build /tmp/ihd/build --target iHD_drv_video -- -j$(nproc) |
| 38 | + https://github.com/intel/media-driver /src/ihd \ |
| 39 | + && cmake -S /src/ihd -B /build/ihd \ |
| 40 | + -DCMAKE_BUILD_TYPE=Release \ |
| 41 | + -DCMAKE_INSTALL_PREFIX=/sdk \ |
| 42 | + -DCMAKE_PREFIX_PATH=/sdk \ |
| 43 | + -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \ |
| 44 | + -DBUILD_TESTING=OFF \ |
| 45 | + -DMEDIA_RUN_TEST_SUITE=OFF \ |
| 46 | + "-DCMAKE_SHARED_LINKER_FLAGS=${LDFLAGS}" \ |
| 47 | + "-DCMAKE_EXE_LINKER_FLAGS=${LDFLAGS}" \ |
| 48 | + && cmake --build /build/ihd --target iHD_drv_video -j$(nproc) |
36 | 49 |
|
37 | | -RUN mkdir -p /opt/vaapi && \ |
38 | | - cp "$(find /tmp/ihd/build -name iHD_drv_video.so | head -1)" /opt/vaapi/ && \ |
39 | | - cp -P /tmp/sdk/lib/libigdgmm.so* /opt/vaapi/ && \ |
40 | | - patchelf --set-rpath /vaapi:/usr/lib/plexmediaserver/lib /opt/vaapi/iHD_drv_video.so && \ |
41 | | - patchelf --set-rpath /vaapi:/usr/lib/plexmediaserver/lib \ |
42 | | - /opt/vaapi/libigdgmm.so.12 2>/dev/null || true |
| 50 | +# Set RPATH so iHD resolves libva + libdrm from Plex's lib directory at |
| 51 | +# runtime, and libigdgmm from the /vaapi volume populated by this image. |
| 52 | +RUN install -d /out \ |
| 53 | + && cp "$(find /build/ihd -name iHD_drv_video.so -print -quit)" /out/ \ |
| 54 | + && cp -P /sdk/lib/libigdgmm.so* /out/ \ |
| 55 | + && patchelf --set-rpath '/vaapi:/usr/lib/plexmediaserver/lib' /out/iHD_drv_video.so \ |
| 56 | + && patchelf --set-rpath '/vaapi:/usr/lib/plexmediaserver/lib' /out/libigdgmm.so.12 |
43 | 57 |
|
| 58 | +# ── Runtime image ───────────────────────────────────────────────────────────── |
44 | 59 | FROM alpine:latest |
45 | | -COPY --from=builder /opt/vaapi/ /opt/vaapi/ |
| 60 | +COPY --from=builder /out/ /opt/vaapi/ |
0 commit comments