OLD | NEW |
(Empty) | |
| 1 # Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. |
| 4 |
| 5 assert(is_win) |
| 6 |
| 7 import("//build/config/win/visual_studio_version.gni") |
| 8 |
| 9 # This template defines a rule to invoke the MS IDL compiler. The generated |
| 10 # source code will be compiled and linked into targets that depend on this. |
| 11 # |
| 12 # Parameters |
| 13 # |
| 14 # sources |
| 15 # List of .idl file to process. |
| 16 # |
| 17 # out_dir (optional) |
| 18 # Directory to write the generated files to. Defaults to target_gen_dir. |
| 19 # |
| 20 # deps (optional) |
| 21 # visibility (optional) |
| 22 |
| 23 template("midl") { |
| 24 action_name = "${target_name}_idl_action" |
| 25 source_set_name = target_name |
| 26 |
| 27 assert(defined(invoker.sources), "Source must be defined for $target_name") |
| 28 |
| 29 if (defined(invoker.out_dir)) { |
| 30 out_dir = invoker.out_dir |
| 31 } else { |
| 32 out_dir = target_gen_dir |
| 33 } |
| 34 |
| 35 header_file = "{{source_name_part}}.h" |
| 36 dlldata_file = "{{source_name_part}}.dlldata.c" |
| 37 interface_identifier_file = "{{source_name_part}}_i.c" |
| 38 proxy_file = "{{source_name_part}}_p.c" |
| 39 type_library_file = "{{source_name_part}}.tlb" |
| 40 |
| 41 action_foreach(action_name) { |
| 42 visibility = [ ":$source_set_name" ] |
| 43 |
| 44 # This functionality is handled by the win-tool because the GYP build has |
| 45 # MIDL support built-in. |
| 46 # TODO(brettw) move this to a separate MIDL wrapper script for better |
| 47 # clarity once GYP support is not needed. |
| 48 script = "$root_build_dir/gyp-win-tool" |
| 49 |
| 50 sources = invoker.sources |
| 51 |
| 52 # Note that .tlb is not included in the outputs as it is not always |
| 53 # generated depending on the content of the input idl file. |
| 54 outputs = [ |
| 55 "$out_dir/$header_file", |
| 56 "$out_dir/$dlldata_file", |
| 57 "$out_dir/$interface_identifier_file", |
| 58 "$out_dir/$proxy_file", |
| 59 ] |
| 60 |
| 61 if (current_cpu == "x86") { |
| 62 win_tool_arch = "environment.x86" |
| 63 idl_target_platform = "win32" |
| 64 } else if (current_cpu == "x64") { |
| 65 win_tool_arch = "environment.x64" |
| 66 idl_target_platform = "x64" |
| 67 } else { |
| 68 assert(false, "Need environment for this arch") |
| 69 } |
| 70 |
| 71 args = [ |
| 72 "midl-wrapper", |
| 73 win_tool_arch, |
| 74 rebase_path(out_dir, root_build_dir), |
| 75 type_library_file, |
| 76 header_file, |
| 77 dlldata_file, |
| 78 interface_identifier_file, |
| 79 proxy_file, |
| 80 "{{source}}", |
| 81 "/char", |
| 82 "signed", |
| 83 "/env", |
| 84 idl_target_platform, |
| 85 "/Oicf", |
| 86 ] |
| 87 |
| 88 forward_variables_from(invoker, [ "deps" ]) |
| 89 } |
| 90 |
| 91 source_set(target_name) { |
| 92 forward_variables_from(invoker, [ "visibility" ]) |
| 93 |
| 94 # We only compile the IID files from the IDL tool rather than all outputs. |
| 95 sources = process_file_template(invoker.sources, |
| 96 [ "$out_dir/$interface_identifier_file" ]) |
| 97 |
| 98 public_deps = [ |
| 99 ":$action_name", |
| 100 ] |
| 101 |
| 102 configs += [ "//build/config/win:midl_warnings" ] |
| 103 } |
| 104 } |
OLD | NEW |