load("@build_bazel_rules_apple//apple:ios.bzl", "ios_unit_test")

config_setting(
    name = "debug_build",
    values = {
        "compilation_mode": "dbg",
    },
)

optimization_flags = select({
    ":debug_build": [
    ],
    "//conditions:default": ["-DNDEBUG"],
})

sources = glob([
    "Sources/**/*.m",
    "Sources/**/*.mm",
    "Sources/**/*.h",
    "tgcalls/tgcalls/**/*.h",
    "tgcalls/tgcalls/**/*.hpp",
    "tgcalls/tgcalls/**/*.cpp",
    "tgcalls/tgcalls/**/*.mm",
    "tgcalls/tgcalls/**/*.m",
], allow_empty=True, exclude = [
    "tgcalls/tgcalls/legacy/**",
    "tgcalls/tgcalls/platform/tdesktop/**",
    "tgcalls/tgcalls/platform/android/**",
    "tgcalls/tgcalls/platform/windows/**",
    "tgcalls/tgcalls/platform/uwp/**",
    "tgcalls/tgcalls/platform/darwin/SQueue*",
    "tgcalls/tgcalls/platform/darwin/macOS/**",
    "tgcalls/tgcalls/platform/darwin/VideoCameraCapturerMac.*",
    "tgcalls/tgcalls/platform/darwin/VideoMetalViewMac.*",
    "tgcalls/tgcalls/platform/darwin/VideoSampleBufferViewMac.*",
    "tgcalls/tgcalls/platform/darwin/GLVideoView.*",
    "tgcalls/tgcalls/platform/darwin/GLVideoViewMac.*",
    "tgcalls/tgcalls/platform/darwin/ScreenCapturer.*",
    "tgcalls/tgcalls/platform/darwin/DesktopSharingCapturer.*",
    "tgcalls/tgcalls/platform/darwin/DesktopCaptureSourceViewMac.*",
    "tgcalls/tgcalls/platform/darwin/DesktopCaptureSourceView.*",
    "tgcalls/tgcalls/platform/darwin/TGCMIODevice.*",
    "tgcalls/tgcalls/platform/darwin/TGCMIOCapturer.*",
    "tgcalls/tgcalls/platform/darwin/VideoCMIOCapture.*",
    "tgcalls/tgcalls/desktop_capturer/**",
])

sources = glob([
    "Sources/**/*.m",
    "Sources/**/*.mm",
    "Sources/**/*.h",
    "tgcalls/tgcalls/**/*.h",
    "tgcalls/tgcalls/**/*.hpp",
    "tgcalls/tgcalls/platform/darwin/**/*.cpp",
    "tgcalls/tgcalls/platform/darwin/**/*.m",
    "tgcalls/tgcalls/platform/darwin/**/*.mm",
    "tgcalls/tgcalls/platform/darwin/**/*.cc",
    "tgcalls/tgcalls/platform/darwin/**/*.c",
    "tgcalls/tgcalls/third-party/**/*.cpp",
    "tgcalls/tgcalls/utils/**/*.cpp",
], allow_empty=True, exclude = [
    "tgcalls/tgcalls/legacy/**",
    "tgcalls/tgcalls/platform/tdesktop/**",
    "tgcalls/tgcalls/platform/android/**",
    "tgcalls/tgcalls/platform/windows/**",
    "tgcalls/tgcalls/platform/uwp/**",
    "tgcalls/tgcalls/platform/darwin/SQueue*",
    "tgcalls/tgcalls/platform/darwin/macOS/**",
    "tgcalls/tgcalls/platform/darwin/VideoCameraCapturerMac.*",
    "tgcalls/tgcalls/platform/darwin/VideoMetalViewMac.*",
    "tgcalls/tgcalls/platform/darwin/VideoSampleBufferViewMac.*",
    "tgcalls/tgcalls/platform/darwin/GLVideoView.*",
    "tgcalls/tgcalls/platform/darwin/GLVideoViewMac.*",
    "tgcalls/tgcalls/platform/darwin/ScreenCapturer.*",
    "tgcalls/tgcalls/platform/darwin/DesktopSharingCapturer.*",
    "tgcalls/tgcalls/platform/darwin/DesktopCaptureSourceViewMac.*",
    "tgcalls/tgcalls/platform/darwin/DesktopCaptureSourceView.*",
    "tgcalls/tgcalls/platform/darwin/TGCMIODevice.*",
    "tgcalls/tgcalls/platform/darwin/TGCMIOCapturer.*",
    "tgcalls/tgcalls/platform/darwin/VideoCMIOCapture.*",
    "tgcalls/tgcalls/desktop_capturer/**",
]) + [
    "tgcalls/tgcalls/Manager.cpp",
    "tgcalls/tgcalls/MediaManager.cpp",
    "tgcalls/tgcalls/AudioDeviceHelper.cpp",
    "tgcalls/tgcalls/ChannelManager.cpp",
    "tgcalls/tgcalls/CodecSelectHelper.cpp",
    "tgcalls/tgcalls/CryptoHelper.cpp",
    "tgcalls/tgcalls/EncryptedConnection.cpp",
    "tgcalls/tgcalls/FakeAudioDeviceModule.cpp",
    "tgcalls/tgcalls/FakeVideoTrackSource.cpp",
    "tgcalls/tgcalls/FieldTrialsConfig.cpp",
    "tgcalls/tgcalls/Instance.cpp",
    "tgcalls/tgcalls/InstanceImpl.cpp",
    "tgcalls/tgcalls/LogSinkImpl.cpp",
    "tgcalls/tgcalls/Message.cpp",
    "tgcalls/tgcalls/NetworkManager.cpp",
    "tgcalls/tgcalls/SctpDataChannelProviderInterfaceImpl.cpp",
    "tgcalls/tgcalls/StaticThreads.cpp",
    "tgcalls/tgcalls/ThreadLocalObject.cpp",
    "tgcalls/tgcalls/TurnCustomizerImpl.cpp",
    "tgcalls/tgcalls/VideoCaptureInterface.cpp",
    "tgcalls/tgcalls/VideoCaptureInterfaceImpl.cpp",

    "tgcalls/tgcalls/group/AudioStreamingPart.cpp",
    "tgcalls/tgcalls/group/AudioStreamingPartInternal.cpp",
    "tgcalls/tgcalls/group/AudioStreamingPartPersistentDecoder.cpp",
    "tgcalls/tgcalls/group/AVIOContextImpl.cpp",
    "tgcalls/tgcalls/group/GroupInstanceCustomImpl.cpp",
    "tgcalls/tgcalls/group/GroupJoinPayloadInternal.cpp",
    "tgcalls/tgcalls/group/GroupNetworkManager.cpp",
    "tgcalls/tgcalls/group/StreamingMediaContext.cpp",
    "tgcalls/tgcalls/group/VideoStreamingPart.cpp",

    "tgcalls/tgcalls/v2/ContentNegotiation.cpp",
    "tgcalls/tgcalls/v2/DirectNetworkingImpl.cpp",
    "tgcalls/tgcalls/v2/ExternalSignalingConnection.cpp",
    "tgcalls/tgcalls/v2/InstanceV2Impl.cpp",
    "tgcalls/tgcalls/v2/InstanceV2ReferenceImpl.cpp",
    "tgcalls/tgcalls/v2/NativeNetworkingImpl.cpp",
    "tgcalls/tgcalls/v2/RawTcpSocket.cpp",
    "tgcalls/tgcalls/v2/ReflectorPort.cpp",
    "tgcalls/tgcalls/v2/ReflectorRelayPortFactory.cpp",
    "tgcalls/tgcalls/v2/Signaling.cpp",
    "tgcalls/tgcalls/v2/SignalingConnection.cpp",
    "tgcalls/tgcalls/v2/SignalingEncryption.cpp",
    "tgcalls/tgcalls/v2/SignalingSctpConnection.cpp",
]

objc_library(
    name = "TgVoipWebrtc",
    enable_modules = True,
    module_name = "TgVoipWebrtc",
    srcs = sources,
    hdrs = glob([
        "PublicHeaders/**/*.h",
    ]),
    copts = [
        "-I{}/tgcalls/tgcalls".format(package_name()),
        "-Ithird-party/webrtc/webrtc",
        "-Ithird-party/webrtc/dependencies",
        "-Ithird-party/webrtc/webrtc/sdk/objc",
        "-Ithird-party/webrtc/webrtc/sdk/objc/base",
        "-Ithird-party/webrtc/webrtc/sdk/objc/components/renderer/metal",
        "-Ithird-party/webrtc/webrtc/sdk/objc/components/renderer/opengl",
        "-Ithird-party/webrtc/webrtc/sdk/objc/components/video_codec",
        "-Ithird-party/libyuv",
        "-Ithird-party/webrtc/webrtc/sdk/objc/api/video_codec",
        "-Ithird-party/webrtc/absl",
        "-DWEBRTC_IOS",
        "-DWEBRTC_MAC",
        "-DWEBRTC_POSIX",
        "-DRTC_ENABLE_VP9",
        "-DTGVOIP_NAMESPACE=tgvoip_webrtc",
        "-std=c++17",
        "-w",
        #"-Werror",
    ] + optimization_flags,
    includes = [
        "PublicHeaders",
    ],
    deps = [
        "//third-party/webrtc",
        "//third-party/webrtc:webrtc_objc",
        "//submodules/MtProtoKit:MtProtoKit",
        "//third-party/boringssl:crypto",
        "//third-party/boringssl:ssl",
        "//third-party/ogg:ogg",
        "//third-party/opusfile:opusfile",
        "//submodules/ffmpeg:ffmpeg",
        "//third-party/rnnoise:rnnoise",
        "//third-party/libyuv",
        "//third-party/td:TdBinding",
    ],
    sdk_frameworks = [
        "Foundation",
        "UIKit",
        "AudioToolbox",
        "VideoToolbox",
        "CoreTelephony",
        "CoreMedia",
        "GLKit",
        "AVFoundation",
    ],
    sdk_dylibs = [
        "libz",
    ],
    visibility = [
        "//visibility:public",
    ],
)
