webrtc/build/gyp_webrtc
ajm@google.com d5d596eab9 Proof-of-concept proposal for a standalone webrtc build without using gyp_chromium etc. This adds the necessary scripts and gyp files. The idea is to assume that we are building within Chromium; in that case common.gypi (which every gyp file includes) provides the necessary logic to build webrtc.
In a standalone build, gyp_webrtc would be called, which includes common_standalone.gypi. This file specifies everything that running gyp_chromium would normally provide (cflags etc). Here we can customize things for our build that Chromium might not have, and also do away with a lot of the complexity which we don't need.

Most of the remaining work would be in common_standalone.gypi to provide full build settings. Much of this could come from Chromium's common.gypi.

Some of the inspiration for this is from NaCl.

(This doesn't impact the current build, just provides the option to run gyp_webrtc instead of gyp_chromium).
Review URL: http://webrtc-codereview.appspot.com/22021

git-svn-id: http://webrtc.googlecode.com/svn/trunk@60 4adac7df-926f-26a2-2b94-8c16560cd09d
2011-06-08 23:09:32 +00:00

92 lines
3.0 KiB
Python
Executable File

#!/usr/bin/env python
# Copyright (c) 2011 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.
# This is a gyp wrapper for WebRTC that adds some support for how gyp
# is invoked beyond what can be done in the gclient hooks.
import glob
import os
import shlex
import sys
script_dir = os.path.dirname(__file__)
webrtc_src = os.path.abspath(os.path.join(script_dir, os.pardir))
sys.path.append(os.path.join(webrtc_src, '../', 'tools', 'gyp', 'pylib'))
import gyp
def additional_include_files(args=[]):
"""
Returns a list of additional (.gypi) files to include, without
duplicating ones that are already specified on the command line.
"""
# Determine the include files specified on the command line.
# This doesn't cover all the different option formats you can use,
# but it's mainly intended to avoid duplicating flags on the automatic
# makefile regeneration which only uses this format.
specified_includes = set()
for arg in args:
if arg.startswith('-I') and len(arg) > 2:
specified_includes.add(os.path.realpath(arg[2:]))
result = []
def AddInclude(path):
if os.path.realpath(path) not in specified_includes:
result.append(path)
# Always include common.gypi & features_override.gypi
AddInclude(os.path.join(script_dir, 'common_standalone.gypi'))
#AddInclude(os.path.join(script_dir, 'features_override.gypi'))
# Optionally add supplemental .gypi files if present.
supplements = glob.glob(os.path.join(webrtc_src, '*', 'supplement.gypi'))
for supplement in supplements:
AddInclude(supplement)
return result
if __name__ == '__main__':
args = sys.argv[1:]
# This could give false positives since it doesn't actually do real option
# parsing. Oh well.
gyp_file_specified = False
for arg in args:
if arg.endswith('.gyp'):
gyp_file_specified = True
break
# If we didn't get a file, check an env var, and then fall back to
# assuming 'all.gyp' from the same directory as the script.
if not gyp_file_specified:
gyp_file = os.environ.get('WEBRTC_GYP_FILE')
if gyp_file:
# Note that CHROMIUM_GYP_FILE values can't have backslashes as
# path separators even on Windows due to the use of shlex.split().
args.extend(shlex.split(gyp_file))
else:
# TODO(ajm): move webrtc.gyp to script_dir?
args.append(os.path.join(webrtc_src, 'webrtc.gyp'))
args.extend(['-I' + i for i in additional_include_files(args)])
# Pick depth explicitly.
args += ['--depth', '.']
#Building WebRTC as standalone (not as part of Chrome)
#args += ['-D', 'webrtc_standalone=1']
args += ['-D', 'build_with_chromium=0']
print 'Updating projects from gyp files...'
sys.stdout.flush()
# Off we go...
sys.exit(gyp.main(args))