|  | # Copyright 2015 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. | 
|  |  | 
|  | 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", | 
|  | ] | 
|  | } | 
|  | } | 
|  | } |