# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

gyp_vars = {
    'lsan': 0,
    'asan': 0,
    'build_with_mozilla': 1,
    'build_with_chromium': 0,
    'use_official_google_api_keys': 0,
    'have_clock_monotonic': 1 if CONFIG['HAVE_CLOCK_MONOTONIC'] else 0,
    'have_ethtool_cmd_speed_hi': 1 if CONFIG['MOZ_WEBRTC_HAVE_ETHTOOL_SPEED_HI'] else 0,
    'include_alsa_audio': 1 if CONFIG['MOZ_ALSA'] else 0,
    'include_pulse_audio': 1 if CONFIG['MOZ_PULSEAUDIO'] else 0,
    # basic stuff for everything
    'include_internal_video_render': 0,
    'clang_use_chrome_plugins': 0,
    'enable_protobuf': 0,
    'include_tests': 0,
    'enable_android_opensl': 1,
    'enable_android_opensl_output': 0,
    # use_system_lib* still seems to be in use in trunk/build
    'use_system_libjpeg': 0,
    'use_system_libvpx': 0,
    'build_json': 0,
    'build_libjpeg': 0,
    'build_libyuv': 0,
    'build_libvpx': 0,
    'build_ssl': 0,
    'build_json': 0,
    'build_icu': 0,
    'build_opus': 0,
    'libyuv_dir': '/media/libyuv',
    'yuv_disable_avx2': 0 if CONFIG['HAVE_X86_AVX2'] else 1,
    # don't use openssl
    'use_openssl': 0,

    'use_x11': 1 if CONFIG['MOZ_X11'] else 0,
    'use_glib': 1 if CONFIG['GLIB_LIBS'] else 0,

     # turn off mandatory use of NEON and instead use NEON detection
    'arm_neon': 0,
    'arm_neon_optional': 1,

    'moz_widget_toolkit_gonk': 0,
    'moz_webrtc_omx': 0,
    'moz_webrtc_mediacodec': 0,

    # Turn off multi monitor screen share
    'multi_monitor_screenshare%' : 0,

    # (for vp8) chromium sets to 0 also
    'use_temporal_layers': 0,

    # Creates AEC internal sample dump files in current directory
    'aec_debug_dump': 1,

    # Enable and force use of hardware AEC
    'hardware_aec_ns': 1 if CONFIG['MOZ_WEBRTC_HARDWARE_AEC_NS'] else 0,

    # codec enable/disables:
    'include_g711': 1,
    'include_opus': 1,
    'include_g722': 1,
    'include_ilbc': 0,
    # We turn on ISAC because the AGC uses parts of it, and depend on the
    # linker to throw away uneeded bits.
    'include_isac': 1,
    'include_pcm16b': 1,
}

os = CONFIG['OS_TARGET']

if os == 'WINNT':
    gyp_vars.update(
        MSVS_VERSION=CONFIG['_MSVS_VERSION'],
        MSVS_OS_BITS=64 if CONFIG['HAVE_64BIT_BUILD'] else 32,
    )
elif os == 'Android':
    if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk':
        gyp_vars['build_with_gonk'] = 1
        gyp_vars['moz_widget_toolkit_gonk'] = 1
        gyp_vars['opus_complexity'] = 1
        if int(CONFIG['ANDROID_VERSION']) >= 18:
          gyp_vars['moz_webrtc_omx'] = 1
    else:
        gyp_vars.update(
            gtest_target_type='executable',
            moz_webrtc_mediacodec=1,
            android_toolchain=CONFIG['ANDROID_TOOLCHAIN'],
        )

flavors = {
    'WINNT': 'win',
    'Android': 'linux' if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk' else 'android',
    'Linux': 'linux',
    'Darwin': 'mac' if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa' else 'ios',
    'SunOS': 'solaris',
    'GNU/kFreeBSD': 'freebsd',
    'DragonFly': 'dragonfly',
    'FreeBSD': 'freebsd',
    'NetBSD': 'netbsd',
    'OpenBSD': 'openbsd',
}
gyp_vars['OS'] = flavors.get(os)

arches = {
    'x86_64': 'x64',
    'x86': 'ia32',
}

gyp_vars['target_arch'] = arches.get(CONFIG['CPU_ARCH'], CONFIG['CPU_ARCH'])

if CONFIG['ARM_ARCH']:
    if int(CONFIG['ARM_ARCH']) < 7:
        gyp_vars['armv7'] = 0
        gyp_vars['arm_neon_optional'] = 0
    elif os == 'Android':
        gyp_vars['armv7'] = 1
    else:
        # CPU detection for ARM works on Android only.  armv7 always uses CPU
        # detection, so we have to set armv7=0 for non-Android target
        gyp_vars['armv7'] = 0
    # For libyuv
    gyp_vars['arm_version'] = int(CONFIG['ARM_ARCH'])

# Don't try to compile ssse3/sse4.1 code if toolchain doesn't support
if CONFIG['INTEL_ARCHITECTURE']:
    if not CONFIG['HAVE_TOOLCHAIN_SUPPORT_MSSSE3'] or not CONFIG['HAVE_TOOLCHAIN_SUPPORT_MSSE4_1']:
        gyp_vars['yuv_disable_asm'] = 1

if CONFIG['MACOS_SDK_DIR']:
    gyp_vars['mac_sdk_path'] = CONFIG['MACOS_SDK_DIR']
