build: complete HarmonyOS arm64 libmpv phase 1
This commit is contained in:
1 parent
f178d38ce6
commit
75ed9dd2f4
34 files changed
+913
-151
No files matched your search
Executable
+29
@@ -0,0 +1,29 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
PROJECT_ROOT=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
|
||||
HOST_ROOT=$PROJECT_ROOT/build/host-tools
|
||||
VENV=$HOST_ROOT/venv
|
||||
PKGCONF_SOURCE=$HOST_ROOT/pkgconf-source
|
||||
PKGCONF_BUILD=$HOST_ROOT/pkgconf-build
|
||||
PKGCONF_PREFIX=$HOST_ROOT/pkgconf
|
||||
NINJA_DIR=/Applications/DevEco-Studio.app/Contents/sdk/default/openharmony/native/build-tools/cmake/bin
|
||||
|
||||
mkdir -p "$HOST_ROOT"
|
||||
test -x "$VENV/bin/python" || python3 -m venv "$VENV"
|
||||
"$VENV/bin/python" -m pip install --disable-pip-version-check --quiet 'meson==1.9.0'
|
||||
|
||||
if test ! -d "$PKGCONF_SOURCE/.git"; then
|
||||
git clone --branch pkgconf-3.0.6 --depth 1 https://github.com/pkgconf/pkgconf.git "$PKGCONF_SOURCE"
|
||||
fi
|
||||
|
||||
PATH="$VENV/bin:$NINJA_DIR:$PATH"
|
||||
export PATH
|
||||
meson setup "$PKGCONF_BUILD" "$PKGCONF_SOURCE" --prefix "$PKGCONF_PREFIX" --buildtype release --wipe
|
||||
meson compile -C "$PKGCONF_BUILD"
|
||||
meson install -C "$PKGCONF_BUILD"
|
||||
|
||||
meson --version
|
||||
"$PKGCONF_PREFIX/bin/pkgconf" --version
|
||||
ninja --version
|
||||
Executable
+16
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
PROJECT_ROOT=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
|
||||
|
||||
"$PROJECT_ROOT/scripts/bootstrap-host-tools.sh"
|
||||
"$PROJECT_ROOT/scripts/fetch-phase1-sources.sh"
|
||||
"$PROJECT_ROOT/scripts/verify-toolchain.sh"
|
||||
"$PROJECT_ROOT/scripts/prepare-sdk-dependencies.sh"
|
||||
"$PROJECT_ROOT/scripts/build-openssl-ohos.sh"
|
||||
"$PROJECT_ROOT/scripts/build-ffmpeg-ohos.sh"
|
||||
"$PROJECT_ROOT/scripts/build-font-stack-ohos.sh"
|
||||
"$PROJECT_ROOT/scripts/build-libplacebo-ohos.sh"
|
||||
"$PROJECT_ROOT/scripts/build-mpv-ohos.sh"
|
||||
"$PROJECT_ROOT/scripts/verify-ohos-prefix.sh"
|
||||
Executable
+82
@@ -0,0 +1,82 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
. "$(dirname -- "$0")/setup-ohos-env.sh"
|
||||
SOURCE=$OHOS_BUILD_ROOT/sources/ffmpeg
|
||||
BUILD=$OHOS_BUILD_ROOT/build/ffmpeg
|
||||
LOG_DIR=$OHOS_BUILD_ROOT/logs
|
||||
JOBS=$(sysctl -n hw.ncpu)
|
||||
|
||||
test -f "$SOURCE/configure" || "$PROJECT_ROOT/scripts/fetch-phase1-sources.sh"
|
||||
test -f "$PREFIX/lib/libssl.a" || "$PROJECT_ROOT/scripts/build-openssl-ohos.sh"
|
||||
mkdir -p "$BUILD" "$LOG_DIR"
|
||||
cd "$BUILD"
|
||||
|
||||
if ! "$SOURCE/configure" \
|
||||
--prefix="$PREFIX" \
|
||||
--enable-cross-compile \
|
||||
--target-os=linux \
|
||||
--arch=aarch64 \
|
||||
--cc="$CC" \
|
||||
--cxx="$CXX" \
|
||||
--ar="$AR" \
|
||||
--ranlib="$RANLIB" \
|
||||
--strip="$STRIP" \
|
||||
--nm="$NM" \
|
||||
--sysroot="$OHOS_SYSROOT" \
|
||||
--pkg-config="$PKG_CONFIG" \
|
||||
--extra-cflags="--target=$TARGET -D__MUSL__ -fPIC" \
|
||||
--extra-ldflags="--target=$TARGET -L$PREFIX/lib" \
|
||||
--enable-pic \
|
||||
--enable-static \
|
||||
--disable-shared \
|
||||
--disable-programs \
|
||||
--disable-doc \
|
||||
--disable-debug \
|
||||
--disable-avdevice \
|
||||
--disable-autodetect \
|
||||
--enable-network \
|
||||
--enable-openssl \
|
||||
--enable-zlib \
|
||||
--enable-ohcodec > "$LOG_DIR/ffmpeg-configure.log" 2>&1; then
|
||||
tail -n 120 "$LOG_DIR/ffmpeg-configure.log" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! make -j"$JOBS" > "$LOG_DIR/ffmpeg-build.log" 2>&1; then
|
||||
tail -n 160 "$LOG_DIR/ffmpeg-build.log" >&2
|
||||
exit 1
|
||||
fi
|
||||
make install > "$LOG_DIR/ffmpeg-install.log" 2>&1
|
||||
|
||||
"$PROJECT_ROOT/scripts/verify-static-archive.sh" \
|
||||
"$PREFIX/lib/libavcodec.a" \
|
||||
"$PREFIX/lib/libavfilter.a" \
|
||||
"$PREFIX/lib/libavformat.a" \
|
||||
"$PREFIX/lib/libavutil.a" \
|
||||
"$PREFIX/lib/libswresample.a" \
|
||||
"$PREFIX/lib/libswscale.a"
|
||||
|
||||
for library in libavcodec libavfilter libavformat libavutil libswresample libswscale; do
|
||||
"$PKG_CONFIG" --modversion "$library"
|
||||
done
|
||||
|
||||
for definition in \
|
||||
CONFIG_H264_DECODER \
|
||||
CONFIG_HEVC_DECODER \
|
||||
CONFIG_H264_OH_DECODER \
|
||||
CONFIG_HEVC_OH_DECODER \
|
||||
CONFIG_MATROSKA_DEMUXER \
|
||||
CONFIG_MOV_DEMUXER \
|
||||
CONFIG_HTTP_PROTOCOL \
|
||||
CONFIG_HTTPS_PROTOCOL \
|
||||
CONFIG_TCP_PROTOCOL \
|
||||
CONFIG_TLS_PROTOCOL; do
|
||||
grep -q "^#define $definition 1$" "$BUILD/config_components.h" || {
|
||||
printf 'Missing FFmpeg feature: %s\n' "$definition" >&2
|
||||
exit 1
|
||||
}
|
||||
done
|
||||
grep -q '^#define CONFIG_NETWORK 1$' "$BUILD/config.h"
|
||||
grep -q '^#define CONFIG_OHCODEC 1$' "$BUILD/config.h"
|
||||
Executable
+61
@@ -0,0 +1,61 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
. "$(dirname -- "$0")/setup-ohos-env.sh"
|
||||
SOURCE_ROOT=$OHOS_BUILD_ROOT/sources
|
||||
BUILD_ROOT=$OHOS_BUILD_ROOT/build
|
||||
LOG_DIR=$OHOS_BUILD_ROOT/logs
|
||||
|
||||
test -f "$SOURCE_ROOT/freetype/meson.build" || "$PROJECT_ROOT/scripts/fetch-phase1-sources.sh"
|
||||
mkdir -p "$BUILD_ROOT" "$LOG_DIR"
|
||||
|
||||
setup_build()
|
||||
{
|
||||
name=$1
|
||||
shift
|
||||
source_dir=$SOURCE_ROOT/$name
|
||||
build_dir=$BUILD_ROOT/$name
|
||||
if test -f "$build_dir/meson-private/coredata.dat"; then
|
||||
meson setup "$build_dir" "$source_dir" --wipe "$@"
|
||||
else
|
||||
meson setup "$build_dir" "$source_dir" "$@"
|
||||
fi
|
||||
meson compile -C "$build_dir"
|
||||
meson install -C "$build_dir"
|
||||
}
|
||||
|
||||
setup_build freetype \
|
||||
--cross-file "$CROSS_FILE" --prefix "$PREFIX" --buildtype release \
|
||||
-Dzlib=system -Dharfbuzz=disabled -Dpng=disabled -Dbrotli=disabled \
|
||||
-Dbzip2=disabled -Dtests=disabled > "$LOG_DIR/freetype.log" 2>&1
|
||||
|
||||
setup_build fribidi \
|
||||
--cross-file "$CROSS_FILE" --prefix "$PREFIX" --buildtype release \
|
||||
-Ddocs=false -Dbin=false -Dtests=false > "$LOG_DIR/fribidi.log" 2>&1
|
||||
|
||||
setup_build harfbuzz \
|
||||
--cross-file "$CROSS_FILE" --prefix "$PREFIX" --buildtype release \
|
||||
-Dglib=disabled -Dgobject=disabled -Dcairo=disabled -Dchafa=disabled \
|
||||
-Dpng=disabled -Dzlib=disabled -Dicu=disabled -Dfreetype=enabled \
|
||||
-Draster=disabled -Dvector=disabled -Dgpu=disabled -Dgpu_demo=disabled \
|
||||
-Dsubset=disabled -Dtests=disabled -Dintrospection=disabled -Ddocs=disabled \
|
||||
-Dutilities=disabled > "$LOG_DIR/harfbuzz.log" 2>&1
|
||||
|
||||
setup_build libass \
|
||||
--cross-file "$CROSS_FILE" --prefix "$PREFIX" --buildtype release \
|
||||
-Dfontconfig=disabled -Ddirectwrite=disabled -Dcoretext=disabled \
|
||||
-Dasm=disabled -Dlibunibreak=disabled -Drequire-system-font-provider=false \
|
||||
-Dtest=disabled -Dcompare=disabled -Dprofile=disabled -Dfuzz=disabled \
|
||||
-Dcheckasm=disabled > "$LOG_DIR/libass.log" 2>&1
|
||||
|
||||
"$PROJECT_ROOT/scripts/verify-static-archive.sh" \
|
||||
"$PREFIX/lib/libfreetype.a" \
|
||||
"$PREFIX/lib/libfribidi.a" \
|
||||
"$PREFIX/lib/libharfbuzz.a" \
|
||||
"$PREFIX/lib/libass.a"
|
||||
|
||||
for library in freetype2 fribidi harfbuzz libass; do
|
||||
printf '%s=' "$library"
|
||||
"$PKG_CONFIG" --modversion "$library"
|
||||
done
|
||||
Executable
+36
@@ -0,0 +1,36 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
. "$(dirname -- "$0")/setup-ohos-env.sh"
|
||||
SOURCE=$OHOS_BUILD_ROOT/sources/libplacebo
|
||||
BUILD=$OHOS_BUILD_ROOT/build/libplacebo
|
||||
LOG=$OHOS_BUILD_ROOT/logs/libplacebo.log
|
||||
|
||||
test -f "$SOURCE/meson.build" || "$PROJECT_ROOT/scripts/fetch-phase1-sources.sh"
|
||||
mkdir -p "$OHOS_BUILD_ROOT/logs"
|
||||
|
||||
if test -f "$BUILD/meson-private/coredata.dat"; then
|
||||
setup_mode=--wipe
|
||||
else
|
||||
setup_mode=
|
||||
fi
|
||||
|
||||
if ! meson setup "$BUILD" "$SOURCE" $setup_mode \
|
||||
--cross-file "$CROSS_FILE" --prefix "$PREFIX" --buildtype release \
|
||||
-Dvulkan=disabled -Dopengl=disabled -Dd3d11=disabled \
|
||||
-Dglslang=disabled -Dshaderc=disabled -Dlcms=disabled \
|
||||
-Ddovi=disabled -Dlibdovi=disabled -Dunwind=disabled -Dxxhash=disabled \
|
||||
-Ddemos=false -Dtests=false -Dbench=false -Dfuzz=false > "$LOG" 2>&1; then
|
||||
tail -n 140 "$LOG" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! meson compile -C "$BUILD" >> "$LOG" 2>&1; then
|
||||
tail -n 180 "$LOG" >&2
|
||||
exit 1
|
||||
fi
|
||||
meson install -C "$BUILD" >> "$LOG" 2>&1
|
||||
|
||||
"$PROJECT_ROOT/scripts/verify-static-archive.sh" "$PREFIX/lib/libplacebo.a"
|
||||
"$PKG_CONFIG" --modversion libplacebo
|
||||
"$PKG_CONFIG" --variable=pl_has_vulkan libplacebo
|
||||
Executable
+40
@@ -0,0 +1,40 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
. "$(dirname -- "$0")/setup-ohos-env.sh"
|
||||
BUILD=$OHOS_BUILD_ROOT/build/mpv
|
||||
LOG=$OHOS_BUILD_ROOT/logs/mpv.log
|
||||
|
||||
mkdir -p "$OHOS_BUILD_ROOT/logs"
|
||||
test -f "$PREFIX/lib/libavcodec.a" || "$PROJECT_ROOT/scripts/build-ffmpeg-ohos.sh"
|
||||
test -f "$PREFIX/lib/libass.a" || "$PROJECT_ROOT/scripts/build-font-stack-ohos.sh"
|
||||
test -f "$PREFIX/lib/libplacebo.a" || "$PROJECT_ROOT/scripts/build-libplacebo-ohos.sh"
|
||||
|
||||
if test -f "$BUILD/meson-private/coredata.dat"; then
|
||||
setup_mode=--wipe
|
||||
else
|
||||
setup_mode=
|
||||
fi
|
||||
|
||||
if ! meson setup "$BUILD" "$PROJECT_ROOT" $setup_mode \
|
||||
--cross-file "$CROSS_FILE" --prefix "$PREFIX" --buildtype release \
|
||||
-Ddefault_library=shared -Dauto_features=disabled \
|
||||
-Dcplayer=false -Dlibmpv=true -Dtests=false -Dfuzzers=false \
|
||||
-Dgpl=true -Dbuild-date=false -Dplain-gl=enabled -Dgl=enabled \
|
||||
-Dzlib=enabled -Dvector=enabled -Dlua=disabled > "$LOG" 2>&1; then
|
||||
tail -n 180 "$LOG" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! meson compile -C "$BUILD" >> "$LOG" 2>&1; then
|
||||
tail -n 220 "$LOG" >&2
|
||||
exit 1
|
||||
fi
|
||||
meson install -C "$BUILD" >> "$LOG" 2>&1
|
||||
|
||||
LIBMPV=$BUILD/libmpv.so
|
||||
test -f "$LIBMPV" || LIBMPV=$PREFIX/lib/libmpv.so
|
||||
"$PROJECT_ROOT/scripts/verify-ohos-binary.sh" "$LIBMPV"
|
||||
"$PROJECT_ROOT/scripts/verify-libmpv-symbols.sh" "$LIBMPV"
|
||||
printf 'libmpv=%s\n' "$LIBMPV"
|
||||
Executable
+32
@@ -0,0 +1,32 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
. "$(dirname -- "$0")/setup-ohos-env.sh"
|
||||
SOURCE=$OHOS_BUILD_ROOT/sources/openssl
|
||||
BUILD=$OHOS_BUILD_ROOT/build/openssl
|
||||
LOG=$OHOS_BUILD_ROOT/logs/openssl.log
|
||||
JOBS=$(sysctl -n hw.ncpu)
|
||||
|
||||
test -f "$SOURCE/Configure" || "$PROJECT_ROOT/scripts/fetch-phase1-sources.sh"
|
||||
mkdir -p "$BUILD" "$PREFIX" "$OHOS_BUILD_ROOT/logs"
|
||||
cd "$BUILD"
|
||||
|
||||
if ! CC="$CC --target=$TARGET --sysroot=$OHOS_SYSROOT -D__MUSL__ -fPIC" \
|
||||
CXX="$CXX --target=$TARGET --sysroot=$OHOS_SYSROOT -D__MUSL__ -fPIC" \
|
||||
AR="$AR" RANLIB="$RANLIB" \
|
||||
perl "$SOURCE/Configure" linux-aarch64 \
|
||||
no-shared no-tests no-apps no-docs no-module \
|
||||
--prefix="$PREFIX" --openssldir=/etc/ssl --libdir=lib > "$LOG" 2>&1; then
|
||||
tail -n 140 "$LOG" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! make -j"$JOBS" >> "$LOG" 2>&1; then
|
||||
tail -n 180 "$LOG" >&2
|
||||
exit 1
|
||||
fi
|
||||
make install_sw >> "$LOG" 2>&1
|
||||
|
||||
"$PROJECT_ROOT/scripts/verify-static-archive.sh" "$PREFIX/lib/libcrypto.a" "$PREFIX/lib/libssl.a"
|
||||
"$PKG_CONFIG" --modversion openssl
|
||||
Executable
+33
@@ -0,0 +1,33 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
. "$(dirname -- "$0")/setup-ohos-env.sh"
|
||||
SOURCE_ROOT=$OHOS_BUILD_ROOT/sources
|
||||
mkdir -p "$SOURCE_ROOT"
|
||||
|
||||
fetch_ref()
|
||||
{
|
||||
name=$1
|
||||
repository=$2
|
||||
reference=$3
|
||||
destination=$SOURCE_ROOT/$name
|
||||
|
||||
if test ! -d "$destination/.git"; then
|
||||
mkdir -p "$destination"
|
||||
git -C "$destination" init
|
||||
git -C "$destination" remote add origin "$repository"
|
||||
fi
|
||||
git -C "$destination" fetch --depth 1 origin "$reference"
|
||||
git -C "$destination" checkout --detach FETCH_HEAD
|
||||
printf '%-12s %s %s\n' "$name" "$(git -C "$destination" rev-parse HEAD)" "$(git -C "$destination" describe --tags --always)"
|
||||
}
|
||||
|
||||
fetch_ref openssl https://github.com/openssl/openssl.git openssl-3.6.4
|
||||
fetch_ref ffmpeg https://git.ffmpeg.org/ffmpeg.git 3acec0a1af2dda0a0838689b8b8649e7deb080a0
|
||||
fetch_ref freetype https://github.com/freetype/freetype.git VER-2-14-3
|
||||
fetch_ref fribidi https://github.com/fribidi/fribidi.git v1.0.16
|
||||
fetch_ref harfbuzz https://github.com/harfbuzz/harfbuzz.git 14.4.0
|
||||
fetch_ref libass https://github.com/libass/libass.git 0.17.5
|
||||
fetch_ref libplacebo https://code.videolan.org/videolan/libplacebo.git v7.360.1
|
||||
git -C "$SOURCE_ROOT/libplacebo" submodule update --init --depth 1
|
||||
Executable
+15
@@ -0,0 +1,15 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
PROJECT_ROOT=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
|
||||
PREFIX=${PREFIX:-$PROJECT_ROOT/build/ohos-arm64/prefix}
|
||||
PKGCONF=$PROJECT_ROOT/build/host-tools/pkgconf/bin/pkgconf
|
||||
|
||||
test -x "$PKGCONF" || { printf 'pkgconf is not bootstrapped: %s\n' "$PKGCONF" >&2; exit 1; }
|
||||
|
||||
PKG_CONFIG_DIR= \
|
||||
PKG_CONFIG_PATH= \
|
||||
PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig:$PREFIX/share/pkgconfig" \
|
||||
PKG_CONFIG_SYSROOT_DIR= \
|
||||
exec "$PKGCONF" "$@"
|
||||
Executable
+22
@@ -0,0 +1,22 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
. "$(dirname -- "$0")/setup-ohos-env.sh"
|
||||
PC_DIR=$PREFIX/lib/pkgconfig
|
||||
mkdir -p "$PC_DIR"
|
||||
|
||||
printf '%s\n' \
|
||||
"prefix=$OHOS_SYSROOT/usr" \
|
||||
'exec_prefix=${prefix}' \
|
||||
'libdir=${prefix}/lib/aarch64-linux-ohos' \
|
||||
'includedir=${prefix}/include' \
|
||||
'' \
|
||||
'Name: zlib' \
|
||||
'Description: OpenHarmony SDK zlib' \
|
||||
'Version: 1.2.13' \
|
||||
'Libs: -L${libdir} -lz' \
|
||||
'Cflags: -I${includedir}' > "$PC_DIR/zlib.pc"
|
||||
|
||||
"$PKG_CONFIG" --modversion zlib
|
||||
"$PKG_CONFIG" --libs --cflags zlib
|
||||
@@ -0,0 +1,7 @@
|
||||
#include <stdio.h>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
puts("HarmonyOS C probe");
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
#include <cstdio>
|
||||
|
||||
int main()
|
||||
{
|
||||
std::puts("HarmonyOS C++ probe");
|
||||
return 0;
|
||||
}
|
||||
Executable
+47
@@ -0,0 +1,47 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
if test -f "$(pwd)/meson.build"; then
|
||||
PROJECT_ROOT=$(pwd)
|
||||
else
|
||||
PROJECT_ROOT=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
|
||||
fi
|
||||
DEFAULT_OHOS_SDK=/Applications/DevEco-Studio.app/Contents/sdk/default/openharmony
|
||||
OHOS_SDK=${OHOS_SDK:-$DEFAULT_OHOS_SDK}
|
||||
OHOS_NATIVE=$OHOS_SDK/native
|
||||
OHOS_SYSROOT=$OHOS_NATIVE/sysroot
|
||||
OHOS_TOOLCHAIN=$OHOS_NATIVE/llvm/bin
|
||||
OHOS_BUILD_ROOT=${OHOS_BUILD_ROOT:-$PROJECT_ROOT/build/ohos-arm64}
|
||||
PREFIX=${PREFIX:-$OHOS_BUILD_ROOT/prefix}
|
||||
TARGET=aarch64-linux-ohos
|
||||
|
||||
for path in "$OHOS_SYSROOT" "$OHOS_TOOLCHAIN/clang" "$OHOS_TOOLCHAIN/clang++" \
|
||||
"$OHOS_TOOLCHAIN/llvm-ar" "$OHOS_TOOLCHAIN/llvm-ranlib" \
|
||||
"$OHOS_TOOLCHAIN/llvm-strip" "$OHOS_TOOLCHAIN/llvm-readelf"; do
|
||||
test -e "$path" || { printf 'Missing OHOS toolchain path: %s\n' "$path" >&2; return 1 2>/dev/null || exit 1; }
|
||||
done
|
||||
|
||||
CC=$OHOS_TOOLCHAIN/clang
|
||||
CXX=$OHOS_TOOLCHAIN/clang++
|
||||
AR=$OHOS_TOOLCHAIN/llvm-ar
|
||||
RANLIB=$OHOS_TOOLCHAIN/llvm-ranlib
|
||||
STRIP=$OHOS_TOOLCHAIN/llvm-strip
|
||||
READELF=$OHOS_TOOLCHAIN/llvm-readelf
|
||||
NM=$OHOS_TOOLCHAIN/llvm-nm
|
||||
PKG_CONFIG=$PROJECT_ROOT/scripts/pkg-config-ohos.sh
|
||||
CROSS_FILE=$PROJECT_ROOT/toolchains/ohos-api24-arm64.ini
|
||||
OHOS_COMMON_FLAGS="--target=$TARGET --sysroot=$OHOS_SYSROOT -D__MUSL__"
|
||||
|
||||
PATH=$PROJECT_ROOT/build/host-tools/venv/bin:$OHOS_NATIVE/build-tools/cmake/bin:$PATH
|
||||
PKG_CONFIG_DIR=
|
||||
PKG_CONFIG_PATH=
|
||||
PKG_CONFIG_LIBDIR=$PREFIX/lib/pkgconfig:$PREFIX/share/pkgconfig
|
||||
PKG_CONFIG_SYSROOT_DIR=
|
||||
|
||||
unset CPATH C_INCLUDE_PATH CPLUS_INCLUDE_PATH LIBRARY_PATH CMAKE_PREFIX_PATH
|
||||
|
||||
export PROJECT_ROOT OHOS_SDK OHOS_NATIVE OHOS_SYSROOT OHOS_TOOLCHAIN
|
||||
export OHOS_BUILD_ROOT PREFIX TARGET CC CXX AR RANLIB STRIP READELF NM
|
||||
export PKG_CONFIG CROSS_FILE OHOS_COMMON_FLAGS PATH
|
||||
export PKG_CONFIG_DIR PKG_CONFIG_PATH PKG_CONFIG_LIBDIR PKG_CONFIG_SYSROOT_DIR
|
||||
Executable
+25
@@ -0,0 +1,25 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
test "$#" -eq 1 || { printf 'Usage: %s LIBMPV\n' "$0" >&2; exit 2; }
|
||||
. "$(dirname -- "$0")/setup-ohos-env.sh"
|
||||
LIBMPV=$1
|
||||
SYMBOLS=$($NM -D --defined-only "$LIBMPV")
|
||||
|
||||
for symbol in \
|
||||
mpv_create \
|
||||
mpv_initialize \
|
||||
mpv_command \
|
||||
mpv_set_property \
|
||||
mpv_get_property \
|
||||
mpv_render_context_create \
|
||||
mpv_render_context_render \
|
||||
mpv_render_context_set_update_callback \
|
||||
mpv_render_context_free; do
|
||||
printf '%s\n' "$SYMBOLS" | grep -Eq "[[:space:]]${symbol}$" || {
|
||||
printf 'Missing libmpv symbol: %s\n' "$symbol" >&2
|
||||
exit 1
|
||||
}
|
||||
printf '%s\n' "$symbol"
|
||||
done
|
||||
Executable
+16
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
test "$#" -gt 0 || { printf 'Usage: %s FILE...\n' "$0" >&2; exit 2; }
|
||||
. "$(dirname -- "$0")/setup-ohos-env.sh"
|
||||
|
||||
for artifact in "$@"; do
|
||||
test -f "$artifact" || { printf 'Missing artifact: %s\n' "$artifact" >&2; exit 1; }
|
||||
description=$(file "$artifact")
|
||||
header=$($READELF -h "$artifact")
|
||||
printf '%s\n%s\n' "$description" "$header"
|
||||
printf '%s\n' "$description" | grep -q 'ELF 64-bit LSB'
|
||||
printf '%s\n' "$header" | grep -q 'Machine:.*AArch64'
|
||||
$READELF -d "$artifact" 2>/dev/null || true
|
||||
done
|
||||
Executable
+46
@@ -0,0 +1,46 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
. "$(dirname -- "$0")/setup-ohos-env.sh"
|
||||
LIBMPV=$PREFIX/lib/libmpv.so.2.5.0
|
||||
test -f "$LIBMPV" || { printf 'Missing libmpv: %s\n' "$LIBMPV" >&2; exit 1; }
|
||||
|
||||
archive_count=0
|
||||
for archive in "$PREFIX"/lib/*.a; do
|
||||
test -f "$archive" || continue
|
||||
archive_count=$((archive_count + 1))
|
||||
temp_dir=$(mktemp -d)
|
||||
(
|
||||
cd "$temp_dir"
|
||||
"$AR" x "$archive"
|
||||
object_count=$(find . -type f | wc -l | tr -d ' ')
|
||||
machine_count=$(find . -type f -exec "$READELF" -h {} + 2>/dev/null | grep -c 'Machine:.*AArch64')
|
||||
test "$object_count" -gt 0
|
||||
test "$object_count" -eq "$machine_count" || {
|
||||
printf 'Non-AArch64 archive member: %s (%s/%s)\n' "$archive" "$machine_count" "$object_count" >&2
|
||||
exit 1
|
||||
}
|
||||
)
|
||||
rm -r "$temp_dir"
|
||||
done
|
||||
test "$archive_count" -gt 0
|
||||
|
||||
if find "$PREFIX" -type f \( -name '*.pc' -o -name '*.cmake' -o -name '*.ninja' \) \
|
||||
-exec grep -El '(^|[[:space:]])-[IL]/(opt/homebrew|usr/local)|\.dylib|[[:space:]]-framework[[:space:]]' {} + | grep -q .; then
|
||||
printf 'Host library path found in target metadata\n' >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
needed=$($READELF -d "$LIBMPV" | sed -n 's/.*Shared library: \[\([^]]*\)\].*/\1/p')
|
||||
for library in $needed; do
|
||||
case "$library" in
|
||||
libc.so|libz.so|libnative_media_vdec.so|libnative_media_venc.so|libnative_media_codecbase.so|libnative_media_core.so|libnative_window.so) ;;
|
||||
*) printf 'Unexpected dynamic dependency: %s\n' "$library" >&2; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
"$PROJECT_ROOT/scripts/verify-ohos-binary.sh" "$LIBMPV"
|
||||
"$PROJECT_ROOT/scripts/verify-libmpv-symbols.sh" "$LIBMPV"
|
||||
printf 'verified_archives=%s\n' "$archive_count"
|
||||
printf 'dynamic_dependencies=%s\n' "$(printf '%s' "$needed" | tr '\n' ',')"
|
||||
Executable
+23
@@ -0,0 +1,23 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
test "$#" -gt 0 || { printf 'Usage: %s ARCHIVE...\n' "$0" >&2; exit 2; }
|
||||
. "$(dirname -- "$0")/setup-ohos-env.sh"
|
||||
|
||||
for archive in "$@"; do
|
||||
test -f "$archive" || { printf 'Missing archive: %s\n' "$archive" >&2; exit 1; }
|
||||
members=$($AR t "$archive")
|
||||
member=$(printf '%s\n' "$members" | sed -n '1p')
|
||||
test -n "$member" || { printf 'Empty archive: %s\n' "$archive" >&2; exit 1; }
|
||||
temp_dir=$(mktemp -d)
|
||||
(
|
||||
cd "$temp_dir"
|
||||
"$AR" x "$archive" "$member"
|
||||
header=$($READELF -h "$member")
|
||||
printf '%s: %s\n' "$archive" "$member"
|
||||
printf '%s\n' "$header"
|
||||
printf '%s\n' "$header" | grep -q 'Machine:.*AArch64'
|
||||
)
|
||||
rm -r "$temp_dir"
|
||||
done
|
||||
Executable
+14
@@ -0,0 +1,14 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
. "$(dirname -- "$0")/setup-ohos-env.sh"
|
||||
PROBE_DIR=$OHOS_BUILD_ROOT/probes
|
||||
mkdir -p "$PROBE_DIR"
|
||||
|
||||
"$CC" --target="$TARGET" --sysroot="$OHOS_SYSROOT" -D__MUSL__ \
|
||||
"$PROJECT_ROOT/scripts/probes/hello.c" -o "$PROBE_DIR/hello-c"
|
||||
"$CXX" --target="$TARGET" --sysroot="$OHOS_SYSROOT" -D__MUSL__ \
|
||||
"$PROJECT_ROOT/scripts/probes/hello.cpp" -o "$PROBE_DIR/hello-cpp"
|
||||
|
||||
"$PROJECT_ROOT/scripts/verify-ohos-binary.sh" "$PROBE_DIR/hello-c" "$PROBE_DIR/hello-cpp"
|
||||
Reference in new issue
Block a user