-
Notifications
You must be signed in to change notification settings - Fork 287
Expand file tree
/
Copy pathDockerfile-ORE
More file actions
83 lines (67 loc) · 3.35 KB
/
Dockerfile-ORE
File metadata and controls
83 lines (67 loc) · 3.35 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
# syntax = docker/dockerfile:1.2
ARG DOCKER_REPO
ARG DEBIAN_TAG
ARG ORE_BUILD_VERSION
FROM ${DOCKER_REPO}ore-build-dependencies:${ORE_BUILD_VERSION} AS orebuild
LABEL Quaternion Risk Management
LABEL Description="Build ORE"
ARG NUM_CORES
ARG CMAKE_BUILD_TYPE
# Exclusions are performed by .dockerignore
COPY CMakeLists.txt /ore/CMakeLists.txt
COPY QuantLib /ore/QuantLib
COPY QuantExt /ore/QuantExt
COPY OREData /ore/OREData
COPY OREAnalytics /ore/OREAnalytics
COPY App /ore/App
COPY ThirdPartyLibs /ore/ThirdPartyLibs
COPY ORETest /ore/ORETest
COPY cmake /ore/cmake
COPY ORE-SWIG/CMakeLists.txt /ore/ORE-SWIG/CMakeLists.txt
COPY ORE-SWIG/test /ore/ORE-SWIG/test
COPY ORE-SWIG/OREAnalytics-SWIG /ore/ORE-SWIG/OREAnalytics-SWIG
COPY ORE-SWIG/OREData-SWIG /ore/ORE-SWIG/OREData-SWIG
COPY ORE-SWIG/QuantExt-SWIG /ore/ORE-SWIG/QuantExt-SWIG
COPY ORE-SWIG/QuantLib-SWIG /ore/ORE-SWIG/QuantLib-SWIG
ENV PATH="/usr/lib/ccache:$PATH"
ENV CCACHE_DIR="/ccache"
ENV CCACHE_MAXSIZE="10G"
# needed if QL_USE_PCH is ON
#ENV CCACHE_SLOPPINESS="pch_defines,time_macros,pch_defines,time_macros,include_file_mtime,include_file_ctim"
# - add -fpch-preprocess to CMAKE_CXX_FLAGS when QL_USE_PCH is set to ON
RUN cd /ore \
&& mkdir -p build.ore && cd build.ore \
&& cmake .. -GNinja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER=/usr/bin/clang++ -DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=lld" -DCMAKE_SHARED_LINKER_FLAGS="-fuse-ld=lld" -DORE_BUILD_SWIG=ON -DCMAKE_C_COMPILER=/usr/bin/clang -DORE_PYTHON_INTEGRATION=ON -DQL_USE_PCH=OFF -DORE_BUILD_DOC=ON -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_CXX_FLAGS="-D BOOST_ENABLE_ASSERT_HANDLER $([ "$(uname -m)" = "x86_64" ] && echo "-mavx2")" -DQL_ENABLE_SESSIONS=ON -DQL_ENABLE_PARALLEL_UNIT_TEST_RUNNER=ON -DQL_BUILD_EXAMPLES=OFF -DQL_BUILD_BENCHMARK=OFF -DORE_ENABLE_PARALLEL_UNIT_TEST_RUNNER=ON -DORE_USE_ZLIB=ON -DORE_ENABLE_OPENCL=ON -DORE_MULTITHREADING_CPU_AFFINITY=ON
WORKDIR /ore/build.ore
RUN --mount=type=cache,target=/ccache/ ccache -z \
&& cmake --build . -- -j ${NUM_CORES} install \
&& ccache -s \
&& make doc_quantext 2>&1 | grep -v "ignoring unsupported tag" \
&& make doc_ored 2>&1 | grep -v "ignoring unsupported tag" \
&& make doc_orea 2>&1 | grep -v "ignoring unsupported tag"
WORKDIR /
RUN mkdir -p html \
&& mkdir /html/ored && cp -r /ore/OREData/doc/html/* /html/ored \
&& mkdir /html/orea && cp -r /ore/OREAnalytics/doc/html/* /html/orea \
&& mkdir /html/qle && cp -r /ore/QuantExt/doc/html/* /html/qle \
&& mkdir -p oreswig/pythonlib \
&& mv /ore/build.ore/ORE-SWIG/ORE.py /oreswig/pythonlib \
&& mv /ore/build.ore/ORE-SWIG/_OREP.so /oreswig/pythonlib \
&& rm -rf ore
RUN mkdir -p /boostlibs && \
find /usr/lib -type f -name 'libboost*.so*' -exec cp {} /boostlibs/ \;
RUN mkdir -p /opencllibs && \
find /usr/lib -type f -name 'libOpenCL*' -exec cp {} /opencllibs/ \;
ARG DEBIAN_TAG
FROM ${DOCKER_REPO}debian:${DEBIAN_TAG}
COPY --from=orebuild /usr/local/include /usr/local/include
COPY --from=orebuild /usr/local/lib/ /usr/local/lib
COPY --from=orebuild /usr/local/bin/ /usr/local/bin
COPY --from=orebuild /boostlibs/ /usr/local/lib/
COPY --from=orebuild /opencllibs/ /usr/local/lib/
COPY --from=orebuild /usr/lib/llvm-19/ /usr/lib/llvm-19
COPY --from=orebuild /usr/include/boost/ /usr/include/boost
COPY --from=orebuild /usr/include/CL /usr/include/CL
COPY --from=orebuild /oreswig /oreswig
RUN ldconfig
CMD bash