-
Notifications
You must be signed in to change notification settings - Fork 19
Expand file tree
/
Copy pathDockerfile.py313
More file actions
111 lines (91 loc) · 3.39 KB
/
Dockerfile.py313
File metadata and controls
111 lines (91 loc) · 3.39 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
ARG DEBIAN=invalid-debian
ARG ARCH=invalid-arch
ARG VERSION=invalid-version
FROM wpilib/${ARCH}-cross-debian-minimal:${DEBIAN} AS pycompile
ARG TARGET_HOST=invalid-target-host
ARG AC_TARGET_HOST=invalid-ac-target-host
ARG EXTRA_CROSS_CONFIGURE_ARGS=
ENV TARGET_HOST=${TARGET_HOST}
ENV AC_TARGET_HOST=${AC_TARGET_HOST}
ENV EXTRA_CROSS_CONFIGURE_ARGS=${EXTRA_CROSS_CONFIGURE_ARGS}
ENV BUILD_HOST="x86_64"
ENV WORKING_DIRECTORY="/build"
ENV INSTALL_DIRECTORY="/build/crosspy"
ENV PYTHON_VERSION="3.13.5"
ENV PYTHON_FTP_VERSION="3.13.5"
ENV PYTHON_EXE="python3.13"
ENV SOURCE_DIRECTORY="Python-$PYTHON_VERSION"
ENV PYTHON_ARCHIVE="Python-$PYTHON_VERSION.tar.xz"
ENV PREFIX="$INSTALL_DIRECTORY"
#
# Python compilation prereqs
#
RUN set -xe; \
apt-get update; \
apt-get install -y build-essential checkinstall g++ libreadline-dev libncurses-dev libssl-dev \
libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev liblzma-dev libffi-dev zlib1g-dev; \
# cleanup
rm -rf /var/lib/apt/lists/*
#
# Python cross-compilation
#
RUN set -xe; \
mkdir -p "$PREFIX"; \
# Download
cd $WORKING_DIRECTORY; \
wget -c https://www.python.org/ftp/python/$PYTHON_FTP_VERSION/$PYTHON_ARCHIVE; \
rm -rf $SOURCE_DIRECTORY; \
tar -xf $PYTHON_ARCHIVE; \
cd $SOURCE_DIRECTORY; \
# Build python for host
cd $WORKING_DIRECTORY;cd $SOURCE_DIRECTORY; \
./configure --enable-optimizations --with-ensurepip=install; \
make -j; \
make -j altinstall
RUN set -xe; \
# Remove build dependencies -- compilation uses host for some reason
apt-get remove -y libreadline-dev libncursesw5-dev libssl-dev \
libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev liblzma-dev libffi-dev zlib1g-dev; \
apt-get autoremove -y;
RUN set -xe; \
# cross-compile
cd $WORKING_DIRECTORY; \
rm -rf $SOURCE_DIRECTORY; \
tar -xf $PYTHON_ARCHIVE; \
cd $SOURCE_DIRECTORY; \
./configure --host=$TARGET_HOST --build=$BUILD_HOST --prefix=$PREFIX \
--with-build-python=$(which $PYTHON_EXE) \
--disable-ipv6 \
ac_cv_host=$AC_TARGET_HOST \
ac_cv_buggy_getaddrinfo=no \
ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no \
ac_cv_have_long_long_format=yes \
ac_cv_pthread_is_default=no ac_cv_pthread=yes ac_cv_cxx_thread=yes \
${EXTRA_CROSS_CONFIGURE_ARGS}; \
make -j; \
# make install here is fine because we include --prefix in the configure statement
make install
#
# Minimal cross-compilation environment
#
FROM wpilib/${ARCH}-cross-debian-minimal:${DEBIAN} AS crossenv
RUN set -xe; \
apt-get update; \
apt-get install -y \
binutils libreadline8 libncursesw6 libssl3 \
libsqlite3-0 libgdbm6 libbz2-1.0 liblzma5 libffi8 zlib1g; \
rm -rf /var/lib/apt/lists/*
COPY --from=pycompile /usr/local /usr/local
COPY --from=pycompile /build/crosspy /build/crosspy
ARG ARCH=invalid-arch
ARG TARGET_HOST=invalid-target-host
ARG MACHINE_ARG=
ARG EXTRA_CROSSENV_ARGS=
RUN set -xe; \
ldconfig; \
python3.13 -m pip install 'crossenv~=1.6.1'; \
python3.13 -m crossenv /build/crosspy/bin/python3.13 /build/venv ${MACHINE_ARG} --sysroot=$(${TARGET_HOST}-gcc -print-sysroot) --env UNIXCONFDIR=/build/venv/cross/etc ${EXTRA_CROSSENV_ARGS}; \
/build/venv/bin/cross-pip install wheel;
COPY pip-${ARCH}.conf /build/venv/cross/pip.conf
COPY os-release-${ARCH} /build/venv/cross/etc/os-release
ENV RPYBUILD_PARALLEL=1