# 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" ] } } }