Add mac, ios, android build

This commit is contained in:
Prokhorov Kirill
2025-10-31 19:51:58 +03:00
parent 6d95071a76
commit c7adedec3a

View File

@ -4,9 +4,32 @@ import base
import os
import config
def make():
print("[fetch & build]: webp")
ARCHES = {"win_64" : "x64",
"win_32" : "x86",
"linux_64" : "x86_64-linux-gnu",
"linux_arm64" : "aarch64-linux-gnu",
"mac_64" : "x86_64-apple-darwin",
"mac_arm64" : "arm-apple-darwin",
"android_arm64_v8a" : "aarch64-linux-android",
"android_armv7" : "armv7a-linux-androideabi",
"android_x86" : "i686-linux-android",
"android_x86_64" : "x86_64-linux-android",
"ios" : "arm-apple-darwin",
"ios_simulator" : "x86_64-apple-darwin"}
def get_xcode_sdk(platform):
xcode_sdk = "iphoneos"
if "simulator" in platform:
xcode_sdk = "iphonesimulator"
return xcode_sdk
def get_ios_min_version(platform):
res = " -miphoneos-version-min=11.0"
if "simulator" in platform:
res = " -mios-simulator-version-min=11.0"
return res
def fetch_repo():
base_dir = base.get_script_dir() + "/../../core/Common/3dParty/webp"
old_dir = os.getcwd()
os.chdir(base_dir)
@ -17,66 +40,126 @@ def make():
base.delete_dir_with_access_error("libwebp")
if not base.is_dir("libwebp"):
base.cmd("git", ["clone", "v1.6.0", "https://chromium.googlesource.com/webm/libwebp"])
base_dir = base_dir + "/libwebp"
os.chdir(base_dir)
build_type = "release"
target_file = "/libwebp"
if (-1 != config.option("config").lower().find("debug")):
build_type = "debug"
target_file = "/libwebp-debug"
# WINDOWS
if "windows" == base.host_platform():
platform = "win_64"
arch = "x64"
build_type = build_type + "-static"
make_bat = []
if config.check_option("platform", "win_32"):
platform = "win_32"
arch = "x86"
if config.check_option("platform", "win_arm64"):
platform = "win_arm64"
base.cmd("git", ["clone", "--branch","v1.6.0", "https://chromium.googlesource.com/webm/libwebp"])
os.chdir(base_dir + "/libwebp")
return old_dir
def create_build_dir(platform, build_type) -> str:
if "win" in platform:
target_file = "libwebp"
if build_type == "debug":
target_file += "-debug"
target_file += ".lib"
build_dir = "./../build/" + platform + "/"
if not base.is_dir(build_dir):
base.create_dir(build_dir)
elif base.is_file(build_dir + build_type + "/" + arch + "/lib" + target_file + ".lib"):
return
make_bat.append("call \"" + config.option("vs-path") + "/vcvarsall.bat\" " + arch)
make_bat.append("call nmake /f Makefile.vc CFG=" + build_type + " OBJDIR=" + build_dir)
base.run_as_bat(make_bat, True)
# LINUX
elif "linux" == base.host_platform():
platform = "linux_64"
arch = "x86_64-linux-gnu"
target_file = "libwebp.a"
return build_dir
elif base.is_file(build_dir + build_type + "/" + ARCHES[platform] + "/lib/" + target_file):
return ""
else:
build_dir = "./../build/" + platform + "/" + build_type
if not base.is_dir(build_dir):
base.create_dir(build_dir)
return build_dir
if base.is_file(build_dir + "/src/.libs/libwebp.a"):
return ""
def get_args(platform, build_type):
if "win" in platform:
args = []
args.append("call \"" + config.option("vs-path") + "/vcvarsall.bat\" " + ARCHES[platform])
args.append("call nmake /f Makefile.vc CFG=" + build_type + "-static" + " OBJDIR=" + build_dir)
return args
elif "linux" in platform or "android" in platform:
cflags = "-O3 -DNDEBUG"
if build_type == "debug":
cflags = "-O0 -g"
if config.check_option("platform", "linux_arm64"):
platform = "linux_arm64"
arch = "aarch64-linux-gnu"
if config.option("sysroot") != "":
cflags += " --sysroot=" + config.option("sysroot")
build_dir = "./../build/" + platform + "/" + build_type
if not base.is_dir(build_dir):
base.create_dir(build_dir)
if base.is_file(build_dir + "/src/.libs/" + target_file):
return
cross_arm64 = ""
if platform == "linux_arm64":
cross_cimpile_arm64 = config.option("arm64-toolchain-bin")
if "" == cross_cimpile_arm64:
cross_cimpile_arm64 = "/usr/bin"
cross_arm64 = "--cross-compile-prefix=" + cross_cimpile_arm64 + "/" + base.get_prefix_cross_compiler_arm64()
return ["--host=" + ARCHES[platform], "--enable-static", "--disable-shared",
"--disable-libwebpdecoder", "--disable-libwebpdemux",
"--disable-libwebpmux", "--disable-libwebpextras",
cross_arm64, "CFLAGS=" + cflags, "LDFLAGS=-static"]
elif "mac" in platform:
arch = ARCHES[platform]
short_arch = arch[:arch.find("-")]
if short_arch == "arm":
short_arch += "64"
cflags = "-O3 -DNDEBUG -arch " + short_arch + " -fPIC"
if build_type == "debug":
cflags = "-O0 -g -arch " + short_arch + " -fPIC"
return ["--host=" + arch, "--enable-static", "--disable-shared",
"--disable-libwebpdecoder", "--disable-libwebpdemux",
"--disable-libwebpmux", "--disable-libwebpextras",
"CFLAGS=" + cflags, "LDFLAGS=-arch " + short_arch]
elif "ios" in platform:
arch = ARCHES[platform]
short_arch = arch[:arch.find("-")]
if short_arch == "arm":
short_arch += "64"
xcode_sdk = get_xcode_sdk(platform)
version_min = get_ios_min_version(platform)
cflags = "-O3 -DNDEBUG -arch " + short_arch + " -isysroot " + xcode_sdk + version_min + " -fPIC"
if build_type == "debug":
cflags = "-O0 -g -arch " + short_arch + " -isysroot " + xcode_sdk + version_min + " -fPIC"
return ["--host=" + arch, "--enable-static", "--disable-shared",
"--disable-libwebpdecoder", "--disable-libwebpdemux",
"--disable-libwebpmux", "--disable-libwebpextras",
"CFLAGS=" + cflags, "LDFLAGS=-arch " + short_arch + " -isysroot " + xcode_sdk]
def make():
print("[fetch & build]: webp")
old_dir = fetch_repo()
build_type = "release"
if -1 != config.option("config").lower().find("debug"):
build_type = "debug"
platform = config.option("platform")
args = get_args(platform, build_type)
build_dir = create_build_dir(platform, build_type)
if build_dir == "":
return
# WINDOWS
if "windows" == base.host_platform():
base.run_as_bat(args, True)
# LINUX, ANDROID
elif -1 != platform.find("linux") or -1 != platform.find("android"):
base.cmd("./autogen.sh")
os.chdir(build_dir)
base.cmd("./../../../libwebp/configure", ["--host=" + arch, "--enable-static", "--disable-shared", "--disable-libwebpdecoder",
"--disable-libwebpdemux", "--disable-libwebpmux", "--disable-libwebpextras",
"CFLAGS=" + cflags, "LDFLAGS=-static"])
if config.option("sysroot") != "":
args += ["CROSS_COMPILE=" + config.get_custom_sysroot_bin() + "/"]
base.cmd("./../../../libwebp/configure", args)
if config.option("sysroot") != "":
base.setup_custom_sysroot_env()
base.cmd("make", ["-j$(nproc)"])
if config.option("sysroot") != "":
base.restore_sysroot_env()
#MAC, IOS
elif -1 != cplatform.find("mac") or -1 != platform.find("ios"):
base.cmd("./autogen.sh")
os.chdir(build_dir)
base.cmd("./../../../libwebp/configure", args)
base.cmd("make", ["-j$(sysctl -n hw.ncpu)"])
os.chdir(old_dir)
return