mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-15 21:45:19 +00:00
335 lines
9.0 KiB
Python
Vendored
335 lines
9.0 KiB
Python
Vendored
|
|
ffmpeg_header_paths = [
|
|
"libavutil/hwcontext.h",
|
|
"libavutil/time.h",
|
|
"libavutil/iamf.h",
|
|
"libavutil/intfloat.h",
|
|
"libavutil/error.h",
|
|
"libavutil/detection_bbox.h",
|
|
"libavutil/ambient_viewing_environment.h",
|
|
"libavutil/fifo.h",
|
|
"libavutil/blowfish.h",
|
|
"libavutil/replaygain.h",
|
|
"libavutil/version.h",
|
|
"libavutil/murmur3.h",
|
|
"libavutil/stereo3d.h",
|
|
"libavutil/samplefmt.h",
|
|
"libavutil/pixdesc.h",
|
|
"libavutil/base64.h",
|
|
"libavutil/rational.h",
|
|
"libavutil/sha.h",
|
|
"libavutil/motion_vector.h",
|
|
"libavutil/uuid.h",
|
|
"libavutil/avconfig.h",
|
|
"libavutil/lfg.h",
|
|
"libavutil/avutil.h",
|
|
"libavutil/xtea.h",
|
|
"libavutil/crc.h",
|
|
"libavutil/frame.h",
|
|
"libavutil/file.h",
|
|
"libavutil/md5.h",
|
|
"libavutil/cast5.h",
|
|
"libavutil/spherical.h",
|
|
"libavutil/ffversion.h",
|
|
"libavutil/audio_fifo.h",
|
|
"libavutil/tree.h",
|
|
"libavutil/threadmessage.h",
|
|
"libavutil/attributes.h",
|
|
"libavutil/hdr_dynamic_vivid_metadata.h",
|
|
"libavutil/adler32.h",
|
|
"libavutil/timecode.h",
|
|
"libavutil/dovi_meta.h",
|
|
"libavutil/tx.h",
|
|
"libavutil/sha512.h",
|
|
"libavutil/display.h",
|
|
"libavutil/buffer.h",
|
|
"libavutil/camellia.h",
|
|
"libavutil/csp.h",
|
|
"libavutil/video_hint.h",
|
|
"libavutil/pixelutils.h",
|
|
"libavutil/common.h",
|
|
"libavutil/hmac.h",
|
|
"libavutil/eval.h",
|
|
"libavutil/executor.h",
|
|
"libavutil/dict.h",
|
|
"libavutil/random_seed.h",
|
|
"libavutil/opt.h",
|
|
"libavutil/mastering_display_metadata.h",
|
|
"libavutil/log.h",
|
|
"libavutil/aes.h",
|
|
"libavutil/macros.h",
|
|
"libavutil/bswap.h",
|
|
"libavutil/rc4.h",
|
|
"libavutil/tea.h",
|
|
"libavutil/cpu.h",
|
|
"libavutil/lzo.h",
|
|
"libavutil/des.h",
|
|
"libavutil/channel_layout.h",
|
|
"libavutil/encryption_info.h",
|
|
"libavutil/twofish.h",
|
|
"libavutil/imgutils.h",
|
|
"libavutil/hwcontext_videotoolbox.h",
|
|
"libavutil/video_enc_params.h",
|
|
"libavutil/mem.h",
|
|
"libavutil/parseutils.h",
|
|
"libavutil/ripemd.h",
|
|
"libavutil/bprint.h",
|
|
"libavutil/hdr_dynamic_metadata.h",
|
|
"libavutil/pixfmt.h",
|
|
"libavutil/aes_ctr.h",
|
|
"libavutil/timestamp.h",
|
|
"libavutil/downmix_info.h",
|
|
"libavutil/avassert.h",
|
|
"libavutil/hash.h",
|
|
"libavutil/mathematics.h",
|
|
"libavutil/intreadwrite.h",
|
|
"libavutil/film_grain_params.h",
|
|
"libavutil/avstring.h",
|
|
"libavformat/version.h",
|
|
"libavformat/version_major.h",
|
|
"libavformat/avio.h",
|
|
"libavformat/avformat.h",
|
|
"libavcodec/adts_parser.h",
|
|
"libavcodec/avcodec.h",
|
|
"libavcodec/defs.h",
|
|
"libavcodec/version.h",
|
|
"libavcodec/codec_par.h",
|
|
"libavcodec/codec_desc.h",
|
|
"libavcodec/videotoolbox.h",
|
|
"libavcodec/avfft.h",
|
|
"libavcodec/codec.h",
|
|
"libavcodec/packet.h",
|
|
"libavcodec/version_major.h",
|
|
"libavcodec/bsf.h",
|
|
"libavcodec/codec_id.h",
|
|
"libavcodec/dirac.h",
|
|
"libavcodec/avdct.h",
|
|
"libavcodec/ac3_parser.h",
|
|
"libavcodec/vorbis_parser.h",
|
|
"libavcodec/dv_profile.h",
|
|
"libswresample/version.h",
|
|
"libswresample/version_major.h",
|
|
"libswresample/swresample.h",
|
|
]
|
|
|
|
ffmpeg_libs = [
|
|
"libavutil.a",
|
|
"libavcodec.a",
|
|
"libavformat.a",
|
|
"libswresample.a",
|
|
]
|
|
|
|
source_files = glob([
|
|
"Sources/**/*",
|
|
], exclude = ["Sources/**/.*"])
|
|
|
|
filegroup(
|
|
name = "FFMpegSources",
|
|
srcs = source_files,
|
|
)
|
|
|
|
vpx_headers = [
|
|
"vp8.h",
|
|
"vp8cx.h",
|
|
"vp8dx.h",
|
|
"vpx_codec.h",
|
|
"vpx_decoder.h",
|
|
"vpx_encoder.h",
|
|
"vpx_frame_buffer.h",
|
|
"vpx_image.h",
|
|
"vpx_integer.h",
|
|
"vpx_version.h",
|
|
"vpx_ext_ratectrl.h",
|
|
"vpx_tpl.h",
|
|
]
|
|
|
|
vpx_libs = [
|
|
"VPX",
|
|
]
|
|
|
|
opus_headers = [
|
|
"opus.h",
|
|
"opus_defines.h",
|
|
"opus_multistream.h",
|
|
"opus_projection.h",
|
|
"opus_types.h",
|
|
]
|
|
|
|
opus_libs = [
|
|
"opus",
|
|
]
|
|
|
|
dav1d_headers = [
|
|
"compat/msvc/stdatomic.h",
|
|
"compat/gcc/stdatomic.h",
|
|
"compat/getopt.h",
|
|
"common/dump.h",
|
|
"common/frame.h",
|
|
"common/bitdepth.h",
|
|
"common/attributes.h",
|
|
"common/validate.h",
|
|
"common/intops.h",
|
|
"dav1d/picture.h",
|
|
"dav1d/version.h",
|
|
"dav1d/data.h",
|
|
"dav1d/headers.h",
|
|
"dav1d/common.h",
|
|
"dav1d/dav1d.h",
|
|
]
|
|
|
|
dav1d_libs = [
|
|
"dav1d",
|
|
]
|
|
|
|
genrule(
|
|
name = "libffmpeg_build",
|
|
srcs = [
|
|
":FFMpegSources"
|
|
] + [
|
|
"//third-party/libvpx:Public/vpx/{}".format(x) for x in vpx_headers
|
|
] + [
|
|
"//third-party/libvpx:Public/vpx/lib{}.a".format(x) for x in vpx_libs
|
|
] + [
|
|
"//third-party/opus:Public/opus/{}".format(x) for x in opus_headers
|
|
] + [
|
|
"//third-party/opus:Public/opus/lib/lib{}.a".format(x) for x in opus_libs
|
|
] + [
|
|
"//third-party/dav1d:Public/{}".format(x) for x in dav1d_headers
|
|
] + [
|
|
"//third-party/dav1d:Public/dav1d/lib/lib{}.a".format(x) for x in dav1d_libs
|
|
],
|
|
cmd_bash =
|
|
"""
|
|
set -x
|
|
|
|
ABS_RULEDIR="$$(pwd)/$(RULEDIR)"
|
|
echo "ABS_RULEDIR=$$ABS_RULEDIR"
|
|
|
|
SOURCE_PATH="$$ABS_RULEDIR/FFMpegSource"
|
|
rm -rf "$$SOURCE_PATH"
|
|
|
|
cp -R "submodules/ffmpeg/Sources/FFMpeg" "$$SOURCE_PATH"
|
|
|
|
mkdir "$$SOURCE_PATH/libvpx"
|
|
mkdir -p "$$SOURCE_PATH/libvpx/include/vpx"
|
|
mkdir -p "$$SOURCE_PATH/libvpx/lib"
|
|
""" +
|
|
"\n" +
|
|
"\n".join([
|
|
"cp $(location //third-party/libvpx:Public/vpx/{}) $$SOURCE_PATH/libvpx/include/vpx/".format(x) for x in vpx_headers
|
|
]) +
|
|
"\n" +
|
|
"\n".join([
|
|
"cp $(location //third-party/libvpx:Public/vpx/libVPX.a) $$SOURCE_PATH/libvpx/lib/".format(x) for x in vpx_libs
|
|
]) +
|
|
"\n" +
|
|
"""
|
|
|
|
mkdir "$$SOURCE_PATH/libopus"
|
|
mkdir -p "$$SOURCE_PATH/libopus/include/opus"
|
|
mkdir -p "$$SOURCE_PATH/libopus/lib"
|
|
""" +
|
|
"\n" +
|
|
"\n".join([
|
|
"cp $(location //third-party/opus:Public/opus/{}) $$SOURCE_PATH/libopus/include/opus/".format(x) for x in opus_headers
|
|
]) +
|
|
"\n" +
|
|
"\n".join([
|
|
"cp $(location //third-party/opus:Public/opus/lib/lib{}.a) $$SOURCE_PATH/libopus/lib/".format(x) for x in opus_libs
|
|
]) +
|
|
"\n" +
|
|
"""
|
|
mkdir "$$SOURCE_PATH/libdav1d"
|
|
mkdir -p "$$SOURCE_PATH/libdav1d/include"
|
|
mkdir -p "$$SOURCE_PATH/libdav1d/include/compat"
|
|
mkdir -p "$$SOURCE_PATH/libdav1d/include/compat/msvc"
|
|
mkdir -p "$$SOURCE_PATH/libdav1d/include/compat/gcc"
|
|
mkdir -p "$$SOURCE_PATH/libdav1d/include/common"
|
|
mkdir -p "$$SOURCE_PATH/libdav1d/include/dav1d"
|
|
mkdir -p "$$SOURCE_PATH/libdav1d/lib"
|
|
""" +
|
|
"\n" +
|
|
"\n".join([
|
|
"cp $(location //third-party/dav1d:Public/{}) $$SOURCE_PATH/libdav1d/include/{}".format(x, x) for x in dav1d_headers
|
|
]) +
|
|
"\n" +
|
|
"\n".join([
|
|
"cp $(location //third-party/dav1d:Public/dav1d/lib/lib{}.a) $$SOURCE_PATH/libdav1d/lib/".format(x) for x in dav1d_libs
|
|
]) +
|
|
"\n" +
|
|
"""
|
|
BUILD_DIR="$$ABS_RULEDIR/build"
|
|
rm -rf "$$BUILD_DIR"
|
|
mkdir -p "$$BUILD_DIR"
|
|
YASM_DIR="$$BUILD_DIR/yasm"
|
|
rm -rf "$$YASM_DIR"
|
|
mkdir -p "$$YASM_DIR"
|
|
tar -xf "$(location //third-party/yasm:yasm.tar)" -C "$$YASM_DIR"
|
|
|
|
VARIANT=release
|
|
|
|
FFMPEG_VERSION="7.1"
|
|
|
|
if [ "$(TARGET_CPU)" == "ios_armv7" ]; then
|
|
BUILD_ARCH="armv7"
|
|
elif [ "$(TARGET_CPU)" == "ios_arm64" ]; then
|
|
BUILD_ARCH="arm64"
|
|
elif [ "$(TARGET_CPU)" == "ios_sim_arm64" ]; then
|
|
BUILD_ARCH="sim_arm64"
|
|
VARIANT="debug"
|
|
elif [ "$(TARGET_CPU)" == "ios_x86_64" ]; then
|
|
BUILD_ARCH="x86_64"
|
|
else
|
|
echo "Unsupported architecture $(TARGET_CPU)"
|
|
fi
|
|
|
|
PATH="$$PATH:$$YASM_DIR" "$$SOURCE_PATH/build-ffmpeg-bazel.sh" "$$VARIANT" "$$BUILD_ARCH" "$$BUILD_DIR" "$$SOURCE_PATH" "$$FFMPEG_VERSION"
|
|
""" + "\n" + "\n".join([
|
|
"cp \"$$BUILD_DIR/FFmpeg-iOS/include/{header_path}\" \"$(location Public/third_party/ffmpeg/{header_path})\"".format(header_path = header_path) for header_path in ffmpeg_header_paths
|
|
]) + "\n" + "\n".join([
|
|
"cp \"$$BUILD_DIR/FFmpeg-iOS/lib/{lib}\" \"$(location {lib})\"".format(lib = lib) for lib in ffmpeg_libs
|
|
]),
|
|
outs = [
|
|
"Public/third_party/ffmpeg/{}".format(header_path) for header_path in ffmpeg_header_paths
|
|
] + ffmpeg_libs,
|
|
tools = [
|
|
"//third-party/yasm:yasm.tar",
|
|
],
|
|
visibility = [
|
|
"//visibility:public",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "ffmpeg_lib",
|
|
srcs = ffmpeg_libs,
|
|
visibility = [
|
|
"//visibility:public",
|
|
]
|
|
)
|
|
|
|
objc_library(
|
|
name = "ffmpeg",
|
|
module_name = "ffmpeg",
|
|
enable_modules = True,
|
|
hdrs = ["Public/third_party/ffmpeg/" + x for x in ffmpeg_header_paths],
|
|
includes = [
|
|
"Public",
|
|
"Public/third_party/ffmpeg",
|
|
],
|
|
sdk_dylibs = [
|
|
"libbz2",
|
|
"libiconv",
|
|
"z",
|
|
],
|
|
deps = [
|
|
":ffmpeg_lib",
|
|
"//third-party/libvpx:vpx",
|
|
"//third-party/opus:opus",
|
|
"//third-party/dav1d:dav1d",
|
|
],
|
|
visibility = [
|
|
"//visibility:public",
|
|
]
|
|
)
|