-
Notifications
You must be signed in to change notification settings - Fork 27
/
Copy pathDockerfile.sdk
128 lines (110 loc) · 4.45 KB
/
Dockerfile.sdk
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
# ARGUMENTS --------------------------------------------------------------------
##
# Base container version
##
ARG CROSS_SDK_BASE_TAG=4
##
# Board architecture
##
ARG IMAGE_ARCH=
##
# Board GPU vendor prefix
##
ARG GPU=
##
# Directory of the application inside container
##
ARG APP_ROOT=
##
# Slint Version
##
ARG SLINT_VERSION=1.9.2
# BUILD ------------------------------------------------------------------------
FROM torizon/cross-toolchain-${IMAGE_ARCH}:${CROSS_SDK_BASE_TAG} AS build
ARG IMAGE_ARCH
ARG GPU
ARG APP_ROOT
ARG SLINT_VERSION
# Install an up-to-date cmake as well as ninja and make
RUN apt-get update && \
apt-get install --assume-yes gpg wget && \
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null && \
echo 'deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ jammy main' | tee /etc/apt/sources.list.d/kitware.list >/dev/null && \
apt-get update && \
apt-get install --assume-yes cmake ninja-build make && \
rm -f /etc/apt/sources.list.d/kitware.list /usr/share/keyrings/kitware-archive-keyring.gpg && \
rm -rf /var/lib/apt/lists/*
COPY --chmod=755 armhf-toolchain.cmake arm64-toolchain.cmake /
RUN if [ "$IMAGE_ARCH" = "arm64" ] ; then \
echo arm64 > /cross-toolchain-arch.txt; \
dpkg-divert --divert /usr/bin/cmake.real --rename /usr/bin/cmake; \
printf '#!/bin/sh\nexport CMAKE_TOOLCHAIN_FILE=/arm64-toolchain.cmake\nexec /usr/bin/cmake.real $*\n' > /usr/bin/cmake; \
chmod 755 /usr/bin/cmake ;\
elif [ "$IMAGE_ARCH" = "armhf" ] ; then \
echo armhf > /cross-toolchain-arch.txt; \
dpkg-divert --divert /usr/bin/cmake.real --rename /usr/bin/cmake; \
printf '#!/bin/sh\nexport CMAKE_TOOLCHAIN_FILE=/armhf-toolchain.cmake\nexec /usr/bin/cmake.real $*\n' > /usr/bin/cmake; \
chmod 755 /usr/bin/cmake ;\
elif [ "$IMAGE_ARCH" = "amd64" ] ; then \
echo amd64 > /cross-toolchain-arch.txt; \
fi
# Download Slint binary packages
RUN \
CROSS_TOOLCHAIN_ARCH=$(cat /cross-toolchain-arch.txt) && \
if [ "$SLINT_VERSION" = "nightly" ]; then \
GITHUB_RELEASE=nightly; \
GITHUB_FILENAME_INFIX=nightly; \
else \
GITHUB_RELEASE=v$SLINT_VERSION; \
GITHUB_FILENAME_INFIX=$SLINT_VERSION; \
fi && \
wget -O - https://github.com/slint-ui/slint/releases/download/$GITHUB_RELEASE/Slint-cpp-$GITHUB_FILENAME_INFIX-Linux-$CROSS_TOOLCHAIN_ARCH.tar.gz \
| tar xzvf - --strip-components 1 -C /usr && \
if [ "$SLINT_VERSION" = "nightly" ]; then \
echo 'set(SLINT_GITHUB_RELEASE "nightly" CACHE STRING "")' >> armhf-toolchain.cmake ;\
echo 'set(SLINT_GITHUB_RELEASE "nightly" CACHE STRING "")' >> arm64-toolchain.cmake ;\
fi
# Install Slint build dependencies (libxcb, etc.)
RUN \
--mount=type=cache,target=/var/cache/apt \
CROSS_TOOLCHAIN_ARCH=$(cat /cross-toolchain-arch.txt) && \
rm /etc/apt/sources.list.d/toradex.sources && \
apt-get update && \
apt-get install --assume-yes \
pkg-config \
libfontconfig1-dev:$CROSS_TOOLCHAIN_ARCH \
libxcb1-dev:$CROSS_TOOLCHAIN_ARCH \
libxcb-render0-dev:$CROSS_TOOLCHAIN_ARCH \
libxcb-shape0-dev:$CROSS_TOOLCHAIN_ARCH \
libxcb-xfixes0-dev:$CROSS_TOOLCHAIN_ARCH \
libxkbcommon-dev:$CROSS_TOOLCHAIN_ARCH \
libinput-dev:$CROSS_TOOLCHAIN_ARCH \
libudev-dev:$CROSS_TOOLCHAIN_ARCH \
libdrm2:$CROSS_TOOLCHAIN_ARCH \
libgbm-dev:$CROSS_TOOLCHAIN_ARCH \
python3 \
clang \
libstdc++-11-dev:$CROSS_TOOLCHAIN_ARCH && \
rm -rf /var/lib/apt/lists/*
ENV PKG_CONFIG_ALLOW_CROSS=1
# Default to Ninja
ENV CMAKE_GENERATOR=Ninja
# automate for torizonPackages.json
RUN apt-get -q -y update && \
apt-get -q -y install \
# DO NOT REMOVE THIS LABEL: this is used for VS Code automation
# __torizon_packages_build_start__
# __torizon_packages_build_end__
# DO NOT REMOVE THIS LABEL: this is used for VS Code automation
&& \
apt-get clean && apt-get autoremove && \
rm -rf /var/lib/apt/lists/*
# get the arch and copy the /usr/lib to /usr/lib/${ARCH_TRIPLET}
RUN ARCH_TRIPLET=$(dpkg-architecture -qDEB_HOST_MULTIARCH) && \
cp -r /usr/lib/libslint_cpp.so /usr/lib/${ARCH_TRIPLET}/libslint_cpp.so
# Default to the Skia backend for best performance
ENV SLINT_BACKEND=linuxkms-skia
# Default to Slint running in fullscreen
ENV SLINT_FULLSCREEN=1
USER torizon
WORKDIR ${APP_ROOT}