summaryrefslogtreecommitdiffstats
path: root/build/toolchain/win/midl.gni
diff options
context:
space:
mode:
authorbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-17 20:33:53 +0000
committerbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-17 20:33:53 +0000
commitbf94f9d2d9c326d77fccaecf59b1179bafd3a596 (patch)
tree6e7b535eb6abd13556f5440c843163f80135fe5e /build/toolchain/win/midl.gni
parenta97b1372625f8e84c87b782289b0d8f158cd83ae (diff)
downloadchromium_src-bf94f9d2d9c326d77fccaecf59b1179bafd3a596.zip
chromium_src-bf94f9d2d9c326d77fccaecf59b1179bafd3a596.tar.gz
chromium_src-bf94f9d2d9c326d77fccaecf59b1179bafd3a596.tar.bz2
Add GN support for midl.
Implement iaccessible and isimpledom R=scottmg@chromium.org Review URL: https://codereview.chromium.org/330413002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@277855 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'build/toolchain/win/midl.gni')
-rw-r--r--build/toolchain/win/midl.gni94
1 files changed, 94 insertions, 0 deletions
diff --git a/build/toolchain/win/midl.gni b/build/toolchain/win/midl.gni
new file mode 100644
index 0000000..a8cf4ff
--- /dev/null
+++ b/build/toolchain/win/midl.gni
@@ -0,0 +1,94 @@
+# Copyright 2014 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 template defines a rule to invoke the MS IDL compiler.
+#
+# Parameters
+#
+# sources
+# List of .idl file to process.
+#
+# out_dir (optional)
+# Directory to write the generated files to. Defaults to target_gen_dir.
+#
+# visibility (optional)
+
+template("midl") {
+ action_name = "${target_name}_idl_action"
+ source_set_name = target_name
+
+ assert(defined(invoker.sources), "Source must be defined for $target_name")
+
+ if (defined(invoker.out_dir)) {
+ out_dir = invoker.out_dir
+ } else {
+ out_dir = target_gen_dir
+ }
+
+ header_file = "{{source_name_part}}.h"
+ dlldata_file = "{{source_name_part}}.dlldata.c"
+ interface_identifier_file = "{{source_name_part}}_i.c"
+ proxy_file = "{{source_name_part}}_p.c"
+ type_library_file = "{{source_name_part}}.tlb"
+
+ action_foreach(action_name) {
+ visibility = ":$source_set_name"
+
+ # This functionality is handled by the win-tool because the GYP build has
+ # MIDL support built-in.
+ # TODO(brettw) move this to a separate MIDL wrapper script for better
+ # clarity once GYP support is not needed.
+ script = "$root_build_dir/gyp-win-tool"
+
+ sources = invoker.sources
+
+ # Note that .tlb is not included in the outputs as it is not always
+ # generated depending on the content of the input idl file.
+ outputs = [
+ "$out_dir/$header_file",
+ "$out_dir/$dlldata_file",
+ "$out_dir/$interface_identifier_file",
+ "$out_dir/$proxy_file",
+ ]
+
+ if (cpu_arch == "x86") {
+ win_tool_arch = "environment.x86"
+ idl_target_platform = "win32"
+ } else if (cpu_arch == "x64") {
+ win_tool_arch = "environment.x64"
+ idl_target_platform = "x64"
+ } else {
+ assert(false, "Need environment for this arch")
+ }
+
+ args = [
+ "midl-wrapper", win_tool_arch,
+ rebase_path(out_dir, root_build_dir),
+ type_library_file,
+ header_file,
+ dlldata_file,
+ interface_identifier_file,
+ proxy_file,
+ "{{source}}",
+ "/char", "signed",
+ "/env", idl_target_platform,
+ "/Oicf",
+ ]
+ }
+
+ source_set(target_name) {
+ if (defined(invoker.visibility)) {
+ visibility = invoker.visibility
+ }
+
+ # We only compile the IID files from the IDL tool rather than all outputs.
+ sources = process_file_template(
+ invoker.sources,
+ [ "$out_dir/$interface_identifier_file" ])
+
+ deps = [ ":$action_name" ]
+ }
+}