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

Side by Side Diff: build/config/ios/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: Rebase 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
« no previous file with comments | « no previous file | build/config/mac/base_rules.gni » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 7
8 # Generates Info.plist files for Mac apps and frameworks. 8 # Generates Info.plist files for Mac apps and frameworks.
9 # 9 #
10 # Arguments 10 # Arguments
(...skipping 623 matching lines...) Expand 10 before | Expand all | Expand 10 after
634 # See "gn help shared_library" for more information on arguments supported 634 # See "gn help shared_library" for more information on arguments supported
635 # by shared library target. 635 # by shared library target.
636 template("ios_framework_bundle") { 636 template("ios_framework_bundle") {
637 _target_name = target_name 637 _target_name = target_name
638 _output_name = target_name 638 _output_name = target_name
639 if (defined(invoker.output_name)) { 639 if (defined(invoker.output_name)) {
640 _output_name = invoker.output_name 640 _output_name = invoker.output_name
641 } 641 }
642 _framework_target = _target_name 642 _framework_target = _target_name
643 643
644 if (defined(invoker.public_headers) && invoker.public_headers != []) { 644 _has_public_headers =
645 _public_headers = invoker.public_headers 645 defined(invoker.public_headers) && invoker.public_headers != []
646 _framework_name = _output_name + ".framework" 646
647 _framework_root = "$root_out_dir/$_framework_name" 647 _is_fat_build = additional_toolchains != []
648 if (_is_fat_build) {
649 _is_fat_build_main_target = current_toolchain == default_toolchain
650 }
651
652 # This template has a different expansion depending on whether public headers
653 # are defined or not. If no public headers are speficied, then is forwards to
654 # the generic "framework_bundle" target, otherwise if expands to targets that
655 # create header map mapping and corresponding config and configure them as
656 # dependencies of the generic "framework_bundle" target.
657 #
658 # The expansion is a bit different for multi-architecture builds (aka fat
659 # binary builds). Then the targets build for the non-default toolchain uses
660 # the same header map (if available) as the one used by the default toolchain.
661
662 _toolchain_suffix = ""
663 if (_is_fat_build && !_is_fat_build_main_target) {
664 _toolchain_suffix = "($default_toolchain)"
665 }
666
667 if (_has_public_headers) {
668 _framework_headers_target = _target_name + "_framework_headers"
669 _framework_public_config = _target_name + "_ios_public_config"
648 _framework_target = target_name + "_internal" 670 _framework_target = target_name + "_internal"
671 _headers_map_config = _target_name + "_headers_map"
649 672
650 _header_map_filename = "$target_gen_dir/$_output_name.headers.hmap" 673 if (!_is_fat_build || _is_fat_build_main_target) {
651 _framework_headers_target = _target_name + "_framework_headers" 674 _public_headers = invoker.public_headers
675 _framework_name = _output_name + ".framework"
676 _framework_root = "$root_out_dir/$_framework_name"
652 677
653 _compile_headers_map_target = _target_name + "_compile_headers_map" 678 _header_map_filename = "$target_gen_dir/$_output_name.headers.hmap"
654 action(_compile_headers_map_target) {
655 visibility = [ ":$_framework_headers_target" ]
656 script = "//build/config/ios/write_framework_hmap.py"
657 outputs = [
658 _header_map_filename,
659 ]
660 679
661 # The header map generation only wants the list of headers, not all of 680 _compile_headers_map_target = _target_name + "_compile_headers_map"
662 # sources, so filter any non-header source files from "sources". It is 681 action(_compile_headers_map_target) {
663 # less error prone that having the developer duplicate the list of all 682 visibility = [ ":$_framework_headers_target" ]
664 # headers in addition to "sources". 683 script = "//build/config/ios/write_framework_hmap.py"
665 set_sources_assignment_filter([ 684 outputs = [
666 "*.c", 685 _header_map_filename,
667 "*.cc", 686 ]
668 "*.cpp",
669 "*.m",
670 "*.mm",
671 ])
672 sources = invoker.sources
673 set_sources_assignment_filter([])
674 687
675 args = [ 688 # The header map generation only wants the list of headers, not all of
676 rebase_path(_header_map_filename), 689 # sources, so filter any non-header source files from "sources". It is
677 rebase_path(_framework_root, root_build_dir), 690 # less error prone that having the developer duplicate the list of all
678 ] + rebase_path(sources, root_build_dir) 691 # headers in addition to "sources".
679 } 692 set_sources_assignment_filter([
693 "*.c",
694 "*.cc",
695 "*.cpp",
696 "*.m",
697 "*.mm",
698 ])
699 sources = invoker.sources
700 set_sources_assignment_filter([])
680 701
681 _create_module_map_target = _target_name + "_module_map" 702 args = [
682 action(_create_module_map_target) { 703 rebase_path(_header_map_filename),
683 visibility = [ ":$_framework_headers_target" ] 704 rebase_path(_framework_root, root_build_dir),
684 script = "//build/config/ios/write_framework_modulemap.py" 705 ] + rebase_path(sources, root_build_dir)
685 outputs = [ 706 }
686 "$_framework_root/Modules/module.modulemap",
687 ]
688 args = [ rebase_path("$_framework_root", root_build_dir) ]
689 }
690 707
691 _copy_public_headers_target = _target_name + "_copy_public_headers" 708 _create_module_map_target = _target_name + "_module_map"
692 copy(_copy_public_headers_target) { 709 action(_create_module_map_target) {
693 visibility = [ ":$_framework_headers_target" ] 710 visibility = [ ":$_framework_headers_target" ]
694 sources = _public_headers 711 script = "//build/config/ios/write_framework_modulemap.py"
695 outputs = [ 712 outputs = [
696 "$_framework_root/Headers/{{source_file_part}}", 713 "$_framework_root/Modules/module.modulemap",
697 ] 714 ]
698 } 715 args = [ rebase_path("$_framework_root", root_build_dir) ]
716 }
699 717
700 _headers_map_config = _target_name + "_headers_map" 718 _copy_public_headers_target = _target_name + "_copy_public_headers"
701 config(_headers_map_config) { 719 copy(_copy_public_headers_target) {
702 visibility = [ ":$_target_name" ] 720 visibility = [ ":$_framework_headers_target" ]
703 include_dirs = [ _header_map_filename ] 721 sources = _public_headers
704 ldflags = [ 722 outputs = [
705 "-install_name", 723 "$_framework_root/Headers/{{source_file_part}}",
706 "@rpath/$_framework_name/$_output_name", 724 ]
707 ] 725 }
708 }
709 726
710 group(_framework_headers_target) { 727 config(_headers_map_config) {
711 deps = [ 728 visibility = [ ":$_target_name" ]
712 ":$_compile_headers_map_target", 729 include_dirs = [ _header_map_filename ]
713 ":$_copy_public_headers_target", 730 ldflags = [
714 ":$_create_module_map_target", 731 "-install_name",
715 ] 732 "@rpath/$_framework_name/$_output_name",
733 ]
734 }
735
736 group(_framework_headers_target) {
737 deps = [
738 ":$_compile_headers_map_target",
739 ":$_copy_public_headers_target",
740 ":$_create_module_map_target",
741 ]
742 }
743
744 config(_framework_public_config) {
745 visibility = [ ":$_framework_public_config" ]
746 common_flags = [ "-F" + rebase_path("$root_out_dir/.", root_build_dir) ]
747 cflags_objc = common_flags
748 cflags_objcc = common_flags
749
750 # The link settings are inherited from the framework_bundle config.
751 }
716 } 752 }
717 } 753 }
718 754
719 _framework_public_config = _target_name + "_ios_public_config"
720 config(_framework_public_config) {
721 visibility = [ ":$_framework_public_config" ]
722 if (defined(_public_headers)) {
723 common_flags = [ "-F" + rebase_path("$root_out_dir/.", root_build_dir) ]
724 cflags_objc = common_flags
725 cflags_objcc = common_flags
726 }
727
728 # The link settings are inherited from the framework_bundle config.
729 }
730
731 framework_bundle(_framework_target) { 755 framework_bundle(_framework_target) {
732 forward_variables_from(invoker, 756 forward_variables_from(invoker,
733 "*", 757 "*",
734 [ 758 [
735 "output_name", 759 "output_name",
736 "public_headers", 760 "public_headers",
737 "visibility", 761 "visibility",
738 ]) 762 ])
739 output_name = _output_name 763 output_name = _output_name
740 764
741 if (!defined(public_configs)) { 765 if (_has_public_headers) {
742 public_configs = [] 766 if (!defined(public_configs)) {
767 public_configs = []
768 }
769 public_configs += [ ":$_framework_public_config$_toolchain_suffix" ]
743 } 770 }
744 public_configs += [ ":$_framework_public_config" ]
745 771
746 if (defined(_public_headers)) { 772 if (_has_public_headers) {
747 visibility = [ 773 visibility = [
748 ":$_target_name", 774 ":$_target_name$_toolchain_suffix",
749 ":$_target_name+link", 775 ":$_target_name+link$_toolchain_suffix",
750 ] 776 ]
751 configs += [ ":$_headers_map_config" ] 777 configs += [ ":$_headers_map_config$_toolchain_suffix" ]
752 778
753 if (!defined(deps)) { 779 if (!defined(deps)) {
754 deps = [] 780 deps = []
755 } 781 }
756 deps += [ ":$_framework_headers_target" ] 782 deps += [ ":$_framework_headers_target$_toolchain_suffix" ]
757 } else { 783 } else {
758 if (defined(invoker.visibility)) { 784 if (defined(invoker.visibility)) {
759 visibility = invoker.visibility 785 visibility = invoker.visibility
760 visibility += [ ":$_target_name+link" ] 786 visibility += [ ":$_target_name+link$_toolchain_suffix" ]
761 } 787 }
762 } 788 }
763 } 789 }
764 790
765 if (defined(_public_headers)) { 791 if (_has_public_headers) {
766 group(_target_name) { 792 group(_target_name) {
767 forward_variables_from(invoker, 793 forward_variables_from(invoker,
768 [ 794 [
769 "testonly", 795 "testonly",
770 "public_configs", 796 "public_configs",
771 ]) 797 ])
772 798
773 if (defined(invoker.visibility)) { 799 if (defined(invoker.visibility)) {
774 visibility = invoker.visibility 800 visibility = invoker.visibility
775 visibility += [ ":$_target_name+link" ] 801 visibility += [ ":$_target_name+link" ]
776 } 802 }
777 803
778 public_deps = [ 804 public_deps = [
779 ":$_framework_target", 805 ":$_framework_target$_toolchain_suffix",
780 ] 806 ]
781 } 807 }
782 808
783 group(_target_name + "+link") { 809 group(_target_name + "+link") {
784 forward_variables_from(invoker, 810 forward_variables_from(invoker,
785 [ 811 [
786 "testonly", 812 "testonly",
787 "visibility", 813 "visibility",
788 ]) 814 ])
789 public_deps = [ 815 public_deps = [
790 ":$_framework_target+link", 816 ":$_framework_target+link$_toolchain_suffix",
791 ] 817 ]
792 } 818 }
793 } 819 }
794 } 820 }
795 821
796 set_defaults("ios_framework_bundle") { 822 set_defaults("ios_framework_bundle") {
797 configs = default_shared_library_configs 823 configs = default_shared_library_configs
798 } 824 }
OLDNEW
« no previous file with comments | « no previous file | build/config/mac/base_rules.gni » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698