From 9656c73027b75854ddd661887bc7f050774aade1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Monnom?= Date: Tue, 3 Jan 2023 22:26:00 +0100 Subject: [PATCH] allow custom webrtc builds (#21) --- webrtc-sys/build.rs | 33 +++++++++++-------- .../libwebrtc/{compile.py => configure.py} | 13 ++++---- 2 files changed, 27 insertions(+), 19 deletions(-) rename webrtc-sys/libwebrtc/{compile.py => configure.py} (54%) diff --git a/webrtc-sys/build.rs b/webrtc-sys/build.rs index 4a2f6b8..d0b4d69 100644 --- a/webrtc-sys/build.rs +++ b/webrtc-sys/build.rs @@ -13,8 +13,8 @@ const WEBRTC_TAG: &str = "m104.5112.06"; fn download_prebuilt( target_os: &str, target_arch: &str, - out_path: std::path::PathBuf, -) -> Result> { + out_path: path::PathBuf, +) -> Result> { let target_arch = match target_arch { "aarch64" => "arm64", _ => target_arch, @@ -96,20 +96,27 @@ fn download_prebuilt( } fn main() { - // Download the prebuilt WebRTC library. let target_arch = env::var("CARGO_CFG_TARGET_ARCH").unwrap(); let target_os = env::var("CARGO_CFG_TARGET_OS").unwrap(); - let install_directory = env::var("OUT_DIR").unwrap() + "/webrtc-sdk"; - let webrtc_dir = download_prebuilt( - &target_os, - &target_arch, - path::PathBuf::from(install_directory), - ) - .unwrap(); + let use_custom_webrtc = { + let var = env::var("LK_CUSTOM_WEBRTC"); + var.is_ok() && var.unwrap() == "true" + }; - let webrtc_include = webrtc_dir.join("include"); - let webrtc_lib = webrtc_dir.join("lib"); + let (webrtc_include, webrtc_lib) = if use_custom_webrtc { + // Use a local WebRTC version (libwebrtc folder) + let webrtc_dir = path::PathBuf::from("./libwebrtc"); + (webrtc_dir.join("src"), webrtc_dir.join("src/out/Dev/obj")) + } else { + // Download a prebuilt version of WebRTC + let download_dir = env::var("OUT_DIR").unwrap() + "/webrtc-sdk"; + let webrtc_dir = + download_prebuilt(&target_os, &target_arch, path::PathBuf::from(download_dir)).unwrap(); + + (webrtc_dir.join("include"), webrtc_dir.join("lib")) + }; + println!("cargo:rerun-if-env-changed=LK_CUSTOM_WEBRTC"); // Just required for the bridge build to succeed. let includes = &[ @@ -271,7 +278,7 @@ fn main() { println!("cargo:rustc-link-lib=OpenSLES"); // Find JNI symbols - let readelf_output = std::process::Command::new(toolchain.join("bin/llvm-readelf")) + let readelf_output = Command::new(toolchain.join("bin/llvm-readelf")) .arg("-Ws") .arg(webrtc_lib.join("/libwebrtc.a")) .output() diff --git a/webrtc-sys/libwebrtc/compile.py b/webrtc-sys/libwebrtc/configure.py similarity index 54% rename from webrtc-sys/libwebrtc/compile.py rename to webrtc-sys/libwebrtc/configure.py index 7119707..fe1d194 100644 --- a/webrtc-sys/libwebrtc/compile.py +++ b/webrtc-sys/libwebrtc/configure.py @@ -1,10 +1,11 @@ +import platform import subprocess GN_ARGS = [ - "is_debug=false", + "is_debug=true", "treat_warnings_as_errors=false", - 'target_os="win"', - 'target_cpu="x64"', + 'target_os="mac"', + 'target_cpu="arm64"', "rtc_include_tests=false", "rtc_use_h264=false", "is_component_build=false", @@ -12,8 +13,8 @@ GN_ARGS = [ "use_rtti=true", "rtc_build_tools=false", "use_custom_libcxx=false", - "strip_debug_info=true", - "symbol_level=0" ] -subprocess.call(["gn", "gen", "out/Default", "--args=" + ' '.join(GN_ARGS)], shell=True) +cmd = ["gn", "gen", "out/Dev", "--args=" + ' '.join(GN_ARGS)] +print("Executing:", cmd) +subprocess.call(cmd, shell=platform.system() == "Windows")