Compare commits

...

4 Commits

Author SHA1 Message Date
cd154a4c74 Add linux_arm64 build 2025-09-08 16:25:37 +04:00
f88b5c5b19 Add win_arm64 build 2025-09-03 20:50:20 +04:00
75b70535d2 Update libVLC version to 3.0.21-1 2025-09-02 16:20:36 +04:00
50ef60b213 Use new Dockerfile for winarm 2025-09-02 13:18:14 +04:00

View File

@ -5,15 +5,21 @@ sys.path.append('../..')
import config
import base
import os
import platform
def docker_build(image_name, dockerfile_dir, base_dir):
base.cmd("docker", ["build", "-t", image_name, dockerfile_dir])
VLC_UPSTREAM_VERSION = "3.0.21"
VLC_PATCH_VERSION = "-1"
VLC_VERSION = VLC_UPSTREAM_VERSION + VLC_PATCH_VERSION
def docker_build(image_name, dockerfile_dir, base_dir, build_options=[]):
base.cmd("docker", ["build", "-t", image_name, dockerfile_dir] + build_options)
vlc_dir = base_dir + "/vlc"
base.cmd("docker", ["run", "--rm", "-v", vlc_dir + ":/vlc", image_name])
base.cmd("docker", ["image", "rm", image_name])
return
def form_build_win(src_dir, dest_dir):
def form_build_win(src_dir, dest_dir, run_plugins_cache_gen=True):
if not base.is_dir(dest_dir):
base.create_dir(dest_dir)
# copy include dir
@ -26,8 +32,9 @@ def form_build_win(src_dir, dest_dir):
base.copy_file(src_dir + "/libvlc.dll", dest_dir + "/lib")
base.copy_file(src_dir + "/libvlccore.dll", dest_dir + "/lib")
base.copy_file(src_dir + "/vlc-cache-gen.exe", dest_dir + "/lib")
# generate cache file 'plugins.dat' for plugins loading
base.cmd_exe(dest_dir + "/lib/vlc-cache-gen", [dest_dir + "/lib/plugins"])
if run_plugins_cache_gen and "windows" == base.host_platform():
# generate cache file 'plugins.dat' for plugins loading
base.cmd_exe(dest_dir + "/lib/vlc-cache-gen", [dest_dir + "/lib/plugins"])
return
def form_build_linux(src_dir, dest_dir):
@ -54,13 +61,18 @@ def form_build_mac(src_dir, dest_dir):
base.run_command("DYLD_LIBRARY_PATH=" + dest_dir + "/lib " + dest_dir + "/lib/vlc/vlc-cache-gen " + dest_dir + "/lib/vlc/plugins")
return
def is_host_arm():
machine = platform.machine().lower()
if "arm" in machine or "aarch" in machine:
return True
return False
def make():
print("[fetch & build]: libvlc")
base_dir = base.get_script_dir() + "/../../core/Common/3dParty/libvlc"
vlc_dir = base_dir + "/vlc"
vlc_version = "3.0.18"
tools_dir = base.get_script_dir() + "/../tools"
old_cur = os.getcwd()
@ -71,7 +83,7 @@ def make():
if "windows" == base.host_platform():
autocrlf_old = base.run_command("git config --global core.autocrlf")['stdout']
base.cmd("git", ["config", "--global", "core.autocrlf", "false"])
base.cmd("git", ["clone", "https://code.videolan.org/videolan/vlc.git", "--branch", vlc_version])
base.cmd("git", ["clone", "https://code.videolan.org/videolan/vlc.git", "--branch", VLC_VERSION])
if "windows" == base.host_platform():
base.cmd("git", ["config", "--global", "core.autocrlf", autocrlf_old])
@ -79,46 +91,61 @@ def make():
base.copy_file("tools/ignore-cache-time.patch", "vlc")
# windows
if "windows" == base.host_platform():
if config.check_option("platform", "win_64"):
base.copy_file("tools/win_64/build.patch", "vlc")
docker_build("libvlc-win64", base_dir + "/tools/win_64", base_dir)
form_build_win(vlc_dir + "/build/win64/vlc-" + vlc_version, base_dir + "/build/win_64")
if config.check_option("platform", "win_64"):
base.copy_file("tools/win_32/build-win.patch", "vlc")
docker_build("libvlc-win64", base_dir + "/tools/win_64", base_dir)
form_build_win(vlc_dir + "/build/win64/vlc-" + VLC_UPSTREAM_VERSION, base_dir + "/build/win_64")
if config.check_option("platform", "win_32"):
base.copy_file("tools/win_32/build.patch", "vlc")
docker_build("libvlc-win32", base_dir + "/tools/win_32", base_dir)
form_build_win(vlc_dir + "/build/win32/vlc-" + vlc_version, base_dir + "/build/win_32")
if config.check_option("platform", "win_32"):
base.copy_file("tools/win_32/build-win.patch", "vlc")
docker_build("libvlc-win32", base_dir + "/tools/win_32", base_dir)
form_build_win(vlc_dir + "/build/win32/vlc-" + VLC_UPSTREAM_VERSION, base_dir + "/build/win_32")
if config.check_option("platform", "win_arm64"):
base.copy_file("tools/win_32/build-win.patch", "vlc")
base.copy_file("tools/win_arm64/contrib-vpx.patch", "vlc")
base.copy_file("tools/win_arm64/contrib-ffmpeg.patch", "vlc")
base.copy_file("tools/win_arm64/disable-npapi.patch", "vlc")
docker_build("libvlc-winarm64", base_dir + "/tools/win_arm64", base_dir)
form_build_win(vlc_dir + "/build/winarm64-ucrt/vlc-" + VLC_UPSTREAM_VERSION, base_dir + "/build/win_arm64", False)
# linux
if config.check_option("platform", "linux_64"):
base.copy_file(tools_dir + "/linux/elf/patchelf", "vlc")
base.copy_file("tools/linux_64/change-rpaths.sh", "vlc")
docker_build("libvlc-linux64", base_dir + "/tools/linux_64", base_dir)
docker_build("libvlc-linux64", base_dir + "/tools/linux_64", base_dir, ["--platform", "linux/amd64"])
form_build_linux(vlc_dir + "/build/linux_64", base_dir + "/build/linux_64")
# mac
if "mac" == base.host_platform():
os.chdir(vlc_dir)
# NOTE: building for linux_arm64 is only possible on arm machines
if is_host_arm():
if config.check_option("platform", "linux_arm64"):
base.copy_file(tools_dir + "/linux/elf/patchelf", "vlc")
base.copy_file("tools/linux_64/change-rpaths.sh", "vlc")
docker_build("libvlc-linux-arm64", base_dir + "/tools/linux_arm64", base_dir)
form_build_linux(vlc_dir + "/build/linux_arm64", base_dir + "/build/linux_arm64")
base.cmd("git", ["restore", "src/modules/bank.c"])
base.cmd("patch", ["-p1", "src/modules/bank.c", "../tools/ignore-cache-time.patch"])
# # mac
# if "mac" == base.host_platform():
# os.chdir(vlc_dir)
if config.check_option("platform", "mac_64"):
base.cmd("git", ["restore", "extras/package/macosx/build.sh"])
base.cmd("patch", ["-p1", "extras/package/macosx/build.sh", "../tools/mac_64/build.patch"])
base.create_dir("build/mac_64")
os.chdir("build/mac_64")
base.cmd("../../extras/package/macosx/build.sh", ["-c"])
form_build_mac(vlc_dir + "/build/mac_64/vlc_install_dir", base_dir + "/build/mac_64")
# base.cmd("git", ["restore", "src/modules/bank.c"])
# base.cmd("patch", ["-p1", "src/modules/bank.c", "../tools/ignore-cache-time.patch"])
if config.check_option("platform", "mac_arm64"):
base.cmd("git", ["restore", "extras/package/macosx/build.sh"])
base.cmd("patch", ["-p1", "extras/package/macosx/build.sh", "../tools/mac_arm64/build.patch"])
base.create_dir("build/mac_arm64")
os.chdir("build/mac_arm64")
base.cmd("../../extras/package/macosx/build.sh", ["-c"])
form_build_mac(vlc_dir + "/build/mac_arm64/vlc_install_dir", base_dir + "/build/mac_arm64")
# if config.check_option("platform", "mac_64"):
# base.cmd("git", ["restore", "extras/package/macosx/build.sh"])
# base.cmd("patch", ["-p1", "extras/package/macosx/build.sh", "../tools/mac_64/build.patch"])
# base.create_dir("build/mac_64")
# os.chdir("build/mac_64")
# base.cmd("../../extras/package/macosx/build.sh", ["-c"])
# form_build_mac(vlc_dir + "/build/mac_64/vlc_install_dir", base_dir + "/build/mac_64")
# if config.check_option("platform", "mac_arm64"):
# base.cmd("git", ["restore", "extras/package/macosx/build.sh"])
# base.cmd("patch", ["-p1", "extras/package/macosx/build.sh", "../tools/mac_arm64/build.patch"])
# base.create_dir("build/mac_arm64")
# os.chdir("build/mac_arm64")
# base.cmd("../../extras/package/macosx/build.sh", ["-c"])
# form_build_mac(vlc_dir + "/build/mac_arm64/vlc_install_dir", base_dir + "/build/mac_arm64")
os.chdir(old_cur)
return