2026-08-13 11:28:40 +08:00
#!/usr/bin/env bash
#
# SPDX-License-Identifier: GPL-2.0
#
# Copyright (c) 2026 AMLOGIC
#
# Libversenc-prebuilt build script for AMLbian
# This script packages prebuilt libversenc library (H264/H265) for VC9000E IP
set -e
# Get script directory
SCRIPT_DIR = " $( cd " $( dirname " ${ BASH_SOURCE [0] } " ) " && pwd ) "
AMLBIAN_DIR = " $( dirname " ${ SCRIPT_DIR } " ) "
AMLBIAN_DIR = " $( dirname " ${ AMLBIAN_DIR } " ) " # Go up one more level from multimedia/tee
AMLBIAN_DIR = " $( dirname " ${ AMLBIAN_DIR } " ) " # Go up one more level from scripts
BUILD_DIR = " ${ AMLBIAN_DIR } /../build"
2026-11-11 08:50:43 +08:00
MODULE_BUILD_DIR = " ${ SRC } /output/.tmp"
2026-08-13 11:28:40 +08:00
# ==============================================================================
# Section 2: Default Configuration
# ==============================================================================
BOARD = " ${ BOARD :- s6 -bq201 } "
DEB_VERSION = " ${ LIBVERSENC_PREBUILT_VERSION :- 1 .0 } "
ARCH = " ${ ARCH :- arm64 } "
# ==============================================================================
# Section 4: Libversenc-prebuilt Build Functions
# ==============================================================================
function __unset_libversenc_prebuilt_config {
# Clean up any environment variables set during build
unset EXTRA_OEMAKE
unset SYSROOT
unset CFLAGS
unset CXXFLAGS
unset LDFLAGS
}
function __libversenc_prebuilt_prepare_source {
local build_dir = " ${ 1 } "
local aml_comp_path = " $( amlbian_get_aml_comp_dir) "
if [[ -z " ${ aml_comp_path } " ]] || [[ ! -d " ${ aml_comp_path } " ]] ; then
2026-11-11 08:50:43 +08:00
aml_log error "LIBVERSENC-PREBUILT" "aml-comp not found: ${ aml_comp_path } "
2026-08-13 11:28:40 +08:00
exit 1
fi
local source_dir = " ${ aml_comp_path } /hardware/amlogic/libencoder/versenc_prebuilt"
if [[ ! -d " ${ source_dir } " ]] ; then
2026-11-11 08:50:43 +08:00
aml_log error "LIBVERSENC-PREBUILT" "Source directory not found: ${ source_dir } "
2026-08-13 11:28:40 +08:00
exit 1
fi
# Determine lib directory based on architecture
local lib_dir = "lib"
if [[ " ${ ARCH } " == "arm64" ]] ; then
lib_dir = "lib64"
fi
local lib_path = " ${ source_dir } / ${ lib_dir } "
if [[ ! -d " ${ lib_path } " ]] ; then
2026-11-11 08:50:43 +08:00
aml_log error "LIBVERSENC-PREBUILT" "Library directory not found: ${ lib_path } "
2026-08-13 11:28:40 +08:00
exit 1
fi
2026-11-11 08:50:43 +08:00
aml_log info "LIBVERSENC-PREBUILT" "Source verified: ${ source_dir } "
aml_log info "LIBVERSENC-PREBUILT" "Library directory: ${ lib_path } "
2026-08-13 11:28:40 +08:00
return 0
}
function __libversenc_prebuilt_install {
local build_dir = " ${ 1 } "
local install_dir = " ${ 2 } "
2026-11-11 08:50:43 +08:00
aml_log info "LIBVERSENC-PREBUILT" "Installing libversenc-prebuilt library..."
2026-08-13 11:28:40 +08:00
local aml_comp_path = " $( amlbian_get_aml_comp_dir) "
local source_dir = " ${ aml_comp_path } /hardware/amlogic/libencoder/versenc_prebuilt"
# Determine lib directory based on architecture
local lib_dir = "lib"
if [[ " ${ ARCH } " == "arm64" ]] ; then
lib_dir = "lib64"
fi
local lib_src_dir = " ${ source_dir } / ${ lib_dir } "
local include_src_dir = " ${ source_dir } /include"
# Create installation directories
mkdir -p " ${ install_dir } /usr/lib"
mkdir -p " ${ install_dir } /usr/include"
# Install header files
2026-11-11 08:50:43 +08:00
aml_log info "LIBVERSENC-PREBUILT" "Installing header files from ${ include_src_dir } ..."
2026-08-13 11:28:40 +08:00
if [[ -d " ${ include_src_dir } " ]] ; then
for header in " ${ include_src_dir } " /*.h; do
if [[ -f " ${ header } " ]] ; then
install -m 0644 -D " ${ header } " " ${ install_dir } /usr/include/"
2026-11-11 08:50:43 +08:00
aml_log debug "LIBVERSENC-PREBUILT" "Installed header: $( basename " ${ header } " ) "
2026-08-13 11:28:40 +08:00
fi
done
else
2026-11-11 08:50:43 +08:00
aml_log warn "LIBVERSENC-PREBUILT" "Include directory not found: ${ include_src_dir } "
2026-08-13 11:28:40 +08:00
fi
# Install library files
2026-11-11 08:50:43 +08:00
aml_log info "LIBVERSENC-PREBUILT" "Installing library files from ${ lib_src_dir } ..."
2026-08-13 11:28:40 +08:00
if [[ -d " ${ lib_src_dir } " ]] ; then
for lib in " ${ lib_src_dir } " /*.so; do
if [[ -f " ${ lib } " ]] ; then
install -m 0644 " ${ lib } " " ${ install_dir } /usr/lib/"
2026-11-11 08:50:43 +08:00
aml_log debug "LIBVERSENC-PREBUILT" "Installed library: $( basename " ${ lib } " ) "
2026-08-13 11:28:40 +08:00
fi
done
else
2026-11-11 08:50:43 +08:00
aml_log error "LIBVERSENC-PREBUILT" "Library directory not found: ${ lib_src_dir } "
2026-08-13 11:28:40 +08:00
return 1
fi
display_alert "LIBVERSENC-PREBUILT" "Installation completed successfully" "success"
return 0
}
function __libversenc_prebuilt_create_deb {
local build_dir = " ${ 1 } "
local install_dir = " ${ 2 } "
# 设置必要的变量
local pkg_name = "libversenc-prebuilt"
local version = " ${ DEB_VERSION } "
local architecture = " ${ ARCH } "
local maintainer = "Armbian Build <build@armbian.com>"
local description = "Amlogic versenc library (H264/H265) for VC9000E IP"
local description_long = "This package provides the Amlogic VC9000E video encoder libraries (libvcenc.so and libvc_codec.so) for H.264/H.265 encoding, including development headers."
2026-11-11 08:50:43 +08:00
aml_log info "LIBVERSENC-PREBUILT" "Creating Debian package for ${ pkg_name } ${ version } ..."
2026-08-13 11:28:40 +08:00
# 创建Debian包控制文件
local deb_dir = " ${ build_dir } /deb/ ${ pkg_name } - ${ version } "
local debian_dir = " ${ deb_dir } /DEBIAN"
mkdir -p " ${ debian_dir } "
# 将安装目录的内容复制到debian-root
if [[ -d " ${ install_dir } " ]] && [[ " $( ls -A " ${ install_dir } " ) " ]] ; then
cp -r " ${ install_dir } " /* " ${ deb_dir } /" 2>/dev/null || true
2026-11-11 08:50:43 +08:00
aml_log info "LIBVERSENC-PREBUILT" "Copied installed files to ${ deb_dir } "
2026-08-13 11:28:40 +08:00
else
2026-11-11 08:50:43 +08:00
aml_log warn "LIBVERSENC-PREBUILT" "No installed files found in ${ install_dir } "
2026-08-13 11:28:40 +08:00
return 0
fi
# 创建control文件
cat > " ${ debian_dir } /control" <<EOF
Package: ${pkg_name}
Version: ${version}
Architecture: ${architecture}
Maintainer: ${maintainer}
Description: ${description}
${description_long}
Section: libs
Priority: optional
EOF
# 创建postinst脚本,用于更新ldconfig
cat > " ${ debian_dir } /postinst" <<EOF
#!/bin/sh
set -e
if [ "\$1" = "configure" ]; then
# 更新ldconfig缓存
if command -v ldconfig >/dev/null 2>&1; then
ldconfig
fi
echo "Libversenc-prebuilt library installed successfully"
fi
exit 0
EOF
chmod 755 " ${ debian_dir } /postinst"
# 创建prerm脚本
cat > " ${ debian_dir } /prerm" <<EOF
#!/bin/sh
set -e
if [ "\$1" = "remove" ] || [ "\$1" = "deconfigure" ]; then
# Update ldconfig
if command -v ldconfig >/dev/null 2>&1; then
ldconfig
fi
echo "Removing libversenc-prebuilt library"
fi
exit 0
EOF
chmod 755 " ${ debian_dir } /prerm"
2026-11-11 08:50:43 +08:00
aml_log info "LIBVERSENC-PREBUILT" "Building Debian package..."
2026-08-13 11:28:40 +08:00
# 构建Debian包
cd " ${ build_dir } /deb"
dpkg-deb --build " ${ pkg_name } - ${ version } "
local deb_file = " ${ pkg_name } - ${ version } .deb"
if [[ -f " ${ deb_file } " ]] ; then
local output_dir = " ${ BUILD_DIR } /output"
mkdir -p " ${ output_dir } "
mv " ${ deb_file } " " ${ output_dir } /linux- ${ pkg_name } - ${ BOARD } -amlbian_ ${ version } _ ${ architecture } .deb"
display_alert "LIBVERSENC-PREBUILT" "Debian package created: ${ output_dir } /linux- ${ pkg_name } - ${ BOARD } -amlbian_ ${ version } _ ${ architecture } .deb" "success"
else
2026-11-11 08:50:43 +08:00
aml_log error "LIBVERSENC-PREBUILT" "Failed to build Debian package"
2026-08-13 11:28:40 +08:00
return 1
fi
return 0
}
function amlbian_build_libversenc_prebuilt {
if ! is_unit_enabled "libversenc-prebuilt" && ! is_unit_enabled "libencoder" ; then
2026-11-11 08:50:43 +08:00
aml_log info "[SKIP] >> libversenc-prebuilt disable in BUILD_UNITS"
2026-08-13 11:28:40 +08:00
return
fi
if ! is_feature_contains " $MEDIA_FEATURES " "libversenc-prebuilt" ; then
2026-11-11 08:50:43 +08:00
aml_log info "[SKIP] >> libversenc-prebuilt disable in MEDIA_FEATURES"
2026-08-13 11:28:40 +08:00
return
fi
2026-11-11 08:50:43 +08:00
aml_log info "AMLOGIC: Building libversenc-prebuilt ${ DEB_VERSION } ${ BOARD } "
2026-08-13 11:28:40 +08:00
# Define all directory paths (in .tmp directory)
2026-11-11 08:50:43 +08:00
local build_root = " ${ MODULE_BUILD_DIR } /libversenc-prebuilt-build- ${ ARCH :- arm64 } "
2026-08-13 11:28:40 +08:00
local build_dir = " ${ build_root } /build" # Build directory
local install_dir = " ${ build_root } /install" # Install directory
rm -rf " ${ build_root } "
# 创建目录
mkdir -p " ${ build_dir } " " ${ install_dir } "
2026-11-11 08:50:43 +08:00
aml_log info "AMLOGIC: build_dir ${ build_dir } "
aml_log info "AMLOGIC: install_dir ${ install_dir } "
aml_log info "AMLOGIC: output_dir ${ BUILD_DIR } /output"
2026-08-13 11:28:40 +08:00
# 验证源代码
if ! __libversenc_prebuilt_prepare_source " ${ build_dir } " ; then
2026-11-11 08:50:43 +08:00
aml_log error "AMLOGIC: Libversenc-prebuilt source verification failed"
2026-08-13 11:28:40 +08:00
return 1
fi
# 安装到安装目录
if ! __libversenc_prebuilt_install " ${ build_dir } " " ${ install_dir } " ; then
2026-11-11 08:50:43 +08:00
aml_log error "AMLOGIC: Libversenc-prebuilt installation failed"
2026-08-13 11:28:40 +08:00
return 1
fi
2026-11-11 08:50:43 +08:00
aml_log info "AMLOGIC: Creating Debian package..."
2026-08-13 11:28:40 +08:00
__libversenc_prebuilt_create_deb " ${ build_dir } " " ${ install_dir } "
__unset_libversenc_prebuilt_config
return 0
}
# ==============================================================================
# Section 5: Main
# ==============================================================================
2026-11-11 08:50:43 +08:00
aml_log info "AMLIbian Libversenc-prebuilt Build Script" "Version: ${ DEB_VERSION } , Board: ${ BOARD } "
2026-08-13 11:28:40 +08:00
amlbian_build_libversenc_prebuilt
2026-11-11 08:50:43 +08:00
aml_log info "AMLOGIC: Libversenc-prebuilt build completed" " ${ BUILD_DIR } /output"
2026-08-13 11:28:40 +08:00
# ==============================================================================
# End of build-libversenc-prebuilt.sh
2026-11-11 08:50:43 +08:00
# ==============================================================================