Home | History | Annotate | Download | only in webrtc
      1 # Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
      2 #
      3 # Use of this source code is governed by a BSD-style license
      4 # that can be found in the LICENSE file in the root of the source
      5 # tree. An additional intellectual property rights grant can be found
      6 # in the file PATENTS.  All contributing project authors may
      7 # be found in the AUTHORS file in the root of the source tree.
      8 
      9 # TODO(kjellander): Rebase this to webrtc/build/common.gypi changes after r6330.
     10 
     11 import("//build/config/arm.gni")
     12 import("//build/config/crypto.gni")
     13 import("//build/config/linux/pkg_config.gni")
     14 import("build/webrtc.gni")
     15 
     16 # Contains the defines and includes in common.gypi that are duplicated both as
     17 # target_defaults and direct_dependent_settings.
     18 config("common_inherited_config") {
     19   defines = []
     20   if (build_with_mozilla) {
     21     defines += [ "WEBRTC_MOZILLA_BUILD" ]
     22   }
     23   if (build_with_chromium) {
     24     defines = [
     25       "WEBRTC_CHROMIUM_BUILD",
     26     ]
     27     include_dirs = [
     28       # overrides must be included first as that is the mechanism for
     29       # selecting the override headers in Chromium.
     30       "overrides",
     31       # Allow includes to be prefixed with webrtc/ in case it is not an
     32       # immediate subdirectory of the top-level.
     33       "..",
     34     ]
     35   }
     36   if (is_posix) {
     37     defines += [ "WEBRTC_POSIX" ]
     38   }
     39   if (is_ios) {
     40     defines += [
     41       "WEBRTC_MAC",
     42       "WEBRTC_IOS",
     43     ]
     44   }
     45   if (is_linux) {
     46     defines += [ "WEBRTC_LINUX" ]
     47   }
     48   if (is_mac) {
     49     defines += [ "WEBRTC_MAC" ]
     50   }
     51   if (is_win) {
     52     defines += [ "WEBRTC_WIN" ]
     53   }
     54   if (is_android) {
     55     defines += [
     56       "WEBRTC_LINUX",
     57       "WEBRTC_ANDROID",
     58     ]
     59     if (rtc_enable_android_opensl) {
     60       defines += [ "WEBRTC_ANDROID_OPENSLES" ]
     61     }
     62   }
     63 }
     64 
     65 if (rtc_have_dbus_glib) {
     66   pkg_config("dbus-glib") {
     67     packages = [ "dbus-glib-1" ]
     68   }
     69 }
     70 
     71 config("common_config") {
     72   cflags = []
     73   cflags_cc = []
     74   if (rtc_restrict_logging) {
     75     defines = [ "WEBRTC_RESTRICT_LOGGING" ]
     76   }
     77 
     78   if (rtc_have_dbus_glib) {
     79     defines += [ "HAVE_DBUS_GLIB" ]
     80     # TODO(kjellander): Investigate this, it seems like include <dbus/dbus.h>
     81     # is still not found even if the execution of
     82     # build/config/linux/pkg-config.py dbus-glib-1 returns correct include
     83     # dirs on Linux.
     84     all_dependent_configs = [ "dbus-glib" ]
     85   }
     86 
     87   if (rtc_enable_video) {
     88     defines += [ "WEBRTC_MODULE_UTILITY_VIDEO" ]
     89   }
     90 
     91   if (build_with_chromium) {
     92     defines += [ "LOGGING_INSIDE_WEBRTC" ]
     93   } else {
     94     if (is_posix) {
     95       # -Wextra is currently disabled in Chromium"s common.gypi. Enable
     96       # for targets that can handle it. For Android/arm64 right now
     97       # there will be an "enumeral and non-enumeral type in conditional
     98       # expression" warning in android_tools/ndk_experimental"s version
     99       # of stlport.
    100       # See: https://code.google.com/p/chromium/issues/detail?id=379699
    101       if (cpu_arch != "arm64" || !is_android) {
    102         cflags = [
    103           "-Wextra",
    104           # We need to repeat some flags from Chromium"s common.gypi
    105           # here that get overridden by -Wextra.
    106           "-Wno-unused-parameter",
    107           "-Wno-missing-field-initializers",
    108           "-Wno-strict-overflow",
    109         ]
    110         cflags_cc = [
    111           "-Wnon-virtual-dtor",
    112           # This is enabled for clang; enable for gcc as well.
    113           "-Woverloaded-virtual",
    114         ]
    115       }
    116     }
    117 
    118     if (is_clang) {
    119       cflags += [ "-Wthread-safety" ]
    120     }
    121   }
    122 
    123   if (cpu_arch == "arm") {
    124     defines += [ "WEBRTC_ARCH_ARM" ]
    125     if (arm_version == 7) {
    126       defines += [ "WEBRTC_ARCH_ARM_V7" ]
    127       if (arm_use_neon) {
    128         defines += [ "WEBRTC_ARCH_ARM_NEON" ]
    129       } else {
    130         defines += [ "WEBRTC_DETECT_ARM_NEON" ]
    131       }
    132     }
    133   }
    134 
    135   if (cpu_arch == "mipsel") {
    136     defines += [ "MIPS32_LE" ]
    137     if (mips_fpu) {
    138       defines += [ "MIPS_FPU_LE" ]
    139       cflags += [ "-mhard-float" ]
    140     } else {
    141       cflags += [ "-msoft-float" ]
    142     }
    143     if (mips_arch_variant == "mips32r2") {
    144       defines += [ "MIPS32_R2_LE" ]
    145       cflags += [ "-mips32r2" ]
    146       cflags_cc += [ "-mips32r2" ]
    147     }
    148     if (mips_dsp_rev == 1) {
    149       defines += [ "MIPS_DSP_R1_LE" ]
    150       cflags += [ "-mdsp" ]
    151       cflags_cc += [ "-mdsp" ]
    152     } else if (mips_dsp_rev == 2) {
    153       defines += [
    154         "MIPS_DSP_R1_LE",
    155         "MIPS_DSP_R2_LE",
    156       ]
    157       cflags += [ "-mdspr2" ]
    158       cflags_cc += [ "-mdspr2" ]
    159     }
    160   }
    161 
    162   # TODO(kjellander): Handle warnings on Windows where WebRTC differ from the
    163   # default warnings set in build/config/compiler/BUILD.gn.
    164 
    165   if (is_android && is_clang) {
    166     # The Android NDK doesn"t provide optimized versions of these
    167     # functions. Ensure they are disabled for all compilers.
    168     cflags += [
    169       "-fno-builtin-cos",
    170       "-fno-builtin-sin",
    171       "-fno-builtin-cosf",
    172       "-fno-builtin-sinf",
    173     ]
    174   }
    175 }
    176 
    177 static_library("webrtc") {
    178   sources = [
    179     "call.h",
    180     "config.h",
    181     "experiments.h",
    182     "frame_callback.h",
    183     "transport.h",
    184   ]
    185 
    186   direct_dependent_configs = [ ":common_inherited_config"]
    187 
    188   deps = [
    189     ":webrtc_common",
    190     "base:webrtc_base",
    191     "common_audio",
    192     "common_video",
    193     "modules/audio_coding",
    194     "modules/audio_conference_mixer",
    195     "modules/audio_device",
    196     "modules/audio_processing",
    197     "modules/bitrate_controller",
    198     "modules/desktop_capture",
    199     "modules/media_file",
    200     "modules/rtp_rtcp",
    201     "modules/utility",
    202     "modules/video_capture",
    203     "modules/video_coding",
    204     "modules/video_processing",
    205     "modules/video_render",
    206     "system_wrappers",
    207     "video",
    208     "video_engine",
    209     "voice_engine",
    210   ]
    211 }
    212 
    213 source_set("webrtc_common") {
    214   sources = [
    215     "config.h",
    216     "config.cc",
    217   ]
    218 
    219   if (is_clang) {
    220     # Suppress warnings from Chrome's Clang plugins.
    221     # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
    222     configs -= [ "//build/config/clang:find_bad_constructs" ]
    223   }
    224 
    225   configs += [ ":common_inherited_config"]
    226 }
    227