mirror of
https://github.com/levogevo/ffmpeg-builder.git
synced 2026-01-15 19:06:17 +00:00
many small fixes
This commit is contained in:
73
lib/build.sh
73
lib/build.sh
@@ -7,11 +7,9 @@ set_compile_opts() {
|
||||
CONFIGURE_FLAGS MESON_FLAGS \
|
||||
RUSTFLAGS CMAKE_FLAGS \
|
||||
FFMPEG_EXTRA_FLAGS \
|
||||
CARGO_FLAGS CARGO_CINSTALL_FLAGS
|
||||
CARGO_CINSTALL_FLAGS
|
||||
export LDFLAGS C_FLAGS CXX_FLAGS CPP_FLAGS \
|
||||
CONFIGURE_FLAGS MESON_FLAGS \
|
||||
RUSTFLAGS CMAKE_FLAGS \
|
||||
FFMPEG_EXTRA_FLAGS PATH
|
||||
RUSTFLAGS PATH
|
||||
|
||||
# set job count for all builds
|
||||
JOBS="$(nproc)"
|
||||
@@ -21,10 +19,11 @@ set_compile_opts() {
|
||||
LIBDIR="${PREFIX}/lib"
|
||||
LDFLAGS=("-L${LIBDIR}")
|
||||
|
||||
# set prefix flags
|
||||
# set prefix flags and basic flags
|
||||
CONFIGURE_FLAGS+=(
|
||||
"--prefix=${PREFIX}"
|
||||
"--libdir=${LIBDIR}"
|
||||
"--disable-debug"
|
||||
)
|
||||
MESON_FLAGS+=(
|
||||
"--prefix" "${PREFIX}"
|
||||
@@ -37,10 +36,8 @@ set_compile_opts() {
|
||||
"-DCMAKE_INSTALL_LIBDIR=lib"
|
||||
"-DCMAKE_BUILD_TYPE=Release"
|
||||
)
|
||||
CARGO_BUILD_TYPE=release
|
||||
CARGO_FLAGS+=("--${CARGO_BUILD_TYPE}")
|
||||
CARGO_CINSTALL_FLAGS=(
|
||||
"--${CARGO_BUILD_TYPE}"
|
||||
"--release"
|
||||
"--prefix" "${PREFIX}"
|
||||
"--libdir" "${LIBDIR}"
|
||||
)
|
||||
@@ -63,7 +60,7 @@ set_compile_opts() {
|
||||
MESON_FLAGS+=("-Db_lto=true")
|
||||
RUSTFLAGS+=("-C lto=yes" "-C inline-threshold=1000" "-C codegen-units=1")
|
||||
else
|
||||
LTO_FLAG=''
|
||||
LTO_FLAG=' '
|
||||
MESON_FLAGS+=("-Db_lto=false")
|
||||
RUSTFLAGS+=("-C lto=no")
|
||||
fi
|
||||
@@ -110,6 +107,7 @@ set_compile_opts() {
|
||||
USE_LIB_SUFF="${STATIC_LIB_SUFF}"
|
||||
DEL_LIB_SUFF="${SHARED_LIB_SUFF}"
|
||||
else
|
||||
FFMPEG_EXTRA_FLAGS+=(--extra-ldflags="${LDFLAGS[*]}")
|
||||
LDFLAGS+=("-Wl,-rpath,${LIBDIR}" "-Wl,-rpath-link,${LIBDIR}")
|
||||
CONFIGURE_FLAGS+=(
|
||||
'--enable-shared'
|
||||
@@ -165,9 +163,22 @@ set_compile_opts() {
|
||||
# shellcheck disable=SC2178
|
||||
RUSTFLAGS="${RUSTFLAGS[*]}"
|
||||
|
||||
# make sure RUSTUP_HOME and CARGO_HOME are defined
|
||||
RUSTUP_HOME="${RUSTUP_HOME:-"${HOME}/.rustup"}"
|
||||
CARGO_HOME="${CARGO_HOME:-"${HOME}/.cargo"}"
|
||||
# make sure RUSTUP_HOME and CARGO_HOME are defined for SUDO builds
|
||||
# set fallback values
|
||||
local rustupHome cargoHome
|
||||
if has_cmd rustup; then
|
||||
rustupHome="$(bash_dirname "$(command -v rustup)")"
|
||||
# move out of bin/ dir
|
||||
rustupHome="$(cd "${rustupHome}/../" && echo "$PWD")"
|
||||
fi
|
||||
if has_cmd cargo; then
|
||||
cargoHome="$(bash_dirname "$(command -v cargo)")"
|
||||
# move out of bin/ dir
|
||||
cargoHome="$(cd "${cargoHome}/../" && echo "$PWD")"
|
||||
fi
|
||||
|
||||
RUSTUP_HOME="${RUSTUP_HOME:-"${rustupHome}"}"
|
||||
CARGO_HOME="${CARGO_HOME:-"${cargoHome}"}"
|
||||
test -d "${RUSTUP_HOME}" || echo_exit "RUSTUP_HOME does not exist"
|
||||
test -d "${CARGO_HOME}" || echo_exit "CARGO_HOME does not exist"
|
||||
export RUSTUP_HOME CARGO_HOME
|
||||
@@ -474,40 +485,28 @@ del_pkgconfig_gcc_s() {
|
||||
|
||||
### RUST ###
|
||||
build_hdr10plus_tool() {
|
||||
cargo build "${CARGO_FLAGS[@]}" || return 1
|
||||
${SUDO_MODIFY} cp \
|
||||
"target/${CARGO_BUILD_TYPE}/hdr10plus_tool" \
|
||||
"${PREFIX}/bin/" || return 1
|
||||
${SUDO_CARGO} bash -c "cargo install --path . --root ${PREFIX}" || return 1
|
||||
|
||||
# build libhdr10plus
|
||||
cd hdr10plus || return 1
|
||||
cargo cbuild "${CARGO_FLAGS[@]}" || return 1
|
||||
${SUDO_CARGO} bash -lc "PATH=\"${PATH}\" cargo cinstall ${CARGO_CINSTALL_FLAGS[*]}" || return 1
|
||||
${SUDO_CARGO} bash -c "cargo cinstall ${CARGO_CINSTALL_FLAGS[*]}" || return 1
|
||||
sanitize_sysroot_libs libhdr10plus-rs || return 1
|
||||
}
|
||||
|
||||
build_dovi_tool() {
|
||||
cargo build "${CARGO_FLAGS[@]}" || return 1
|
||||
${SUDO_MODIFY} cp \
|
||||
"target/${CARGO_BUILD_TYPE}/dovi_tool" \
|
||||
"${PREFIX}/bin/" || return 1
|
||||
${SUDO_CARGO} bash -c "cargo install --path . --root ${PREFIX}" || return 1
|
||||
|
||||
# build libdovi
|
||||
cd dolby_vision || return 1
|
||||
cargo cbuild "${CARGO_FLAGS[@]}" || return 1
|
||||
${SUDO_CARGO} bash -lc "PATH=\"${PATH}\" cargo cinstall ${CARGO_CINSTALL_FLAGS[*]}" || return 1
|
||||
${SUDO_CARGO} bash -c "cargo cinstall ${CARGO_CINSTALL_FLAGS[*]}" || return 1
|
||||
sanitize_sysroot_libs libdovi || return 1
|
||||
}
|
||||
|
||||
build_librav1e() {
|
||||
cargo build "${CARGO_FLAGS[@]}" || return 1
|
||||
${SUDO_MODIFY} cp \
|
||||
"target/${CARGO_BUILD_TYPE}/rav1e" \
|
||||
"${PREFIX}/bin/" || return 1
|
||||
${SUDO_CARGO} bash -c "cargo install --path . --root ${PREFIX}" || return 1
|
||||
|
||||
# build librav1e
|
||||
cargo cbuild "${CARGO_FLAGS[@]}" || return 1
|
||||
${SUDO_CARGO} bash -lc "PATH=\"${PATH}\" cargo cinstall ${CARGO_CINSTALL_FLAGS[*]}" || return 1
|
||||
${SUDO_CARGO} bash -c "cargo cinstall ${CARGO_CINSTALL_FLAGS[*]}" || return 1
|
||||
sanitize_sysroot_libs librav1e || return 1
|
||||
del_pkgconfig_gcc_s rav1e.pc || return 1
|
||||
}
|
||||
@@ -537,8 +536,8 @@ build_libsvtav1() {
|
||||
}
|
||||
|
||||
build_libsvtav1_psy() {
|
||||
local hdr10pluslib="$(find -L "${PREFIX}" -type f -name "libhdr10plus-rs.${USE_LIB_SUFF}")"
|
||||
local dovilib="$(find -L "${PREFIX}" -type f -name "libdovi.${USE_LIB_SUFF}")"
|
||||
local hdr10pluslib="${LIBDIR}/libhdr10plus-rs.${USE_LIB_SUFF}"
|
||||
local dovilib="${LIBDIR}/libdovi.${USE_LIB_SUFF}"
|
||||
cmake \
|
||||
"${CMAKE_FLAGS[@]}" \
|
||||
-DBUILD_TESTING=OFF \
|
||||
@@ -749,8 +748,16 @@ build_libx264() {
|
||||
}
|
||||
|
||||
build_libmp3lame() {
|
||||
# https://sourceforge.net/p/lame/mailman/message/36081038/
|
||||
if is_darwin; then
|
||||
remove_line \
|
||||
'include/libmp3lame.sym' \
|
||||
'lame_init_old' || return 1
|
||||
fi
|
||||
|
||||
./configure \
|
||||
"${CONFIGURE_FLAGS[@]}" || return 1
|
||||
"${CONFIGURE_FLAGS[@]}" \
|
||||
--enable-nasm || return 1
|
||||
ccache make -j"${JOBS}" || return 1
|
||||
${SUDO_MODIFY} make -j"${JOBS}" install || return 1
|
||||
sanitize_sysroot_libs libmp3lame || return 1
|
||||
|
||||
@@ -34,9 +34,9 @@ check_docker() {
|
||||
|
||||
# get full image digest for a given image
|
||||
get_docker_image_tag() {
|
||||
local distro="$1"
|
||||
local image="$1"
|
||||
local tag=''
|
||||
case "${distro}" in
|
||||
case "${image}" in
|
||||
ubuntu) tag='ubuntu:24.04' ;;
|
||||
debian) tag='debian:13' ;;
|
||||
fedora) tag='fedora:42' ;;
|
||||
@@ -73,9 +73,10 @@ echo_platform() {
|
||||
validate_selected_image() {
|
||||
local selectedImage="$1"
|
||||
local valid=1
|
||||
for distro in "${VALID_DOCKER_IMAGES[@]}"; do
|
||||
if [[ ${selectedImage} == "${distro}" ]]; then
|
||||
for image in "${VALID_DOCKER_IMAGES[@]}"; do
|
||||
if [[ ${selectedImage} == "${image}" ]]; then
|
||||
valid=0
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [[ valid -eq 1 ]]; then
|
||||
@@ -102,10 +103,10 @@ docker_build_image() {
|
||||
test -d "${DOCKER_DIR}" || mkdir -p "${DOCKER_DIR}"
|
||||
PLATFORM="${PLATFORM:-$(echo_platform)}"
|
||||
|
||||
echo_info "sourcing package manager for ${distro}"
|
||||
local dockerDistro="$(get_docker_image_tag "${distro}")"
|
||||
echo_info "sourcing package manager for ${image}"
|
||||
local dockerDistro="$(get_docker_image_tag "${image}")"
|
||||
# specific file for evaluated package manager info
|
||||
distroPkgMgr="${DOCKER_DIR}/$(bash_basename "${distro}")-pkg_mgr"
|
||||
distroPkgMgr="${DOCKER_DIR}/$(bash_basename "${image}")-pkg_mgr"
|
||||
# get package manager info
|
||||
docker run \
|
||||
"${DOCKER_RUN_FLAGS[@]}" \
|
||||
@@ -116,7 +117,7 @@ docker_build_image() {
|
||||
# shellcheck disable=SC1090
|
||||
source "${distroPkgMgr}"
|
||||
|
||||
dockerfile="${DOCKER_DIR}/Dockerfile_$(bash_basename "${distro}")"
|
||||
dockerfile="${DOCKER_DIR}/Dockerfile_$(bash_basename "${image}")"
|
||||
{
|
||||
echo "FROM ${dockerDistro}"
|
||||
echo 'SHELL ["/bin/bash", "-c"]'
|
||||
@@ -154,7 +155,7 @@ docker_build_image() {
|
||||
|
||||
} >"${dockerfile}"
|
||||
|
||||
image_tag="$(set_distro_image_tag "${distro}")"
|
||||
image_tag="$(set_distro_image_tag "${image}")"
|
||||
docker buildx build \
|
||||
--platform "${PLATFORM}" \
|
||||
-t "${image_tag}" \
|
||||
@@ -182,7 +183,7 @@ docker_save_image() {
|
||||
local image="$1"
|
||||
validate_selected_image "${image}" || return 1
|
||||
check_docker || return 1
|
||||
image_tag="$(set_distro_image_tag "${distro}")"
|
||||
image_tag="$(set_distro_image_tag "${image}")"
|
||||
echo_info "saving docker image for ${image_tag}"
|
||||
docker save "${image_tag}" |
|
||||
zstd -T0 >"${DOCKER_DIR}/$(docker_image_archive_name "${image_tag}")" ||
|
||||
@@ -196,7 +197,7 @@ docker_load_image() {
|
||||
local image="$1"
|
||||
validate_selected_image "${image}" || return 1
|
||||
check_docker || return 1
|
||||
image_tag="$(set_distro_image_tag "${distro}")"
|
||||
image_tag="$(set_distro_image_tag "${image}")"
|
||||
echo_info "loading docker image for ${image_tag}"
|
||||
local archive="${DOCKER_DIR}/$(docker_image_archive_name "${image_tag}")"
|
||||
test -f "$archive" || return 1
|
||||
@@ -222,8 +223,7 @@ docker_run_image() {
|
||||
runCmd+=("${cmd[@]}")
|
||||
fi
|
||||
|
||||
dockerDistro="${distro//-/:}"
|
||||
image_tag="$(set_distro_image_tag "${distro}")"
|
||||
image_tag="$(set_distro_image_tag "${image}")"
|
||||
|
||||
# if a docker registry is defined, pull from it
|
||||
if [[ ${DOCKER_REGISTRY} != '' ]]; then
|
||||
|
||||
@@ -15,6 +15,7 @@ FB_FUNC_DESCS['package']='package ffmpeg build'
|
||||
package() {
|
||||
check_for_package_cfg || return 0
|
||||
|
||||
echo_info "packaging"
|
||||
local pkgDir="${IGN_DIR}/package"
|
||||
test -d "${pkgDir}" && rm -rf "${pkgDir}"
|
||||
mkdir "${pkgDir}" || return 1
|
||||
@@ -26,4 +27,5 @@ package() {
|
||||
local tarball="ffmpeg-build-${HOSTTYPE}-$(print_os).tar"
|
||||
tar -cf "${tarball}" ff* || return 1
|
||||
xz -e -9 "${tarball}" || return 1
|
||||
echo_pass "finished packaging ${tarball}.xz"
|
||||
}
|
||||
|
||||
24
lib/utils.sh
24
lib/utils.sh
@@ -203,6 +203,30 @@ is_positive_integer() {
|
||||
return 0
|
||||
}
|
||||
|
||||
replace_line() {
|
||||
local file="$1"
|
||||
local search="$2"
|
||||
local newLine="$3"
|
||||
local newFile="${TMP_DIR}/$(bash_basename "${file}")"
|
||||
|
||||
test -f "${newFile}" && rm "${newFile}"
|
||||
while read -r line; do
|
||||
if line_contains "${line}" "${search}"; then
|
||||
echo -en "${newLine}" >>"${newFile}"
|
||||
continue
|
||||
fi
|
||||
echo "${line}" >>"${newFile}"
|
||||
done <"${file}"
|
||||
|
||||
cp "${newFile}" "${file}"
|
||||
}
|
||||
|
||||
remove_line() {
|
||||
local file="$1"
|
||||
local search="$2"
|
||||
replace_line "${file}" "${search}" ''
|
||||
}
|
||||
|
||||
bash_sort() {
|
||||
local arr=("$@")
|
||||
local n=${#arr[@]}
|
||||
|
||||
Reference in New Issue
Block a user