text: # Copyright (c) 2013 The Chromium Authors. All rights reserved.
  # Use of this source code is governed by a BSD-style license that can be
  # found in the LICENSE file.
  
  # This dict determines how chrome.dll is split into multiple parts.
  {
    'parts': [
      # These sections are matched in order, and a matching input will go into
      # the part for the last block that matches. Inputs are lower()d before
      # the regex is run.
  
      # chrome.dll.
      [
        r'.*',
      ],
  
      # chrome1.dll.
      [
        r'\\libwebp\\.*\.lib$',
        r'\\media\\.*\.lib$',
        r'bindings',
        r'content_worker\.lib$',
        r'hunspell\.lib$',
        r'hyphen\.lib$',
        r'renderer\.lib$',
        r'v8.*\.lib$',
        r'webcore.*\.lib$',
        r'webkit.*\.lib$',
        r'webkit.*modules\.lib$',
        r'wtf\.lib$',
      ],
    ],
  
    # These go into all parts.
    'all': [
      # Duplicated code. Be sure that you really want N copies of your code
      # before adding it here. Hopefully we don't really need all of these.
      #r'_common\.lib$',  # TODO: This might be a bit general.
      #r'\\base\\base.*\.lib$',
      #r'modp_b64\.lib$',
      #r'\\icu\\icu.*\.lib$',
      #r'\\skia\\skia.*\.lib$',
      #r'ipc\.lib$',
      ## TODO: These image/coded related things should probably be renderer only?
      #r'\\libvpx\\.*\.lib$',
      #r'opus\.lib$',
      #r'libjpeg\.lib$',
      #r'qcms\.lib$',
      #r'libpng\.lib$',
      #r'zlib\\.*\.lib$',
      #r'libxml2\.lib$',
      #r'libxslt\.lib$',
      #r'\\sdch\\.*\.lib$',
      #r'\\net\\.*\.lib$',
      #r'\\nss\\.*\.lib$',
      #r'\\crypto\\.*\.lib$',
      #r'googleurl\.lib$',  # TODO: renaming.
      #r'\\sql\\.*\.lib$',
      #r'sqlite3\.lib$',
  
      # See comment in .cc for explanation.
      r'split_dll_fake_entry\.obj$',
  
      # To get DLL version information in all.
      r'chrome_dll_version.*\.res$',
  
      # System and third party import libs.
      r'^advapi32\.lib$',
      r'^atlthunk\.lib$',
      r'^chrome\.user32\.delay\.lib$',
      r'^comctl32\.lib$',
      r'^comdlg32\.lib$',
      r'^crypt32\.lib$',
      r'^d2d1\.lib$',
      r'^d3d9\.lib$',
      r'^dbghelp\.lib$',
      r'^delayimp\.lib$',
      r'^dinput8\.lib$',
      r'^dnsapi\.lib$',
      r'^dwmapi\.lib$',
      r'^dxva2\.lib$',
      r'ffmpegsumo\.lib$',
      r'^gdi32\.lib$',
      r'libcmt\.lib$',  # No ^ so it matches gen/allocator, etc.
      r'^imm32\.lib$',
      r'^iphlpapi\.lib$',
      r'^kernel32\.lib$',
      r'^locationapi\.lib$',
      r'^mf\.lib$',
      r'^mfplat\.lib$',
      r'^mfreadwrite\.lib$',
      r'^mfuuid\.lib$',
      r'^msimg32\.lib$',
      r'^odbc32\.lib$',
      r'^odbccp32\.lib$',
      r'^ole32\.lib$',
      r'^oleacc\.lib$',
      r'^oleaut32\.lib$',
      r'^portabledeviceguids\.lib$',
      r'^psapi\.lib$',
      r'^secur32\.lib$',
      r'^sensorsapi\.lib$',
      r'^setupapi\.lib$',
      r'^shell32\.lib$',
      r'^shlwapi\.lib$',
      r'^strmiids\.lib$',
      r'^user32\.winxp\.lib$',
      r'^usp10\.lib$',
      r'^uuid\.lib$',
      r'^version\.lib$',
      r'^wininet\.lib$',
      r'^winmm\.lib$',
      r'^winspool\.lib$',
      r'^ws2_32\.lib$',
    ],
  
    # objs split out of libs. These will be extracted from whichever side
    # they're not on according to the 'parts' split, and then just the obj
    # linked into the other side. Each should be a 2-tuple, where the first is
    # a regex for the .lib name, and the second is a regex for the .obj from
    # that lib. The lib should not match anything in 'all'.
    #
    # Note: If you're considering adding something that isn't a _switches or a
    # _constants file, it'd probably be better to break the target into separate
    # .lib files.
    'all_from_libs': [
      (r'autofill_core_common\.lib$', r'switches\.obj$'),
      (r'autofill_core_common\.lib$', r'autofill_constants\.obj$'),
      (r'\bbase\.lib$', r'scoped_variant\.obj$'),
      (r'\bbase\.lib$', r'string_util_constants\.obj$'),
      (r'\bbase\.lib$', r'trace_event_impl_constants\.obj$'),
      (r'\bbase_i18n\.lib$', r'i18n_constants\.obj$'),
      (r'base_static\.lib$', r'base_switches\.obj$'),
      (r'\bbase\.lib$', r'file_path_constants\.obj$'),
      (r'\bcc\.lib$', r'switches\.obj$'),
      (r'\bcommon\.lib$', r'constants\.obj$'),
      (r'\bcommon\.lib$', r'extension_manifest_constants\.obj$'),
      (r'\bcommon\.lib$', r'localized_error\.obj$'),
      (r'\bcommon\.lib$', r'url_constants\.obj$'),
      (r'\bcommon\.lib$', r'view_type\.obj$'),
      # It sort of looks like most of this lib could go in 'all', but there's a
      # couple registration/initialization functions that make me a bit nervous.
      (r'common_constants\.lib$', r'chrome_constants\.obj$'),
      (r'common_constants\.lib$', r'chrome_switches\.obj$'),
      (r'common_constants\.lib$', r'pref_names\.obj$'),
      (r'content_common\.lib$', r'browser_plugin_constants\.obj$'),
      (r'content_common\.lib$', r'content_constants\.obj$'),
      (r'content_common\.lib$', r'content_switches\.obj$'),
      (r'content_common\.lib$', r'media_stream_options\.obj$'),
      (r'content_common\.lib$', r'page_zoom\.obj$'),
      (r'content_common\.lib$', r'url_constants\.obj$'),
      (r'gl_wrapper\.lib$', r'gl_switches\.obj$'),
      # TODO(scottmg): These are not solely constants, but look safe.
      (r'libjingle_webrtc_common\.lib$', r'localaudiosource\.obj$'),
      (r'libjingle_webrtc_common\.lib$', r'mediaconstraintsinterface\.obj$'),
      (r'\bmedia\.lib$', r'audio_manager_base\.obj$'),
      (r'\bmedia\.lib$', r'media_switches\.obj$'),
      # TODO(scottmg): This one is not solely constants, but looks safe.
      (r'\bnet\.lib$', r'http_request_headers\.obj$'),
      (r'\bnet\.lib$', r'net_errors\.obj$'),
      (r'ppapi_shared\.lib$', r'id_assignment\.obj$'),
      (r'ppapi_shared\.lib$', r'ppapi_switches\.obj$'),
      (r'ppapi_shared\.lib$', r'ppb_instance_shared\.obj$'),
      (r'ppapi_shared\.lib$', r'net_address_private_impl_constants\.obj$'),
      (r'printing\.lib$', r'print_job_constants\.obj$'),
      (r'protobuf_lite\.lib$', r'generated_message_util\.obj$'),
      (r'skia\.lib$', r'skunpremultiply\.obj$'),
      (r'skia\.lib$', r'skblitter\.obj$'),
      (r'\bui\.lib$', r'clipboard_constants\.obj$'),
      (r'\bui\.lib$', r'favicon_size\.obj$'),
      (r'\bui\.lib$', r'ui_base_switches\.obj$'),
      (r'webkit.*plugins_common\.lib$', r'plugin_switches\.obj$'),
      (r'webkit.*plugins_common\.lib$', r'plugin_constants'),
      (r'webkit.*storage_common\.lib$', r'appcache_interfaces\.obj$'),
      (r'webkit.*storage_browser\.lib$', r'database_tracker\.obj$'),
      (r'webkit.*storage_browser\.lib$', r'database_util\.obj$'),
      (r'webkit.*storage_browser\.lib$', r'file_permission_policy\.obj$'),
      (r'webkit.*storage_browser\.lib$', r'file_system_task_runners\.obj$'),
    ],
  
    # This manifest will be merged with the intermediate one from the linker,
    # and embedded in both DLLs.
    'manifest': '..\\..\\chrome\\app\\chrome.dll.manifest'
  }
  