| # Copyright 2015 The Chromium Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| assert(is_win, "This only runs on Windows.") |
| |
| # Runs mc.exe over a list of sources. The outputs (a header and rc file) are |
| # placed in the target gen dir, and compiled. |
| # |
| # sources |
| # List of message files to process. |
| # |
| # user_mode_logging (optional bool) |
| # Generates user-mode logging code. Defaults to false (no logging code). |
| # |
| # compile_generated_code (optional, deafults = true) |
| # If unset or true, the generated code will be compiled and linked into |
| # targets that depend on it. If set to false, the .h and .rc files will only |
| # be generated. |
| # |
| # deps, public_deps, visibility |
| # Normal meaning. |
| template("message_compiler") { |
| if (defined(invoker.compile_generated_code) && |
| !invoker.compile_generated_code) { |
| compile_generated_code = false |
| action_name = target_name |
| } else { |
| compile_generated_code = true |
| action_name = "${target_name}_mc" |
| source_set_name = target_name |
| } |
| |
| action_foreach(action_name) { |
| if (compile_generated_code) { |
| visibility = [ ":$source_set_name" ] |
| } else { |
| forward_variables_from(invoker, [ "visibility" ]) |
| } |
| |
| script = "//build/win/message_compiler.py" |
| |
| outputs = [ |
| "$target_gen_dir/{{source_name_part}}.h", |
| "$target_gen_dir/{{source_name_part}}.rc", |
| ] |
| |
| args = [ |
| # The first argument is the environment file saved to the build |
| # directory. This is required because the Windows toolchain setup saves |
| # the VC paths and such so that running "mc.exe" will work with the |
| # configured toolchain. This file is in the root build dir. |
| "environment.$current_cpu", |
| |
| # Where to put the header. |
| "-h", |
| rebase_path(target_gen_dir, root_build_dir), |
| |
| # Where to put the .rc file. |
| "-r", |
| rebase_path(target_gen_dir, root_build_dir), |
| |
| # Input is Unicode. |
| "-u", |
| ] |
| if (defined(invoker.user_mode_logging) && invoker.user_mode_logging) { |
| args += [ "-um" ] |
| } |
| args += [ "{{source}}" ] |
| |
| forward_variables_from(invoker, |
| [ |
| "deps", |
| "public_deps", |
| "sources", |
| ]) |
| } |
| |
| if (compile_generated_code) { |
| # Compile the generated rc file. |
| source_set(source_set_name) { |
| forward_variables_from(invoker, [ "visibility" ]) |
| sources = get_target_outputs(":$action_name") |
| deps = [ ":$action_name" ] |
| } |
| } |
| } |