1
- FROM ubuntu:16.04
2
-
3
- RUN apt-get update && apt-get install -y curl openssl \
4
- && curl https://bintray.com/user/downloadSubjectPublicKey?username=bintray | apt-key add - \
5
- && echo "deb http://dl.bintray.com/jasonbeverage/pelicanmapping xenial main" | tee -a /etc/apt/sources.list \
6
- && apt-get update -qq \
7
- && apt-get install -y python-software-properties software-properties-common \
8
- && add-apt-repository ppa:ubuntugis/ppa --yes \
9
- && apt-get update -qq \
10
- && apt-get install -y \
11
- cmake \
12
- openscenegraph=3.6.3 \
13
- gdal-bin \
14
- libgdal-dev \
15
- libgeos-dev \
16
- libsqlite3-dev \
17
- protobuf-compiler \
18
- libprotobuf-dev \
19
- libpoco-dev
20
- COPY . /code
21
- RUN cd /code && cmake -DCMAKE_BUILD_TYPE=Release . && make -j2 && make install && ldconfig
1
+ # Build a Docker image to compile and build openscenegraph and osgearth with GL3
2
+
3
+ ARG UID=1000
4
+ ARG GID=1000
5
+ ARG HOME=/home/user
6
+
7
+ FROM ubuntu:focal AS devel
8
+
9
+ ARG DEBIAN_FRONTEND=noninteractive
10
+ ARG HOME
11
+
12
+ # Install Dependencies
13
+ RUN sed -i '/deb-src/s/^# //' /etc/apt/sources.list
14
+
15
+ RUN apt update && apt upgrade -y && \
16
+ apt -y install software-properties-common apt-transport-https
17
+
18
+ RUN add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main" && \
19
+ apt update && apt upgrade -y
20
+
21
+ RUN apt install -y wget build-essential autoconf locate apt-file libspdlog-dev \
22
+ git-all fuse libgl1-mesa-dev psmisc libpq-dev libssl-dev openssl libffi-dev \
23
+ zlib1g-dev libdbus-1-3 desktop-file-utils \
24
+ libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libilmbase-dev \
25
+ libxcb-render-util0 libxcb-xinerama0 libxcb-composite0 libxcb-cursor0 \
26
+ libxcb-damage0 libxcb-dpms0 libxcb-dri2-0 libxcb-dri3-0 libxcb-ewmh2 \
27
+ libxcb-glx0 libxcb-present0 libxcb-randr0 libxcb-record0 libxcb-render0 \
28
+ libxcb-res0 libxcb-screensaver0 libxcb-shape0 libxcb-shm0 libxcb-sync1 \
29
+ libxcb-util1 libfontconfig libfontconfig1 libxcb-xkb1 libxkbcommon-x11-0 \
30
+ libegl1-mesa-dev unixodbc-dev curl unzip tar libnss3 libxcomposite1 \
31
+ libxcursor-dev libxtst-dev libxrandr-dev libgtk3.0-cil-dev libcurl4-openssl-dev \
32
+ libomp-dev libstdc++6 ninja-build libboost-all-dev gdal-bin gdal-data \
33
+ libgdal-dev libgeos-dev libgeos++-dev librocksdb-dev freeglut3-dev libglu1-mesa-dev \
34
+ libx11-xcb-dev '^libxcb.*-dev' libxrender-dev libxi-dev libxkbcommon-dev \
35
+ libxkbcommon-x11-dev libxinerama1 libxrandr2 protobuf-compiler libprotobuf-dev \
36
+ ffmpeg libavformat-dev libavdevice-dev libavcodec-dev libavutil-dev libswscale-dev \
37
+ libsdl1.2-dev libsdl2-dev libgtkgl2.0-dev libgtkglext1-dev libjasper-dev libasio-dev \
38
+ dcmtk libvncserver-dev xfonts-scalable libocct-data-exchange-dev libocct-draw-dev \
39
+ libocct-foundation-dev libocct-modeling-algorithms-dev libocct-modeling-data-dev \
40
+ libocct-ocaf-dev libocct-visualization-dev libzip-dev libblosc-dev libpoco-dev \
41
+ libgl-dev libsqlite3-dev nano libgstreamer1.0-0 gstreamer1.0-plugins-base \
42
+ libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev \
43
+ gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly \
44
+ gstreamer1.0-libav gstreamer1.0-x gstreamer1.0-tools gstreamer1.0-gl gstreamer1.0-gtk3 \
45
+ libgomp1 --fix-missing
46
+
47
+ # Update gcc for correct c++17 support
48
+ ARG GCC=9
49
+ RUN echo "Install GCC ${GCC}" && \
50
+ apt -y install g++-${GCC} && \
51
+ update-alternatives \
52
+ --install /usr/bin/gcc gcc /usr/bin/gcc-${GCC} 60 \
53
+ --slave /usr/bin/g++ g++ /usr/bin/g++-${GCC} \
54
+ --slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-${GCC} \
55
+ --slave /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-${GCC} \
56
+ --slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-${GCC} && \
57
+ update-alternatives --config gcc
58
+
59
+ # Update cmake
60
+ ARG CMAKE=3.26.3
61
+ RUN wget -c -nv https://github.com/Kitware/CMake/releases/download/v${CMAKE}/cmake-${CMAKE}-Linux-x86_64.sh && \
62
+ sh cmake-${CMAKE}-Linux-x86_64.sh --prefix=/usr/local --exclude-subdir && \
63
+ rm cmake-${CMAKE}-Linux-x86_64.sh
64
+
65
+ ENV LD_LIBRARY_PATH /usr/local/lib/:${LD_LIBRARY_PATH}
66
+
67
+ # Install Autodesk FBX
68
+ RUN mkdir -p ${HOME}/Downloads && cd ${HOME}/Downloads && \
69
+ wget -q --user-agent="Mozilla" https://damassets.autodesk.net/content/dam/autodesk/www/adn/fbx/2020-0-1/fbx202001_fbxsdk_linux.tar.gz && \
70
+ tar xzvf fbx202001_fbxsdk_linux.tar.gz && \
71
+ chmod a+x fbx202001_fbxsdk_linux
72
+
73
+ RUN mkdir -p /usr/fbx202001_fbxsdk_linux && \
74
+ sh -c '/bin/echo -e "yes\n n" | ${HOME}/Downloads/fbx202001_fbxsdk_linux /usr/fbx202001_fbxsdk_linux' && \
75
+ rm -rf ${HOME}/Downloads
76
+
77
+ ARG fbx_include="/usr/fbx202001_fbxsdk_linux/include"
78
+ ARG fbx_lib_release="/usr/fbx202001_fbxsdk_linux/lib/gcc/x64/release/libfbxsdk.a"
79
+ ARG fbx_lib_debug="/usr/fbx202001_fbxsdk_linux/lib/gcc/x64/debug/libfbxsdk.a"
80
+ ARG fbx_xml_lib=libxml2.so
81
+ ARG fbx_zlib_lib=libz.so
82
+
83
+ # Install OpenSceneGraph dependancies
84
+ RUN apt update && apt upgrade -y && apt build-dep -y openscenegraph
85
+
86
+ ARG OSG_DIR=/opt/OpenSceneGraph
87
+ ARG OSG_TAG=OpenSceneGraph-3.6.5
88
+ WORKDIR ${HOME}/gitrepo
89
+ RUN git clone -b ${OSG_TAG} https://github.com/openscenegraph/OpenSceneGraph.git && \
90
+ mkdir OpenSceneGraph/build && cd OpenSceneGraph/build && \
91
+ cmake -DOSG_GL3_AVAILABLE=ON -DOSG_GL1_AVAILABLE=OFF -DOSG_GL2_AVAILABLE=OFF \
92
+ -DOSG_GLES1_AVAILABLE=OFF -DOSG_GLES2_AVAILABLE=OFF -DOSG_GLES3_AVAILABLE=OFF \
93
+ -DOSG_GL_DISPLAYLISTS_AVAILABLE=OFF -DOSG_GL_FIXED_FUNCTION_AVAILABLE=OFF \
94
+ -DOSG_GL_MATRICES_AVAILABLE=OFF -DOSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE=OFF \
95
+ -DOSG_GL_VERTEX_FUNCS_AVAILABLE=OFF -DOPENGL_PROFILE=GL3 \
96
+ -DFBX_INCLUDE_DIR="$fbx_include" -DFBX_LIBRARY="$fbx_lib_release" \
97
+ -DFBX_LIBRARY_DEBUG="$fbx_lib_debug" -DFBX_XML2_LIBRARY="$fbx_xml_lib" \
98
+ -DFBX_ZLIB_LIBRARY="$fbx_zlib_lib" \
99
+ -DCMAKE_INSTALL_PREFIX=${OSG_DIR} -DCMAKE_BUILD_TYPE=Release .. && \
100
+ cmake --build . --parallel 4 --target install
101
+ ENV LD_LIBRARY_PATH /opt/OpenSceneGraph/lib:$LD_LIBRARY_PATH
102
+
103
+ ARG OSGEARTH_DIR=/opt/osgearth
104
+ COPY . ${HOME}/gitrepo/osgearth
105
+ WORKDIR ${HOME}/gitrepo
106
+ RUN sed -i 's/OPENGL_gl_LIBRARY/OPENGL_LIBRARY/' ${HOME}/gitrepo/osgearth/src/applications/osgearth_imgui/CMakeLists.txt && \
107
+ sed -i 's/OPENGL_gl_LIBRARY/OPENGL_LIBRARY/' ${HOME}/gitrepo/osgearth/src/applications/osgearth_pick/CMakeLists.txt && \
108
+ sed -i 's/OPENGL_gl_LIBRARY/OPENGL_LIBRARY/' ${HOME}/gitrepo/osgearth/src/applications/osgearth_collecttriangles/CMakeLists.txt
109
+
110
+ RUN mkdir -p ${HOME}/gitrepo/osgearth/build && cd ${HOME}/gitrepo/osgearth/build && \
111
+ cmake -DOSG_DIR=${OSG_DIR} -DOpenGL_GL_PREFERENCE=GLVND \
112
+ -DCMAKE_INSTALL_PREFIX=${OSGEARTH_DIR} -DCMAKE_BUILD_TYPE=Release .. && \
113
+ cmake --build . --parallel 4 --target install
114
+
115
+ ENV OSG_DIR ${OSG_DIR}
116
+ ENV OSGEARTH_DIR ${OSGEARTH_DIR}
117
+
118
+ # Delete all source files
119
+ # RUN rm -rf ${HOME}/gitrepo
120
+
121
+ # Clean apt cache
122
+ RUN apt clean && rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/*
123
+
124
+ # Create user
125
+ ARG UID
126
+ ARG GID
127
+ RUN groupadd -g "${GID}" user && \
128
+ useradd --create-home --home-dir ${HOME} --no-log-init -u "${UID}" -g "${GID}" user &&\
129
+ chown -R user:user ${HOME}
130
+
131
+ # Switch to user
132
+ USER user
133
+
134
+ RUN mkdir -p ${HOME}/xdg
135
+ ENV XDG_RUNTIME_DIR=${HOME}/xdg
136
+ ENV __NV_PRIME_RENDER_OFFLOAD 1
137
+ ENV __GLX_VENDOR_LIBRARY_NAME nvidia
138
+ ENV LD_LIBRARY_PATH /usr/local/lib64:/opt/OpenSceneGraph/lib:/opt/osgearth/lib64:$LD_LIBRARY_PATH
139
+ ENV PATH /usr/local/lib64:/opt/OpenSceneGraph/bin:/opt/osgearth/bin:$PATH
140
+
141
+ WORKDIR ${HOME}
0 commit comments