mirror of
https://github.com/levogevo/ffmpeg-builder.git
synced 2026-01-15 19:06:17 +00:00
init llvm and lld
This commit is contained in:
228
lib/build.sh
228
lib/build.sh
@@ -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}")
|
|
||||||
if ! is_darwin; then
|
|
||||||
CONFIGURE_FLAGS+=('--enable-lto')
|
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
|
||||||
|
type "${token}"
|
||||||
|
fi
|
||||||
done
|
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 \
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|||||||
@@ -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=(
|
||||||
|
|||||||
34
lib/utils.sh
34
lib/utils.sh
@@ -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
|
|
||||||
|
# skip showing single element arrays by default
|
||||||
|
if [[ ! ${#arrayExpanded[@]} -gt 1 ]]; then
|
||||||
|
if [[ ${SHOW_SINGLE} == true ]]; then
|
||||||
|
echo_info "${arrayName}='${arrayExpanded[*]}'"
|
||||||
|
else
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo_info "${arr_name}"
|
# don't care that the variable has "ARR"
|
||||||
printf "\t%s\n" "${arr_exp[@]}"
|
echo_info "${arrayName//"_ARR"/}"
|
||||||
|
printf "\t%s\n" "${arrayExpanded[@]}"
|
||||||
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
has_cmd() {
|
has_cmd() {
|
||||||
|
|||||||
Reference in New Issue
Block a user