1# Copyright 2020 The Chromium Authors 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5import("//build/config/ios/ios_sdk.gni") 6 7# Template to compile an .intentdefinition file. 8# 9# Arguments 10# 11# intent_file 12# path to .intentdefinition file that must be compiled 13# 14# intent_names 15# list of string corresponding to the intent defined in intent_file; 16# must include all the intents as only the intents listed will be 17# compiled 18# 19# developer_dir 20# (optional) path to developer_dir to use 21# 22template("intent_definition") { 23 assert(defined(invoker.intent_file) && invoker.intent_file != "", 24 "intent_file must be defined for $target_name") 25 26 assert(defined(invoker.intent_names) && invoker.intent_names != [], 27 "intent_names must be defined for $target_name") 28 29 assert(xcode_version_int >= 1140, 30 "intent_definition requires Xcode 11.4 or higher") 31 32 _compile_intent_target = "${target_name}_compile_intent" 33 _compile_intent_output = 34 "$target_gen_dir/" + get_path_info(invoker.intent_file, "file") 35 36 action(_compile_intent_target) { 37 script = "//build/apple/xcrun.py" 38 inputs = [ invoker.intent_file ] 39 outputs = [ _compile_intent_output ] 40 args = [ 41 "intentbuilderc", 42 "compile", 43 "-input", 44 rebase_path(invoker.intent_file, root_build_dir), 45 "-output", 46 rebase_path(target_gen_dir, root_build_dir), 47 ] 48 49 if (defined(invoker.developer_dir)) { 50 args += [ 51 "--developer-dir", 52 rebase_path(invoker.developer_dir, root_build_dir), 53 ] 54 } 55 } 56 57 _compile_intent_bundle = "${target_name}_compile_intent_bundle" 58 bundle_data(_compile_intent_bundle) { 59 sources = [ _compile_intent_output ] 60 outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ] 61 public_deps = [ ":$_compile_intent_target" ] 62 } 63 64 _generate_source_target = "${target_name}_generate_source" 65 _generate_source_output = [] 66 foreach(_intent, invoker.intent_names) { 67 _generate_source_output += [ 68 "$target_gen_dir/$_intent.h", 69 "$target_gen_dir/$_intent.m", 70 ] 71 } 72 73 action(_generate_source_target) { 74 script = "//build/apple/xcrun.py" 75 inputs = [ invoker.intent_file ] 76 outputs = _generate_source_output 77 args = [ 78 "intentbuilderc", 79 "generate", 80 "-input", 81 rebase_path(invoker.intent_file, root_build_dir), 82 "-output", 83 rebase_path(target_gen_dir, root_build_dir), 84 "-language", 85 "Objective-C", 86 ] 87 88 if (defined(invoker.developer_dir)) { 89 args += [ 90 "--developer-dir", 91 rebase_path(invoker.developer_dir, root_build_dir), 92 ] 93 } 94 } 95 96 source_set(target_name) { 97 forward_variables_from(invoker, 98 "*", 99 [ 100 "developer_dir", 101 "intent_file", 102 "intent_names", 103 "sources", 104 ]) 105 106 if (!defined(deps)) { 107 deps = [] 108 } 109 if (!defined(frameworks)) { 110 frameworks = [] 111 } 112 113 sources = _generate_source_output 114 deps += [ 115 ":$_compile_intent_bundle", 116 ":$_generate_source_target", 117 ] 118 frameworks += [ "Intents.framework" ] 119 } 120} 121