gyp.main执行过程

接着上一篇分析,gyp_chromium文件的结尾调用gyp.main(args)。args包含chrome_src目录下的所有supplement.gypi文件以及script_dir下的common.gypi和features_override.gypi和all.gyp文件。

############## gyp/__init__.py::main()############
  home_vars = ['HOME']
  if sys.platform in ('cygwin', 'win32'):
    home_vars.append('USERPROFILE')
  home = None
  home_dot_gyp = None
  for home_var in home_vars:
    home = os.getenv(home_var)
    if home != None:
      home_dot_gyp = os.path.join(home, '.gyp')
      if not os.path.exists(home_dot_gyp):
        home_dot_gyp = None
      else:
        break

  # TODO(thomasvl): add support for ~/.gyp/defaults

  options, build_files_arg = parser.parse_args(args)
  build_files = build_files_arg

options存放了带参数选项的默认值,build_files为['/home/hejinxin/initchormium/src/build/all.gyp', '/home/hejinxin/initchormium/src/build/common.gypi','/home/hejinxin/initchormium/src/build/features_override.gypi', ]。

############## chromium.gyp_env ###########
{
	'GYP_DEFINES': 'OS=linux',
	'GYP_GENERATORS': 'ninja',
	'GYP_GENERATOR_OUTPU': '..',
}

options.formats = ninja, options.use_environment = True, options.generator_output = ".." 在调用gyp_chromium时加参数--depth=. ,使得options.depth = "."

  if not options.formats:
    # If no format was given on the command line, then check the env variable.
    generate_formats = []
    if options.use_environment:
      generate_formats = os.environ.get('GYP_GENERATORS', [])
    if generate_formats:
      generate_formats = re.split('[\s,]', generate_formats)
    if generate_formats:
      options.formats = generate_formats
    else:
      # Nothing in the variable, default based on platform.
      options.formats = [ {'darwin':   'xcode',
                           'win32':    'msvs',
			   'cygwin':   'msvs'}.get(sys.platform, 'make') ]

  if not options.generator_output and options.use_environment:
    g_o = os.environ.get('GYP_GENERATOR_OUTPUT')
    if g_o:
      options.generator_output = g_o

检查gyp命令参数是否包含系统格式format以及目标文件输出的路径等,如果没有查看给出的环境配置文件里面的变量GYP_GENERATORS和GYP_GENERATOR_OUTPUT是否指定。另外还要设置目标文件的头文件include变量,系统的默认命令行参数,gyp文件的相对路径depth等等。最后,调用load方程:

###############/usr/lib/pymodules/python2.7/gyp/__init__.py###########
  # Generate all requested formats (use a set in case we got one format request
  # twice)
  for format in set(options.formats):
    params = {'options': options,
              'build_files': build_files,
              'generator_flags': generator_flags,
              'cwd': os.getcwd(),
              'build_files_arg': build_files_arg,
              'gyp_binary': sys.argv[0],
              'home_dot_gyp': home_dot_gyp}

    # Start with the default variables from the command line.
    [generator, flat_list, targets, data] = Load(build_files, format,
                                                 cmdline_default_variables,
                                                 includes, options.depth,
                                                 params, options.check,
                                                 options.circular_check)

    # TODO(mark): Pass |data| for now because the generator needs a list of
    # build files that came in.  In the future, maybe it should just accept
    # a list, and not the whole data dict.
    # NOTE: flat_list is the flattened dependency graph specifying the order
    # that targets may be built.  Build systems that operate serially or that
    # need to have dependencies defined before dependents reference them should
    # generate targets in the order specified in flat_list.
    generator.GenerateOutput(flat_list, targets, data, params)

为每一个指定的形式, ,如xcode,ninja,make,scons,msvs等,生成构建文件。


你可能感兴趣的:(gyp.main执行过程)