# Copyright 2014 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. import("//build/toolchain/toolchain.gni") import("//third_party/WebKit/Source/config.gni") # All paths in this file should be absolute so targets in any directory can use # them without worrying about the current directory. _scripts_dir = "//third_party/WebKit/Source/build/scripts" scripts_for_json5_files = [ # jinja2/__init__.py contains version string, so sufficient as # dependency for whole jinja2 package "//third_party/jinja2/__init__.py", "//third_party/markupsafe/__init__.py", # jinja2 dep "$_scripts_dir/hasher.py", "$_scripts_dir/json5_generator.py", "$_scripts_dir/license.py", "$_scripts_dir/name_utilities.py", "$_scripts_dir/template_expander.py", "$_scripts_dir/templates/macros.tmpl", "$_scripts_dir/core/css/properties/templates/application_macros.tmpl", ] css_properties_files = scripts_for_json5_files + [ "$_scripts_dir/core/css/css_properties.py" ] make_event_factory_files = scripts_for_json5_files + [ "$_scripts_dir/make_event_factory.py", "$_scripts_dir/templates/EventFactory.cpp.tmpl", ] make_names_files = scripts_for_json5_files + [ "$_scripts_dir/make_names.py", "$_scripts_dir/templates/MakeNames.cpp.tmpl", "$_scripts_dir/templates/MakeNames.h.tmpl", ] make_qualified_names_files = scripts_for_json5_files + [ "$_scripts_dir/make_qualified_names.py", "$_scripts_dir/templates/make_qualified_names.cc.tmpl", "$_scripts_dir/templates/make_qualified_names.h.tmpl", ] make_element_factory_files = make_qualified_names_files + [ "$_scripts_dir/make_element_factory.py", "$_scripts_dir/templates/element_factory.cc.tmpl", "$_scripts_dir/templates/element_factory.h.tmpl", ] make_element_type_helpers_files = make_qualified_names_files + [ "$_scripts_dir/make_element_type_helpers.py", "$_scripts_dir/templates/element_type_helpers.cc.tmpl", "$_scripts_dir/templates/element_type_helpers.h.tmpl", ] make_trie_helpers_files = scripts_for_json5_files + [ "$_scripts_dir/trie_builder.py" ] # The executables are relative to the build directory. Don't rebase it because # on Posix we want to run the system one on the path. if (host_os == "win") { gperf_exe = rebase_path("//third_party/gperf/bin/gperf.exe", root_build_dir) bison_exe = rebase_path("//third_party/bison/bin/bison.exe", root_build_dir) } else { gperf_exe = "gperf" bison_exe = "bison" } # Templates -------------------------------------------------------------------- _blink_gen_dir = "$root_gen_dir/blink" make_core_generated_deps = [ "//third_party/WebKit/Source/core:generated_testing_idls", "//third_party/WebKit/Source/core:core_event_interfaces", ] # TODO(shend): Remove this once everything that uses this switches over to # the 'code_generator' template instead. # Template to run most of scripts that process "*.json5" files. # script: script to run. # in_files: input ".json5" files to pass to the script # other_inputs: (optional) other input files the script depends on # defaults to "scripts_for_json5_files" (if specified, we assume # that the contents of "scripts_for_json5_files" are included in # this list). # outputs: expected results. Note that the directory of the 0th item in this # list will be taken to be the output path. # other_args: (optional) other arguments to pass to the script. # deps [optional]: # Depenendencies. If unspecified defaults to make_core_generated_deps. template("process_json5_files") { action(target_name) { script = invoker.script inputs = invoker.in_files if (defined(invoker.other_inputs)) { inputs += invoker.other_inputs } else { inputs += scripts_for_json5_files } outputs = invoker.outputs # Extract the directory to write files to. output_dir = get_path_info(outputs[0], "dir") args = rebase_path(invoker.in_files, root_build_dir) + [ "--output_dir", rebase_path(output_dir, root_build_dir), ] if (is_mac && !use_system_xcode) { args += [ "--developer_dir", hermetic_xcode_path, ] } if (defined(invoker.other_args)) { args += invoker.other_args } if (snake_case_source_files) { args += [ "--snake-case-source-files" ] } if (defined(invoker.deps)) { deps = invoker.deps } else { deps = make_core_generated_deps } forward_variables_from(invoker, [ "visibility" ]) } } # Template to run code generators in build/scripts/. # script: the path to the script to run. # json_inputs: ".json5" files to pass to the generator. # templates: ".tmpl" files that this generator depends on. # other_inputs: (optional) other input files the generator depends on # in addition to "scripts_for_json5_files" # outputs: expected results. Note that the directory of the 0th item in this # list will be taken to be the output path. # other_args: (optional) other arguments to pass to the script. # deps [optional]: # Depenendencies. If unspecified defaults to make_core_generated_deps. template("code_generator") { action(target_name) { script = invoker.script inputs = invoker.json_inputs + invoker.templates + scripts_for_json5_files if (defined(invoker.other_inputs)) { inputs += invoker.other_inputs } outputs = invoker.outputs # Extract the directory to write files to. output_dir = get_path_info(outputs[0], "dir") args = rebase_path(invoker.json_inputs, root_build_dir) + [ "--output_dir", rebase_path(output_dir, root_build_dir), ] if (is_mac && !use_system_xcode) { args += [ "--developer_dir", hermetic_xcode_path, ] } if (defined(invoker.other_args)) { args += invoker.other_args } if (defined(invoker.deps)) { deps = invoker.deps } else { deps = make_core_generated_deps } forward_variables_from(invoker, [ "visibility" ]) } } # Template for scripts using css_properties.py. This is a special case of # process_json5_files. # outputs: expected results template("css_properties") { process_json5_files(target_name) { script = invoker.script in_files = [ "css/CSSProperties.json5" ] if (defined(invoker.in_files)) { in_files += invoker.in_files } other_inputs = css_properties_files if (defined(invoker.other_inputs)) { other_inputs += invoker.other_inputs } other_args = [ "--gperf", gperf_exe, ] outputs = invoker.outputs } } # Template to run the make_names script. This is a special case of # process_json5_files. # in_files: input files to pass to the script # output_dir: output directory # deps [optional]: # Dependencies. See process_json5_files for definition. template("make_names") { output_dir = invoker.output_dir outputs = process_file_template(invoker.in_files, [ "$output_dir/{{source_name_part}}.cc", "$output_dir/{{source_name_part}}.h", ]) process_json5_files(target_name) { script = "//third_party/WebKit/Source/build/scripts/make_names.py" other_inputs = make_names_files forward_variables_from(invoker, [ "deps", "in_files", "public_deps", "visibility", ]) } } # Template to run the make_qualified_names script. This is a special case of # process_json5_files. # in_files: list of input ".json5" files to process. # outputs: list of output files template("make_qualified_names") { process_json5_files(target_name) { script = "//third_party/WebKit/Source/build/scripts/make_qualified_names.py" in_files = invoker.in_files other_inputs = make_qualified_names_files outputs = invoker.outputs } } # Calls the make_event_factory script. This is a special case of # process_json5_files. # in_files: list of input ".json5" files to process. # outputs: list of output files # deps [optional] # Dependencies. See process_json5_files for definition. template("make_event_factory") { process_json5_files(target_name) { script = "//third_party/WebKit/Source/build/scripts/make_event_factory.py" other_inputs = make_event_factory_files forward_variables_from(invoker, [ "deps", "in_files", "outputs", "visibility", ]) } }