15976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# -*- Python -*-
25976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#
35976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#
45976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# All the helper functions are defined in:
55976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#  - site_scons/talk.py
65976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# Use 'import talk' in any .scons file to get access to it.
75976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# Add any new helper functions to it; unittest are available
85976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# in talk_unittest.py.
95976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#
105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# Each 'component' that is built is defined in a .scons file.
115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# See talk.Components(...) for further info on file naming convention.
125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#
135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# To add a new platform clone and modify the root_env object. Remember to add
145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# the new environment object to the envs list otherwise it will not be included
155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# in the build.
165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#
175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#
185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#
195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgimport talk
215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgimport os
225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgimport platform
235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#-------------------------------------------------------------------------------
255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# The build files/directories to 'build'.
265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# If the name is the name of a directory then that directory shall contain a
275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# .scons file with the same name as the directory itself:
285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#  Ex: The directory session/phone contains a file called phone.scons
295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# This list must be in order of library dependencies. e.g., if
305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# session/phone/phone.scons defines a target that links to a library target
315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# defined in sound/sound.scons, then 'sound' must come first.
325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# When no particular order is imposed by library dependencies, try to keep in
335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# mostly alphabetical order.
345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#
355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgcomponents = talk.Components("libjingle.scons")
365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#-------------------------------------------------------------------------------
385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# Build environments
395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#
405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# The list of build environments.
425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgenvs = []
435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# The root of all builds.
455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgroot_env = Environment(
465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  tools = [
475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'component_bits',
485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'component_setup',
495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'replace_strings',
505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'talk_noops',
515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    #'talk_utils',
525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_SCONSCRIPTS = components,
545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  DESTINATION_ROOT = '$MAIN_DIR/build',
555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  CPPPATH = [
565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '$OBJ_ROOT',     # generated headers are relative to here
575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '$MAIN_DIR/..',  # TODO(dape): how can we use GOOGLECLIENT instead?
585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  CPPDEFINES = [
605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'LOGGING=1',
615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # Feature selection
635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'FEATURE_ENABLE_SSL',
645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'FEATURE_ENABLE_VOICEMAIL',
655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'FEATURE_ENABLE_PSTN',
665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'HAVE_SRTP',
675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  # Ensure the os environment is captured for any scripts we call out to
695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ENV = os.environ,
705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org)
715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# This is where we set common environments
735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#
745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# Detect if building on 64-bit or 32-bit platform.
755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgDeclareBit('build_platform_64bit', 'Platform of the build machine is 64-bit')
765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgif platform.architecture()[0] == "64bit":
775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  root_env.SetBits('build_platform_64bit')
785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# This bit denotes that an env is for 64-bit builds. When set, all build
805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# artifacts will be 64-bit. When unset, all build artifacts will be 32-bit.
815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgDeclareBit('host_platform_64bit',
825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org           'Platform of the host machine (where artifacts will execute) is '
835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org               '64-bit')
845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# This bit denotes that we are cross-compiling using a sysroot.
865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgDeclareBit('cross_compile',
875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org           'Cross compiling using the SYSROOT environment variable')
885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgdef CrossArch(env):
905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  """Return whether or not the host platform architecture differs from the build
915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org     environment architecture."""
925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  if env.Bit('cross_compile'):
935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # The architecture of the Python process may not match the architecture of
945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # the sysroot, so we just assume it's not a cross-arch build or that it
955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # doesn't matter. Currently it only matters if you try to build a cross-arch
965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # Debian package, so just don't do that.
975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    return False
985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  else:
995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    return env.Bit('host_platform_64bit') != env.Bit('build_platform_64bit')
1005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgroot_env.AddMethod(CrossArch)
1015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgDeclareBit('use_static_openssl', 'Build OpenSSL as a static library')
1035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgDeclareBit('have_dbus_glib',
1055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org           'Whether the build system has the dbus-glib-1 package')
1065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgDeclareBit('have_libpulse',
1075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org           'Whether the build system has the libpulse package')
1085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# List all the locales we localize to.
1115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgroot_env.AppendUnique(locales = [
1125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'af', 'am', 'ar', 'bg', 'bn', 'ca', 'cs', 'da', 'de', 'el', 'en', 'en-GB',
1135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'es', 'es-419', 'et', 'eu', 'fa', 'fi', 'fil', 'fr', 'fr-CA', 'gl', 'gu',
1145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'hi', 'hr', 'hu', 'id', 'is', 'it', 'iw', 'ja', 'kn', 'ko', 'lt', 'lv',
1155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'ml', 'mr', 'ms', 'nl', 'no', 'or', 'pl', 'pt-BR', 'pt-PT', 'ro', 'ru',
1165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'sk', 'sl', 'sr', 'sv', 'sw', 'ta', 'te', 'th', 'tl', 'tr', 'uk', 'ur',
1175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'vi', 'zh-CN', 'zh-HK', 'zh-TW', 'zu'])
1185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgAddTargetGroup('all_breakpads', 'breakpad files can be built')
1205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgAddTargetGroup('all_dsym', 'dsym debug packages can be built')
1225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#-------------------------------------------------------------------------------
1245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# W I N D O W S
1255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#
1265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgwin_env = root_env.Clone(
1275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  tools = [
1285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'atlmfc_vc80',
1295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    #'code_signing',
1305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'component_targets_msvs',
1315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'directx_9_0_c',
1325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    #'grid_builder',
1335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'midl',
1345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'target_platform_windows'
1355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
1365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  # Don't use default vc80 midl.exe.  It doesn't understand vista_sdk idl files.
1375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  MIDL = '$PLATFORM_SDK_VISTA_6_0_DIR/Bin/midl.exe ',
1385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  WIX_DIR = '$GOOGLECLIENT/third_party/wix/v3_0_2925/files',
1395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  # Flags for debug and optimization are added to CCFLAGS instead
1405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  CCPDBFLAGS = '',
1415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  CCFLAGS_DEBUG = '',
1425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  CCFLAGS_OPTIMIZED = '',
1435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  # We force a x86 target even when building on x64 Windows platforms.
1445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  TARGET_ARCH = 'x86',
1455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org)
1465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgwin_env.Decider('MD5-timestamp')
1495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgwin_env.Append(
1505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  COMPONENT_LIBRARY_PUBLISH = True,  # Put dlls in output dir too
1515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  CCFLAGS = [
1525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/Fd${TARGET}.pdb', # pdb per object allows --jobs=
1535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/WX',          # warnings are errors
1545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/Zc:forScope', # handle 'for (int i = 0 ...)' right
1555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/EHs-c-',      # disable C++ EH
1565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/GR-',         # disable RTTI
1575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/Gy',          # enable function level linking
1585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/wd4996',      # ignore POSIX deprecated warnings
1595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # promote certain level 4 warnings
1615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/w14701',     # potentially uninitialized var
1625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/w14702',     # unreachable code
1635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/w14706',     # assignment within a conditional
1645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/w14709',     # comma operator within array index
1655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/w14063',     # case 'identifier' is not a valid value for switch of enum
1665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/w14064',     # switch of incomplete enum 'enumeration'
1675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/w14057',     # 'identifier1' indirection to slightly different base
1685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                   #   types from 'identifier2'
1695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/w14263',     # member function does not override any base class virtual
1705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                   #   member function
1715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/w14266',     # no override available for virtual memberfunction from base
1725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                   #  'type'; function is hidden
1735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/w14296',     # expression is always false
1745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/w14355',     # 'this' : used in base member initializer list
1755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
1765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  CPPDEFINES = [
1775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '_ATL_CSTRING_EXPLICIT_CONSTRUCTORS',
1785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # TODO(dape): encapsulate all string operations that are not based
1795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # on std::string/std::wstring and make sure we use the safest versions
1805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # available on all platforms.
1815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '_CRT_SECURE_NO_WARNINGS',
1825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '_USE_32BIT_TIME_T',
1835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '_UNICODE',
1845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'UNICODE',
1855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '_HAS_EXCEPTIONS=0',
1865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'WIN32',
1875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # TODO(dape): remove this from logging.cc and enable here instead.
1885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    #'WIN32_LEAN_AND_MEAN',
1895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'WINVER=0x0500',
1915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '_WIN32_WINNT=0x0501',
1925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '_WIN32_IE=0x0501',
1935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # The Vista platform SDK 6.0 needs at least
1945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # this NTDDI version or else the headers
1955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # that LMI includes from it won't compile.
1965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'NTDDI_VERSION=NTDDI_WINXP',
1975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # npapi.h requires the following:
1995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '_WINDOWS',
2005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
2015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  CPPPATH = [
2025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '$THIRD_PARTY/wtl_71/include',
2035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '$PLATFORM_SDK_VISTA_6_0_DIR/Include',
2045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
2055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  LIBPATH = [
2065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '$PLATFORM_SDK_VISTA_6_0_DIR/Lib'
2075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
2085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  LINKFLAGS = [
2095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '-manifest', # TODO(thaloun): Why do we need this?
2105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # Some of the third-party libraries we link in don't have public symbols, so
2115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # ignore that linker warning.
2125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/ignore:4221',
2135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/nxcompat',    # Binary was tested to be be compatible with Windows DEP.
2145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/dynamicbase', # Use ASLR to dynamically rebase at load-time.
2155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/fixed:no',    # Binary can be loaded at any base-address.
2165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
2175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  MIDLFLAGS = [
2185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/win32',
2195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/I$PLATFORM_SDK_VISTA_6_0_DIR/include'
2205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ]
2215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org)
2225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
2235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# TODO(dape): Figure out what this does; found it in
2245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# omaha/main.scons. This fixes the problem with redefinition
2255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# of OS_WINDOWS symbol.
2265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgwin_env.FilterOut(CPPDEFINES = ['OS_WINDOWS=OS_WINDOWS'])
2275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
2285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# Set up digital signing
2295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgDeclareBit('test_signing', 'Sign binaries with the test certificate')
2305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgwin_env.SetBitFromOption('test_signing', False)
2315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgif win_env.Bit('test_signing'):
2325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org   win_env.Replace(
2335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org     CERTIFICATE_PATH = win_env.File(
2345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org         '$GOOGLECLIENT/tools/test_key/testkey.pfx').abspath,
2355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org     CERTIFICATE_PASSWORD = 'test',
2365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org   )
2375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgAddTargetGroup('signed_binaries', 'digitally signed binaries can be built')
2385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
2395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgwin_dbg_env = win_env.Clone(
2405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_TYPE = 'dbg',
2415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_TYPE_DESCRIPTION = 'Windows debug build',
2425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_GROUPS = ['default', 'all'],
2435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  tools = ['target_debug'],
2445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org)
2455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
2465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgwin_dbg_env.Prepend(
2475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  CCFLAGS = [
2485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/ZI',     # enable debugging
2495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/Od',     # disable optimizations
2505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/MTd',    # link with LIBCMTD.LIB debug lib
2515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/RTC1',   # enable runtime checks
2525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
2535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org)
2545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
2555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgenvs.append(win_dbg_env)
2565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
2575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgwin_dbg64_env = win_dbg_env.Clone(
2585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_TYPE = 'dbg64',
2595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_TYPE_DESCRIPTION = 'Windows debug 64bit build',
2605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_GROUPS = ['all'],
2615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org)
2625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
2635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgwin_dbg64_env.FilterOut(CCFLAGS = ['/ZI'])
2645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
2655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgwin_dbg64_env.Append(
2665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  CCFLAGS = [
2675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/Zi',     # enable debugging that is 64 bit compatible.
2685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # TODO(fbarchard): fix warnings and remove these disables.
2695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/wd4244', # disable cast warning
2705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/wd4267', # disable cast warning
2715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
2725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ARFLAGS = [
2735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/MACHINE:x64',
2745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
2755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  CPPDEFINES = [
2765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'WIN64',
2775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'ARCH_CPU_64_BITS',
2785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
2795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  LIBFLAGS = [
2805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/MACHINE:x64',
2815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
2825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  LINKFLAGS = [
2835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/MACHINE:x64',
2845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
2855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org)
2865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
2875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgwin_dbg64_env.FilterOut(CPPDEFINES = ['_USE_32BIT_TIME_T'])
2885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
2895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgwin_dbg64_env.Prepend(
2905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  LIBPATH = [
2915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      '$VC80_DIR/vc/lib/amd64',
2925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      '$ATLMFC_VC80_DIR/lib/amd64',
2935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      '$PLATFORM_SDK_VISTA_6_0_DIR/Lib/x64',
2945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
2955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org)
2965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgwin_dbg64_env.PrependENVPath(
2975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  'PATH',
2985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  win_dbg64_env.Dir('$VC80_DIR/vc/bin/x86_amd64'))
2995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
3005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgwin_dbg64_env.SetBits('host_platform_64bit')
3015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
3025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgenvs.append(win_dbg64_env)
3035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
3045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgwin_coverage_env = win_dbg_env.Clone(
3055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  tools = ['code_coverage'],
3065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_TYPE = 'coverage',
3075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_TYPE_DESCRIPTION = 'Windows code coverage build',
3085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_GROUPS = ['all'],
3095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org)
3105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
3115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgwin_coverage_env.Append(
3125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  CPPDEFINES = [
3135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'COVERAGE_ENABLED',
3145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
3155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org)
3165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
3175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgenvs.append(win_coverage_env)
3185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
3195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgwin_opt_env = win_env.Clone(
3205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_TYPE = 'opt',
3215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_TYPE_DESCRIPTION = 'Windows opt build',
3225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_GROUPS = ['all'],
3235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  tools = ['target_optimized'],
3245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org)
3255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
3265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgwin_opt_env.Prepend(
3275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  CCFLAGS=[
3285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      '/Zi',       # enable debugging
3295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      '/O1',       # optimize for size
3305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      '/fp:fast',  # float faster but less precise
3315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      '/MT',       # link with LIBCMT.LIB (multi-threaded, static linked crt)
3325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      '/GS',       # enable security checks
3335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
3345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  LINKFLAGS = [
3355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/safeseh',     # protect against attacks against exception handlers
3365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '/opt:ref',     # Remove unused references (functions/data).
3375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
3385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org)
3395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
3405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgenvs.append(win_opt_env)
3415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
3425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#-------------------------------------------------------------------------------
3435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# P O S I X
3445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#
3455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgposix_env = root_env.Clone()
3465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgposix_env.Append(
3475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  CPPDEFINES = [
3485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'HASHNAMESPACE=__gnu_cxx',
3495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'HASH_NAMESPACE=__gnu_cxx',
3505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'POSIX',
3515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'DISABLE_DYNAMIC_CAST',
3525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # The POSIX standard says we have to define this.
3535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '_REENTRANT',
3545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
3555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  CCFLAGS = [
3565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '-Wall',
3575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '-Werror',
3585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '-Wno-switch',
3595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '-fno-exceptions',
3605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # Needed for a clean ABI and for link-time dead-code removal to work
3615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # properly.
3625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '-fvisibility=hidden',
3635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # Generate debugging info in the DWARF2 format.
3645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '-gdwarf-2',
3655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # Generate maximal debugging information. (It is stripped from what we ship
3665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # to users, so we want it for both dbg and opt.)
3675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # Note that hammer automatically supplies "-g" for mac/linux dbg, so that
3685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # flag must be filtered out of linux_dbg and mac_dbg envs below.
3695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '-g3',
3705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
3715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  CXXFLAGS = [
3725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '-Wno-non-virtual-dtor',
3735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '-Wno-ctor-dtor-privacy',
3745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '-fno-rtti',
3755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
3765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org)
3775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
3785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# Switch-hit between NSS and OpenSSL
3795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgif 'NSS_BUILD_PLATFORM' in root_env['ENV']:
3805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org   posix_env.AppendUnique(CPPDEFINES=['HAVE_NSS_SSL_H=1',
3815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                                      'NSS_SSL_RELATIVE_PATH'])
3825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgelse:
3835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org   posix_env.AppendUnique(CPPDEFINES=['HAVE_OPENSSL_SSL_H=1'])
3845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
3855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
3865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#-------------------------------------------------------------------------------
3875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# M A C OSX
3885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#
3895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgmac_env = posix_env.Clone(
3905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  tools = [
3915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'target_platform_mac',
3925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    #'talk_mac',
3935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    #'fill_plist',
3945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
3955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org)
3965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# Use static OpenSSL on mac so that we can use the latest APIs on all
3975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# supported mac platforms (10.5+).
3985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgmac_env.SetBits('use_static_openssl')
3995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
4005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# For libjingle we don't specify a sysroot or minimum OS version.
4015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgmac_osx_version_min_32 = ""
4025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgmac_osx_version_min_64 = ""
4035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
4045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# Generic mac environment common to all targets
4055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgmac_env.Append(
4065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  CPPDEFINES = [
4075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'OSX',
4085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
4095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  CCFLAGS = [
4105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '-arch', 'i386',
4115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '-fasm-blocks',
4125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
4135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  LINKFLAGS = [
4145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '-Wl,-search_paths_first',
4155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # This flag makes all members of a static library be included in the
4165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # final exe - that increases the size of the exe, but without it
4175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # Obj-C categories aren't properly included in the exe.
4185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # TODO(thaloun): consider only defining for libs that actually have objc.
4195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '-ObjC',
4205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '-arch', 'i386',
4215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '-dead_strip',
4225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
4235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  FRAMEWORKS = [
4245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'CoreServices',
4255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'Security',
4265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'SystemConfiguration',
4275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'OpenGL',
4285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'CoreAudio',
4295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'Quartz',
4305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'Cocoa',
4315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'QTKit',
4325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ]
4335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org)
4345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
4355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgif 'NSS_BUILD_PLATFORM' in root_env['ENV']:
4365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  mac_env.AppendUnique(LINKFLAGS = ['-Lthird_party/mozilla/dist/' + root_env['ENV']['NSS_BUILD_PLATFORM'] + '/lib'])
4375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgelse:
4385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  mac_env.AppendUnique(LINKFLAGS = ['-Lthird_party/openssl'])
4395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
4405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
4415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# add debug flags to environment
4425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgdef mac_debug_include(env):
4435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  env.Append(
4445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    CCFLAGS = [
4455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      '-O0',
4465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    ],
4475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    CPPDEFINES = [
4485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      'DEBUG=1',
4495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    ],
4505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  )
4515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  # Remove -g set by hammer, which is not what we want (we have set -g3 above).
4525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  env.FilterOut(CCFLAGS = ['-g'])
4535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
4545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# add 32/64 bit specific options to specified environment
4555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgdef mac_common_include_x86_32(env):
4565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  env.Append(
4575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    CCFLAGS = [
4585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      '-m32',
4595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    ],
4605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    LINKFLAGS = [
4615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      '-m32',
4625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    ],
4635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    FRAMEWORKS = [
4645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      'Carbon',
4655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      'QuickTime',
4665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    ],
4675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  )
4685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  envs.append(env)
4695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
4705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgdef mac_common_include_x86_64(env):
4715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  env.Append(
4725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    CCFLAGS = [
4735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      '-m64',
4745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      '-fPIC',
4755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    ],
4765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    CPPDEFINES = [
4775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      'ARCH_CPU_64_BITS',
4785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      'CARBON_DEPRECATED',
4795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    ],
4805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    LINKFLAGS = [
4815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      '-m64',
4825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    ],
4835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    FRAMEWORKS = [
4845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      'AppKit',
4855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    ],
4865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  )
4875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  env.SetBits('host_platform_64bit')
4885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  envs.append(env)
4895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
4905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgdef mac_osx_version_min(env, ver):
4915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  if ver != "":
4925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    sdk_path = '/Developer/SDKs/MacOSX%s.sdk' % ver
4935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    env.Append(
4945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      CCFLAGS = [
4955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org        '-mmacosx-version-min=' + ver,
4965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org        '-isysroot', sdk_path,
4975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      ],
4985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      LINKFLAGS = [
4995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org        '-mmacosx-version-min=' + ver,
5005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org        '-isysroot', sdk_path,
5015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      ],
5025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      osx_sdk_path = sdk_path,
5035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      osx_version_min = ver,
5045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    )
5055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
5065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# Create all environments
5075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgmac_dbg_env = mac_env.Clone(
5085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_TYPE = 'dbg',
5095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_TYPE_DESCRIPTION = 'Mac debug build',
5105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_GROUPS = ['default', 'all'],
5115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  tools = ['target_debug'],
5125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org)
5135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
5145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgmac_opt_env = mac_env.Clone(
5155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_TYPE = 'opt',
5165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_TYPE_DESCRIPTION = 'Mac opt build',
5175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_GROUPS = ['all'],
5185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  tools = ['target_optimized'],
5195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org)
5205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
5215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgmac_dbg64_env = mac_dbg_env.Clone(
5225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_TYPE = 'dbg64',
5235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_TYPE_DESCRIPTION = 'Mac debug 64bit build',
5245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_GROUPS = ['all'],
5255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org)
5265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
5275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgmac_opt64_env = mac_opt_env.Clone(
5285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_TYPE = 'opt64',
5295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_TYPE_DESCRIPTION = 'Mac opt 64bit build',
5305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_GROUPS = ['all'],
5315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org)
5325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
5335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgmac_debug_include(mac_dbg_env)
5345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgmac_debug_include(mac_dbg64_env)
5355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgmac_common_include_x86_32(mac_dbg_env)
5365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgmac_common_include_x86_32(mac_opt_env)
5375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgmac_common_include_x86_64(mac_dbg64_env)
5385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgmac_common_include_x86_64(mac_opt64_env)
5395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgmac_osx_version_min(mac_dbg_env, mac_osx_version_min_32)
5405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgmac_osx_version_min(mac_opt_env, mac_osx_version_min_32)
5415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgmac_osx_version_min(mac_dbg64_env, mac_osx_version_min_64)
5425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgmac_osx_version_min(mac_opt64_env, mac_osx_version_min_64)
5435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
5445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
5455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#-------------------------------------------------------------------------------
5465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# L I N U X
5475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#
5485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orglinux_common_env = posix_env.Clone(
5495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  tools = [
5505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'target_platform_linux',
5515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'talk_linux',
5525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
5535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org)
5545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
5555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orglinux_common_env.Append(
5565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  CPPDEFINES = [
5575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'LINUX',
5585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
5595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  CCFLAGS = [
5605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # Needed for link-time dead-code removal to work properly.
5615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '-ffunction-sections',
5625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '-fdata-sections',
5635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
5645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  LINKFLAGS = [
5655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # Enable dead-code removal.
5665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '-Wl,--gc-sections',
5675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # Elide dependencies on shared libraries that we're not actually using.
5685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '-Wl,--as-needed',
5695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '-Wl,--start-group',
5705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
5715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  _LIBFLAGS = ['-Wl,--end-group'],
5725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org)
5735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
5745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# Remove default rpath set by Hammer. Hammer sets it to LIB_DIR, which is wrong.
5755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# The rpath is the _run-time_ library search path for the resulting binary, i.e.
5765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# the one used by ld.so at load time. Setting it equal to the path to build
5775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# output on the build machine is nonsense.
5785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orglinux_common_env.Replace(
5795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  RPATH = [],
5805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org)
5815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
5825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# Enable the optional DBus-GLib code if the build machine has the required
5835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# dependency.
5845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orglinux_common_env.EnableFeatureWherePackagePresent('have_dbus_glib',
5855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                                                  'HAVE_DBUS_GLIB',
5865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                                                  'dbus-glib-1')
5875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
5885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgdef linux_common_include_x86_32(env):
5895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  """Include x86-32 settings into an env based on linux_common."""
5905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  env.Append(
5915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    CCFLAGS = [
5925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      '-m32',
5935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    ],
5945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    LINKFLAGS = [
5955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      '-m32',
5965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    ],
5975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  )
5985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
5995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgdef linux_common_include_x86_64(env):
6005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  """Include x86-64 settings into an env based on linux_common."""
6015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  env.Append(
6025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    CCFLAGS = [
6035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      '-m64',
6045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      '-fPIC',
6055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    ],
6065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    LINKFLAGS = [
6075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      '-m64',
6085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    ],
6095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  )
6105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  env.SetBits('host_platform_64bit')
6115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
6125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#-------------------------------------------------------------------------------
6135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# L I N U X -- C R O S S -- B U I L D
6145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
6155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# Cross build requires the following tool names be provided by the environment:
6165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orglinux_cross_common_env = linux_common_env.Clone(
6175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  AR = os.environ.get("AR"),
6185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  AS = os.environ.get("AS"),
6195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  LD = os.environ.get("LD"),
6205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  NM = os.environ.get("NM"),
6215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  RANLIB = os.environ.get("RANLIB"),
6225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  CC = str(os.environ.get("CC")) +
6235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    ' --sysroot=' + str(os.environ.get("SYSROOT")),
6245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  CXX = str(os.environ.get("CXX")) +
6255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    ' --sysroot=' + str(os.environ.get("SYSROOT")),
6265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org)
6275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orglinux_cross_common_env.SetBits('cross_compile')
6285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
6295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# The rest of these paths and flags are optional:
6305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgif os.environ.get("CPPPATH"):
6315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  linux_cross_common_env.Append(
6325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    CPPPATH = os.environ.get("CPPPATH").split(':'),
6335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  )
6345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgif os.environ.get("LIBPATH"):
6355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  linux_cross_common_env.Append(
6365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    LIBPATH = os.environ.get("LIBPATH").split(':'),
6375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  )
6385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgif os.environ.get("CFLAGS"):
6395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  linux_cross_common_env.Append(
6405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    CFLAGS = os.environ.get("CFLAGS").split(' '),
6415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  )
6425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgif os.environ.get("CCFLAGS"):
6435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  linux_cross_common_env.Append(
6445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    CCFLAGS = os.environ.get("CCFLAGS").split(' '),
6455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  )
6465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgif os.environ.get("CXXFLAGS"):
6475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  linux_cross_common_env.Append(
6485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    CXXFLAGS = os.environ.get("CXXFLAGS").split(' '),
6495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  )
6505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgif os.environ.get("LIBFLAGS"):
6515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  linux_cross_common_env.Append(
6525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    _LIBFLAGS = os.environ.get("LIBFLAGS").split(' '),
6535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  )
6545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgif os.environ.get("LINKFLAGS"):
6555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  linux_cross_common_env.Prepend(
6565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    LINKFLAGS = os.environ.get("LINKFLAGS").split(' '),
6575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  )
6585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
6595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#-------------------------------------------------------------------------------
6605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# L I N U X -- T R A D I T I O N A L -- X 8 6
6615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#
6625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# Settings that are specific to our desktop Linux x86 targets.
6635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgdef linux_common_include_traditional(env):
6645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  """Include traditional Linux settings into an env based on linux_common."""
6655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  # OpenSSL has infamously poor ABI stability, so that building against one
6665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  # version and running against a different one often will not work. Since our
6675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  # non-ChromeOS Linux builds are used on many different distros and distro
6685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  # versions, this means we can't safely dynamically link to OpenSSL because the
6695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  # product would end up being broken on any computer with a different version
6705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  # installed. So instead we build it ourself and statically link to it.
6715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  env.SetBits('use_static_openssl')
6725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  # Enable the optional PulseAudio code if the build machine has the required
6735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  # dependency.
6745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  # TODO(?): This belongs in linux_common_env, but we can't safely move it there
6755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  # yet because pkg-config is not being used properly with ChromeOS builds (see
6765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  # TODO below).
6775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  env.EnableFeatureWherePackagePresent('have_libpulse',
6785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                                       'HAVE_LIBPULSE',
6795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                                       'libpulse')
6805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
6815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgdef linux_traditional_include_dbg(env):
6825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  """Include traditional Linux dbg settings into an env based on the above."""
6835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  # Remove -g set by hammer, which is not what we want (we have set -g3 above).
6845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  env.FilterOut(CCFLAGS = ['-g'])
6855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
6865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgdef linux_traditional_include_opt(env):
6875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  """Include traditional Linux opt settings into an env based on the above."""
6885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  # Remove -O2 set by hammer, which is not what we want.
6895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  env.FilterOut(CCFLAGS = ['-O2'])
6905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  env.Append(CCFLAGS = ['-Os'])
6915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
6925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgdef gen_linux_nonhermetic(linux_env, type_suffix, desc_suffix):
6935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  groups = ['nonhermetic']
6945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  if not linux_env.CrossArch():
6955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    groups = groups + ['nonhermetic-native']
6965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # The non-hermetic, native-arch dbg build is the default.
6975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    dbg_groups = groups + ['default']
6985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    native_desc = ', native '
6995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # No suffix for native modes.
7005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    type_suffix = ''
7015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  else:
7025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    groups = groups + ['nonhermetic-cross']
7035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    dbg_groups = groups
7045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    native_desc = ', cross-built for '
7055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
7065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  linux_dbg_env = linux_env.Clone(
7075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    BUILD_TYPE = 'dbg' + type_suffix,
7085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    BUILD_TYPE_DESCRIPTION = 'Linux debug build%s%s' % (native_desc,
7095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org        desc_suffix),
7105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    BUILD_GROUPS = dbg_groups,
7115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    tools = ['target_debug'],
7125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  )
7135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  linux_traditional_include_dbg(linux_dbg_env)
7145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  envs.append(linux_dbg_env)
7155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
7165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  linux_opt_env = linux_env.Clone(
7175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    BUILD_TYPE = 'opt' + type_suffix,
7185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    BUILD_TYPE_DESCRIPTION = 'Linux optimized build%s%s' % (native_desc,
7195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org        desc_suffix),
7205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    BUILD_GROUPS = groups,
7215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    tools = ['target_optimized'],
7225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  )
7235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  linux_traditional_include_opt(linux_opt_env)
7245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  envs.append(linux_opt_env)
7255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
7265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orglinux_nonhermetic_common_env = linux_common_env.Clone()
7275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orglinux_common_include_traditional(linux_nonhermetic_common_env)
7285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
7295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orglinux_nonhermetic_x86_32_env = linux_nonhermetic_common_env.Clone()
7305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orglinux_common_include_x86_32(linux_nonhermetic_x86_32_env)
7315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orggen_linux_nonhermetic(linux_nonhermetic_x86_32_env, '32', '32-bit')
7325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
7335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orglinux_nonhermetic_x86_64_env = linux_nonhermetic_common_env.Clone()
7345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orglinux_common_include_x86_64(linux_nonhermetic_x86_64_env)
7355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orggen_linux_nonhermetic(linux_nonhermetic_x86_64_env, '64', '64-bit')
7365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
7375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgdef gen_linux_hermetic(linux_env, type_suffix, desc):
7385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  groups = ['hermetic']
7395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
7405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  linux_dbg_env = linux_env.Clone(
7415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    BUILD_TYPE = 'hermetic-dbg' + type_suffix,
7425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    BUILD_TYPE_DESCRIPTION = 'Hermetic %s Linux debug build' % desc,
7435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    BUILD_GROUPS = groups,
7445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    tools = ['target_debug'],
7455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  )
7465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  linux_traditional_include_dbg(linux_dbg_env)
7475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  envs.append(linux_dbg_env)
7485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
7495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  linux_opt_env = linux_env.Clone(
7505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    BUILD_TYPE = 'hermetic-opt' + type_suffix,
7515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    BUILD_TYPE_DESCRIPTION = 'Hermetic %s Linux optimized build' % desc,
7525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    BUILD_GROUPS = groups,
7535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    tools = ['target_optimized'],
7545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  )
7555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  linux_traditional_include_opt(linux_opt_env)
7565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  envs.append(linux_opt_env)
7575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
7585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orglinux_hermetic_common_env = linux_cross_common_env.Clone()
7595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orglinux_common_include_traditional(linux_hermetic_common_env)
7605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
7615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orglinux_hermetic_x86_32_env = linux_hermetic_common_env.Clone()
7625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orglinux_common_include_x86_32(linux_hermetic_x86_32_env)
7635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orggen_linux_hermetic(linux_hermetic_x86_32_env, '32', '32-bit')
7645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
7655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orglinux_hermetic_x86_64_env = linux_hermetic_common_env.Clone()
7665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orglinux_common_include_x86_64(linux_hermetic_x86_64_env)
7675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orggen_linux_hermetic(linux_hermetic_x86_64_env, '64', '64-bit')
7685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
7695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#-------------------------------------------------------------------------------
7705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# L I N U X -- C R O S S -- B U I L D -- A R M
7715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
7725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# TODO(noahric): All the following Linux builds are running against a sysroot
7735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# but improperly using the host machine's pkg-config environment. The ChromeOS
7745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# ones should probably be using
7755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# https://cs.corp.google.com/#chrome/src/build/linux/pkg-config-wrapper.
7765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
7775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orglinux_cross_arm_env = linux_cross_common_env.Clone()
7785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orglinux_cross_arm_env.Append(
7795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  CPPDEFINES = [
7805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'NACL_BUILD_ARCH=arm',
7815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'DISABLE_EFFECTS=1',
7825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
7835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  CCFLAGS = [
7845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    '-fPIC',
7855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  ],
7865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org)
7875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgDeclareBit('arm', 'ARM build')
7885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orglinux_cross_arm_env.SetBits('arm')
7895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
7905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# Detect NEON support from the -mfpu build flag.
7915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgDeclareBit('arm_neon', 'ARM supporting neon')
7925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgif '-mfpu=neon' in linux_cross_arm_env['CFLAGS'] or \
7935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org   '-mfpu=neon' in linux_cross_arm_env['CCFLAGS'] or \
7945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org   '-mfpu=neon' in linux_cross_arm_env['CXXFLAGS']:
7955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  print "Building with ARM NEON support."
7965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  linux_cross_arm_env.SetBits('arm_neon')
7975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
7985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# Detect hardfp from the -mfloat-abi build flag
7995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgDeclareBit('arm_hardfp', 'ARM supporting hardfp')
8005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgif '-mfloat-abi=hard' in linux_cross_arm_env['CFLAGS'] or \
8015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org   '-mfloat-abi=hard' in linux_cross_arm_env['CCFLAGS'] or \
8025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org   '-mfloat-abi=hard' in linux_cross_arm_env['CXXFLAGS']:
8035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  print "Building with hard floating point support."
8045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  linux_cross_arm_env.SetBits('arm_hardfp')
8055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
8065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orglinux_cross_arm_dbg_env = linux_cross_arm_env.Clone(
8075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_TYPE = 'arm-dbg',
8085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_TYPE_DESCRIPTION = 'Cross-compiled ARM debug build',
8095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_GROUPS = ['arm'],
8105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  tools = ['target_debug'],
8115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org)
8125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgenvs.append(linux_cross_arm_dbg_env)
8135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
8145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orglinux_cross_arm_opt_env = linux_cross_arm_env.Clone(
8155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_TYPE = 'arm-opt',
8165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_TYPE_DESCRIPTION = 'Cross-compiled ARM optimized build',
8175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  BUILD_GROUPS = ['arm'],
8185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  tools = ['target_optimized'],
8195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org)
8205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgenvs.append(linux_cross_arm_opt_env)
8215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
8225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
8235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
8245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# Create a group for installers
8255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgAddTargetGroup('all_installers', 'installers that can be built')
8265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
8275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# Parse child .scons files
8285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgBuildEnvironments(envs)
8295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
8305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# Explicitly set which targets to build when not stated on commandline
8315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgDefault(None)
8325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# Build the following, which excludes unit test output (ie running them)
8335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# To run unittests, specify the test to run, or run_all_tests.  See -h option.
8345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgDefault(['all_libraries', 'all_programs', 'all_test_programs'])
8355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
8365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# .sln creation code lifted from googleclient/bar/main.scons.  Must be after
8375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# the call to BuildEnvironments for all_foo aliases to be defined.
8385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org# Run 'hammer --mode=all --vsproj' to generate
8395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgDeclareBit('vsproj', 'Generate Visual Studio projects and solution files.')
8405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgwin_env.SetBitFromOption('vsproj', False)
8415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
8425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgif win_env.Bit('vsproj'):
8435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  vs_env = win_env.Clone()
8445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  vs_env.Append(
8455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    COMPONENT_VS_SOURCE_SUFFIXES = [
8465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      '.def',
8475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      '.grd',
8485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      '.html',
8495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      '.idl',
8505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      '.mk',
8515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      '.txt',
8525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      '.py',
8535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      '.scons',
8545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      '.wxs.template',
8555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    ]
8565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  )
8575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
8585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  # Source project
8595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  p = vs_env.ComponentVSDirProject(
8605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    'flute_source',
8615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    ['$MAIN_DIR',
8625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    ],
8635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    COMPONENT_VS_SOURCE_FOLDERS = [
8645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      # Files are assigned to first matching folder. Folder names of None
8655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      # are filters.
8665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      (None, '$DESTINATION_ROOT'),
8675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      ('flute', '$MAIN_DIR'),
8685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      ('google3', '$GOOGLE3'),
8695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      ('third_party', '$THIRD_PARTY'),
8705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    ],
8715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # Force source project to main dir, so that Visual Studio can find the
8725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # source files corresponding to build errors.
8735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    COMPONENT_VS_PROJECT_DIR = '$MAIN_DIR',
8745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  )
8755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  vs_env.AlwaysBuild(p)
8765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
8775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  # Solution and target projects
8785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  s = vs_env.ComponentVSSolution(
8795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    # 'libjingle',  # Please uncomment this line if you build VS proj files.
8805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    ['all_libraries', 'all_programs', 'all_test_programs'],
8815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    projects = [p],
8825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  )
8835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
8845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  print '***Unfortunately the vsproj creator isn\'t smart enough to '
8855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  print '***automatically get the correct output locations.  It is very easy'
8865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  print '***though to change it in the properties pane to the following'
8875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  print '***$(SolutionDir)/build/<foo>/staging/<bar>.exe'
8885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  Default(None)
8895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  Default([s])
890