forked from RUB-Informatik-im-Bauwesen/OpenBimRL-Engine
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathnvcc.dockerfile
More file actions
157 lines (134 loc) · 6.14 KB
/
Copy pathnvcc.dockerfile
File metadata and controls
157 lines (134 loc) · 6.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
# syntax=docker/dockerfile:1
# NVIDIA Engine image: CUDA toolkit + host clang OpenMP offload (WIP).
#
# Build-time: IfcOpenShell + JVM fat jar (no native .so).
# Start-time: CMD compiles native for OPENBIMRL_CUDA_OFFLOAD_ARCH, bundles into
# the jar, then runs java.
#
# docker build -f nvcc.dockerfile -t openbimrl-engine:nvcc .
# docker run --gpus all \
# -e OPENBIMRL_CUDA_OFFLOAD_ARCH=sm_89 \
# openbimrl-engine:nvcc …
#
# Required at run time:
# OPENBIMRL_CUDA_OFFLOAD_ARCH CUDA target, e.g. sm_89 (must match your GPU).
#
# Supported platform: linux/amd64 only.
ARG IFCOPENSHELL_GIT_TAG=eafa158ca0cd5ba2ca22b5e588b0375cab2efbce
ARG BAZELISK_VERSION=1.29.0
FROM nvidia/cuda:12.6.3-devel-ubuntu24.04 AS ifcos-build
ARG IFCOPENSHELL_GIT_TAG
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=UTC
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates cmake ninja-build \
clang libomp-dev \
libboost-all-dev \
libocct-foundation-dev libocct-modeling-algorithms-dev libocct-modeling-data-dev \
libocct-ocaf-dev libocct-visualization-dev libocct-data-exchange-dev \
libhdf5-dev libeigen3-dev libgmp-dev libmpfr-dev libxml2-dev \
libgl1-mesa-dev libx11-dev libxext-dev libxi-dev libxmu-dev libxt-dev \
libtbb-dev tcl-dev tk-dev occt-misc \
&& rm -rf /var/lib/apt/lists/*
ADD https://github.com/IfcOpenShell/IfcOpenShell.git#${IFCOPENSHELL_GIT_TAG} /src
RUN cmake -G Ninja -S /src/cmake -B /build \
-DCMAKE_C_COMPILER=/usr/bin/clang \
-DCMAKE_CXX_COMPILER=/usr/bin/clang++ \
-DCMAKE_INSTALL_PREFIX=/opt/ifcopenshell \
-DCMAKE_BUILD_TYPE=Release \
-DOCC_INCLUDE_DIR=/usr/include/opencascade \
-DOCC_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu \
-DBUILD_SHARED_LIBS=ON \
-DSCHEMA_VERSIONS="2x3;4;4x3_add2" \
-DBUILD_CONVERT=OFF \
-DBUILD_IFCPYTHON=OFF \
-DBUILD_GEOMSERVER=OFF \
-DBUILD_EXAMPLES=OFF \
-DBUILD_DOCUMENTATION=OFF \
-DWITH_CGAL=OFF \
-DCOLLADA_SUPPORT=OFF \
-DHDF5_SUPPORT=OFF \
-DGLTF_SUPPORT=OFF \
-DIFCXML_SUPPORT=OFF \
-DUSD_SUPPORT=OFF \
&& cmake --build /build -j"$(nproc)" \
&& cmake --install /build
# ---------------------------------------------------------------------------
# JVM-only Bazel build (native compiled at container start).
# ---------------------------------------------------------------------------
FROM eclipse-temurin:21-jdk-noble AS engine-build
ARG BAZELISK_VERSION
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=UTC
ENV JAVA_HOME=/opt/java/openjdk
ENV PATH=${JAVA_HOME}/bin:${PATH}
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates curl git \
&& curl -fsSL -o /usr/local/bin/bazelisk \
"https://github.com/bazelbuild/bazelisk/releases/download/v${BAZELISK_VERSION}/bazelisk-linux-amd64" \
&& chmod +x /usr/local/bin/bazelisk \
&& ln -sf /usr/local/bin/bazelisk /usr/local/bin/bazel \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /src
COPY . .
RUN test -f src/main/cpp/MODULE.bazel \
|| { echo "ERROR: src/main/cpp submodule missing; checkout Native before docker build" >&2; exit 1; }
RUN bazel build --config=docker //:console_jvm_app_deploy.jar \
&& mkdir -p /out \
&& cp -f bazel-bin/console_jvm_app_deploy.jar /out/app-jvm.jar
# ---------------------------------------------------------------------------
# Runtime: CUDA + native toolchain; CMD compiles .so then runs JVM jar.
# ---------------------------------------------------------------------------
FROM nvidia/cuda:12.6.3-devel-ubuntu24.04
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=UTC
ENV JAVA_HOME=/opt/java/openjdk
ENV CUDA_HOME=/usr/local/cuda
ENV PATH=${JAVA_HOME}/bin:${CUDA_HOME}/bin:${PATH}
ENV OPENBIMRL_NATIVE_CACHE=/var/cache/openbimrl
ENV OPENBIMRL_NATIVE_BUILD=/var/cache/openbimrl/build
ENV OPENBIMRL_NATIVE_INSTALL=/var/cache/openbimrl/install
ENV OPENBIMRL_NATIVE_SO=/var/cache/openbimrl/install/lib/libOpenBimRL-Engine-Native-x86_64.so
ENV OPENBIMRL_NATIVE_SRC=/src/native
ENV OPENBIMRL_IFCOPENSHELL_PREFIX=/opt/ifcopenshell
ENV APP_JVM=/app/app-jvm.jar
ENV APP_RUN=/app/app.jar
ENV LD_LIBRARY_PATH=/usr/local/cuda/lib64:/opt/ifcopenshell/lib
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates cmake ninja-build zip \
clang libomp-dev libomp5 \
libboost-all-dev \
libocct-foundation-dev libocct-modeling-algorithms-dev libocct-modeling-data-dev \
libocct-ocaf-dev libocct-visualization-dev libocct-data-exchange-dev \
libeigen3-dev libgmp-dev libmpfr-dev libxml2-dev libhdf5-dev \
xfonts-scalable \
&& rm -rf /var/lib/apt/lists/*
RUN rm -rf ${OPENBIMRL_NATIVE_CACHE} \
&& mkdir -p ${OPENBIMRL_NATIVE_BUILD} ${OPENBIMRL_NATIVE_INSTALL}/lib
COPY --from=engine-build /opt/java/openjdk /opt/java/openjdk
COPY --from=ifcos-build /opt/ifcopenshell /opt/ifcopenshell
RUN cp -a /opt/ifcopenshell/lib/libIfcGeom.so* /usr/lib/ \
&& cp -a /opt/ifcopenshell/lib/libIfcParse.so* /usr/lib/ \
&& ldconfig
COPY --from=engine-build /out/app-jvm.jar /app/app-jvm.jar
COPY src/main/cpp /src/native
WORKDIR /app
ENTRYPOINT ["/bin/bash", "-c", "\
set -e; \
cmake -G Ninja -S \"${OPENBIMRL_NATIVE_SRC}\" -B \"${OPENBIMRL_NATIVE_BUILD}\" \
-DCMAKE_C_COMPILER=/usr/bin/clang \
-DCMAKE_CXX_COMPILER=/usr/bin/clang++ \
-DCMAKE_INSTALL_PREFIX=\"${OPENBIMRL_NATIVE_INSTALL}\" \
-DCMAKE_BUILD_TYPE=Release \
-DOPENBIMRL_ENABLE_CUDA_OFFLOAD=ON \
-DOPENBIMRL_CUDA_OFFLOAD_ARCH=\"${OPENBIMRL_CUDA_OFFLOAD_ARCH}\" \
-DOPENBIMRL_IFCOPENSHELL_PREFIX=\"${OPENBIMRL_IFCOPENSHELL_PREFIX}\" \
-DOPENBIMRL_USE_PREBUILT_IFCOPENSHELL=ON \
-DOPENBIMRL_BUILD_NATIVE_TESTS=OFF \
&& cmake --build \"${OPENBIMRL_NATIVE_BUILD}\" -j\"$(nproc)\" \
&& cmake --install \"${OPENBIMRL_NATIVE_BUILD}\" \
&& cp -f \"${OPENBIMRL_NATIVE_INSTALL}/lib/libOpenBIMRL_Native.so\" \"${OPENBIMRL_NATIVE_SO}\" \
&& cp -f \"${APP_JVM}\" \"${APP_RUN}\" \
&& cd \"$(dirname \"${OPENBIMRL_NATIVE_SO}\")\" && zip -q -j \"${APP_RUN}\" \"$(basename \"${OPENBIMRL_NATIVE_SO}\")\" \
&& exec java -jar \"${APP_RUN}\" \"$@\"", "--"]
CMD []