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