Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(309)

Side by Side Diff: build/config/mac/base_rules.gni

Issue 2135323002: Add support for fat build to "ios_framework_bundle" target. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@fat-build-enable
Patch Set: multi_arch_toolchains -> additional_toolchains & mac build fix. Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright 2016 The Chromium Authors. All rights reserved. 1 # Copyright 2016 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 # This file contains rules that are shared between Mac and iOS. 5 # This file contains rules that are shared between Mac and iOS.
6 6
7 import("//build/toolchain/toolchain.gni") 7 import("//build/toolchain/toolchain.gni")
8 8
9 if (is_mac) { 9 if (is_mac) {
10 import("//build/config/mac/mac_sdk.gni") 10 import("//build/config/mac/mac_sdk.gni")
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 # 211 #
212 # See "gn help shared_library" for more information on arguments supported 212 # See "gn help shared_library" for more information on arguments supported
213 # by shared library target. 213 # by shared library target.
214 template("framework_bundle") { 214 template("framework_bundle") {
215 _target_name = target_name 215 _target_name = target_name
216 _output_name = target_name 216 _output_name = target_name
217 if (defined(invoker.output_name)) { 217 if (defined(invoker.output_name)) {
218 _output_name = invoker.output_name 218 _output_name = invoker.output_name
219 } 219 }
220 220
221 # If the framework is unversioned, the final _target_name will be the 221 _is_fat_build = is_ios && additional_toolchains != []
222 # create_bundle(_framework_target), otherwise an action with the name 222 if (_is_fat_build) {
223 # _target_name will depends on the the create_bundle() in order to prepare 223 _is_fat_build_main_target = current_toolchain == default_toolchain
224 # the versioned directory structure.
225 _framework_target = _target_name
226 _framework_name = _output_name + ".framework"
227 _framework_root_dir = "$root_out_dir/$_framework_name"
228 if (defined(invoker.framework_version) && invoker.framework_version != "") {
229 _framework_version = invoker.framework_version
230 _framework_root_dir += "/Versions/$_framework_version"
231 _framework_target = _target_name + "_create_bundle"
232 } 224 }
233 225
234 _shared_library_target = target_name + "_shared_library" 226 # The expansion of the template is different for fat and thin builds. For
235 _shared_library_bundle_data = _shared_library_target + "_bundle_data" 227 # thin build (and default toolchain of a fat build), the template expands
236 228 # to a "shared_library" target to create the bundle shared library and a
237 shared_library(_shared_library_target) { 229 # "create_bundle" target (the main target) to create the bundle structure.
238 visibility = [ ":$_shared_library_bundle_data" ] 230 #
239 forward_variables_from(invoker, 231 # For a fat build, the template just expands to the "shared_library" target
240 "*", 232 # for the non-default toolchain, while the final library is created using
241 [ 233 # "lipo" in the expansion of the template for the default toolchain.
242 "assert_no_deps", 234 #
243 "data_deps", 235 # The "$target_name+link" group for the non-default toolchain depends on the
244 "info_plist", 236 # target of the same name from the default toolchain as this is the target
245 "output_name", 237 # that defines the real framework bundle (it will support the current cpu
246 "visibility", 238 # as it is a fat framework).
247 ]) 239
248 output_name = _output_name 240 if (_is_fat_build && !_is_fat_build_main_target) {
249 output_prefix_override = true 241 shared_library(_target_name) {
250 output_extension = "" 242 forward_variables_from(invoker,
251 output_dir = "$target_out_dir/$_shared_library_target" 243 "*",
252 } 244 [
253 245 "assert_no_deps",
254 bundle_data(_shared_library_bundle_data) { 246 "data_deps",
255 visibility = [ ":$_framework_target" ] 247 "info_plist",
256 forward_variables_from(invoker, [ "testonly" ]) 248 "output_name",
257 sources = [ 249 ])
258 "$target_out_dir/$_shared_library_target/$_output_name", 250 if (defined(visibility)) {
259 ] 251 visibility += [ ":*($default_toolchain)" ]
Robert Sesek 2016/07/12 23:57:16 Why :* here? Can't this be limited to the _lipo_sh
sdefresne 2016/07/13 10:57:50 I cannot ignore the invoker visibility because thi
260 outputs = [ 252 }
261 "{{bundle_executable_dir}}/$_output_name", 253 output_name = _output_name
262 ] 254 output_prefix_override = true
263 public_deps = [ 255 output_extension = ""
264 ":$_shared_library_target", 256 output_dir = "$target_out_dir/$_target_name"
265 ] 257 }
266 } 258
267 259 group(_target_name + "+link") {
268 _framework_public_config = _target_name + "_public_config" 260 forward_variables_from(invoker,
269 config(_framework_public_config) { 261 [
270 # TODO(sdefresne): should we have a framework_dirs similar to lib_dirs 262 "visibility",
271 # and include_dirs to avoid duplicate values on the command-line. 263 "testonly",
272 visibility = [ ":$_framework_target" ] 264 ])
273 ldflags = [ "-F" + rebase_path("$root_out_dir/.", root_build_dir) ] 265 public_deps = [
274 lib_dirs = [ root_out_dir ] 266 ":$_target_name($default_toolchain)",
275 libs = [ _framework_name ] 267 ]
276 } 268 }
277 269 } else {
278 create_bundle(_framework_target) { 270 # If the framework is unversioned, the final _target_name will be the
279 forward_variables_from(invoker, 271 # create_bundle(_framework_target), otherwise an action with the name
280 [ 272 # _target_name will depends on the the create_bundle() in order to prepare
281 "data_deps", 273 # the versioned directory structure.
282 "deps", 274 _framework_target = _target_name
283 "public_deps", 275 _framework_name = _output_name + ".framework"
284 "testonly", 276 _framework_root_dir = "$root_out_dir/$_framework_name"
285 ]) 277 if (defined(invoker.framework_version) && invoker.framework_version != "") {
278 _framework_version = invoker.framework_version
279 _framework_root_dir += "/Versions/$_framework_version"
280 _framework_target = _target_name + "_create_bundle"
281 }
282
283 _link_shared_library_target = target_name + "_link_shared_library"
284 _shared_library_bundle_data = target_name + "_shared_library_bundle_data"
285 _link_shared_library_visibility = [ ":$_shared_library_bundle_data" ]
286
287 if (_is_fat_build) {
288 _lipo_shared_library_target = target_name + "_lipo_shared_library"
289 _lipo_shared_library_visibility = _link_shared_library_visibility
290
291 _link_shared_library_visibility = []
Robert Sesek 2016/07/12 23:57:16 Remove
sdefresne 2016/07/13 10:57:50 I can't as "gn" complain with the following error:
Robert Sesek 2016/07/13 20:27:54 Acknowledged.
292 _link_shared_library_visibility = [ ":$_lipo_shared_library_target" ]
293 }
294
295 shared_library(_link_shared_library_target) {
296 forward_variables_from(invoker,
297 "*",
298 [
299 "assert_no_deps",
300 "data_deps",
301 "info_plist",
302 "output_name",
303 "visibility",
304 ])
305 visibility = _link_shared_library_visibility
306 output_name = _output_name
307 output_prefix_override = true
308 output_extension = ""
309 output_dir = "$target_out_dir/$_link_shared_library_target"
310 }
311
312 if (_is_fat_build) {
313 action(_lipo_shared_library_target) {
314 forward_variables_from(invoker, [ "testonly" ])
315 visibility = _lipo_shared_library_visibility
316 script = "//build/config/mac/xcrun.py"
317 outputs = [
318 "$target_out_dir/$_lipo_shared_library_target/$_output_name",
319 ]
320 inputs = [
321 "$target_out_dir/$_link_shared_library_target/$_output_name",
322 ]
323 deps = [
324 ":$_link_shared_library_target",
325 ]
326 foreach(_additional_toolchain, additional_toolchains) {
327 _additional_toolchain_target = "$_target_name($_additional_toolchain)"
328 deps += [ ":$_additional_toolchain_target" ]
329 inputs += [ get_label_info(_additional_toolchain_target,
330 "target_out_dir") + "/$_output_name" ]
331 }
332 args = [
333 "lipo",
334 "-create",
335 "-output",
336 rebase_path(outputs[0], root_build_dir),
337 ] + rebase_path(inputs, root_build_dir)
338 }
339 }
340
341 bundle_data(_shared_library_bundle_data) {
342 visibility = [ ":$_framework_target" ]
343 forward_variables_from(invoker, [ "testonly" ])
344 outputs = [
345 "{{bundle_executable_dir}}/$_output_name",
346 ]
347 if (_is_fat_build) {
348 sources = [
349 "$target_out_dir/$_lipo_shared_library_target/$_output_name",
350 ]
351 public_deps = [
352 ":$_lipo_shared_library_target",
353 ]
354 } else {
355 sources = [
356 "$target_out_dir/$_link_shared_library_target/$_output_name",
357 ]
358 public_deps = [
359 ":$_link_shared_library_target",
360 ]
361 }
362 }
363
364 _framework_public_config = _target_name + "_public_config"
365 config(_framework_public_config) {
366 # TODO(sdefresne): should we have a framework_dirs similar to lib_dirs
367 # and include_dirs to avoid duplicate values on the command-line.
368 visibility = [ ":$_framework_target" ]
369 ldflags = [ "-F" + rebase_path("$root_out_dir/.", root_build_dir) ]
370 lib_dirs = [ root_out_dir ]
371 libs = [ _framework_name ]
372 }
373
374 create_bundle(_framework_target) {
375 forward_variables_from(invoker,
376 [
377 "data_deps",
378 "deps",
379 "public_deps",
380 "testonly",
381 ])
382
383 if (defined(_framework_version)) {
384 visibility = [ ":$_target_name" ]
385 } else {
386 if (defined(invoker.visibility)) {
387 visibility = invoker.visibility
388 visibility += [ ":$_target_name+link" ]
389 }
390 }
391
392 if (!defined(public_deps)) {
393 public_deps = []
394 }
395 public_deps += [ ":$_shared_library_bundle_data" ]
396
397 bundle_root_dir = _framework_root_dir
398 bundle_resources_dir = "$bundle_root_dir/Resources"
399 bundle_executable_dir = "$bundle_root_dir"
400 }
286 401
287 if (defined(_framework_version)) { 402 if (defined(_framework_version)) {
288 visibility = [ ":$_target_name" ] 403 action(_target_name) {
289 } else { 404 forward_variables_from(invoker, [ "testonly" ])
290 if (defined(invoker.visibility)) { 405
291 visibility = invoker.visibility 406 if (defined(invoker.visibility)) {
292 visibility += [ ":$_target_name+link" ] 407 visibility = invoker.visibility
293 } 408 visibility += [ ":$_target_name+link" ]
294 } 409 }
295 410
296 if (!defined(public_deps)) { 411 script = "//build/config/mac/package_framework.py"
297 public_deps = [] 412 outputs = [
298 } 413 "$root_out_dir/$_framework_name/Versions/Current",
299 public_deps += [ ":$_shared_library_bundle_data" ] 414 ]
300 415 args = [
301 bundle_root_dir = _framework_root_dir 416 "$_framework_name",
302 bundle_resources_dir = "$bundle_root_dir/Resources" 417 "$_framework_version",
303 bundle_executable_dir = "$bundle_root_dir" 418 ]
304 } 419 public_deps = [
305 420 ":$_framework_target",
306 if (defined(_framework_version)) { 421 ]
307 action(_target_name) { 422 }
308 forward_variables_from(invoker, [ "testonly" ]) 423 }
309 424
310 if (defined(invoker.visibility)) { 425 group(_target_name + "+link") {
311 visibility = invoker.visibility 426 forward_variables_from(invoker,
312 visibility += [ ":$_target_name+link" ] 427 [
313 } 428 "visibility",
314 429 "testonly",
315 script = "//build/config/mac/package_framework.py" 430 ])
316 outputs = [ 431 public_deps = [
317 "$root_out_dir/$_framework_name/Versions/Current", 432 ":$_target_name",
318 ] 433 ]
319 args = [ 434 public_configs = [ ":$_framework_public_config" ]
320 "$_framework_name", 435 }
321 "$_framework_version",
322 ]
323 public_deps = [
324 ":$_framework_target",
325 ]
326 }
327 }
328
329 group(_target_name + "+link") {
330 forward_variables_from(invoker,
331 [
332 "visibility",
333 "testonly",
334 ])
335 public_deps = [
336 ":$_target_name",
337 ]
338 public_configs = [ ":$_framework_public_config" ]
339 } 436 }
340 } 437 }
341 438
342 # Template to combile .xib or .storyboard files. 439 # Template to combile .xib or .storyboard files.
343 # 440 #
344 # Arguments 441 # Arguments
345 # 442 #
346 # sources: 443 # sources:
347 # list of string, sources to compile 444 # list of string, sources to compile
348 # 445 #
(...skipping 21 matching lines...) Expand all
370 ] 467 ]
371 args = 468 args =
372 [ 469 [
373 "--input", 470 "--input",
374 "{{source}}", 471 "{{source}}",
375 "--output", 472 "--output",
376 rebase_path("$target_gen_dir/$target_name/{{source_name_part}}.nib"), 473 rebase_path("$target_gen_dir/$target_name/{{source_name_part}}.nib"),
377 ] + ibtool_flags 474 ] + ibtool_flags
378 } 475 }
379 } 476 }
OLDNEW
« no previous file with comments | « build/config/ios/rules.gni ('k') | chrome/BUILD.gn » ('j') | chrome/BUILD.gn » ('J')

Powered by Google App Engine
This is Rietveld 408576698