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 import("//build/config/ios/ios_sdk.gni") | 5 import("//build/config/ios/ios_sdk.gni") |
6 import("//build/config/mac/base_rules.gni") | 6 import("//build/config/mac/base_rules.gni") |
7 import("//build/config/mac/symbols.gni") | 7 import("//build/config/mac/symbols.gni") |
8 | 8 |
| 9 _toolchain_suffix = "" |
| 10 _is_fat_build = additional_toolchains != [] |
| 11 if (_is_fat_build) { |
| 12 _toolchain_suffix = "($default_toolchain)" |
| 13 _is_fat_build_main_target = current_toolchain == default_toolchain |
| 14 } |
| 15 |
9 # Generates Info.plist files for Mac apps and frameworks. | 16 # Generates Info.plist files for Mac apps and frameworks. |
10 # | 17 # |
11 # Arguments | 18 # Arguments |
12 # | 19 # |
13 # info_plist: | 20 # info_plist: |
14 # (optional) string, path to the Info.plist file that will be used for | 21 # (optional) string, path to the Info.plist file that will be used for |
15 # the bundle. | 22 # the bundle. |
16 # | 23 # |
17 # info_plist_target: | 24 # info_plist_target: |
18 # (optional) string, if the info_plist is generated from an action, | 25 # (optional) string, if the info_plist is generated from an action, |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
139 # | 146 # |
140 # The target for the default toolchain of a multi-architecture build will | 147 # The target for the default toolchain of a multi-architecture build will |
141 # build the executable for current_cpu in a temporary location. The real | 148 # build the executable for current_cpu in a temporary location. The real |
142 # fat binary will be created by "lipo" command from all those "executable" | 149 # fat binary will be created by "lipo" command from all those "executable" |
143 # target (including those of the non-default toolchains). This additional | 150 # target (including those of the non-default toolchains). This additional |
144 # target has the same role as the "executable" target of a thin build. | 151 # target has the same role as the "executable" target of a thin build. |
145 # | 152 # |
146 # The rest of the build, including the codesigning step, are the same for | 153 # The rest of the build, including the codesigning step, are the same for |
147 # thin and fat builds. | 154 # thin and fat builds. |
148 | 155 |
149 _is_fat_build = additional_toolchains != [] | |
150 if (_is_fat_build) { | |
151 _is_fat_build_main_target = current_toolchain == default_toolchain | |
152 } | |
153 | |
154 _executable_extra_deps = [] | 156 _executable_extra_deps = [] |
155 _executable_extra_inputs = [] | 157 _executable_extra_inputs = [] |
156 _executable_extra_ldflags = [] | 158 _executable_extra_ldflags = [] |
157 | 159 |
158 # Embeds the entitlements file if building for simulator. This is optional | 160 # Embeds the entitlements file if building for simulator. This is optional |
159 # with Xcode 7 or older but required with Xcode 8. This is not necessary for | 161 # with Xcode 7 or older but required with Xcode 8. This is not necessary for |
160 # device build as the entitlement is embedded via the codesigning step. | 162 # device build as the entitlement is embedded via the codesigning step. |
161 # | 163 # |
162 # As the generation of the entitlement depends on the | 164 # As the generation of the entitlement depends on the |
163 if (use_ios_simulator) { | 165 if (use_ios_simulator) { |
164 _toolchain_suffix = "" | |
165 if (_is_fat_build && !_is_fat_build_main_target) { | |
166 _toolchain_suffix = "($default_toolchain)" | |
167 } | |
168 | |
169 _generate_entitlements_target = _target_name + "_gen_entitlements" | 166 _generate_entitlements_target = _target_name + "_gen_entitlements" |
170 _generate_entitlements_target_with_toolchain_suffix = | 167 _generate_entitlements_target_with_toolchain_suffix = |
171 "$_generate_entitlements_target$_toolchain_suffix" | 168 "$_generate_entitlements_target$_toolchain_suffix" |
172 | 169 |
173 _generate_entitlements_output = | 170 _generate_entitlements_output = |
174 get_label_info(_generate_entitlements_target_with_toolchain_suffix, | 171 get_label_info(_generate_entitlements_target_with_toolchain_suffix, |
175 "target_gen_dir") + "/$_output_name.xcent" | 172 "target_gen_dir") + "/$_output_name.xcent" |
176 | 173 |
177 _executable_extra_inputs += [ _generate_entitlements_output ] | 174 _executable_extra_inputs += [ _generate_entitlements_output ] |
178 _executable_extra_deps += | 175 _executable_extra_deps += |
(...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
756 sources = get_target_outputs(":$_convert_target") | 753 sources = get_target_outputs(":$_convert_target") |
757 | 754 |
758 outputs = [ | 755 outputs = [ |
759 invoker.output, | 756 invoker.output, |
760 ] | 757 ] |
761 } | 758 } |
762 } | 759 } |
763 | 760 |
764 # Template to package a shared library into an iOS framework bundle. | 761 # Template to package a shared library into an iOS framework bundle. |
765 # | 762 # |
766 # This template provides two targets to control whether the framework is | 763 # By default, the bundle target this template generates does not link the |
767 # merely built when targets depend on it, or whether it is linked as well: | 764 # resulting framework into anything that depends on it. If a dependency wants |
768 # "$target_name" and "$target_name+link". | 765 # a link-time (as well as build-time) dependency on the framework bundle, |
769 # | 766 # depend against "$target_name+link". If only the build-time dependency is |
770 # See the //build/config/mac/base_rules.gni:framework_bundle for a discussion | 767 # required (e.g., for copying into another bundle), then use "$target_name". |
771 # and examples. | |
772 # | 768 # |
773 # Arguments | 769 # Arguments |
774 # | 770 # |
775 # output_name: | 771 # output_name: |
776 # (optional) string, name of the generated framework without the | 772 # (optional) string, name of the generated framework without the |
777 # .framework suffix. If omitted, defaults to target_name. | 773 # .framework suffix. If omitted, defaults to target_name. |
778 # | 774 # |
779 # framework_version: | 775 # framework_version: |
780 # (optional) string, version of the framework. Typically this is a | 776 # (optional) string, version of the framework. Typically this is a |
781 # single letter, like "A". If omitted, the Versions/ subdirectory | 777 # single letter, like "A". If omitted, the Versions/ subdirectory |
782 # structure will not be created, and build output will go directly | 778 # structure will not be created, and build output will go directly |
783 # into the framework subdirectory. | 779 # into the framework subdirectory. |
784 # | 780 # |
785 # public_headers: | 781 # public_headers: |
786 # (optional) list of paths to header file that needs to be copied | 782 # (optional) list of paths to header file that needs to be copied |
787 # into the framework bundle Headers subdirectory. If omitted or | 783 # into the framework bundle Headers subdirectory. If omitted or |
788 # empty then the Headers subdirectory is not created. | 784 # empty then the Headers subdirectory is not created. |
789 # | 785 # |
790 # sources | 786 # sources |
791 # (optional) list of files. Needs to be defined and non-empty if | 787 # (optional) list of files. Needs to be defined and non-empty if |
792 # public_headers is defined and non-empty. | 788 # public_headers is defined and non-empty. |
793 # | 789 # |
| 790 # This template provides two targets for the resulting framework bundle. The |
| 791 # link-time behavior varies depending on which of the two targets below is |
| 792 # added as a dependency: |
| 793 # - $target_name only adds a build-time dependency. Targets that depend on |
| 794 # it will not link against the framework. |
| 795 # - $target_name+link adds a build-time and link-time dependency. Targets |
| 796 # that depend on it will link against the framework. |
| 797 # |
| 798 # The build-time-only dependency is used for when a target needs to use the |
| 799 # framework either only for resources, or because the target loads it at run- |
| 800 # time, via dlopen() or NSBundle. The link-time dependency will cause the |
| 801 # dependee to have the framework loaded by dyld at launch. |
| 802 # |
| 803 # Example of build-time only dependency: |
| 804 # |
| 805 # framework_bundle("CoreTeleportation") { |
| 806 # sources = [ ... ] |
| 807 # } |
| 808 # |
| 809 # bundle_data("core_teleportation_bundle_data") { |
| 810 # deps = [ ":CoreTeleportation" ] |
| 811 # sources = [ "$root_out_dir/CoreTeleportation.framework" ] |
| 812 # outputs = [ "{{bundle_root_dir}}/Frameworks/{{source_file_part}}" ] |
| 813 # } |
| 814 # |
| 815 # app_bundle("GoatTeleporter") { |
| 816 # sources = [ ... ] |
| 817 # deps = [ |
| 818 # ":core_teleportation_bundle_data", |
| 819 # ] |
| 820 # } |
| 821 # |
| 822 # The GoatTeleporter.app will not directly link against |
| 823 # CoreTeleportation.framework, but it will be included in the bundle's |
| 824 # Frameworks directory. |
| 825 # |
| 826 # Example of link-time dependency: |
| 827 # |
| 828 # framework_bundle("CoreTeleportation") { |
| 829 # sources = [ ... ] |
| 830 # ldflags = [ |
| 831 # "-install_name", |
| 832 # "@executable_path/../Frameworks/$target_name.framework" |
| 833 # ] |
| 834 # } |
| 835 # |
| 836 # bundle_data("core_teleportation_bundle_data") { |
| 837 # deps = [ ":CoreTeleportation+link" ] |
| 838 # sources = [ "$root_out_dir/CoreTeleportation.framework" ] |
| 839 # outputs = [ "{{bundle_root_dir}}/Frameworks/{{source_file_part}}" ] |
| 840 # } |
| 841 # |
| 842 # app_bundle("GoatTeleporter") { |
| 843 # sources = [ ... ] |
| 844 # deps = [ |
| 845 # ":core_teleportation_bundle_data", |
| 846 # ] |
| 847 # } |
| 848 # |
| 849 # Note that the framework is still copied to the app's bundle, but dyld will |
| 850 # load this library when the app is launched because it uses the "+link" |
| 851 # target as a dependency. This also requires that the framework set its |
| 852 # install_name so that dyld can locate it. |
| 853 # |
794 # See "gn help shared_library" for more information on arguments supported | 854 # See "gn help shared_library" for more information on arguments supported |
795 # by shared library target. | 855 # by shared library target. |
796 template("ios_framework_bundle") { | 856 template("ios_framework_bundle") { |
797 _target_name = target_name | 857 _target_name = target_name |
798 _output_name = target_name | 858 _output_name = target_name |
799 if (defined(invoker.output_name)) { | 859 if (defined(invoker.output_name)) { |
800 _output_name = invoker.output_name | 860 _output_name = invoker.output_name |
801 } | 861 } |
802 _framework_target = _target_name | |
803 | 862 |
804 _has_public_headers = | 863 _has_public_headers = |
805 defined(invoker.public_headers) && invoker.public_headers != [] | 864 defined(invoker.public_headers) && invoker.public_headers != [] |
806 | 865 |
807 _is_fat_build = additional_toolchains != [] | 866 if (_has_public_headers) { |
808 if (_is_fat_build) { | 867 _framework_headers_target = _target_name + "_framework_headers" |
809 _is_fat_build_main_target = current_toolchain == default_toolchain | 868 _framework_headers_config = _target_name + "_framework_headers_config" |
| 869 _headers_map_config = _target_name + "_headers_map" |
810 } | 870 } |
811 | 871 |
812 # This template has a different expansion depending on whether public headers | 872 # The expansion of the template is different for fat and thin builds. For |
813 # are defined or not. If no public headers are speficied, then is forwards to | 873 # thin build (and default toolchain of a fat build), the template expands |
814 # the generic "framework_bundle" target, otherwise if expands to targets that | 874 # to a "shared_library" target to create the bundle shared library and a |
815 # create header map mapping and corresponding config and configure them as | 875 # "create_bundle" target (the main target) to create the bundle structure. |
816 # dependencies of the generic "framework_bundle" target. | |
817 # | 876 # |
818 # The expansion is a bit different for multi-architecture builds (aka fat | 877 # For a fat build, the template just expands to the "shared_library" target |
819 # binary builds). Then the targets build for the non-default toolchain uses | 878 # for the non-default toolchain, while the final library is created using |
820 # the same header map (if available) as the one used by the default toolchain. | 879 # "lipo" in the expansion of the template for the default toolchain. |
| 880 # |
| 881 # The "$target_name+link" group for the non-default toolchain depends on the |
| 882 # target of the same name from the default toolchain as this is the target |
| 883 # that defines the real framework bundle (it will support the current cpu |
| 884 # as it is a fat framework). |
821 | 885 |
822 _toolchain_suffix = "" | |
823 if (_is_fat_build && !_is_fat_build_main_target) { | 886 if (_is_fat_build && !_is_fat_build_main_target) { |
824 _toolchain_suffix = "($default_toolchain)" | 887 shared_library(_target_name) { |
825 } | 888 forward_variables_from(invoker, |
| 889 "*", |
| 890 [ |
| 891 "assert_no_deps", |
| 892 "bundle_deps", |
| 893 "code_signing_enabled", |
| 894 "data_deps", |
| 895 "info_plist", |
| 896 "info_plist_target", |
| 897 "output_name", |
| 898 ]) |
| 899 if (defined(visibility)) { |
| 900 visibility += [ ":${_target_name}_shared_library($default_toolchain)" ] |
| 901 } |
| 902 output_name = _output_name |
| 903 output_prefix_override = true |
| 904 output_extension = "" |
| 905 output_dir = "$target_out_dir/$_target_name" |
826 | 906 |
827 if (_has_public_headers) { | 907 if (_has_public_headers) { |
828 _framework_headers_target = _target_name + "_framework_headers" | 908 configs += [ |
829 _framework_public_config = _target_name + "_ios_public_config" | 909 ":$_framework_headers_config$_toolchain_suffix", |
830 _framework_target = target_name + "_internal" | 910 ":$_headers_map_config$_toolchain_suffix", |
831 _headers_map_config = _target_name + "_headers_map" | 911 ] |
832 | 912 |
833 if (!_is_fat_build || _is_fat_build_main_target) { | 913 if (!defined(deps)) { |
| 914 deps = [] |
| 915 } |
| 916 deps += [ ":$_framework_headers_target$_toolchain_suffix" ] |
| 917 } |
| 918 } |
| 919 |
| 920 group(_target_name + "+link") { |
| 921 forward_variables_from(invoker, |
| 922 [ |
| 923 "visibility", |
| 924 "testonly", |
| 925 ]) |
| 926 public_deps = [ |
| 927 ":$_target_name+link($default_toolchain)", |
| 928 ] |
| 929 } |
| 930 |
| 931 if (defined(invoker.bundle_deps)) { |
| 932 assert(invoker.bundle_deps != [], "mark bundle_deps as used") |
| 933 } |
| 934 } else { |
| 935 if (_has_public_headers) { |
834 _public_headers = invoker.public_headers | 936 _public_headers = invoker.public_headers |
835 _framework_name = _output_name + ".framework" | 937 _framework_name = _output_name + ".framework" |
836 _framework_root = "$root_out_dir/$_framework_name" | 938 _framework_root = "$root_out_dir/$_framework_name" |
837 | 939 |
838 _header_map_filename = "$target_gen_dir/$_output_name.headers.hmap" | 940 _header_map_filename = "$target_gen_dir/$_output_name.headers.hmap" |
839 | 941 |
840 _compile_headers_map_target = _target_name + "_compile_headers_map" | 942 _compile_headers_map_target = _target_name + "_compile_headers_map" |
841 action(_compile_headers_map_target) { | 943 action(_compile_headers_map_target) { |
842 visibility = [ ":$_framework_headers_target" ] | 944 visibility = [ ":$_framework_headers_target" ] |
843 script = "//build/config/ios/write_framework_hmap.py" | 945 script = "//build/config/ios/write_framework_hmap.py" |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
894 } | 996 } |
895 | 997 |
896 group(_framework_headers_target) { | 998 group(_framework_headers_target) { |
897 deps = [ | 999 deps = [ |
898 ":$_compile_headers_map_target", | 1000 ":$_compile_headers_map_target", |
899 ":$_copy_public_headers_target", | 1001 ":$_copy_public_headers_target", |
900 ":$_create_module_map_target", | 1002 ":$_create_module_map_target", |
901 ] | 1003 ] |
902 } | 1004 } |
903 | 1005 |
904 config(_framework_public_config) { | 1006 config(_framework_headers_config) { |
905 # The link settings are inherited from the framework_bundle config. | 1007 # The link settings are inherited from the framework_bundle config. |
906 cflags = [ | 1008 cflags = [ |
907 "-F", | 1009 "-F", |
908 rebase_path("$root_out_dir/.", root_build_dir), | 1010 rebase_path("$root_out_dir/.", root_build_dir), |
909 ] | 1011 ] |
910 } | 1012 } |
911 } | 1013 } |
912 } | |
913 | 1014 |
914 if (!_is_fat_build || _is_fat_build_main_target) { | 1015 _code_signing_enabled = ios_enable_code_signing |
| 1016 if (defined(invoker.code_signing_enabled)) { |
| 1017 _code_signing_enabled = |
| 1018 invoker.code_signing_enabled && _code_signing_enabled |
| 1019 } |
| 1020 |
| 1021 # If the framework is unversioned, the final _target_name will be the |
| 1022 # create_bundle(_framework_target), otherwise an action with the name |
| 1023 # _target_name will depends on the the create_bundle() in order to prepare |
| 1024 # the versioned directory structure. |
| 1025 _framework_target = _target_name |
| 1026 _framework_name = _output_name + ".framework" |
| 1027 _framework_root_dir = "$root_out_dir/$_framework_name" |
| 1028 if (defined(invoker.framework_version) && invoker.framework_version != "") { |
| 1029 _framework_version = invoker.framework_version |
| 1030 _framework_root_dir += "/Versions/$_framework_version" |
| 1031 _framework_target = _target_name + "_create_bundle" |
| 1032 } |
| 1033 |
| 1034 _link_shared_library_target = target_name + "_shared_library" |
| 1035 _shared_library_dir = "$target_out_dir/$_link_shared_library_target" |
| 1036 |
| 1037 if (_code_signing_enabled) { |
| 1038 _link_shared_library_visibility = [ ":$_framework_target" ] |
| 1039 } else { |
| 1040 _shared_library_bundle_data = target_name + "_shared_library_bundle_data" |
| 1041 _link_shared_library_visibility = [ ":$_shared_library_bundle_data" ] |
| 1042 } |
| 1043 |
| 1044 if (_is_fat_build) { |
| 1045 _lipo_shared_library_target = _link_shared_library_target |
| 1046 _lipo_shared_library_visibility = _link_shared_library_visibility |
| 1047 |
| 1048 _link_shared_library_visibility = [] |
| 1049 _link_shared_library_visibility = [ ":$_lipo_shared_library_target" ] |
| 1050 _link_shared_library_target = target_name + "_arch_shared_library" |
| 1051 |
| 1052 _arch_shared_library_dir = "$target_out_dir/$_link_shared_library_target" |
| 1053 _shared_library_dir = "$target_out_dir/$_lipo_shared_library_target" |
| 1054 } |
| 1055 |
| 1056 shared_library(_link_shared_library_target) { |
| 1057 forward_variables_from(invoker, |
| 1058 "*", |
| 1059 [ |
| 1060 "assert_no_deps", |
| 1061 "bundle_deps", |
| 1062 "code_signing_enabled", |
| 1063 "data_deps", |
| 1064 "info_plist", |
| 1065 "info_plist_target", |
| 1066 "output_name", |
| 1067 "visibility", |
| 1068 ]) |
| 1069 visibility = _link_shared_library_visibility |
| 1070 output_name = _output_name |
| 1071 output_prefix_override = true |
| 1072 output_extension = "" |
| 1073 |
| 1074 if (!_is_fat_build) { |
| 1075 output_dir = _shared_library_dir |
| 1076 } else { |
| 1077 output_dir = _arch_shared_library_dir |
| 1078 } |
| 1079 |
| 1080 if (_has_public_headers) { |
| 1081 configs += [ ":$_headers_map_config$_toolchain_suffix" ] |
| 1082 |
| 1083 if (!defined(deps)) { |
| 1084 deps = [] |
| 1085 } |
| 1086 deps += [ ":$_framework_headers_target$_toolchain_suffix" ] |
| 1087 } |
| 1088 } |
| 1089 |
| 1090 if (_is_fat_build) { |
| 1091 action(_lipo_shared_library_target) { |
| 1092 forward_variables_from(invoker, [ "testonly" ]) |
| 1093 visibility = _lipo_shared_library_visibility |
| 1094 script = "//build/toolchain/mac/linker_driver.py" |
| 1095 outputs = [ |
| 1096 "$_shared_library_dir/$_output_name", |
| 1097 ] |
| 1098 inputs = [ |
| 1099 "$_arch_shared_library_dir/$_output_name", |
| 1100 ] |
| 1101 deps = [ |
| 1102 ":$_link_shared_library_target", |
| 1103 ] |
| 1104 foreach(_additional_toolchain, additional_toolchains) { |
| 1105 _additional_toolchain_target = "$_target_name($_additional_toolchain)" |
| 1106 deps += [ ":$_additional_toolchain_target" ] |
| 1107 inputs += [ get_label_info(_additional_toolchain_target, |
| 1108 "target_out_dir") + "/$_output_name" ] |
| 1109 } |
| 1110 args = [ |
| 1111 "xcrun", |
| 1112 "lipo", |
| 1113 "-create", |
| 1114 "-output", |
| 1115 rebase_path(outputs[0], root_build_dir), |
| 1116 ] + rebase_path(inputs, root_build_dir) |
| 1117 |
| 1118 if (enable_dsyms) { |
| 1119 outputs += [ "$root_out_dir/$_output_name.dSYM/" ] |
| 1120 args += |
| 1121 [ "-Wcrl,dsym," + rebase_path("$root_out_dir/.", root_build_dir) ] |
| 1122 } |
| 1123 |
| 1124 if (enable_stripping) { |
| 1125 # Check whether //build/config/mac:strip_all has been removed from |
| 1126 # the configs variable (as this is how stripping is disabled for a |
| 1127 # single target). |
| 1128 _strip_all_in_config = false |
| 1129 if (defined(invoker.configs)) { |
| 1130 foreach(_config, invoker.configs) { |
| 1131 if (_config == "//build/config/mac:strip_all") { |
| 1132 _strip_all_in_config = true |
| 1133 } |
| 1134 } |
| 1135 } |
| 1136 |
| 1137 if (_strip_all_in_config) { |
| 1138 args += [ "-Wcrl,strip,-x,-S" ] |
| 1139 |
| 1140 if (save_unstripped_output) { |
| 1141 outputs += [ outputs[0] + ".unstripped" ] |
| 1142 args += [ "-Wcrl,unstripped," + |
| 1143 rebase_path(get_path_info(outputs[0], "dir"), |
| 1144 root_build_dir) ] |
| 1145 } |
| 1146 } |
| 1147 } |
| 1148 } |
| 1149 } |
| 1150 |
| 1151 if (!_code_signing_enabled) { |
| 1152 bundle_data(_shared_library_bundle_data) { |
| 1153 visibility = [ ":$_framework_target" ] |
| 1154 forward_variables_from(invoker, [ "testonly" ]) |
| 1155 sources = [ |
| 1156 "$_shared_library_dir/$_output_name", |
| 1157 ] |
| 1158 outputs = [ |
| 1159 "{{bundle_executable_dir}}/$_output_name", |
| 1160 ] |
| 1161 if (_is_fat_build) { |
| 1162 public_deps = [ |
| 1163 ":$_lipo_shared_library_target", |
| 1164 ] |
| 1165 } else { |
| 1166 public_deps = [ |
| 1167 ":$_link_shared_library_target", |
| 1168 ] |
| 1169 } |
| 1170 } |
| 1171 } |
| 1172 |
| 1173 _framework_public_config = _target_name + "_public_config" |
| 1174 config(_framework_public_config) { |
| 1175 # TODO(sdefresne): should we have a framework_dirs similar to lib_dirs |
| 1176 # and include_dirs to avoid duplicate values on the command-line. |
| 1177 visibility = [ ":$_framework_target" ] |
| 1178 ldflags = [ |
| 1179 "-F", |
| 1180 rebase_path("$root_out_dir/.", root_build_dir), |
| 1181 ] |
| 1182 lib_dirs = [ root_out_dir ] |
| 1183 libs = [ _framework_name ] |
| 1184 } |
| 1185 |
915 _info_plist_target = _target_name + "_info_plist" | 1186 _info_plist_target = _target_name + "_info_plist" |
916 _info_plist_bundle = _target_name + "_info_plist_bundle" | 1187 _info_plist_bundle = _target_name + "_info_plist_bundle" |
917 ios_info_plist(_info_plist_target) { | 1188 ios_info_plist(_info_plist_target) { |
918 visibility = [ ":$_info_plist_bundle" ] | 1189 visibility = [ ":$_info_plist_bundle" ] |
919 executable_name = _output_name | 1190 executable_name = _output_name |
920 forward_variables_from(invoker, | 1191 forward_variables_from(invoker, |
921 [ | 1192 [ |
922 "extra_substitutions", | 1193 "extra_substitutions", |
923 "info_plist", | 1194 "info_plist", |
924 "info_plist_target", | 1195 "info_plist_target", |
925 ]) | 1196 ]) |
926 } | 1197 } |
927 | 1198 |
928 bundle_data(_info_plist_bundle) { | 1199 bundle_data(_info_plist_bundle) { |
929 visibility = [ ":$_framework_target" ] | 1200 visibility = [ ":$_target_name" ] |
930 forward_variables_from(invoker, [ "testonly" ]) | 1201 forward_variables_from(invoker, [ "testonly" ]) |
931 sources = get_target_outputs(":$_info_plist_target") | 1202 sources = get_target_outputs(":$_info_plist_target") |
932 outputs = [ | 1203 outputs = [ |
933 "{{bundle_root_dir}}/Info.plist", | 1204 "{{bundle_root_dir}}/Info.plist", |
934 ] | 1205 ] |
935 public_deps = [ | 1206 public_deps = [ |
936 ":$_info_plist_target", | 1207 ":$_info_plist_target", |
937 ] | 1208 ] |
938 } | 1209 } |
939 } | |
940 | 1210 |
941 framework_bundle(_framework_target) { | 1211 create_bundle(_framework_target) { |
942 forward_variables_from(invoker, | 1212 forward_variables_from(invoker, |
943 "*", | 1213 [ |
944 [ | 1214 "data_deps", |
945 "output_name", | 1215 "deps", |
946 "public_headers", | 1216 "public_configs", |
947 "visibility", | 1217 "public_deps", |
948 ]) | 1218 "testonly", |
949 output_name = _output_name | 1219 ]) |
950 | 1220 |
951 if (!_is_fat_build || _is_fat_build_main_target) { | 1221 if (defined(_framework_version)) { |
952 if (!defined(bundle_deps)) { | 1222 visibility = [ ":$_target_name" ] |
953 bundle_deps = [] | 1223 } else { |
| 1224 if (defined(invoker.visibility)) { |
| 1225 visibility = invoker.visibility |
| 1226 visibility += [ ":$_target_name+link" ] |
| 1227 } |
954 } | 1228 } |
955 bundle_deps += [ ":$_info_plist_bundle" ] | |
956 } | |
957 | |
958 if (_has_public_headers) { | |
959 if (!defined(public_configs)) { | |
960 public_configs = [] | |
961 } | |
962 public_configs += [ ":$_framework_public_config$_toolchain_suffix" ] | |
963 } | |
964 | |
965 if (_has_public_headers) { | |
966 visibility = [ | |
967 ":$_target_name$_toolchain_suffix", | |
968 ":$_target_name+link$_toolchain_suffix", | |
969 ":$_target_name+bundle$_toolchain_suffix", | |
970 ] | |
971 configs += [ ":$_headers_map_config$_toolchain_suffix" ] | |
972 | 1229 |
973 if (!defined(deps)) { | 1230 if (!defined(deps)) { |
974 deps = [] | 1231 deps = [] |
975 } | 1232 } |
976 deps += [ ":$_framework_headers_target$_toolchain_suffix" ] | 1233 deps += [ ":$_info_plist_bundle" ] |
977 } else { | 1234 |
978 if (defined(invoker.visibility)) { | 1235 if (defined(invoker.bundle_deps)) { |
979 visibility = invoker.visibility | 1236 if (!defined(deps)) { |
980 visibility += [ ":$_target_name+link$_toolchain_suffix" ] | 1237 deps = [] |
| 1238 } |
| 1239 deps += invoker.bundle_deps |
| 1240 } |
| 1241 |
| 1242 if (!_code_signing_enabled) { |
| 1243 if (!defined(public_deps)) { |
| 1244 public_deps = [] |
| 1245 } |
| 1246 public_deps += [ ":$_shared_library_bundle_data" ] |
| 1247 } |
| 1248 |
| 1249 bundle_root_dir = _framework_root_dir |
| 1250 bundle_resources_dir = "$bundle_root_dir/Resources" |
| 1251 bundle_executable_dir = "$bundle_root_dir" |
| 1252 |
| 1253 if (_code_signing_enabled) { |
| 1254 if (!defined(deps)) { |
| 1255 deps = [] |
| 1256 } |
| 1257 |
| 1258 if (_is_fat_build) { |
| 1259 deps += [ ":$_lipo_shared_library_target" ] |
| 1260 } else { |
| 1261 deps += [ ":$_link_shared_library_target" ] |
| 1262 } |
| 1263 |
| 1264 _entitlements_path = "//build/config/ios/entitlements.plist" |
| 1265 if (defined(invoker.entitlements_path)) { |
| 1266 _entitlements_path = invoker.entitlements_path |
| 1267 } |
| 1268 |
| 1269 code_signing_script = "//build/config/ios/codesign.py" |
| 1270 code_signing_sources = [ |
| 1271 _entitlements_path, |
| 1272 "$_shared_library_dir/$_output_name", |
| 1273 ] |
| 1274 code_signing_outputs = [ |
| 1275 "$bundle_root_dir/$_output_name", |
| 1276 "$bundle_root_dir/_CodeSignature/CodeResources", |
| 1277 "$bundle_root_dir/embedded.mobileprovision", |
| 1278 ] |
| 1279 code_signing_args = [ |
| 1280 "-e=" + rebase_path(_entitlements_path, root_build_dir), |
| 1281 "code-sign-bundle", |
| 1282 "-i=" + ios_code_signing_identity, |
| 1283 "-b=" + |
| 1284 rebase_path("$_shared_library_dir/$_output_name", root_build_dir), |
| 1285 rebase_path(bundle_root_dir, root_build_dir), |
| 1286 ] |
981 } | 1287 } |
982 } | 1288 } |
983 } | |
984 | 1289 |
985 if (_has_public_headers) { | 1290 if (defined(_framework_version)) { |
986 group(_target_name) { | 1291 action(_target_name) { |
987 forward_variables_from(invoker, | 1292 forward_variables_from(invoker, [ "testonly" ]) |
988 [ | |
989 "testonly", | |
990 "public_configs", | |
991 ]) | |
992 | 1293 |
993 if (defined(invoker.visibility)) { | 1294 if (defined(invoker.visibility)) { |
994 visibility = invoker.visibility | 1295 visibility = invoker.visibility |
995 visibility += [ ":$_target_name+link" ] | 1296 visibility += [ ":$_target_name+link" ] |
| 1297 } |
| 1298 |
| 1299 script = "//build/config/mac/package_framework.py" |
| 1300 outputs = [ |
| 1301 "$root_out_dir/$_framework_name/Versions/Current", |
| 1302 ] |
| 1303 args = [ |
| 1304 "$_framework_name", |
| 1305 "$_framework_version", |
| 1306 ] |
| 1307 public_deps = [ |
| 1308 ":$_framework_target", |
| 1309 ] |
996 } | 1310 } |
997 | |
998 public_deps = [ | |
999 ":$_framework_target$_toolchain_suffix", | |
1000 ] | |
1001 } | 1311 } |
1002 | 1312 |
1003 group(_target_name + "+link") { | 1313 group(_target_name + "+link") { |
1004 forward_variables_from(invoker, | 1314 forward_variables_from(invoker, |
1005 [ | 1315 [ |
| 1316 "public_deps", |
| 1317 "public_configs", |
1006 "testonly", | 1318 "testonly", |
1007 "visibility", | 1319 "visibility", |
1008 ]) | 1320 ]) |
1009 public_deps = [ | 1321 if (!defined(public_deps)) { |
1010 ":$_framework_target+link$_toolchain_suffix", | 1322 public_deps = [] |
1011 ] | 1323 } |
| 1324 public_deps += [ ":$_target_name" ] |
| 1325 if (!defined(public_configs)) { |
| 1326 public_configs = [] |
| 1327 } |
| 1328 public_configs += [ ":$_framework_public_config" ] |
| 1329 |
| 1330 if (_has_public_headers) { |
| 1331 public_configs += [ ":$_framework_headers_config" ] |
| 1332 } |
1012 } | 1333 } |
1013 } | |
1014 | 1334 |
1015 if (!_is_fat_build || _is_fat_build_main_target) { | |
1016 bundle_data(_target_name + "+bundle") { | 1335 bundle_data(_target_name + "+bundle") { |
1017 forward_variables_from(invoker, | 1336 forward_variables_from(invoker, |
1018 [ | 1337 [ |
1019 "testonly", | 1338 "testonly", |
1020 "visibility", | 1339 "visibility", |
1021 ]) | 1340 ]) |
1022 public_deps = [ | 1341 public_deps = [ |
1023 ":$_framework_target", | 1342 ":$_target_name", |
1024 ] | 1343 ] |
1025 sources = [ | 1344 sources = [ |
1026 "$root_out_dir/$_output_name.framework", | 1345 "$root_out_dir/$_output_name.framework", |
1027 ] | 1346 ] |
1028 outputs = [ | 1347 outputs = [ |
1029 "{{bundle_resources_dir}}/Frameworks/$_output_name.framework", | 1348 "{{bundle_resources_dir}}/Frameworks/$_output_name.framework", |
1030 ] | 1349 ] |
1031 } | 1350 } |
1032 } | 1351 } |
1033 } | 1352 } |
1034 | 1353 |
1035 set_defaults("ios_framework_bundle") { | 1354 set_defaults("ios_framework_bundle") { |
1036 configs = default_shared_library_configs | 1355 configs = default_shared_library_configs |
1037 } | 1356 } |
1038 | 1357 |
1039 # For Chrome on iOS we want to run XCTests for all our build configurations | 1358 # For Chrome on iOS we want to run XCTests for all our build configurations |
1040 # (Debug, Release, ...). In addition, the symbols visibility is configured to | 1359 # (Debug, Release, ...). In addition, the symbols visibility is configured to |
1041 # private by default. To simplify testing with those constraints, our tests are | 1360 # private by default. To simplify testing with those constraints, our tests are |
1042 # compiled in the TEST_HOST target instead of the .xctest bundle. | 1361 # compiled in the TEST_HOST target instead of the .xctest bundle. |
1043 template("ios_xctest_test") { | 1362 template("ios_xctest_test") { |
1044 _target_name = target_name | 1363 _target_name = target_name |
1045 _output_name = target_name | 1364 _output_name = target_name |
1046 if (defined(invoker.output_name)) { | 1365 if (defined(invoker.output_name)) { |
1047 _output_name = invoker.output_name | 1366 _output_name = invoker.output_name |
1048 } | 1367 } |
1049 | 1368 |
1050 _is_fat_build = additional_toolchains != [] | |
1051 if (_is_fat_build) { | |
1052 _is_fat_build_main_target = current_toolchain == default_toolchain | |
1053 } | |
1054 | |
1055 _xctest_target = _target_name | 1369 _xctest_target = _target_name |
1056 _xctest_output = _output_name | 1370 _xctest_output = _output_name |
1057 | 1371 |
1058 _host_target = _target_name + "_host" | 1372 _host_target = _target_name + "_host" |
1059 _host_output = _output_name + "_host" | 1373 _host_output = _output_name + "_host" |
1060 | 1374 |
1061 if (_is_fat_build && !_is_fat_build_main_target) { | 1375 if (_is_fat_build && !_is_fat_build_main_target) { |
1062 loadable_module(_xctest_target) { | 1376 loadable_module(_xctest_target) { |
1063 visibility = [ ":${_xctest_target}_loadable_module($default_toolchain)" ] | 1377 visibility = [ ":${_xctest_target}_loadable_module($default_toolchain)" ] |
1064 sources = [ | 1378 sources = [ |
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1307 "-rpath", | 1621 "-rpath", |
1308 "-Xlinker", | 1622 "-Xlinker", |
1309 "@loader_path/Frameworks", | 1623 "@loader_path/Frameworks", |
1310 ] | 1624 ] |
1311 } | 1625 } |
1312 } | 1626 } |
1313 | 1627 |
1314 set_defaults("ios_xctest_test") { | 1628 set_defaults("ios_xctest_test") { |
1315 configs = default_executable_configs | 1629 configs = default_executable_configs |
1316 } | 1630 } |
OLD | NEW |