init llvm and lld

This commit is contained in:
2025-12-16 17:01:18 -06:00
parent c038798d2c
commit 0b35c8b94a
4 changed files with 181 additions and 129 deletions

View File

@@ -1,20 +1,26 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set_compile_opts() { set_compile_opts() {
test "$FB_COMPILE_OPTS_SET" == 1 && return 0 test "${FB_COMPILE_OPTS_SET}" == 1 && return 0
EXPORTED_ENV_NAMES=( EXPORTED_ENV_NAMES=(
CC CC
CFLAGS
CXX CXX
CXXFLAGS
CPPFLAGS
LDFLAGS LDFLAGS
C_FLAGS
CXX_FLAGS
CPP_FLAGS
RUSTFLAGS RUSTFLAGS
PKG_CONFIG_PATH PKG_CONFIG_PATH
) )
BUILD_ENV_NAMES=( BUILD_ENV_NAMES=(
"${EXPORTED_ENV_NAMES[@]}" "${EXPORTED_ENV_NAMES[@]}"
CFLAGS_ARR
CXXFLAGS_ARR
CPPFLAGS_ARR
LDFLAGS_ARR
USE_LD
RUSTFLAGS_ARR
CONFIGURE_FLAGS CONFIGURE_FLAGS
MESON_FLAGS MESON_FLAGS
CMAKE_FLAGS CMAKE_FLAGS
@@ -22,6 +28,7 @@ set_compile_opts() {
CARGO_CINSTALL_FLAGS CARGO_CINSTALL_FLAGS
LTO_FLAG LTO_FLAG
LIB_SUFF LIB_SUFF
BUILD_TYPE
) )
unset "${BUILD_ENV_NAMES[@]}" unset "${BUILD_ENV_NAMES[@]}"
export "${EXPORTED_ENV_NAMES[@]}" export "${EXPORTED_ENV_NAMES[@]}"
@@ -52,13 +59,38 @@ set_compile_opts() {
# set library/pkgconfig directory # set library/pkgconfig directory
LIBDIR="${PREFIX}/lib" LIBDIR="${PREFIX}/lib"
LDFLAGS=("-L${LIBDIR}") LDFLAGS_ARR=("-L${LIBDIR}")
# HACK rope in libm # HACK rope in libm
if is_android; then if is_android; then
test -f "${LIBDIR}/libm.so" || ln -s /system/lib64/libm.so "${LIBDIR}/libm.so" test -f "${LIBDIR}/libm.so" || ln -s /system/lib64/libm.so "${LIBDIR}/libm.so"
fi fi
# use LLVM toolchain
CC=clang
CXX=clang++
USE_LD=lld
LDFLAGS_ARR+=("-fuse-ld=${USE_LD}")
CMAKE_FLAGS+=(
"-DCMAKE_C_COMPILER=${CC}"
"-DCMAKE_CXX_COMPILER=${CXX}"
"-DCMAKE_LINKER_TYPE=${USE_LD^^}"
"-DCMAKE_LINKER=${USE_LD}"
)
FFMPEG_EXTRA_FLAGS+=(
"--cc=${CC}"
"--cxx=${CXX}"
)
# prepend path with llvm tools
local compilerDir="${LOCAL_PREFIX}/compiler-tools"
test -d "${compilerDir}" && rm -rf "${compilerDir}"
mkdir "${compilerDir}"
echo -e "#!/bin/sh\nexec ${CC} -fuse-ld=${USE_LD} \"\$@\"" >"${compilerDir}"/cc
echo -e "#!/bin/sh\nexec ${CXX} -fuse-ld=${USE_LD} \"\$@\"" >"${compilerDir}"/c++
echo -e "#!/bin/sh\nexec ld.lld \"\$@\"" >"${compilerDir}"/ld
chmod +x "${compilerDir}"/*
export PATH="${compilerDir}:${PATH}"
# set prefix flags and basic flags # set prefix flags and basic flags
CONFIGURE_FLAGS+=( CONFIGURE_FLAGS+=(
"--prefix=${PREFIX}" "--prefix=${PREFIX}"
@@ -78,6 +110,7 @@ set_compile_opts() {
"-DCMAKE_BUILD_TYPE=Release" "-DCMAKE_BUILD_TYPE=Release"
"-DCMAKE_C_COMPILER_LAUNCHER=ccache" "-DCMAKE_C_COMPILER_LAUNCHER=ccache"
"-DCMAKE_CXX_COMPILER_LAUNCHER=ccache" "-DCMAKE_CXX_COMPILER_LAUNCHER=ccache"
"-G" "Ninja"
) )
CARGO_CINSTALL_FLAGS=( CARGO_CINSTALL_FLAGS=(
"--release" "--release"
@@ -87,29 +120,25 @@ set_compile_opts() {
PKG_CONFIG_PATH="${LIBDIR}/pkgconfig" PKG_CONFIG_PATH="${LIBDIR}/pkgconfig"
# add prefix include # add prefix include
C_FLAGS+=("-I${PREFIX}/include") CPPFLAGS_ARR+=("-I${PREFIX}/include")
# enabling link-time optimization # enabling link-time optimization
if [[ ${LTO} == 'ON' ]]; then if [[ ${LTO} == 'ON' ]]; then
LTO_FLAG='-flto' LTO_FLAG='-flto'
C_FLAGS+=("${LTO_FLAG}") CONFIGURE_FLAGS+=('--enable-lto')
if ! is_darwin; then
CONFIGURE_FLAGS+=('--enable-lto')
fi
MESON_FLAGS+=("-Db_lto=true") MESON_FLAGS+=("-Db_lto=true")
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")
fi fi
CFLAGS_ARR+=("${LTO_FLAG}")
LDFLAGS_ARR+=("${LTO_FLAG}")
# setting optimization level # setting optimization level
if [[ ${OPT} == '' ]]; then if [[ ${OPT} == '' ]]; then
OPT='0' OPT='0'
fi fi
C_FLAGS+=("-O${OPT}") CFLAGS_ARR+=("-O${OPT}")
RUSTFLAGS+=("-C opt-level=${OPT}")
MESON_FLAGS+=("--optimization=${OPT}") MESON_FLAGS+=("--optimization=${OPT}")
STATIC_LIB_SUFF='a' STATIC_LIB_SUFF='a'
@@ -122,6 +151,7 @@ set_compile_opts() {
# static/shared linking # static/shared linking
if [[ ${STATIC} == 'ON' ]]; then if [[ ${STATIC} == 'ON' ]]; then
BUILD_TYPE=static
CONFIGURE_FLAGS+=( CONFIGURE_FLAGS+=(
'--enable-static' '--enable-static'
'--disable-shared' '--disable-shared'
@@ -132,29 +162,34 @@ set_compile_opts() {
"-DENABLE_SHARED=OFF" "-DENABLE_SHARED=OFF"
"-DBUILD_SHARED_LIBS=OFF" "-DBUILD_SHARED_LIBS=OFF"
) )
RUSTFLAGS+=("-C target-feature=+crt-static")
FFMPEG_EXTRA_FLAGS+=("--pkg-config-flags=--static")
# darwin does not support static linkage # darwin does not support static linkage
if ! is_darwin; then if ! is_darwin; then
LDFLAGS+=('-static') CMAKE_FLAGS+=("-DCMAKE_EXE_LINKER_FLAGS=${LDFLAGS_ARR[*]} -static")
CMAKE_FLAGS+=("-DCMAKE_EXE_LINKER_FLAGS=-static")
fi fi
FFMPEG_EXTRA_FLAGS+=(--extra-ldflags="${LDFLAGS[*]}") FFMPEG_EXTRA_FLAGS+=(
"--pkg-config-flags=--static"
"--extra-ldflags=${LDFLAGS_ARR[*]} -static"
)
# remove shared libraries for static builds # remove shared libraries for static builds
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[*]}") BUILD_TYPE=shared
LDFLAGS+=("-Wl,-rpath,${LIBDIR}" "-Wl,-rpath-link,${LIBDIR}")
CONFIGURE_FLAGS+=(
'--enable-shared'
'--disable-static'
)
CMAKE_FLAGS+=( CMAKE_FLAGS+=(
"-DENABLE_STATIC=${STATIC}" "-DENABLE_STATIC=${STATIC}"
"-DENABLE_SHARED=ON" "-DENABLE_SHARED=ON"
"-DBUILD_SHARED_LIBS=ON" "-DBUILD_SHARED_LIBS=ON"
"-DCMAKE_INSTALL_RPATH=${LIBDIR}" "-DCMAKE_INSTALL_RPATH=${LIBDIR}"
"-DCMAKE_EXE_LINKER_FLAGS=${LDFLAGS_ARR[*]}"
)
FFMPEG_EXTRA_FLAGS+=("--extra-ldflags=${LDFLAGS_ARR[*]}")
LDFLAGS_ARR+=(
"-Wl,-rpath,${LIBDIR}"
"-Wl,-rpath-link,${LIBDIR}"
)
CONFIGURE_FLAGS+=(
'--enable-shared'
'--disable-static'
) )
FFMPEG_EXTRA_FLAGS+=('--enable-rpath') FFMPEG_EXTRA_FLAGS+=('--enable-rpath')
# remove static libraries for shared builds # remove static libraries for shared builds
@@ -172,46 +207,35 @@ set_compile_opts() {
arch_flags+=("-march=${ARCH}") arch_flags+=("-march=${ARCH}")
fi fi
# use CLANG/LLVM on windows
if is_windows; then
CC=clang
CXX=clang++
CMAKE_FLAGS+=(
"-DCMAKE_C_COMPILER=${CC}"
"-DCMAKE_CXX_COMPILER=${CXX}"
"-DCMAKE_LINKER_TYPE=LLD"
)
else
unset CC CXX
fi
# can fail static builds with -fpic # can fail static builds with -fpic
# warning: too many GOT entries for -fpic, please recompile with -fPIC # warning: too many GOT entries for -fpic, please recompile with -fPIC
C_FLAGS+=("${arch_flags[@]}" "-fPIC") CFLAGS_ARR+=("${arch_flags[@]}" "-fPIC")
CXX_FLAGS=("${C_FLAGS[@]}") RUSTFLAGS_ARR+=("-C target-cpu=${ARCH}")
CPP_FLAGS=("${C_FLAGS[@]}")
RUSTFLAGS+=("-C target-cpu=${ARCH}") # set exported env names to stringified arrays
CMAKE_FLAGS+=("-DCMAKE_C_FLAGS=${C_FLAGS[*]}") CPPFLAGS="${CPPFLAGS_ARR[*]}"
CMAKE_FLAGS+=("-DCMAKE_CXX_FLAGS=${CXX_FLAGS[*]}") CFLAGS="${CFLAGS_ARR[*]} ${CPPFLAGS}"
MESON_FLAGS+=("-Dc_args=${C_FLAGS[*]}" "-Dcpp_args=${CPP_FLAGS[*]}") CXXFLAGS="${CFLAGS}"
dump_arr CONFIGURE_FLAGS LDFLAGS="${LDFLAGS_ARR[*]}"
dump_arr C_FLAGS RUSTFLAGS="${RUSTFLAGS_ARR[*]}"
dump_arr RUSTFLAGS
dump_arr CARGO_CINSTALL_FLAGS CMAKE_FLAGS+=(
dump_arr CMAKE_FLAGS "-DCMAKE_CFLAGS=${CFLAGS}"
dump_arr MESON_FLAGS "-DCMAKE_CXX_FLAGS=${CXXFLAGS}"
echo_info "PKG_CONFIG_PATH=${PKG_CONFIG_PATH}" )
MESON_FLAGS+=(
"-Dc_args=${CFLAGS}"
"-Dcpp_args=${CPPFLAGS_ARR[*]}"
)
# extra ffmpeg flags # extra ffmpeg flags
FFMPEG_EXTRA_FLAGS+=( FFMPEG_EXTRA_FLAGS+=(
--extra-cflags="${C_FLAGS[*]}" "--extra-cflags=${CFLAGS}"
--extra-cxxflags="${CXX_FLAGS[*]}" "--extra-cxxflags=${CXXFLAGS}"
--pkg-config='pkg-config' '--pkg-config=pkg-config'
) )
dump_arr FFMPEG_EXTRA_FLAGS
# shellcheck disable=SC2178 dump_arr "${BUILD_ENV_NAMES[@]}"
RUSTFLAGS="${RUSTFLAGS[*]}"
FB_COMPILE_OPTS_SET=1 FB_COMPILE_OPTS_SET=1
echo echo
@@ -406,12 +430,20 @@ do_build() {
local ffmpegOldMetadataFile="${TMP_DIR}/ffmpeg-old-metadata" local ffmpegOldMetadataFile="${TMP_DIR}/ffmpeg-old-metadata"
# add build function, version, url, and top-level env to metadata # add build function, version, url, and top-level env to metadata
type "build_${build}" >"${newMetadataFile}" {
echo "ver: ${ver}" >>"${newMetadataFile}" local buildFunction="$(type "build_${build}")"
echo "url: ${url}" >>"${newMetadataFile}" # include meta builds
for envName in "${BUILD_ENV_NAMES[@]}"; do for token in ${buildFunction}; do
COLOR=OFF dump_arr "${envName}" >>"${newMetadataFile}" if [[ ${token} == "meta_"*"_build" ]]; then
done type "${token}"
fi
done
echo "${buildFunction}"
echo "ver: ${ver}"
echo "url: ${url}"
echo "LOCAL_PREFIX: ${LOCAL_PREFIX}"
COLOR=OFF SHOW_SINGLE=true dump_arr "${BUILD_ENV_NAMES[@]}"
} >"${newMetadataFile}"
# only ffmpeg cares about ENABLE and has special function # only ffmpeg cares about ENABLE and has special function
if [[ ${build} == 'ffmpeg' ]]; then if [[ ${build} == 'ffmpeg' ]]; then
@@ -564,11 +596,11 @@ del_pkgconfig_gcc_s() {
} }
### RUST ### ### RUST ###
cargo_cbuild() { meta_cargoc_build() {
local destdir="${PWD}/fb-local-install" local destdir="${PWD}/fb-local-install"
cargo cinstall \ cargo cinstall \
--destdir "${destdir}" \ --destdir "${destdir}" \
"${CARGO_CINSTALL_FLAGS[@]}" "${CARGO_CINSTALL_FLAGS[@]}" || return 1
# cargo cinstall destdir prepends with entire prefix # cargo cinstall destdir prepends with entire prefix
# this breaks windows with msys path augmentation # this breaks windows with msys path augmentation
# so recurse into directories until sysroot is there # so recurse into directories until sysroot is there
@@ -578,25 +610,25 @@ cargo_cbuild() {
build_hdr10plus_tool() { build_hdr10plus_tool() {
# build libhdr10plus # build libhdr10plus
cd hdr10plus || return 1 cd hdr10plus || return 1
cargo_cbuild || return 1 meta_cargoc_build || return 1
sanitize_sysroot_libs libhdr10plus-rs || return 1 sanitize_sysroot_libs libhdr10plus-rs || return 1
} }
build_dovi_tool() { build_dovi_tool() {
# build libdovi # build libdovi
cd dolby_vision || return 1 cd dolby_vision || return 1
cargo_cbuild || return 1 meta_cargoc_build || return 1
sanitize_sysroot_libs libdovi || return 1 sanitize_sysroot_libs libdovi || return 1
} }
build_librav1e() { build_librav1e() {
cargo_cbuild || return 1 meta_cargoc_build || 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
} }
### CMAKE ### ### CMAKE ###
cmake_build() { meta_cmake_build() {
local addFlags=("$@") local addFlags=("$@")
# configure # configure
cmake \ cmake \
@@ -614,7 +646,9 @@ cmake_build() {
} }
build_cpuinfo() { build_cpuinfo() {
cmake_build \ meta_cmake_build \
-DCPUINFO_LIBRARY_TYPE="${BUILD_TYPE}" \
-DCPUINFO_RUNTIME_TYPE="${BUILD_TYPE}" \
-DCPUINFO_BUILD_UNIT_TESTS=OFF \ -DCPUINFO_BUILD_UNIT_TESTS=OFF \
-DCPUINFO_BUILD_MOCK_TESTS=OFF \ -DCPUINFO_BUILD_MOCK_TESTS=OFF \
-DCPUINFO_BUILD_BENCHMARKS=OFF \ -DCPUINFO_BUILD_BENCHMARKS=OFF \
@@ -623,7 +657,7 @@ build_cpuinfo() {
} }
build_libsvtav1() { build_libsvtav1() {
cmake_build \ meta_cmake_build \
-DENABLE_AVX512=ON \ -DENABLE_AVX512=ON \
-DBUILD_TESTING=OFF \ -DBUILD_TESTING=OFF \
-DCOVERAGE=OFF || return 1 -DCOVERAGE=OFF || return 1
@@ -631,7 +665,7 @@ build_libsvtav1() {
} }
build_libsvtav1_psy() { build_libsvtav1_psy() {
cmake_build \ meta_cmake_build \
-DBUILD_TESTING=OFF \ -DBUILD_TESTING=OFF \
-DENABLE_AVX512=ON \ -DENABLE_AVX512=ON \
-DCOVERAGE=OFF \ -DCOVERAGE=OFF \
@@ -641,47 +675,47 @@ build_libsvtav1_psy() {
} }
build_libaom() { build_libaom() {
cmake_build \ meta_cmake_build \
-DENABLE_TESTS=OFF || return 1 -DENABLE_TESTS=OFF || return 1
sanitize_sysroot_libs libaom || return 1 sanitize_sysroot_libs libaom || return 1
} }
build_libopus() { build_libopus() {
cmake_build || return 1 meta_cmake_build || return 1
sanitize_sysroot_libs libopus || return 1 sanitize_sysroot_libs libopus || return 1
} }
build_libwebp() { build_libwebp() {
cmake_build || return 1 meta_cmake_build || return 1
sanitize_sysroot_libs libwebp libsharpyuv || return 1 sanitize_sysroot_libs libwebp libsharpyuv || return 1
} }
build_libjpeg() { build_libjpeg() {
cmake_build || return 1 meta_cmake_build || return 1
sanitize_sysroot_libs libjpeg libturbojpeg || return 1 sanitize_sysroot_libs libjpeg libturbojpeg || return 1
} }
build_libpng() { build_libpng() {
cmake_build \ meta_cmake_build \
-DPNG_TESTS=OFF \ -DPNG_TESTS=OFF \
-DPNG_TOOLS=OFF || return 1 -DPNG_TOOLS=OFF || return 1
sanitize_sysroot_libs libpng || return 1 sanitize_sysroot_libs libpng || return 1
} }
build_zlib() { build_zlib() {
cmake_build \ meta_cmake_build \
-DZLIB_BUILD_EXAMPLES=OFF || return 1 -DZLIB_BUILD_EXAMPLES=OFF || return 1
sanitize_sysroot_libs libz || return 1 sanitize_sysroot_libs libz || return 1
} }
build_glslang() { build_glslang() {
cmake_build \ meta_cmake_build \
-DALLOW_EXTERNAL_SPIRV_TOOLS=ON || return 1 -DALLOW_EXTERNAL_SPIRV_TOOLS=ON || return 1
sanitize_sysroot_libs libglslang || return 1 sanitize_sysroot_libs libglslang || return 1
} }
build_spirv_tools() { build_spirv_tools() {
cmake_build \ meta_cmake_build \
-DSPIRV-Headers_SOURCE_DIR="${PREFIX}" \ -DSPIRV-Headers_SOURCE_DIR="${PREFIX}" \
-DSPIRV_WERROR=OFF \ -DSPIRV_WERROR=OFF \
-DSPIRV_SKIP_TESTS=ON \ -DSPIRV_SKIP_TESTS=ON \
@@ -689,7 +723,7 @@ build_spirv_tools() {
} }
build_spirv_headers() { build_spirv_headers() {
cmake_build \ meta_cmake_build \
-G Ninja || return 1 -G Ninja || return 1
} }
@@ -725,12 +759,12 @@ build_cmake3() {
overrideFlags+=("${flag}") overrideFlags+=("${flag}")
fi fi
done done
CMAKE_FLAGS='' cmake_build \ CMAKE_FLAGS='' meta_cmake_build \
"${overrideFlags[@]}" || return 1 "${overrideFlags[@]}" || return 1
} }
build_libx265() { build_libx265() {
PATH="${LOCAL_PREFIX}/bin:${PATH}" cmake_build \ PATH="${LOCAL_PREFIX}/bin:${PATH}" meta_cmake_build \
-DHIGH_BIT_DEPTH=ON \ -DHIGH_BIT_DEPTH=ON \
-DENABLE_HDR10_PLUS=OFF \ -DENABLE_HDR10_PLUS=OFF \
-S source || return 1 -S source || return 1
@@ -816,9 +850,13 @@ build_glad() {
} }
### AUTOTOOLS ### ### AUTOTOOLS ###
configure_build() { meta_configure_build() {
local addFlags=("$@") local addFlags=("$@")
local configureFlags=() local configureFlags=()
# backup global variable for re-setting
# after build is complete
local cflagsBackup="${CFLAGS}"
local ldflagsBackup="${LDFLAGS}"
# some builds break with LTO # some builds break with LTO
if [[ ${LTO} == 'OFF' ]]; then if [[ ${LTO} == 'OFF' ]]; then
@@ -826,6 +864,8 @@ configure_build() {
test "${flag}" == '--enable-lto' && continue test "${flag}" == '--enable-lto' && continue
configureFlags+=("${flag}") configureFlags+=("${flag}")
done done
CFLAGS="${CFLAGS//${LTO_FLAG}/}"
LDFLAGS="${LDFLAGS//${LTO_FLAG}/}"
else else
configureFlags+=("${CONFIGURE_FLAGS[@]}") configureFlags+=("${CONFIGURE_FLAGS[@]}")
fi fi
@@ -840,16 +880,26 @@ configure_build() {
local destdir="${PWD}/fb-local-install" local destdir="${PWD}/fb-local-install"
make -j"${JOBS}" DESTDIR="${destdir}" install || return 1 make -j"${JOBS}" DESTDIR="${destdir}" install || return 1
install_local_destdir "${destdir}" || return 1 install_local_destdir "${destdir}" || return 1
# reset global variables
CFLAGS="${cflagsBackup}"
LDFLAGS="${ldflagsBackup}"
} }
build_libx264() { build_libx264() {
# libx264 does not support LTO # libx264 breaks with LTO
LTO=OFF configure_build \ LTO=OFF meta_configure_build \
--disable-cli || return 1 --disable-cli \
--disable-avs \
--disable-swscale \
--disable-lavf \
--disable-ffms \
--disable-gpac || return 1
sanitize_sysroot_libs libx264 || return 1 sanitize_sysroot_libs libx264 || return 1
} }
build_libmp3lame() { build_libmp3lame() {
autoreconf -i || return 1
# https://sourceforge.net/p/lame/mailman/message/36081038/ # https://sourceforge.net/p/lame/mailman/message/36081038/
if is_darwin; then if is_darwin; then
remove_line \ remove_line \
@@ -857,7 +907,7 @@ build_libmp3lame() {
'lame_init_old' || return 1 'lame_init_old' || return 1
fi fi
configure_build \ meta_configure_build \
--enable-nasm \ --enable-nasm \
--disable-frontend || return 1 --disable-frontend || return 1
sanitize_sysroot_libs libmp3lame || return 1 sanitize_sysroot_libs libmp3lame || return 1
@@ -867,7 +917,7 @@ build_libnuma() {
if ! is_linux; then return 0; fi if ! is_linux; then return 0; fi
./autogen.sh || return 1 ./autogen.sh || return 1
configure_build || return 1 meta_configure_build || return 1
sanitize_sysroot_libs libnuma || return 1 sanitize_sysroot_libs libnuma || return 1
} }
@@ -956,7 +1006,7 @@ build_ffmpeg() {
ffmpegFlags+=("${FFMPEG_EXTRA_FLAGS[@]}") ffmpegFlags+=("${FFMPEG_EXTRA_FLAGS[@]}")
fi fi
configure_build \ meta_configure_build \
"${ffmpegFlags[@]}" || return 1 "${ffmpegFlags[@]}" || return 1
${SUDO_MODIFY} cp ff*_g "${PREFIX}/bin" ${SUDO_MODIFY} cp ff*_g "${PREFIX}/bin"
sanitize_sysroot_libs \ sanitize_sysroot_libs \

View File

@@ -128,19 +128,11 @@ docker_build_image() {
echo 'SHELL ["/bin/bash", "-c"]' echo 'SHELL ["/bin/bash", "-c"]'
echo 'RUN ln -sf /bin/bash /bin/sh' echo 'RUN ln -sf /bin/bash /bin/sh'
echo 'ENV DEBIAN_FRONTEND=noninteractive' echo 'ENV DEBIAN_FRONTEND=noninteractive'
# arch is rolling release, so highly likely local installCmds=''
# an updated is required between pkg changes installCmds+="${pkg_mgr_update}"
if line_contains "${dockerDistro}" 'arch'; then installCmds+=" && ${pkg_mgr_upgrade}"
local archRuns='' installCmds+=" && ${pkg_install} ${req_pkgs[*]}"
archRuns+="${pkg_mgr_update}" echo "RUN ${installCmds}"
archRuns+=" && ${pkg_mgr_upgrade}"
archRuns+=" && ${pkg_install} ${req_pkgs[*]}"
echo "RUN ${archRuns}"
else
echo "RUN ${pkg_mgr_update}"
echo "RUN ${pkg_mgr_upgrade}"
printf "RUN ${pkg_install} %s\n" "${req_pkgs[@]}"
fi
# ENV for pipx/rust # ENV for pipx/rust
echo 'ENV PIPX_HOME=/root/.local' echo 'ENV PIPX_HOME=/root/.local'

View File

@@ -56,34 +56,32 @@ print_req_pkgs() {
local brew_pkgs=( local brew_pkgs=(
"${common_pkgs[@]}" pkgconf "${common_pkgs[@]}" pkgconf
mkvtoolnix pipx uutils-coreutils mkvtoolnix pipx uutils-coreutils
llvm lld
) )
local common_linux_pkgs=( local common_linux_pkgs=(
"${common_pkgs[@]}" clang valgrind "${common_pkgs[@]}" clang valgrind
curl bc lshw xxd pkgconf sudo curl bc lshw xxd pkgconf sudo llvm
) )
# shellcheck disable=SC2034 # shellcheck disable=SC2034
local apt_get_pkgs=( local apt_get_pkgs=(
"${common_linux_pkgs[@]}" build-essential "${common_linux_pkgs[@]}" pipx
git-core libass-dev libfreetype6-dev build-essential libssl-dev gobjc++
libsdl2-dev libva-dev libvdpau-dev mawk libc6-dev mediainfo ninja-build
libvorbis-dev libxcb1-dev pipx mkvtoolnix libgtest-dev
libxcb-shm0-dev libxcb-xfixes0-dev
zlib1g-dev libssl-dev ninja-build
gobjc++ mawk libnuma-dev libc6-dev
mediainfo mkvtoolnix libgtest-dev
) )
# shellcheck disable=SC2034 # shellcheck disable=SC2034
local pacman_pkgs=( local pacman_pkgs=(
"${common_linux_pkgs[@]}" base-devel "${common_linux_pkgs[@]}" base-devel
python-pipx ninja numactl python-pipx ninja
) )
# shellcheck disable=SC2034 # shellcheck disable=SC2034
local dnf_pkgs=( local dnf_pkgs=(
"${common_linux_pkgs[@]}" openssl-devel "${common_linux_pkgs[@]}" openssl-devel
pipx ninja-build fontconfig-devel wget2 pipx ninja-build fontconfig-devel wget2
cpuinfo-devel glibc-static glibc-devel glibc-static glibc-devel patch
libstdc++-static libstdc++-devel patch libstdc++-static libstdc++-devel
numactl-devel llvm-cmake-utils llvm-devel
llvm-static compiler-rt lld
) )
# shellcheck disable=SC2034 # shellcheck disable=SC2034
local pkg_pkgs=( local pkg_pkgs=(

View File

@@ -59,7 +59,7 @@ echo_if_fail() {
# parse out relevant part of the trace # parse out relevant part of the trace
local cmdEvalLines=() local cmdEvalLines=()
while IFS= read -r line; do while IFS= read -r line; do
line="${line//${PS4}/}" line="${line/${PS4}/}"
test "${line}" == 'set +x' && continue test "${line}" == 'set +x' && continue
test "${line}" == '' && continue test "${line}" == '' && continue
cmdEvalLines+=("${line}") cmdEvalLines+=("${line}")
@@ -69,9 +69,10 @@ echo_if_fail() {
echo echo
echo_fail "command failed:" echo_fail "command failed:"
printf "%s\n" "${cmdEvalLines[@]}" printf "%s\n" "${cmdEvalLines[@]}"
echo_warn "command output:" echo_warn "command stdout:"
tail -n 20 "${out}" tail -n 32 "${out}"
tail -n 20 "${err}" echo_warn "command stderr:"
tail -n 32 "${err}"
echo echo
fi fi
if [[ -z ${LOGNAME} ]]; then if [[ -z ${LOGNAME} ]]; then
@@ -96,14 +97,25 @@ is_root_owned() {
} }
dump_arr() { dump_arr() {
arr_name="$1" local arrayNames=("$@")
declare -n arr for arrayName in "${arrayNames[@]}"; do
arr="${arr_name}" declare -n array="${arrayName}"
arr_exp=("${arr[@]}") arrayExpanded=("${array[@]}")
test "${#arr_exp}" -gt 0 || return 0
echo # skip showing single element arrays by default
echo_info "${arr_name}" if [[ ! ${#arrayExpanded[@]} -gt 1 ]]; then
printf "\t%s\n" "${arr_exp[@]}" if [[ ${SHOW_SINGLE} == true ]]; then
echo_info "${arrayName}='${arrayExpanded[*]}'"
else
continue
fi
fi
echo
# don't care that the variable has "ARR"
echo_info "${arrayName//"_ARR"/}"
printf "\t%s\n" "${arrayExpanded[@]}"
done
} }
has_cmd() { has_cmd() {