a56a2c57cf
This patch enables NEON on ARM64 platform. Passed building both on Android ARMv7 and Android ARM64. BUG=3580 R=andrew@webrtc.org, jridges@masque.com Review URL: https://webrtc-codereview.appspot.com/25069004 Patch from Zhongwei Yao <zhongwei.yao@arm.com>. git-svn-id: http://webrtc.googlecode.com/svn/trunk@7751 4adac7df-926f-26a2-2b94-8c16560cd09d
252 lines
6.5 KiB
Plaintext
252 lines
6.5 KiB
Plaintext
# Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
|
|
#
|
|
# Use of this source code is governed by a BSD-style license
|
|
# that can be found in the LICENSE file in the root of the source
|
|
# tree. An additional intellectual property rights grant can be found
|
|
# in the file PATENTS. All contributing project authors may
|
|
# be found in the AUTHORS file in the root of the source tree.
|
|
|
|
# TODO(kjellander): Rebase this to webrtc/build/common.gypi changes after r6330.
|
|
|
|
import("//build/config/arm.gni")
|
|
import("//build/config/crypto.gni")
|
|
import("//build/config/linux/pkg_config.gni")
|
|
import("build/webrtc.gni")
|
|
|
|
# Contains the defines and includes in common.gypi that are duplicated both as
|
|
# target_defaults and direct_dependent_settings.
|
|
config("common_inherited_config") {
|
|
defines = []
|
|
if (build_with_mozilla) {
|
|
defines += [ "WEBRTC_MOZILLA_BUILD" ]
|
|
}
|
|
if (build_with_chromium) {
|
|
defines = [
|
|
"WEBRTC_CHROMIUM_BUILD",
|
|
]
|
|
include_dirs = [
|
|
# overrides must be included first as that is the mechanism for
|
|
# selecting the override headers in Chromium.
|
|
"overrides",
|
|
# Allow includes to be prefixed with webrtc/ in case it is not an
|
|
# immediate subdirectory of the top-level.
|
|
"..",
|
|
]
|
|
}
|
|
if (is_posix) {
|
|
defines += [ "WEBRTC_POSIX" ]
|
|
}
|
|
if (is_ios) {
|
|
defines += [
|
|
"WEBRTC_MAC",
|
|
"WEBRTC_IOS",
|
|
]
|
|
}
|
|
if (is_linux) {
|
|
defines += [ "WEBRTC_LINUX" ]
|
|
}
|
|
if (is_mac) {
|
|
defines += [ "WEBRTC_MAC" ]
|
|
}
|
|
if (is_win) {
|
|
defines += [ "WEBRTC_WIN" ]
|
|
}
|
|
if (is_android) {
|
|
defines += [
|
|
"WEBRTC_LINUX",
|
|
"WEBRTC_ANDROID",
|
|
]
|
|
if (rtc_enable_android_opensl) {
|
|
defines += [ "WEBRTC_ANDROID_OPENSLES" ]
|
|
}
|
|
}
|
|
}
|
|
|
|
if (rtc_have_dbus_glib) {
|
|
pkg_config("dbus-glib") {
|
|
packages = [ "dbus-glib-1" ]
|
|
}
|
|
}
|
|
|
|
config("common_config") {
|
|
cflags = []
|
|
cflags_cc = []
|
|
if (rtc_restrict_logging) {
|
|
defines = [ "WEBRTC_RESTRICT_LOGGING" ]
|
|
}
|
|
|
|
if (rtc_have_dbus_glib) {
|
|
defines += [ "HAVE_DBUS_GLIB" ]
|
|
# TODO(kjellander): Investigate this, it seems like include <dbus/dbus.h>
|
|
# is still not found even if the execution of
|
|
# build/config/linux/pkg-config.py dbus-glib-1 returns correct include
|
|
# dirs on Linux.
|
|
all_dependent_configs = [ "dbus-glib" ]
|
|
}
|
|
|
|
if (rtc_enable_video) {
|
|
defines += [ "WEBRTC_MODULE_UTILITY_VIDEO" ]
|
|
}
|
|
|
|
if (build_with_chromium) {
|
|
defines += [ "LOGGING_INSIDE_WEBRTC" ]
|
|
} else {
|
|
if (is_posix) {
|
|
# -Wextra is currently disabled in Chromium"s common.gypi. Enable
|
|
# for targets that can handle it. For Android/arm64 right now
|
|
# there will be an "enumeral and non-enumeral type in conditional
|
|
# expression" warning in android_tools/ndk_experimental"s version
|
|
# of stlport.
|
|
# See: https://code.google.com/p/chromium/issues/detail?id=379699
|
|
if (cpu_arch != "arm64" || !is_android) {
|
|
cflags = [
|
|
"-Wextra",
|
|
# We need to repeat some flags from Chromium"s common.gypi
|
|
# here that get overridden by -Wextra.
|
|
"-Wno-unused-parameter",
|
|
"-Wno-missing-field-initializers",
|
|
"-Wno-strict-overflow",
|
|
]
|
|
cflags_cc = [
|
|
"-Wnon-virtual-dtor",
|
|
# This is enabled for clang; enable for gcc as well.
|
|
"-Woverloaded-virtual",
|
|
]
|
|
}
|
|
}
|
|
|
|
if (is_clang) {
|
|
cflags += [ "-Wthread-safety" ]
|
|
}
|
|
}
|
|
|
|
if (cpu_arch == "arm64") {
|
|
defines += [ "WEBRTC_ARCH_ARM" ]
|
|
# TODO(zhongwei) Defining an unique WEBRTC_NEON and
|
|
# distinguishing ARMv7 NEON and ARM64 NEON by
|
|
# WEBRTC_ARCH_ARM_V7 and WEBRTC_ARCH_ARM64 should be better.
|
|
|
|
# This macro is used to distinguish ARMv7 NEON and ARM64 NEON
|
|
defines += [ "WEBRTC_ARCH_ARM64_NEON" ]
|
|
}
|
|
|
|
if (cpu_arch == "arm") {
|
|
defines += [ "WEBRTC_ARCH_ARM" ]
|
|
if (arm_version >= 7) {
|
|
defines += [ "WEBRTC_ARCH_ARM_V7" ]
|
|
if (arm_use_neon) {
|
|
defines += [ "WEBRTC_ARCH_ARM_NEON" ]
|
|
} else if (is_android) {
|
|
defines += [ "WEBRTC_DETECT_ARM_NEON" ]
|
|
}
|
|
}
|
|
}
|
|
|
|
if (cpu_arch == "mipsel") {
|
|
defines += [ "MIPS32_LE" ]
|
|
if (mips_fpu) {
|
|
defines += [ "MIPS_FPU_LE" ]
|
|
cflags += [ "-mhard-float" ]
|
|
} else {
|
|
cflags += [ "-msoft-float" ]
|
|
}
|
|
if (mips_arch_variant == "mips32r2") {
|
|
defines += [ "MIPS32_R2_LE" ]
|
|
cflags += [ "-mips32r2" ]
|
|
cflags_cc += [ "-mips32r2" ]
|
|
}
|
|
if (mips_dsp_rev == 1) {
|
|
defines += [ "MIPS_DSP_R1_LE" ]
|
|
cflags += [ "-mdsp" ]
|
|
cflags_cc += [ "-mdsp" ]
|
|
} else if (mips_dsp_rev == 2) {
|
|
defines += [
|
|
"MIPS_DSP_R1_LE",
|
|
"MIPS_DSP_R2_LE",
|
|
]
|
|
cflags += [ "-mdspr2" ]
|
|
cflags_cc += [ "-mdspr2" ]
|
|
}
|
|
}
|
|
|
|
# TODO(kjellander): Handle warnings on Windows where WebRTC differ from the
|
|
# default warnings set in build/config/compiler/BUILD.gn.
|
|
|
|
if (is_android && is_clang) {
|
|
# The Android NDK doesn"t provide optimized versions of these
|
|
# functions. Ensure they are disabled for all compilers.
|
|
cflags += [
|
|
"-fno-builtin-cos",
|
|
"-fno-builtin-sin",
|
|
"-fno-builtin-cosf",
|
|
"-fno-builtin-sinf",
|
|
]
|
|
}
|
|
}
|
|
|
|
source_set("webrtc") {
|
|
sources = [
|
|
"call.h",
|
|
"config.h",
|
|
"experiments.h",
|
|
"frame_callback.h",
|
|
"transport.h",
|
|
]
|
|
|
|
configs += [ ":common_config" ]
|
|
public_configs = [ ":common_inherited_config"]
|
|
|
|
deps = [
|
|
":webrtc_common",
|
|
"base:webrtc_base",
|
|
"common_audio",
|
|
"common_video",
|
|
"modules/audio_coding",
|
|
"modules/audio_conference_mixer",
|
|
"modules/audio_device",
|
|
"modules/audio_processing",
|
|
"modules/bitrate_controller",
|
|
"modules/desktop_capture",
|
|
"modules/media_file",
|
|
"modules/rtp_rtcp",
|
|
"modules/utility",
|
|
"modules/video_capture",
|
|
"modules/video_coding",
|
|
"modules/video_processing",
|
|
"modules/video_render",
|
|
"system_wrappers",
|
|
"tools",
|
|
"video",
|
|
"video_engine",
|
|
"voice_engine",
|
|
]
|
|
}
|
|
|
|
if (!build_with_chromium) {
|
|
executable("webrtc_tests") {
|
|
testonly = true
|
|
deps = [
|
|
":webrtc",
|
|
"modules/video_render:video_render_internal_impl",
|
|
"modules/video_capture:video_capture_internal_impl",
|
|
"test",
|
|
]
|
|
}
|
|
}
|
|
|
|
source_set("webrtc_common") {
|
|
sources = [
|
|
"config.h",
|
|
"config.cc",
|
|
]
|
|
|
|
if (is_clang) {
|
|
# Suppress warnings from Chrome's Clang plugins.
|
|
# See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
|
|
configs -= [ "//build/config/clang:find_bad_constructs" ]
|
|
}
|
|
|
|
configs += [ ":common_config" ]
|
|
public_configs = [ ":common_inherited_config" ]
|
|
}
|