Dockerfile 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. FROM debian:bookworm AS builder
  2. ENV NDK=/opt/android-ndk
  3. ENV NDK_TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
  4. ENV PATH=$NDK_TOOLCHAIN/bin:$PATH
  5. ADD https://dl.google.com/android/repository/android-ndk-r28c-linux.zip /tmp/android-ndk.zip
  6. ADD https://github.com/unicode-org/icu/releases/download/release-77-1/icu4c-77_1-src.tgz /tmp/icu4c-77_1-src.tgz
  7. RUN apt-get update && \
  8. apt-get install -y \
  9. cmake \
  10. g++ \
  11. unzip \
  12. xz-utils && \
  13. rm -rf /var/cache/apt/archives /var/lib/apt/lists/* && \
  14. \
  15. unzip /tmp/android-ndk.zip -d $NDK && for d in "$NDK"/*; do mv "$d"/* "$NDK"/; rmdir "$d"; done && \
  16. mkdir /src && \
  17. tar -xzf /tmp/icu4c-77_1-src.tgz -C /src --one-top-level=linux && \
  18. rm /tmp/android-ndk.zip /tmp/icu4c-77_1-src.tgz && \
  19. \
  20. cd /src/linux/icu/source && \
  21. ./runConfigureICU Linux --prefix=$PWD/prebuilt \
  22. CFLAGS="-Os" \
  23. CXXFLAGS="--std=c++20" \
  24. --enable-static \
  25. --enable-shared=no \
  26. --enable-extras=no \
  27. --enable-strict=no \
  28. --enable-icuio=no \
  29. --enable-layout=no \
  30. --enable-layoutex=no \
  31. --enable-tools \
  32. --enable-tests=no \
  33. --enable-samples=no \
  34. --enable-dyload \
  35. --with-data-packaging=archive && \
  36. make -j15 && \
  37. make install && \
  38. \
  39. cp -a /src/linux /src/x86 && \
  40. cd /src/x86/icu/source && \
  41. ./configure --prefix=/build/x86 \
  42. --host=i686-android-linux \
  43. --enable-static=no \
  44. --enable-shared \
  45. --enable-extras=no \
  46. --enable-strict=no \
  47. --enable-icuio=no \
  48. --enable-layout=no \
  49. --enable-layoutex=no \
  50. --enable-tools=no \
  51. --enable-tests=no \
  52. --enable-samples=no \
  53. --enable-renaming \
  54. --enable-dyload \
  55. --with-cross-build=/src/linux/icu/source \
  56. CFLAGS='-Os' \
  57. CXXFLAGS='--std=c++20' \
  58. LDFLAGS='-static-libstdc++ -Wl,-z,max-page-size=16384 -Wl,-rpath=\$$ORIGIN' \
  59. CC=i686-linux-android29-clang \
  60. CXX=i686-linux-android29-clang++ \
  61. AR=llvm-ar \
  62. RANLIB=llvm-ranlib \
  63. --with-data-packaging=archive && \
  64. make -j15 && \
  65. make install && \
  66. \
  67. cp -a /src/linux /src/x64 && \
  68. cd /src/x64/icu/source && \
  69. ./configure --prefix=/build/x64 \
  70. --host=x86_64-android-linux \
  71. --enable-static=no \
  72. --enable-shared \
  73. --enable-extras=no \
  74. --enable-strict=no \
  75. --enable-icuio=no \
  76. --enable-layout=no \
  77. --enable-layoutex=no \
  78. --enable-tools=no \
  79. --enable-tests=no \
  80. --enable-samples=no \
  81. --enable-renaming \
  82. --enable-dyload \
  83. --with-cross-build=/src/linux/icu/source \
  84. CFLAGS='-Os' \
  85. CXXFLAGS='--std=c++20' \
  86. LDFLAGS='-static-libstdc++ -Wl,-z,max-page-size=16384 -Wl,-rpath=\$$ORIGIN' \
  87. CC=x86_64-linux-android29-clang \
  88. CXX=x86_64-linux-android29-clang++ \
  89. AR=llvm-ar \
  90. RANLIB=llvm-ranlib \
  91. --with-data-packaging=archive && \
  92. make -j15 && \
  93. make install && \
  94. \
  95. cp -a /src/linux /src/arm32 && \
  96. cd /src/arm32/icu/source && \
  97. ./configure --prefix=/build/arm32 \
  98. --host=arm-linux-androideabi \
  99. --enable-static=no \
  100. --enable-shared \
  101. --enable-extras=no \
  102. --enable-strict=no \
  103. --enable-icuio=no \
  104. --enable-layout=no \
  105. --enable-layoutex=no \
  106. --enable-tools=no \
  107. --enable-tests=no \
  108. --enable-samples=no \
  109. --enable-renaming \
  110. --enable-dyload \
  111. --with-cross-build=/src/linux/icu/source \
  112. CFLAGS='-Os -march=armv7-a -mfloat-abi=softfp -mfpu=neon' \
  113. CXXFLAGS='--std=c++20 -march=armv7-a -mfloat-abi=softfp -mfpu=neon' \
  114. LDFLAGS='-static-libstdc++ -Wl,-z,max-page-size=16384 -march=armv7-a -Wl,--fix-cortex-a8 -Wl,-rpath=\$$ORIGIN' \
  115. CC=armv7a-linux-androideabi29-clang \
  116. CXX=armv7a-linux-androideabi29-clang++ \
  117. AR=llvm-ar \
  118. RANLIB=llvm-ranlib \
  119. --with-data-packaging=archive && \
  120. make -j15 && \
  121. make install && \
  122. \
  123. cp -a /src/linux /src/arm64 && \
  124. cd /src/arm64/icu/source && \
  125. ./configure --prefix=/build/arm64 \
  126. --host=aarch64-android-linux \
  127. --enable-static=no \
  128. --enable-shared \
  129. --enable-extras=no \
  130. --enable-strict=no \
  131. --enable-icuio=no \
  132. --enable-layout=no \
  133. --enable-layoutex=no \
  134. --enable-tools=no \
  135. --enable-tests=no \
  136. --enable-samples=no \
  137. --enable-renaming \
  138. --enable-dyload \
  139. --with-cross-build=/src/linux/icu/source \
  140. CFLAGS='-Os' \
  141. CXXFLAGS='--std=c++20' \
  142. LDFLAGS='-static-libstdc++ -Wl,-z,max-page-size=16384 -Wl,-rpath=\$$ORIGIN' \
  143. CC=aarch64-linux-android29-clang \
  144. CXX=aarch64-linux-android29-clang++ \
  145. AR=llvm-ar \
  146. RANLIB=llvm-ranlib \
  147. --with-data-packaging=archive && \
  148. make -j15 && \
  149. make install && \
  150. \
  151. mkdir -p /out/x86 /out/x64 /out/arm32 /out/arm64 && \
  152. cd /out && \
  153. \
  154. cp /build/x86/lib/libicudata.so.77.1 x86/libicudata.77.1.so && \
  155. cp /build/x86/lib/libicui18n.so.77.1 x86/libicui18n.77.1.so && \
  156. cp /build/x86/lib/libicuuc.so.77.1 x86/libicuuc.77.1.so && \
  157. \
  158. cp /build/x64/lib/libicudata.so.77.1 x64/libicudata.77.1.so && \
  159. cp /build/x64/lib/libicui18n.so.77.1 x64/libicui18n.77.1.so && \
  160. cp /build/x64/lib/libicuuc.so.77.1 x64/libicuuc.77.1.so && \
  161. \
  162. cp /build/arm32/lib/libicudata.so.77.1 arm32/libicudata.77.1.so && \
  163. cp /build/arm32/lib/libicui18n.so.77.1 arm32/libicui18n.77.1.so && \
  164. cp /build/arm32/lib/libicuuc.so.77.1 arm32/libicuuc.77.1.so && \
  165. \
  166. cp /build/arm64/lib/libicudata.so.77.1 arm64/libicudata.77.1.so && \
  167. cp /build/arm64/lib/libicui18n.so.77.1 arm64/libicui18n.77.1.so && \
  168. cp /build/arm64/lib/libicuuc.so.77.1 arm64/libicuuc.77.1.so && \
  169. \
  170. tar cfJ /out/icu-android.tar.xz x86 x64 arm32 arm64 && \
  171. \
  172. rm -rf x86 x64 arm32 arm64 /src /build
  173. FROM scratch
  174. COPY --from=builder /out/icu-android.tar.xz /out/icu-android.tar.xz