sterepando commited on
Commit
6fa644f
·
verified ·
1 Parent(s): 8a7a2b9

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +21 -21
Dockerfile CHANGED
@@ -36,6 +36,7 @@ RUN wget -q https://zlib.net/zlib-1.3.1.tar.gz && tar -xf zlib-1.3.1.tar.gz && c
36
  CFLAGS="-fPIC" ./configure --prefix=$PREFIX --static && make -j4 install
37
 
38
  # 4. OpenSSL (Static + fPIC)
 
39
  WORKDIR /build/openssl
40
  RUN wget -q https://www.openssl.org/source/openssl-3.2.0.tar.gz && tar -xf openssl-3.2.0.tar.gz && cd openssl-3.2.0 && \
41
  ./Configure android-arm64 -D__ANDROID_API__=${ANDROID_API} --prefix=$PREFIX \
@@ -50,47 +51,44 @@ RUN wget -q https://curl.se/download/curl-8.5.0.tar.gz && tar -xf curl-8.5.0.tar
50
  CFLAGS="-fPIC -I$PREFIX/include" LDFLAGS="-L$PREFIX/lib" && \
51
  make -j4 install
52
 
53
- # 6. СБОРКА НАСТОЯЩЕГО PYTHON 3.11.10 ДЛЯ ANDROID (fPIC FIX)
 
54
  WORKDIR /opt/python-android
55
  RUN wget -q https://www.python.org/ftp/python/3.11.10/Python-3.11.10.tgz && tar -xf Python-3.11.10.tgz
56
  WORKDIR /opt/python-android/Python-3.11.10
57
- # СУПЕР ВАЖНО: Добавляем -fPIC в CFLAGS/CXXFLAGS/LDFLAGS для сборки библиотеки
58
  RUN ./configure --host=aarch64-linux-android --build=x86_64-linux-gnu \
59
  --with-build-python=python3 --enable-shared --without-ensurepip \
60
- --disable-ipv6 \
61
- ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no \
62
- ac_cv_buggy_getaddrinfo=no \
63
  CC="$CC" CXX="$CXX" AR="$AR" RANLIB="$RANLIB" READELF="$READELF" \
64
  CFLAGS="-fPIC" CXXFLAGS="-fPIC" LDFLAGS="-fPIC"
65
- # Собираем полноценную библиотеку
66
  RUN make -j4 libpython3.11.so
67
 
68
- # 7. СБОРКА ПАКЕТОВ
69
  WORKDIR /build/wheels
70
  RUN pip install wheel setuptools
71
 
72
  # Fake curl-config
73
  RUN echo '#!/bin/bash\ncase "$1" in --version) echo "libcurl 8.5.0";; --features) echo "SSL libz HTTPS";; --libs|--static-libs) echo "-L'$PREFIX'/lib -lcurl -lssl -lcrypto -lz";; --cflags) echo "-I'$PREFIX'/include -DANDROID";; --prefix) echo "'$PREFIX'";; *) exit 0;; esac' > /usr/bin/curl-config-android && chmod +x /usr/bin/curl-config-android
74
 
75
- # Скрипт сборки wheels
76
  RUN echo '#!/bin/bash\n\
77
  export CC="aarch64-linux-android'${ANDROID_API}'-clang"\n\
78
  export PYTHON_ROOT="/opt/python-android/Python-3.11.10"\n\
79
- # Линкуемся с реальной библиотекой Python, чтобы разрешить _Py_NoneStruct\n\
80
  export LDSHARED="'$CC' -shared -L$PYTHON_ROOT -lpython3.11"\n\
81
  export CFLAGS="-I$PYTHON_ROOT/Include -I$PYTHON_ROOT -I'$PREFIX'/include -fPIC -DANDROID"\n\
82
  export LDFLAGS="-L$PYTHON_ROOT -L'$PREFIX'/lib -lpython3.11 -lcurl -lssl -lcrypto -lz"\n\
83
  \n\
84
- echo "--- Сборка PyCurl ---"\n\
85
- export PYCURL_CURL_CONFIG=/usr/bin/curl-config-android\n\
86
- export PYCURL_SSL_LIBRARY=openssl\n\
87
- pip wheel pycurl --no-binary :all: --no-deps -w dist/ --plat-name android_arm64\n\
88
  \n\
89
- echo "--- Сборка wget ---"\n\
90
- pip wheel wget --no-binary :all: --no-deps -w dist/ --plat-name android_arm64\n\
91
  \n\
92
- echo "--- Сборка PyCryptodome ---"\n\
93
- pip wheel pycryptodome --no-binary :all: --no-deps -w dist/ --plat-name android_arm64' > build.sh
 
 
94
 
95
  RUN chmod +x build.sh && ./build.sh
96
 
@@ -98,14 +96,16 @@ RUN chmod +x build.sh && ./build.sh
98
  WORKDIR /output
99
  RUN cd /build/wheels/dist && \
100
  for file in *.whl; do \
 
101
  NAME=$(echo $file | cut -d"-" -f1) && \
102
  VER=$(echo $file | cut -d"-" -f2) && \
103
- FINAL="${NAME}-${VER}-cp311-cp311-android_21_30_arm64_v8a.whl" && \
104
- mv "$file" "/output/$FINAL"; \
 
105
  done
106
 
107
- # Финальная проверка линковки: должна показать зависимость от libpython3.11.so
108
- RUN echo "Linkage check for production:" && \
109
  unzip -p /output/pycurl-*.whl *.so > /tmp/pycurl.so && \
110
  llvm-readelf -d /tmp/pycurl.so | grep "NEEDED"
111
 
 
36
  CFLAGS="-fPIC" ./configure --prefix=$PREFIX --static && make -j4 install
37
 
38
  # 4. OpenSSL (Static + fPIC)
39
+ # no-apps и no-tests обязательны, чтобы не пытаться запускать ARM на x86
40
  WORKDIR /build/openssl
41
  RUN wget -q https://www.openssl.org/source/openssl-3.2.0.tar.gz && tar -xf openssl-3.2.0.tar.gz && cd openssl-3.2.0 && \
42
  ./Configure android-arm64 -D__ANDROID_API__=${ANDROID_API} --prefix=$PREFIX \
 
51
  CFLAGS="-fPIC -I$PREFIX/include" LDFLAGS="-L$PREFIX/lib" && \
52
  make -j4 install
53
 
54
+ # 6. СБОРКА РЕАЛЬНОГО PYTHON 3.11.10 ПОД АНДРОИД
55
+ # Это нужно для получения правильной libpython3.11.so для линковки символов
56
  WORKDIR /opt/python-android
57
  RUN wget -q https://www.python.org/ftp/python/3.11.10/Python-3.11.10.tgz && tar -xf Python-3.11.10.tgz
58
  WORKDIR /opt/python-android/Python-3.11.10
 
59
  RUN ./configure --host=aarch64-linux-android --build=x86_64-linux-gnu \
60
  --with-build-python=python3 --enable-shared --without-ensurepip \
61
+ --disable-ipv6 ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no ac_cv_buggy_getaddrinfo=no \
 
 
62
  CC="$CC" CXX="$CXX" AR="$AR" RANLIB="$RANLIB" READELF="$READELF" \
63
  CFLAGS="-fPIC" CXXFLAGS="-fPIC" LDFLAGS="-fPIC"
 
64
  RUN make -j4 libpython3.11.so
65
 
66
+ # 7. СБОРКА ПАКЕТОВ (WHEELS)
67
  WORKDIR /build/wheels
68
  RUN pip install wheel setuptools
69
 
70
  # Fake curl-config
71
  RUN echo '#!/bin/bash\ncase "$1" in --version) echo "libcurl 8.5.0";; --features) echo "SSL libz HTTPS";; --libs|--static-libs) echo "-L'$PREFIX'/lib -lcurl -lssl -lcrypto -lz";; --cflags) echo "-I'$PREFIX'/include -DANDROID";; --prefix) echo "'$PREFIX'";; *) exit 0;; esac' > /usr/bin/curl-config-android && chmod +x /usr/bin/curl-config-android
72
 
73
+ # Скрипт сборки без сломанного флага --plat-name
74
  RUN echo '#!/bin/bash\n\
75
  export CC="aarch64-linux-android'${ANDROID_API}'-clang"\n\
76
  export PYTHON_ROOT="/opt/python-android/Python-3.11.10"\n\
77
+ # LDSHARED линкует pycurl напрямую к либе питона, чтобы разрешить _Py_NoneStruct\n\
78
  export LDSHARED="'$CC' -shared -L$PYTHON_ROOT -lpython3.11"\n\
79
  export CFLAGS="-I$PYTHON_ROOT/Include -I$PYTHON_ROOT -I'$PREFIX'/include -fPIC -DANDROID"\n\
80
  export LDFLAGS="-L$PYTHON_ROOT -L'$PREFIX'/lib -lpython3.11 -lcurl -lssl -lcrypto -lz"\n\
81
  \n\
82
+ echo "--- Сборка wget (Pure Python) ---"\n\
83
+ pip wheel wget --no-binary :all: --no-deps -w dist/\n\
 
 
84
  \n\
85
+ echo "--- Сборка PyCryptodome (C-Extension) ---"\n\
86
+ pip wheel pycryptodome --no-binary :all: --no-deps -w dist/\n\
87
  \n\
88
+ echo "--- Сборка PyCurl (C-Extension + Static Curl) ---"\n\
89
+ export PYCURL_CURL_CONFIG=/usr/bin/curl-config-android\n\
90
+ export PYCURL_SSL_LIBRARY=openssl\n\
91
+ pip wheel pycurl --no-binary :all: --no-deps -w dist/' > build.sh
92
 
93
  RUN chmod +x build.sh && ./build.sh
94
 
 
96
  WORKDIR /output
97
  RUN cd /build/wheels/dist && \
98
  for file in *.whl; do \
99
+ # Извлекаем имя и версию
100
  NAME=$(echo $file | cut -d"-" -f1) && \
101
  VER=$(echo $file | cut -d"-" -f2) && \
102
+ # Формируем эталонный тег Chaquopy 3.11\n\
103
+ TAG="cp311-cp311-android_21_30_arm64_v8a" && \
104
+ mv "$file" "/output/${NAME}-${VER}-${TAG}.whl"; \
105
  done
106
 
107
+ # Проверка линковки pycurl.so (чтобы убедиться, что он видит libpython3.11.so)
108
+ RUN echo "Checking dependencies of pycurl.so:" && \
109
  unzip -p /output/pycurl-*.whl *.so > /tmp/pycurl.so && \
110
  llvm-readelf -d /tmp/pycurl.so | grep "NEEDED"
111