From 88a8dad9c93439d8977fdb576fd563f6c6d4e773 Mon Sep 17 00:00:00 2001 From: Marshall Greenblatt Date: Wed, 20 Jul 2016 16:40:23 -0400 Subject: [PATCH] Generate pack header files using GN (issue #1403) --- BUILD.gn | 82 ++++++++++++++++++++++++++++++++++++++----- cef.gyp | 10 ++++-- cef_paths2.gypi | 2 -- tools/make_distrib.py | 61 ++++++++++++++++++++------------ 4 files changed, 119 insertions(+), 36 deletions(-) diff --git a/BUILD.gn b/BUILD.gn index 505245bcf..d53027da4 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -535,13 +535,9 @@ static_library("libcef_static") { ] deps = [ - # Generate pack files and make include paths for grit headers discoverable. - ":pak", - ":pak_100_percent", - ":pak_200_percent", - ":pak_devtools", - ":pak_extensions", - ":repack_locales_pack", + # Generate pack files and associated CEF header files. + ":make_pack_header_resources", + ":make_pack_header_strings", # Generate API bindings for extensions. # TODO(cef): Enable if/when CEF exposes its own Mojo APIs. See @@ -849,7 +845,11 @@ static_library("libcef_static") { config("libcef_dll_wrapper_config") { include_dirs = [ ".", + # Source files included in the binary distrib use include paths relative to + # the tests directory. "tests", + # For generated include headers. + "$root_out_dir/includes", ] defines = [ "USING_CEF_SHARED" ] } @@ -983,7 +983,10 @@ repack("pak_devtools") { "$root_gen_dir/blink/devtools_resources.pak", ] - deps = [ + # Use public_deps so that generated grit headers are discoverable from + # the libcef_static target. Grit deps that generate .cc files must be + # listed both here and in the libcef_static target. + public_deps = [ "//content/browser/devtools:resources", ] @@ -1078,6 +1081,69 @@ repack("pak") { output = "$root_out_dir/cef.pak" } +# Helper for generating pack header files. +template("make_pack_header") { + assert(defined(invoker.header)) + assert(defined(invoker.inputs)) + + action("make_pack_header_${target_name}") { + script = "tools/make_pack_header.py" + + inputs = invoker.inputs + outputs = [ invoker.header ] + + args = rebase_path(outputs, root_build_dir) + + rebase_path(inputs, root_build_dir) + + deps = [ + # List all targets that generate pack files here. The grit targets that + # generate |inputs| will be picked up via public_deps. + ":pak", + ":pak_100_percent", + ":pak_200_percent", + ":pak_devtools", + ":pak_extensions", + ":repack_locales_pack", + ] + } +} + +# Generate cef_pack_resources.h. +make_pack_header("resources") { + header = "$root_out_dir/includes/include/cef_pack_resources.h" + inputs = [ + "$root_gen_dir/blink/grit/devtools_resources.h", + "$root_gen_dir/blink/public/resources/grit/blink_resources.h", + "$root_gen_dir/chrome/grit/browser_resources.h", + "$root_gen_dir/chrome/grit/common_resources.h", + "$root_gen_dir/chrome/grit/component_extension_resources.h", + "$root_gen_dir/content/grit/content_resources.h", + "$root_gen_dir/extensions/grit/extensions_browser_resources.h", + "$root_gen_dir/extensions/grit/extensions_renderer_resources.h", + "$root_gen_dir/extensions/grit/extensions_resources.h", + "$root_gen_dir/net/grit/net_resources.h", + "$root_gen_dir/ui/resources/grit/ui_resources.h", + "$root_gen_dir/ui/resources/grit/webui_resources.h", + "$root_gen_dir/ui/views/resources/grit/views_resources.h", + "$root_gen_dir/cef/grit/cef_resources.h", + ] +} + +# Generate cef_pack_strings.h. +make_pack_header("strings") { + header = "$root_out_dir/includes/include/cef_pack_strings.h" + inputs = [ + "$root_gen_dir/chrome/grit/generated_resources.h", + "$root_gen_dir/chrome/grit/locale_settings.h", + "$root_gen_dir/chrome/grit/platform_locale_settings.h", + "$root_gen_dir/components/strings/grit/components_strings.h", + "$root_gen_dir/content/app/strings/grit/content_strings.h", + "$root_gen_dir/extensions/strings/grit/extensions_strings.h", + "$root_gen_dir/ui/strings/grit/ui_strings.h", + "$root_gen_dir/cef/grit/cef_strings.h", + ] +} + # # libcef dll/framework target. diff --git a/cef.gyp b/cef.gyp index 53eeefa7a..a7dc6a318 100644 --- a/cef.gyp +++ b/cef.gyp @@ -469,6 +469,8 @@ '.', # Necessary to allow unittest files to access cefclient files. 'tests', + # For generated include headers. + '<(PRODUCT_DIR)/includes', ], 'conditions': [ [ 'OS=="win"', { @@ -870,7 +872,7 @@ '<@(header_inputs)', ], 'outputs': [ - 'include/cef_pack_resources.h', + '<(PRODUCT_DIR)/includes/include/cef_pack_resources.h', ], 'action': ['python', '<(make_pack_header_path)', '<@(_outputs)', '<@(header_inputs)'], @@ -894,7 +896,7 @@ '<@(header_inputs)', ], 'outputs': [ - 'include/cef_pack_strings.h', + '<(PRODUCT_DIR)/includes/include/cef_pack_strings.h', ], 'action': ['python', '<(make_pack_header_path)', '<@(_outputs)', '<@(header_inputs)'], @@ -1616,7 +1618,7 @@ '.', # cefclient includes are relative to the tests directory to make # creation of binary releases easier. - 'tests' + 'tests', ], 'link_settings': { 'libraries': [ @@ -1765,6 +1767,8 @@ '.', # Necessary to allow unittest files to access cefclient files. 'tests', + # For generated include headers. + '<(PRODUCT_DIR)/includes', ], 'sources': [ 'tests/cefclient/browser/resource_util.cc', diff --git a/cef_paths2.gypi b/cef_paths2.gypi index f3228ef52..17d2844f2 100644 --- a/cef_paths2.gypi +++ b/cef_paths2.gypi @@ -40,8 +40,6 @@ 'include/base/internal/cef_raw_scoped_refptr_mismatch_checker.h', 'include/base/internal/cef_thread_checker_impl.h', 'include/cef_base.h', - 'include/cef_pack_resources.h', - 'include/cef_pack_strings.h', 'include/cef_version.h', 'include/internal/cef_export.h', 'include/internal/cef_logging_internal.h', diff --git a/tools/make_distrib.py b/tools/make_distrib.py index e757dc835..fbe81008c 100644 --- a/tools/make_distrib.py +++ b/tools/make_distrib.py @@ -388,6 +388,26 @@ cef_paths = cef_paths['variables'] cef_paths2 = eval_file(os.path.join(cef_dir, 'cef_paths2.gypi')) cef_paths2 = cef_paths2['variables'] +# Determine the build directory suffix. +build_dir_suffix = '' +if use_gn: + # CEF uses a consistent directory naming scheme for GN via + # GetAllPlatformConfigs in gn_args.py. + if options.x64build: + build_dir_suffix = '_GN_x64' + else: + build_dir_suffix = '_GN_x86' +else: + # GYP outputs both x86 and x64 builds to the same directory on Linux and + # Mac OS X. On Windows it suffixes the directory name for x64 builds. + if platform == 'windows' and options.x64build: + build_dir_suffix = '_x64' + +# Determine the build directory paths. +out_dir = os.path.join(src_dir, 'out') +build_dir_debug = os.path.join(out_dir, 'Debug' + build_dir_suffix) +build_dir_release = os.path.join(out_dir, 'Release' + build_dir_suffix) + if mode == 'standard' or mode == 'minimal': # create the include directory include_dir = os.path.join(output_dir, 'include') @@ -413,6 +433,20 @@ if mode == 'standard' or mode == 'minimal': transfer_gypi_files(cef_dir, cef_paths['autogen_capi_includes'], \ 'include/', include_dir, options.quiet) + # Transfer generated include files. + generated_includes = [ + 'cef_pack_resources.h', + 'cef_pack_strings.h', + ] + for include in generated_includes: + # Debug and Release build should be the same so grab whichever exists. + src_path = os.path.join(build_dir_release, 'includes', 'include', include) + if not os.path.exists(src_path): + src_path = os.path.join(build_dir_debug, 'includes', 'include', include) + if not os.path.exists(src_path): + raise Exception('Missing generated header file: %s' % include) + copy_file(src_path, os.path.join(include_dir, include), options.quiet) + # transfer common libcef_dll_wrapper files transfer_gypi_files(cef_dir, cef_paths2['libcef_dll_wrapper_sources_base'], \ 'libcef_dll/', libcef_dll_dir, options.quiet) @@ -484,28 +518,6 @@ if mode == 'standard': copy_file(os.path.join(cef_dir, 'cef_paths.gypi'), \ os.path.join(output_dir, 'cef_paths.gypi'), options.quiet) - -# Determine the build directory suffix. -build_dir_suffix = '' -if use_gn: - # CEF uses a consistent directory naming scheme for GN via - # GetAllPlatformConfigs in gn_args.py. - if options.x64build: - build_dir_suffix = '_GN_x64' - else: - build_dir_suffix = '_GN_x86' -else: - # GYP outputs both x86 and x64 builds to the same directory on Linux and - # Mac OS X. On Windows it suffixes the directory name for x64 builds. - if platform == 'windows' and options.x64build: - build_dir_suffix = '_x64' - -# Determine the build directory paths. -out_dir = os.path.join(src_dir, 'out') -build_dir_debug = os.path.join(out_dir, 'Debug' + build_dir_suffix) -build_dir_release = os.path.join(out_dir, 'Release' + build_dir_suffix) - - if platform == 'windows': binaries = [ 'd3dcompiler_47.dll', @@ -525,8 +537,11 @@ if platform == 'windows': 'obj\\base\\base_static.lib', 'obj\\cef\\cef_sandbox.lib', 'obj\\base\\third_party\\dynamic_annotations\\dynamic_annotations.lib', - 'obj\\sandbox\\sandbox.lib', ] + if use_gn: + sandbox_libs.append('obj\\sandbox\\win\\sandbox.lib') + else: + sandbox_libs.append('obj\\sandbox\\sandbox.lib') valid_build_dir = None