38 lines
2.6 KiB
Bash
38 lines
2.6 KiB
Bash
#!/bin/sh
|
|
# 86 · 관리자 지시 4: Android (arm64) 용 7-Zip (7zz - 7z · RAR 풀기) 을 공식 소스에서 빌드해
|
|
# third_party/7zip/android/arm64-v8a/lib7zz.so 로 둔다 (rsync 와 같은 방식 - APK 의 jniLibs 로 들어가 앱의 네이티브 라이브러리
|
|
# 폴더에서 실행된다. Android 의 libc · libm · libdl 만 쓰고 libc++ 는 정적으로).
|
|
# 소스: https://www.7-zip.org/a/7z2501-src.7z (7-Zip 25.01, SHA-256 고정, 고치지 않음)
|
|
# 라이선스: GNU LGPL 2.1+ · BSD 3/2-clause · unRAR 라이선스 제한 (RAR 은 풀기만 - 앱은 RAR 을 만들지 않는다)
|
|
# 빌드: CPP/7zip/Bundles/Alone2 (7zz) 를 NDK clang 으로 (cmpl_clang_arm64.mak). 어셈블리는 끄고 (USE_ASM=),
|
|
# Windows 에서 빌드할 때 makefile 이 SystemDrive 로 MinGW 빌드라고 여기지 않게 SystemDrive · SYSTEMDRIVE 를 비운다.
|
|
# 새 NDK clang 의 새 경고로 실패하지 않게 경고 묶음 (-Weverything -Werror) 은 끈다 (코드는 그대로).
|
|
# 사용법 (Git Bash): sh tool/build_7zz_android.sh - Android NDK 가 필요 (ANDROID_NDK 또는 tools/android-sdk/ndk/*)
|
|
# .7z 소스를 풀 7-Zip 이 필요 (Windows: third_party/7zip/windows/7z.exe - tool/fetch_7zip.ps1, 아니면 PATH 의 7z · 7zz)
|
|
set -e
|
|
APP=$(cd "$(dirname "$0")/.." && pwd)
|
|
VER=2501
|
|
SHA=2aed39b8f1238464475e9de7dda169a5e873a1dc8bbf4f664b943eaba5620181
|
|
NDK_ROOT=${ANDROID_NDK:-$(ls -d "$APP"/../tools/android-sdk/ndk/* | sort | tail -1)}
|
|
case "$(uname -s)" in MINGW*|MSYS*|CYGWIN*) HOST=windows-x86_64; EXE=.exe ;; Darwin) HOST=darwin-x86_64; EXE= ;; *) HOST=linux-x86_64; EXE= ;; esac
|
|
TC=$NDK_ROOT/toolchains/llvm/prebuilt/$HOST/bin
|
|
MAKE=$NDK_ROOT/prebuilt/$HOST/bin/make$EXE
|
|
[ -x "$MAKE" ] || MAKE=make
|
|
SZ="$APP/third_party/7zip/windows/7z.exe"
|
|
[ -x "$SZ" ] || SZ=$(command -v 7zz || command -v 7z)
|
|
WORK=${TMPDIR:-/tmp}/jj_7zz_android
|
|
rm -rf "$WORK" && mkdir -p "$WORK" && cd "$WORK"
|
|
curl -sSLf -o src.7z "https://www.7-zip.org/a/7z$VER-src.7z"
|
|
echo "$SHA src.7z" | sha256sum -c -
|
|
"$SZ" x -y -osrc src.7z > /dev/null
|
|
cd src/CPP/7zip/Bundles/Alone2
|
|
mkdir -p b/c_arm64
|
|
"$MAKE" -j8 -f ../../cmpl_clang_arm64.mak SHELL=/bin/sh SystemDrive= SYSTEMDRIVE= MSYSTEM= \
|
|
CC="$TC/clang$EXE --target=aarch64-linux-android24" CXX="$TC/clang++$EXE --target=aarch64-linux-android24" \
|
|
USE_ASM= LIB2=-ldl LDFLAGS_STATIC_3=-static-libstdc++ CFLAGS_WARN= CFLAGS_WARN_WALL= > make.log 2>&1 || { tail -30 make.log; exit 1; }
|
|
OUT="$APP/third_party/7zip/android/arm64-v8a"
|
|
mkdir -p "$OUT"
|
|
"$TC/llvm-strip$EXE" -o "$OUT/lib7zz.so" b/c_arm64/7zz
|
|
cp ../../../../DOC/License.txt "$OUT/../License.txt"
|
|
ls -l "$OUT/lib7zz.so"
|