diff --git a/.gitignore b/.gitignore index 6515d6d..5217bfb 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ cmake-build-debug .cargo/ test/ libwebrtc/ +libwebrtc_android/ CMakeLists.txt diff --git a/Cargo.toml b/Cargo.toml index c51d159..bd716a2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,5 +16,5 @@ glob = "0.3.0" regex = "1.0" [lib] -crate-type = ["cdylib"] +crate-type = ["staticlib", "cdylib"] bench = false diff --git a/build.rs b/build.rs index 88fd7ad..7d734a9 100644 --- a/build.rs +++ b/build.rs @@ -5,7 +5,9 @@ use std::io::Write; use std::path; fn main() { - let target_os = "android"; + // TODO Download precompiled binaries of WebRTC for the target_os + + let target_os = "ios"; //let target_arch = "arm64"; let libwebrtc_dir = path::PathBuf::from("libwebrtc"); @@ -16,12 +18,15 @@ fn main() { libwebrtc_dir.join("include/"), libwebrtc_dir.join("include/third_party/abseil-cpp/"), libwebrtc_dir.join("include/third_party/libc++/"), + + // For mac & ios + libwebrtc_dir.join("include/sdk/objc"), + libwebrtc_dir.join("include/sdk/objc/base"), ]; let mut builder = cxx_build::bridges(&["src/lib.rs"]); builder.flag("-std=c++17"); builder.file("src/peer_connection_factory.cpp"); - builder.file("src/jni_onload.cc"); for include in includes { builder.include(include); @@ -31,7 +36,6 @@ fn main() { "cargo:rustc-link-search=native={}", libwebrtc_dir.canonicalize().unwrap().to_str().unwrap() ); - println!("cargo:rustc-link-lib=static=webrtc"); match target_os { "macos" => { @@ -51,7 +55,13 @@ fn main() { .define("WEBRTC_MAC", None); } "ios" => { - // TODO(theomonnom) + + builder + .file("src/objc_test.mm") + .define("WEBRTC_ENABLE_OBJC_SYMBOL_EXPORT", None) + .define("WEBRTC_MAC", None) + .define("WEBRTC_POSIX", None) + .define("WEBRTC_IOS", None); } "android" => { let ndk_env = env::var("ANDROID_NDK_HOME").expect( @@ -102,6 +112,7 @@ fn main() { // JNI Version Script & Keep JNI symbols let vs_path = path::PathBuf::from(env::var("OUT_DIR").unwrap()).join("webrtc_jni.map"); let mut vs_file = fs::File::create(&vs_path).unwrap(); + builder.file("src/jni_onload.cc"); println!("cargo:rustc-link-arg=-Wl,--undefined=JNI_OnLoad"); write!(vs_file, "JNI_WEBRTC {{\n\tglobal: ").unwrap(); diff --git a/include/objc_test.h b/include/objc_test.h new file mode 100644 index 0000000..b72a5cd --- /dev/null +++ b/include/objc_test.h @@ -0,0 +1,5 @@ +// +// Created by Théo Monnom on 16/08/2022. +// + +void LKPrintDevices(); \ No newline at end of file diff --git a/include/peer_connection_factory.h b/include/peer_connection_factory.h index f904d12..914292f 100644 --- a/include/peer_connection_factory.h +++ b/include/peer_connection_factory.h @@ -7,7 +7,6 @@ #define PEER_CONNECTION_FACTORY_H #include "api/peer_connection_interface.h" -#include "sdk/android/src/jni/jni_helpers.h" namespace lk { diff --git a/src/objc_test.mm b/src/objc_test.mm new file mode 100644 index 0000000..2b82b4b --- /dev/null +++ b/src/objc_test.mm @@ -0,0 +1,12 @@ +#import "sdk/objc/base/RTCVideoCapturer.h" +#import "sdk/objc/components/capturer/RTCCameraVideoCapturer.h" + +void LKPrintDevices() { + NSArray* devices = [RTCCameraVideoCapturer captureDevices]; + [devices enumerateObjectsUsingBlock:^(AVCaptureDevice* device, NSUInteger i, + BOOL* stop) { + NSLog(@"%@", device.localizedName); + NSLog(@"%@", device.uniqueID); + NSLog(@"%@", device.modelID); + }]; +} \ No newline at end of file diff --git a/src/peer_connection_factory.cpp b/src/peer_connection_factory.cpp index 10c71aa..2713f13 100644 --- a/src/peer_connection_factory.cpp +++ b/src/peer_connection_factory.cpp @@ -4,6 +4,7 @@ #include "peer_connection_factory.h" #include +#include "objc_test.h" namespace lk{ @@ -33,6 +34,8 @@ namespace lk{ } std::unique_ptr CreatePeerConnectionFactory() { + LKPrintDevices(); // Just a tess + return std::make_unique(); }