hardcode libdir

This commit is contained in:
2025-08-08 12:10:00 -05:00
parent 8d34479711
commit da533a8a09
4 changed files with 116 additions and 76 deletions

View File

@@ -1 +0,0 @@
gitignore*

View File

@@ -6,7 +6,8 @@ set_compile_opts() {
unset LDFLAGS C_FLAGS CXX_FLAGS CPP_FLAGS \ unset LDFLAGS C_FLAGS CXX_FLAGS CPP_FLAGS \
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
export LDFLAGS C_FLAGS CXX_FLAGS CPP_FLAGS \ export LDFLAGS C_FLAGS CXX_FLAGS CPP_FLAGS \
CONFIGURE_FLAGS MESON_FLAGS \ CONFIGURE_FLAGS MESON_FLAGS \
RUSTFLAGS CMAKE_FLAGS \ RUSTFLAGS CMAKE_FLAGS \
@@ -14,22 +15,29 @@ set_compile_opts() {
# set job count for all builds # set job count for all builds
JOBS="$(nproc)" JOBS="$(nproc)"
# set library/pkgconfig directory
mapfile -t pkgconfigDirs < <(find "${PREFIX}" -type d -name pkgconfig) LIBDIR="${PREFIX}/lib"
for d in "${pkgconfigDirs[@]}"; do
if [[ ${d} =~ '64' ]]; then
MACHINE_LIB="${d}"
fi
done
test "${MACHINE_LIB}" == '' && return 1
pkgconfigString="${pkgconfigDirs[*]}"
PKG_CONFIG_PATH="${pkgconfigString// /:}"
# set prefix flags # set prefix flags
CONFIGURE_FLAGS+=("--prefix=${PREFIX}") CONFIGURE_FLAGS+=(
MESON_FLAGS+=("--prefix" "${PREFIX}") "--prefix=${PREFIX}"
CMAKE_FLAGS+=("-DCMAKE_PREFIX_PATH=${PREFIX}") "--libdir=${LIBDIR}"
CMAKE_FLAGS+=("-DCMAKE_INSTALL_PREFIX=${PREFIX}") )
MESON_FLAGS+=(
"--prefix" "${PREFIX}"
"--libdir" "lib"
"--bindir" "bin"
)
CMAKE_FLAGS+=(
"-DCMAKE_PREFIX_PATH=${PREFIX}"
"-DCMAKE_INSTALL_PREFIX=${PREFIX}"
"-DCMAKE_INSTALL_LIBDIR=lib"
)
CARGO_CINSTALL_FLAGS=(
"--prefix" "${PREFIX}"
"--libdir" "${LIBDIR}"
)
PKG_CONFIG_PATH="${LIBDIR}/pkgconfig"
export PKG_CONFIG_PATH export PKG_CONFIG_PATH
export PKG_CONFIG_DEBUG_SPEW=1 export PKG_CONFIG_DEBUG_SPEW=1
@@ -48,13 +56,17 @@ set_compile_opts() {
CONFIGURE_FLAGS+=('--enable-lto') CONFIGURE_FLAGS+=('--enable-lto')
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")
CARGO_BUILD_TYPE=release
CARGO_FLAGS+=("--${CARGO_BUILD_TYPE}")
else else
echo_info "building without LTO" echo_info "building without LTO"
LTO_SWITCH='OFF' LTO_SWITCH='OFF'
LTO_FLAG='' LTO_FLAG=''
MESON_FLAGS+=("-Db_lto=false") MESON_FLAGS+=("-Db_lto=false")
RUSTFLAGS+=("-C lto=no") RUSTFLAGS+=("-C lto=no")
CARGO_BUILD_TYPE=debug
fi fi
CARGO_CINSTALL_FLAGS+=("--${CARGO_BUILD_TYPE}")
# setting optimization level # setting optimization level
if [[ ${OPT_LVL} == '' ]]; then if [[ ${OPT_LVL} == '' ]]; then
@@ -77,10 +89,10 @@ set_compile_opts() {
PKG_CFG_FLAGS='--static' PKG_CFG_FLAGS='--static'
LIB_SUFF='a' LIB_SUFF='a'
else else
LDFLAGS+=("-Wl,-rpath,${MACHINE_LIB}") LDFLAGS+=("-Wl,-rpath,${LIBDIR}")
CONFIGURE_FLAGS+=('--enable-shared') CONFIGURE_FLAGS+=('--enable-shared')
CMAKE_FLAGS+=("-DBUILD_SHARED_LIBS=ON") CMAKE_FLAGS+=("-DBUILD_SHARED_LIBS=ON")
CMAKE_FLAGS+=("-DCMAKE_INSTALL_RPATH=${PREFIX}/lib;${MACHINE_LIB}") CMAKE_FLAGS+=("-DCMAKE_INSTALL_RPATH=${LIBDIR}")
FFMPEG_EXTRA_FLAGS+=('--enable-rpath') FFMPEG_EXTRA_FLAGS+=('--enable-rpath')
LIB_SUFF='so' LIB_SUFF='so'
fi fi
@@ -111,6 +123,7 @@ set_compile_opts() {
dump_arr CMAKE_FLAGS dump_arr CMAKE_FLAGS
dump_arr MESON_FLAGS dump_arr MESON_FLAGS
dump_arr PKG_CFG_FLAGS dump_arr PKG_CFG_FLAGS
dump_arr CARGO_CINSTALL_FLAGS
# extra ffmpeg flags # extra ffmpeg flags
FFMPEG_EXTRA_FLAGS+=( FFMPEG_EXTRA_FLAGS+=(
@@ -130,12 +143,12 @@ set_compile_opts() {
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
# cargo does not have an easy way to install into system directories
unset SUDO_CARGO unset SUDO_CARGO
if [[ ${SUDO} != '' ]]; then if [[ ${SUDO_MODIFY} == '' ]]; then
export SUDO_CARGO="${SUDO} --preserve-env=PATH,RUSTUP_HOME,CARGO_HOME" SUDO_CARGO=''
else
SUDO_CARGO="${SUDO} --preserve-env=PATH,RUSTUP_HOME,CARGO_HOME"
fi fi
echo
FB_COMPILE_OPTS_SET=1 FB_COMPILE_OPTS_SET=1
} }
@@ -289,13 +302,16 @@ build() {
test -d "${BUILD_DIR}" || mkdir -p "${BUILD_DIR}" test -d "${BUILD_DIR}" || mkdir -p "${BUILD_DIR}"
test -d "${PREFIX}/bin/" || mkdir -p "${PREFIX}/bin/" test -d "${PREFIX}/bin/" || mkdir -p "${PREFIX}/bin/"
# check if we need to install with sudo
unset SUDO_MODIFY
testfile="${PREFIX}/ffmpeg-build-testfile" testfile="${PREFIX}/ffmpeg-build-testfile"
if ! touch "${testfile}" 2>/dev/null; then if touch "${testfile}" 2>/dev/null; then
# we cannot modify the install prefix SUDO_MODIFY=''
# so we need to use sudo else
${SUDO} mkdir -p "${PREFIX}/bin/" SUDO_MODIFY="${SUDO}"
${SUDO_MODIFY} mkdir -p "${PREFIX}/bin/"
fi fi
test -f "${testfile}" && ${SUDO} rm "${testfile}" test -f "${testfile}" && ${SUDO_MODIFY} rm "${testfile}"
for build in "${FFMPEG_ENABLES[@]}"; do for build in "${FFMPEG_ENABLES[@]}"; do
do_build "${build}" || return 1 do_build "${build}" || return 1
@@ -305,26 +321,41 @@ build() {
return 0 return 0
} }
### RUST ###
build_hdr10plus_tool() { build_hdr10plus_tool() {
cargo build --release || return 1 cargo build "${CARGO_FLAGS[@]}" || return 1
${SUDO} cp target/release/hdr10plus_tool "${PREFIX}/bin/" || 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 --release || return 1 cargo cbuild "${CARGO_FLAGS[@]}" || return 1
${SUDO_CARGO} bash -lc "cargo cinstall --prefix=${PREFIX} --release" || return 1 ${SUDO_CARGO} bash -lc "cargo cinstall ${CARGO_CINSTALL_FLAGS[*]}" || return 1
} }
build_dovi_tool() { build_dovi_tool() {
cargo build --release || return 1 cargo build "${CARGO_FLAGS[@]}" || return 1
${SUDO} cp target/release/dovi_tool "${PREFIX}/bin/" || 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 --release || return 1 cargo cbuild "${CARGO_FLAGS[@]}" || return 1
${SUDO_CARGO} bash -lc "cargo cinstall --prefix=${PREFIX} --release" || return 1 ${SUDO_CARGO} bash -lc "cargo cinstall ${CARGO_CINSTALL_FLAGS[*]}" || return 1
}
build_librav1e() {
cargo build "${CARGO_FLAGS[@]}" || return 1
${SUDO_MODIFY} cp \
"target/${CARGO_BUILD_TYPE}/rav1e" \
"${PREFIX}/bin/" || return 1
# build librav1e
cargo cbuild "${CARGO_FLAGS[@]}" || return 1
${SUDO_CARGO} bash -lc "cargo cinstall ${CARGO_CINSTALL_FLAGS[*]}" || return 1
} }
### CMAKE ###
build_libsvtav1() { build_libsvtav1() {
cmake \ cmake \
"${CMAKE_FLAGS[@]}" \ "${CMAKE_FLAGS[@]}" \
@@ -333,9 +364,8 @@ build_libsvtav1() {
-DBUILD_TESTING=OFF \ -DBUILD_TESTING=OFF \
-DCOVERAGE=OFF || return 1 -DCOVERAGE=OFF || return 1
ccache make -j"${JOBS}" || return 1 ccache make -j"${JOBS}" || return 1
${SUDO} make -j"${JOBS}" install || return 1 ${SUDO_MODIFY} make -j"${JOBS}" install || return 1
} }
build_libsvtav1_psy() { build_libsvtav1_psy() {
local hdr10pluslib="$(find "${PREFIX}" -type f -name "libhdr10plus-rs.${LIB_SUFF}")" local hdr10pluslib="$(find "${PREFIX}" -type f -name "libhdr10plus-rs.${LIB_SUFF}")"
local dovilib="$(find "${PREFIX}" -type f -name "libdovi.${LIB_SUFF}")" local dovilib="$(find "${PREFIX}" -type f -name "libdovi.${LIB_SUFF}")"
@@ -351,17 +381,8 @@ build_libsvtav1_psy() {
-DLIBDOVI_LIBRARY="${dovilib}" \ -DLIBDOVI_LIBRARY="${dovilib}" \
. || return 1 . || return 1
ccache make -j"${JOBS}" || return 1 ccache make -j"${JOBS}" || return 1
${SUDO} make -j"${JOBS}" install || return 1 ${SUDO_MODIFY} make -j"${JOBS}" install || return 1
} }
build_librav1e() {
cargo build --release || return 1
${SUDO} cp target/release/rav1e "${PREFIX}/bin/" || return 1
cargo cbuild --release || return 1
${SUDO_CARGO} bash -lc "cargo cinstall --prefix=${PREFIX} --release" || return 1
}
build_libaom() { build_libaom() {
cmake \ cmake \
"${CMAKE_FLAGS[@]}" \ "${CMAKE_FLAGS[@]}" \
@@ -369,26 +390,17 @@ build_libaom() {
-DENABLE_TESTS=OFF || return 1 -DENABLE_TESTS=OFF || return 1
cd build.user || return 1 cd build.user || return 1
ccache make -j"${JOBS}" || return 1 ccache make -j"${JOBS}" || return 1
${SUDO} make -j"${JOBS}" install || return 1 ${SUDO_MODIFY} make -j"${JOBS}" install || return 1
}
build_libopus() {
./configure \
"${CONFIGURE_FLAGS[@]}" \
--disable-doc || return 1
ccache make -j"${JOBS}" || return 1
${SUDO} make -j"${JOBS}" install || return 1
return 0
} }
### MESON ###
build_libdav1d() { build_libdav1d() {
meson \ meson \
setup . build.user \ setup . build.user \
"${MESON_FLAGS[@]}" || return 1 "${MESON_FLAGS[@]}" || return 1
ccache ninja -vC build.user || return 1 ccache ninja -vC build.user || return 1
${SUDO} ninja -vC build.user install || return 1 ${SUDO_MODIFY} ninja -vC build.user install || return 1
} }
build_libvmaf() { build_libvmaf() {
cd libvmaf || return 1 cd libvmaf || return 1
python3 -m virtualenv .venv python3 -m virtualenv .venv
@@ -399,10 +411,19 @@ build_libvmaf() {
"${MESON_FLAGS[@]}" \ "${MESON_FLAGS[@]}" \
-Denable_float=true || exit 1 -Denable_float=true || exit 1
ccache ninja -vC build.user || exit 1 ccache ninja -vC build.user || exit 1
${SUDO} ninja -vC build.user install || exit 1 ${SUDO_MODIFY} ninja -vC build.user install || exit 1
) || return 1 ) || return 1
} }
### AUTOTOOLS ###
build_libopus() {
./configure \
"${CONFIGURE_FLAGS[@]}" \
--disable-doc || return 1
ccache make -j"${JOBS}" || return 1
${SUDO_MODIFY} make -j"${JOBS}" install || return 1
return 0
}
build_ffmpeg() { build_ffmpeg() {
for enable in "${FFMPEG_ENABLES[@]}"; do for enable in "${FFMPEG_ENABLES[@]}"; do
test "${enable}" == 'libsvtav1_psy' && enable='libsvtav1' test "${enable}" == 'libsvtav1_psy' && enable='libsvtav1'
@@ -421,6 +442,6 @@ build_ffmpeg() {
--disable-txtpages \ --disable-txtpages \
--disable-autodetect || return 1 --disable-autodetect || return 1
ccache make -j"${JOBS}" || return 1 ccache make -j"${JOBS}" || return 1
${SUDO} make -j"${JOBS}" install || return 1 ${SUDO_MODIFY} make -j"${JOBS}" install || return 1
return 0 return 0
} }

View File

@@ -6,6 +6,14 @@ VALID_DOCKER_IMAGES=(
'debian-12' 'debian-12'
'archlinux-latest' 'archlinux-latest'
) )
DOCKER_WORKDIR='/workdir'
DOCKER_RUN_FLAGS=(
--rm
-v "${REPO_DIR}:${DOCKER_WORKDIR}"
-w "${DOCKER_WORKDIR}"
-u "$(id -u):$(id -g)"
-e "DEBUG=${DEBUG}"
)
check_docker() { check_docker() {
if missing_cmd docker; then if missing_cmd docker; then
@@ -39,6 +47,7 @@ echo_platform() {
echo "${platKernel}/${platCpu}" echo "${platKernel}/${platCpu}"
} }
# sets DISTROS
validate_selected_image() { validate_selected_image() {
local selectedImage="${1:-}" local selectedImage="${1:-}"
for distro in "${VALID_DOCKER_IMAGES[@]}"; do for distro in "${VALID_DOCKER_IMAGES[@]}"; do
@@ -78,10 +87,8 @@ docker_build_image() {
# specific file for evaluated package manager info # specific file for evaluated package manager info
distroPkgMgr="${DOCKER_DIR}/${distro}-pkg_mgr" distroPkgMgr="${DOCKER_DIR}/${distro}-pkg_mgr"
# get package manager info # get package manager info
docker run --rm \ docker run \
--platform "$(echo_platform)" \ "${DOCKER_RUN_FLAGS[@]}" \
-v "${REPO_DIR}":/workdir \
-w /workdir \
"${dockerDistro}" \ "${dockerDistro}" \
bash -c "./scripts/print_pkg_mgr.sh" | tr -d '\r' >"${distroPkgMgr}" bash -c "./scripts/print_pkg_mgr.sh" | tr -d '\r' >"${distroPkgMgr}"
# shellcheck disable=SC1090 # shellcheck disable=SC1090
@@ -103,6 +110,7 @@ docker_build_image() {
echo 'ENV PATH="~/.cargo/bin:$PATH"' echo 'ENV PATH="~/.cargo/bin:$PATH"'
echo 'RUN rustup default stable && rustup update stable' echo 'RUN rustup default stable && rustup update stable'
echo 'RUN cargo install cargo-c' echo 'RUN cargo install cargo-c'
echo "WORKDIR ${DOCKER_WORKDIR}"
} >"${dockerfile}" } >"${dockerfile}"
@@ -178,10 +186,8 @@ docker_run_image() {
fi fi
echo_info "running ffmpeg build for ${image_tag}" echo_info "running ffmpeg build for ${image_tag}"
docker run --rm \ docker run \
-v "${REPO_DIR}":/workdir \ "${DOCKER_RUN_FLAGS[@]}" \
-w /workdir \
-e DEBUG="${DEBUG}" \
"${image_tag}" \ "${image_tag}" \
./scripts/build.sh || return 1 ./scripts/build.sh || return 1
done done
@@ -194,10 +200,24 @@ docker_build_multiarch_image() {
validate_selected_image "$@" || return 1 validate_selected_image "$@" || return 1
check_docker || return 1 check_docker || return 1
PLATFORM='linux/amd64,linux/arm64' PLATFORM='linux/amd64,linux/arm64'
docker buildx create \
--use \ # check if we need to create multiplatform builder
--platform="${PLATFORM}" \ local buildxPlats="$(docker buildx inspect | grep Platforms)"
--name my-multiplatform-builder \ IFS=','
--driver=docker-container local createBuilder=0
for plat in $PLATFORM; do
grep -q "${plat}" <<<"${buildxPlats}" || createBuilder=1
done
unset IFS
if [[ ${createBuilder} == 1 ]]; then
echo_info "creating multiplatform (${PLATFORM}) docker builder"
docker buildx create \
--use \
--platform="${PLATFORM}" \
--name my-multiplatform-builder \
--driver=docker-container
fi
docker_build_image "$@" docker_build_image "$@"
} }

View File

@@ -52,7 +52,7 @@ print_req_pkgs() {
) )
local common_linux_pkgs=( local common_linux_pkgs=(
"${common_pkgs[@]}" clang valgrind "${common_pkgs[@]}" clang valgrind
curl bc lshw xxd pkgconf curl bc lshw xxd pkgconf sudo
) )
# shellcheck disable=SC2034 # shellcheck disable=SC2034
local apt_get_pkgs=( local apt_get_pkgs=(