OLD | NEW |
1 # Copyright 2015 The Chromium Authors. All rights reserved. | 1 # Copyright 2015 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 # HOW MANIFESTS WORK IN THE GN BUILD | 5 # HOW MANIFESTS WORK IN THE GN BUILD |
6 # | 6 # |
7 # Use the windows_manifest template to declare a manifest generation step. | 7 # Use the windows_manifest template to declare a manifest generation step. |
8 # This will combine all listed .manifest files and generate a resource file | 8 # This will combine all listed .manifest files and generate a resource file |
9 # referencing the resulting manifest. To link this manifest, just depend on | 9 # referencing the resulting manifest. To link this manifest, just depend on |
10 # the manifest target from your executable or shared library. | 10 # the manifest target from your executable or shared library. |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
70 # ] | 70 # ] |
71 # type = "exe" | 71 # type = "exe" |
72 # } | 72 # } |
73 # | 73 # |
74 # executable("doom_melon") { | 74 # executable("doom_melon") { |
75 # deps = [ ":doom_melon_manifest" ] | 75 # deps = [ ":doom_melon_manifest" ] |
76 # ... | 76 # ... |
77 # } | 77 # } |
78 | 78 |
79 if (is_win) { | 79 if (is_win) { |
80 # This is the environment file that gyp-win-tool will use for the current | 80 # This is the environment file that tool_wrapper.py will use for the current |
81 # toolchain. It is placed in root_build_dir by the toolchain setup. This | 81 # toolchain. It is placed in root_build_dir by the toolchain setup. This |
82 # variable is the path relative to the root_build_dir which is what | 82 # variable is the path relative to the root_build_dir which is what |
83 # gyp-win-tool expects as an argument. | 83 # tool_wrapper.py expects as an argument. |
84 _environment_file = "environment.$current_cpu" | 84 _environment_file = "environment.$current_cpu" |
85 | 85 |
86 template("windows_manifest") { | 86 template("windows_manifest") { |
87 manifest_action_name = "${target_name}__gen_manifest" | 87 manifest_action_name = "${target_name}__gen_manifest" |
88 rc_action_name = "${target_name}__gen_rc" | 88 rc_action_name = "${target_name}__gen_rc" |
89 source_set_name = target_name | 89 source_set_name = target_name |
90 | 90 |
91 output_manifest = "$target_gen_dir/$source_set_name.manifest" | 91 output_manifest = "$target_gen_dir/$source_set_name.manifest" |
92 rcfile = "$output_manifest.rc" | 92 rcfile = "$output_manifest.rc" |
93 | 93 |
94 # Make the final .manifest file. | 94 # Make the final .manifest file. |
95 action(manifest_action_name) { | 95 action(manifest_action_name) { |
96 visibility = [ | 96 visibility = [ |
97 ":$source_set_name", | 97 ":$source_set_name", |
98 ":$rc_action_name", | 98 ":$rc_action_name", |
99 ] | 99 ] |
100 | 100 |
101 script = "$root_build_dir/gyp-win-tool" | 101 script = "//build/toolchain/win/tool_wrapper.py" |
102 | 102 |
103 assert(defined(invoker.sources), | 103 assert(defined(invoker.sources), |
104 "\"sources\" must be defined for a windows_manifest target") | 104 "\"sources\" must be defined for a windows_manifest target") |
105 inputs = invoker.sources | 105 inputs = invoker.sources |
106 | 106 |
107 outputs = [ | 107 outputs = [ |
108 output_manifest, | 108 output_manifest, |
109 ] | 109 ] |
110 | 110 |
111 args = [ | 111 args = [ |
112 "manifest-wrapper", | 112 "manifest-wrapper", |
113 _environment_file, | 113 _environment_file, |
114 "mt.exe", | 114 "mt.exe", |
115 "-nologo", | 115 "-nologo", |
116 "-manifest", | 116 "-manifest", |
117 ] | 117 ] |
118 args += rebase_path(invoker.sources, root_build_dir) | 118 args += rebase_path(invoker.sources, root_build_dir) |
119 args += [ "-out:" + rebase_path(output_manifest, root_build_dir) ] | 119 args += [ "-out:" + rebase_path(output_manifest, root_build_dir) ] |
120 | 120 |
121 # Apply any dependencies from the invoker to this target, since those | 121 # Apply any dependencies from the invoker to this target, since those |
122 # dependencies may have created the input manifest files. | 122 # dependencies may have created the input manifest files. |
123 forward_variables_from(invoker, [ "deps" ]) | 123 forward_variables_from(invoker, [ "deps" ]) |
124 } | 124 } |
125 | 125 |
126 # Make the .rc file that references the final manifest file. | 126 # Make the .rc file that references the final manifest file. |
127 # | 127 # |
128 # This could easily be combined into one step, but this current separation | 128 # This could easily be combined into one step, but this current separation |
129 # of .manifest and .rc matches GYP and allows us to re-use gyp-win-tool. | 129 # of .manifest and .rc matches GYP and allows us to re-use tool_wrapper.py. |
130 action(rc_action_name) { | 130 action(rc_action_name) { |
131 visibility = [ ":$source_set_name" ] | 131 visibility = [ ":$source_set_name" ] |
132 | 132 |
133 script = "$root_build_dir/gyp-win-tool" | 133 script = "//build/toolchain/win/tool_wrapper.py" |
134 | 134 |
135 outputs = [ | 135 outputs = [ |
136 rcfile, | 136 rcfile, |
137 ] | 137 ] |
138 | 138 |
139 # EXEs have a resource ID of 1 for their manifest, DLLs use 2. | 139 # EXEs have a resource ID of 1 for their manifest, DLLs use 2. |
140 assert(defined(invoker.type), | 140 assert(defined(invoker.type), |
141 "\"type\" must be defined for a windows_manifest") | 141 "\"type\" must be defined for a windows_manifest") |
142 if (invoker.type == "exe") { | 142 if (invoker.type == "exe") { |
143 manifest_resource_id = "1" | 143 manifest_resource_id = "1" |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
182 template("windows_manifest") { | 182 template("windows_manifest") { |
183 group(target_name) { | 183 group(target_name) { |
184 # Prevent unused variable warnings on non-Windows platforms. | 184 # Prevent unused variable warnings on non-Windows platforms. |
185 assert(invoker.type == "exe" || invoker.type == "dll") | 185 assert(invoker.type == "exe" || invoker.type == "dll") |
186 assert(invoker.sources != "") | 186 assert(invoker.sources != "") |
187 assert(!defined(invoker.deps) || invoker.deps != "") | 187 assert(!defined(invoker.deps) || invoker.deps != "") |
188 assert(!defined(invoker.visibility) || invoker.visibility != "") | 188 assert(!defined(invoker.visibility) || invoker.visibility != "") |
189 } | 189 } |
190 } | 190 } |
191 } | 191 } |
OLD | NEW |