1*6777b538SAndroid Build Coastguard Worker# Copyright 2015 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Workerassert(is_win, "This only runs on Windows.") 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker# Runs mc.exe over a list of sources. The outputs (a header and rc file) are 8*6777b538SAndroid Build Coastguard Worker# placed in the target gen dir, and compiled. 9*6777b538SAndroid Build Coastguard Worker# 10*6777b538SAndroid Build Coastguard Worker# sources 11*6777b538SAndroid Build Coastguard Worker# List of message files to process. 12*6777b538SAndroid Build Coastguard Worker# 13*6777b538SAndroid Build Coastguard Worker# user_mode_logging (optional bool) 14*6777b538SAndroid Build Coastguard Worker# Generates user-mode logging code. Defaults to false (no logging code). 15*6777b538SAndroid Build Coastguard Worker# 16*6777b538SAndroid Build Coastguard Worker# compile_generated_code (optional, deafults = true) 17*6777b538SAndroid Build Coastguard Worker# If unset or true, the generated code will be compiled and linked into 18*6777b538SAndroid Build Coastguard Worker# targets that depend on it. If set to false, the .h and .rc files will only 19*6777b538SAndroid Build Coastguard Worker# be generated. 20*6777b538SAndroid Build Coastguard Worker# 21*6777b538SAndroid Build Coastguard Worker# deps, public_deps, visibility 22*6777b538SAndroid Build Coastguard Worker# Normal meaning. 23*6777b538SAndroid Build Coastguard Workertemplate("message_compiler") { 24*6777b538SAndroid Build Coastguard Worker if (defined(invoker.compile_generated_code) && 25*6777b538SAndroid Build Coastguard Worker !invoker.compile_generated_code) { 26*6777b538SAndroid Build Coastguard Worker compile_generated_code = false 27*6777b538SAndroid Build Coastguard Worker action_name = target_name 28*6777b538SAndroid Build Coastguard Worker } else { 29*6777b538SAndroid Build Coastguard Worker compile_generated_code = true 30*6777b538SAndroid Build Coastguard Worker action_name = "${target_name}_mc" 31*6777b538SAndroid Build Coastguard Worker source_set_name = target_name 32*6777b538SAndroid Build Coastguard Worker } 33*6777b538SAndroid Build Coastguard Worker 34*6777b538SAndroid Build Coastguard Worker action_foreach(action_name) { 35*6777b538SAndroid Build Coastguard Worker if (compile_generated_code) { 36*6777b538SAndroid Build Coastguard Worker visibility = [ ":$source_set_name" ] 37*6777b538SAndroid Build Coastguard Worker } else { 38*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, [ "visibility" ]) 39*6777b538SAndroid Build Coastguard Worker } 40*6777b538SAndroid Build Coastguard Worker 41*6777b538SAndroid Build Coastguard Worker script = "//build/win/message_compiler.py" 42*6777b538SAndroid Build Coastguard Worker 43*6777b538SAndroid Build Coastguard Worker outputs = [ 44*6777b538SAndroid Build Coastguard Worker "$target_gen_dir/{{source_name_part}}.h", 45*6777b538SAndroid Build Coastguard Worker "$target_gen_dir/{{source_name_part}}.rc", 46*6777b538SAndroid Build Coastguard Worker ] 47*6777b538SAndroid Build Coastguard Worker 48*6777b538SAndroid Build Coastguard Worker args = [ 49*6777b538SAndroid Build Coastguard Worker # The first argument is the environment file saved to the build 50*6777b538SAndroid Build Coastguard Worker # directory. This is required because the Windows toolchain setup saves 51*6777b538SAndroid Build Coastguard Worker # the VC paths and such so that running "mc.exe" will work with the 52*6777b538SAndroid Build Coastguard Worker # configured toolchain. This file is in the root build dir. 53*6777b538SAndroid Build Coastguard Worker "environment.$current_cpu", 54*6777b538SAndroid Build Coastguard Worker 55*6777b538SAndroid Build Coastguard Worker # Where to put the header. 56*6777b538SAndroid Build Coastguard Worker "-h", 57*6777b538SAndroid Build Coastguard Worker rebase_path(target_gen_dir, root_build_dir), 58*6777b538SAndroid Build Coastguard Worker 59*6777b538SAndroid Build Coastguard Worker # Where to put the .rc file. 60*6777b538SAndroid Build Coastguard Worker "-r", 61*6777b538SAndroid Build Coastguard Worker rebase_path(target_gen_dir, root_build_dir), 62*6777b538SAndroid Build Coastguard Worker 63*6777b538SAndroid Build Coastguard Worker # Input is Unicode. 64*6777b538SAndroid Build Coastguard Worker "-u", 65*6777b538SAndroid Build Coastguard Worker ] 66*6777b538SAndroid Build Coastguard Worker if (defined(invoker.user_mode_logging) && invoker.user_mode_logging) { 67*6777b538SAndroid Build Coastguard Worker args += [ "-um" ] 68*6777b538SAndroid Build Coastguard Worker } 69*6777b538SAndroid Build Coastguard Worker args += [ "{{source}}" ] 70*6777b538SAndroid Build Coastguard Worker 71*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 72*6777b538SAndroid Build Coastguard Worker [ 73*6777b538SAndroid Build Coastguard Worker "deps", 74*6777b538SAndroid Build Coastguard Worker "public_deps", 75*6777b538SAndroid Build Coastguard Worker "sources", 76*6777b538SAndroid Build Coastguard Worker ]) 77*6777b538SAndroid Build Coastguard Worker } 78*6777b538SAndroid Build Coastguard Worker 79*6777b538SAndroid Build Coastguard Worker if (compile_generated_code) { 80*6777b538SAndroid Build Coastguard Worker # Compile the generated rc file. 81*6777b538SAndroid Build Coastguard Worker source_set(source_set_name) { 82*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, [ "visibility" ]) 83*6777b538SAndroid Build Coastguard Worker sources = get_target_outputs(":$action_name") 84*6777b538SAndroid Build Coastguard Worker deps = [ ":$action_name" ] 85*6777b538SAndroid Build Coastguard Worker } 86*6777b538SAndroid Build Coastguard Worker } 87*6777b538SAndroid Build Coastguard Worker} 88