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

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

Powered by Google App Engine
This is Rietveld 408576698