diff --git a/IntegrationTests/GoldMaster/Braintree.podspec.json.goldmaster b/IntegrationTests/GoldMaster/Braintree.podspec.json.goldmaster index 2a58b988..8958ba93 100644 --- a/IntegrationTests/GoldMaster/Braintree.podspec.json.goldmaster +++ b/IntegrationTests/GoldMaster/Braintree.podspec.json.goldmaster @@ -1,3 +1,4 @@ +load('@build_bazel_rules_apple//apple:resources.bzl', 'apple_resource_bundle') load( "//Vendor/rules_pods/BazelExtensions:extensions.bzl", "pch_with_name_hint", @@ -696,7 +697,7 @@ objc_library( ] + [ "-fmodule-name=Braintree_pod_module" ], - bundles = [ + data = [ ":UI_Bundle_Braintree-Drop-In-Localization", ":UI_Bundle_Braintree-UI-Localization" ], @@ -875,7 +876,7 @@ objc_library( ] + [ "-fmodule-name=Braintree_pod_module" ], - bundles = [ + data = [ ":3D-Secure_Bundle_Braintree-3D-Secure-Localization" ], visibility = [ diff --git a/IntegrationTests/GoldMaster/Calabash.podspec.json.goldmaster b/IntegrationTests/GoldMaster/Calabash.podspec.json.goldmaster index 33007352..2768ae72 100644 --- a/IntegrationTests/GoldMaster/Calabash.podspec.json.goldmaster +++ b/IntegrationTests/GoldMaster/Calabash.podspec.json.goldmaster @@ -1,3 +1,4 @@ +load('@build_bazel_rules_swift//swift:swift.bzl', 'swift_library') load( "//Vendor/rules_pods/BazelExtensions:extensions.bzl", "pch_with_name_hint", @@ -15,7 +16,6 @@ native.config_setting( "compilation_mode": "opt" } ) -load('@build_bazel_rules_swift//swift:swift.bzl', 'swift_library') config_setting( name = "iosCase", values = { diff --git a/IntegrationTests/GoldMaster/FBSDKCoreKit.podspec.json.goldmaster b/IntegrationTests/GoldMaster/FBSDKCoreKit.podspec.json.goldmaster index 874704ee..66847a6f 100644 --- a/IntegrationTests/GoldMaster/FBSDKCoreKit.podspec.json.goldmaster +++ b/IntegrationTests/GoldMaster/FBSDKCoreKit.podspec.json.goldmaster @@ -1,3 +1,4 @@ +load('@build_bazel_rules_apple//apple:resources.bzl', 'apple_bundle_import') load( "//Vendor/rules_pods/BazelExtensions:extensions.bzl", "pch_with_name_hint", @@ -304,7 +305,7 @@ objc_library( ] + [ "-fmodule-name=FBSDKCoreKit_pod_module" ], - bundles = [ + data = [ ":FBSDKCoreKit_Bundle_FacebookSDKStrings" ], visibility = [ @@ -318,7 +319,7 @@ acknowledged_target( ], value = "//Vendor/FBSDKCoreKit/pod_support_buildable:acknowledgement_fragment" ) -objc_bundle( +apple_bundle_import( name = "FBSDKCoreKit_Bundle_FacebookSDKStrings", bundle_imports = glob( [ diff --git a/IntegrationTests/GoldMaster/FolioReaderKit.podspec.json.goldmaster b/IntegrationTests/GoldMaster/FolioReaderKit.podspec.json.goldmaster index 463160ea..5e30d66b 100644 --- a/IntegrationTests/GoldMaster/FolioReaderKit.podspec.json.goldmaster +++ b/IntegrationTests/GoldMaster/FolioReaderKit.podspec.json.goldmaster @@ -1,3 +1,4 @@ +load('@build_bazel_rules_swift//swift:swift.bzl', 'swift_library') load( "//Vendor/rules_pods/BazelExtensions:extensions.bzl", "pch_with_name_hint", @@ -15,7 +16,6 @@ native.config_setting( "compilation_mode": "opt" } ) -load('@build_bazel_rules_swift//swift:swift.bzl', 'swift_library') swift_library( name = "FolioReaderKit", srcs = glob( diff --git a/IntegrationTests/GoldMaster/GoogleAppIndexing.podspec.json.goldmaster b/IntegrationTests/GoldMaster/GoogleAppIndexing.podspec.json.goldmaster index 966a9fb2..ca84dfea 100644 --- a/IntegrationTests/GoldMaster/GoogleAppIndexing.podspec.json.goldmaster +++ b/IntegrationTests/GoldMaster/GoogleAppIndexing.podspec.json.goldmaster @@ -1,3 +1,4 @@ +load('@build_bazel_rules_apple//apple:resources.bzl', 'apple_bundle_import') load( "//Vendor/rules_pods/BazelExtensions:extensions.bzl", "pch_with_name_hint", @@ -89,7 +90,7 @@ objc_library( ] + [ "-fmodule-name=GoogleAppIndexing_pod_module" ], - bundles = [ + data = [ ":GoogleAppIndexing_Bundle_GoogleAppIndexingResources" ], visibility = [ @@ -103,7 +104,7 @@ acknowledged_target( ], value = "//Vendor/GoogleAppIndexing/pod_support_buildable:acknowledgement_fragment" ) -objc_bundle( +apple_bundle_import( name = "GoogleAppIndexing_Bundle_GoogleAppIndexingResources", bundle_imports = glob( [ diff --git a/IntegrationTests/GoldMaster/GoogleAuthUtilities.podspec.json.goldmaster b/IntegrationTests/GoldMaster/GoogleAuthUtilities.podspec.json.goldmaster index c2575958..a8bfac2a 100644 --- a/IntegrationTests/GoldMaster/GoogleAuthUtilities.podspec.json.goldmaster +++ b/IntegrationTests/GoldMaster/GoogleAuthUtilities.podspec.json.goldmaster @@ -85,7 +85,7 @@ objc_library( ] + [ "-fmodule-name=GoogleAuthUtilities_pod_module" ], - resources = glob( + data = glob( [ "Frameworks/frameworks/GoogleAuthUtilities.framework/Resources/GTMOAuth2ViewTouch.xib" ], diff --git a/IntegrationTests/GoldMaster/GoogleSignIn.podspec.json.goldmaster b/IntegrationTests/GoldMaster/GoogleSignIn.podspec.json.goldmaster index 04de9ea8..ff31de0c 100644 --- a/IntegrationTests/GoldMaster/GoogleSignIn.podspec.json.goldmaster +++ b/IntegrationTests/GoldMaster/GoogleSignIn.podspec.json.goldmaster @@ -1,3 +1,4 @@ +load('@build_bazel_rules_apple//apple:resources.bzl', 'apple_bundle_import') load( "//Vendor/rules_pods/BazelExtensions:extensions.bzl", "pch_with_name_hint", @@ -89,7 +90,7 @@ objc_library( ] + [ "-fmodule-name=GoogleSignIn_pod_module" ], - bundles = [ + data = [ ":GoogleSignIn_Bundle_GoogleSignIn" ], visibility = [ @@ -106,7 +107,7 @@ acknowledged_target( ], value = "//Vendor/GoogleSignIn/pod_support_buildable:acknowledgement_fragment" ) -objc_bundle( +apple_bundle_import( name = "GoogleSignIn_Bundle_GoogleSignIn", bundle_imports = glob( [ diff --git a/IntegrationTests/GoldMaster/OnePasswordExtension.podspec.json.goldmaster b/IntegrationTests/GoldMaster/OnePasswordExtension.podspec.json.goldmaster index a1053e77..4aa5ad28 100644 --- a/IntegrationTests/GoldMaster/OnePasswordExtension.podspec.json.goldmaster +++ b/IntegrationTests/GoldMaster/OnePasswordExtension.podspec.json.goldmaster @@ -1,3 +1,4 @@ +load('@build_bazel_rules_apple//apple:resources.bzl', 'apple_resource_bundle') load( "//Vendor/rules_pods/BazelExtensions:extensions.bzl", "pch_with_name_hint", @@ -118,7 +119,7 @@ objc_library( ] + [ "-fmodule-name=OnePasswordExtension_pod_module" ], - bundles = [ + data = [ ":OnePasswordExtension_Bundle_OnePasswordExtensionResources" ], visibility = [ diff --git a/IntegrationTests/GoldMaster/PaymentKit.podspec.json.goldmaster b/IntegrationTests/GoldMaster/PaymentKit.podspec.json.goldmaster index 6fd11755..05a0e3a9 100644 --- a/IntegrationTests/GoldMaster/PaymentKit.podspec.json.goldmaster +++ b/IntegrationTests/GoldMaster/PaymentKit.podspec.json.goldmaster @@ -88,7 +88,7 @@ objc_library( ] + [ "-fmodule-name=PaymentKit_pod_module" ], - resources = glob( + data = glob( [ "PaymentKit/Resources/*.png", "PaymentKit/Resources/Cards/*.png" diff --git a/IntegrationTests/GoldMaster/React.0.57.0.podspec.json.goldmaster b/IntegrationTests/GoldMaster/React.0.57.0.podspec.json.goldmaster index 5d7b93b7..f108a2c5 100644 --- a/IntegrationTests/GoldMaster/React.0.57.0.podspec.json.goldmaster +++ b/IntegrationTests/GoldMaster/React.0.57.0.podspec.json.goldmaster @@ -1,3 +1,4 @@ +load('@build_bazel_rules_swift//swift:swift.bzl', 'swift_library') load( "//Vendor/rules_pods/BazelExtensions:extensions.bzl", "pch_with_name_hint", @@ -15,7 +16,6 @@ native.config_setting( "compilation_mode": "opt" } ) -load('@build_bazel_rules_swift//swift:swift.bzl', 'swift_library') config_setting( name = "iosCase", values = { diff --git a/IntegrationTests/GoldMaster/SFHFKeychainUtils.podspec.json.goldmaster b/IntegrationTests/GoldMaster/SFHFKeychainUtils.podspec.json.goldmaster index 55704130..e8377e00 100644 --- a/IntegrationTests/GoldMaster/SFHFKeychainUtils.podspec.json.goldmaster +++ b/IntegrationTests/GoldMaster/SFHFKeychainUtils.podspec.json.goldmaster @@ -1,3 +1,4 @@ +load('@build_bazel_rules_swift//swift:swift.bzl', 'swift_library') load( "//Vendor/rules_pods/BazelExtensions:extensions.bzl", "pch_with_name_hint", @@ -15,7 +16,6 @@ native.config_setting( "compilation_mode": "opt" } ) -load('@build_bazel_rules_swift//swift:swift.bzl', 'swift_library') filegroup( name = "SFHFKeychainUtils_cxx_hdrs", srcs = glob( diff --git a/IntegrationTests/GoldMaster/SevenSwitch.podspec.json.goldmaster b/IntegrationTests/GoldMaster/SevenSwitch.podspec.json.goldmaster index be75dce7..4d7646d1 100644 --- a/IntegrationTests/GoldMaster/SevenSwitch.podspec.json.goldmaster +++ b/IntegrationTests/GoldMaster/SevenSwitch.podspec.json.goldmaster @@ -1,3 +1,4 @@ +load('@build_bazel_rules_swift//swift:swift.bzl', 'swift_library') load( "//Vendor/rules_pods/BazelExtensions:extensions.bzl", "pch_with_name_hint", @@ -15,7 +16,6 @@ native.config_setting( "compilation_mode": "opt" } ) -load('@build_bazel_rules_swift//swift:swift.bzl', 'swift_library') swift_library( name = "SevenSwitch", srcs = glob( diff --git a/IntegrationTests/GoldMaster/Stripe.podspec.json.goldmaster b/IntegrationTests/GoldMaster/Stripe.podspec.json.goldmaster index 41e5a5fa..3d3e72bb 100644 --- a/IntegrationTests/GoldMaster/Stripe.podspec.json.goldmaster +++ b/IntegrationTests/GoldMaster/Stripe.podspec.json.goldmaster @@ -1,3 +1,4 @@ +load('@build_bazel_rules_apple//apple:resources.bzl', 'apple_resource_bundle') load( "//Vendor/rules_pods/BazelExtensions:extensions.bzl", "pch_with_name_hint", @@ -102,7 +103,7 @@ objc_library( ] + [ "-fmodule-name=Stripe_pod_module" ], - bundles = select( + data = select( { "//conditions:default": [ ":Stripe_Bundle_Stripe" diff --git a/IntegrationTests/GoldMaster/UICollectionViewLeftAlignedLayout.podspec.json.goldmaster b/IntegrationTests/GoldMaster/UICollectionViewLeftAlignedLayout.podspec.json.goldmaster index ade07f21..2df67ed4 100644 --- a/IntegrationTests/GoldMaster/UICollectionViewLeftAlignedLayout.podspec.json.goldmaster +++ b/IntegrationTests/GoldMaster/UICollectionViewLeftAlignedLayout.podspec.json.goldmaster @@ -1,3 +1,4 @@ +load('@build_bazel_rules_swift//swift:swift.bzl', 'swift_library') load( "//Vendor/rules_pods/BazelExtensions:extensions.bzl", "pch_with_name_hint", @@ -15,7 +16,6 @@ native.config_setting( "compilation_mode": "opt" } ) -load('@build_bazel_rules_swift//swift:swift.bzl', 'swift_library') filegroup( name = "UICollectionViewLeftAlignedLayout_cxx_hdrs", srcs = glob( diff --git a/IntegrationTests/GoldMaster/iOSSnapshotTestCase.podspec.json.goldmaster b/IntegrationTests/GoldMaster/iOSSnapshotTestCase.podspec.json.goldmaster index 7891c3cf..cd5a1156 100644 --- a/IntegrationTests/GoldMaster/iOSSnapshotTestCase.podspec.json.goldmaster +++ b/IntegrationTests/GoldMaster/iOSSnapshotTestCase.podspec.json.goldmaster @@ -1,3 +1,4 @@ +load('@build_bazel_rules_swift//swift:swift.bzl', 'swift_library') load( "//Vendor/rules_pods/BazelExtensions:extensions.bzl", "pch_with_name_hint", @@ -15,7 +16,6 @@ native.config_setting( "compilation_mode": "opt" } ) -load('@build_bazel_rules_swift//swift:swift.bzl', 'swift_library') filegroup( name = "iOSSnapshotTestCase_hdrs", srcs = glob( diff --git a/IntegrationTests/GoldMaster/iRate.podspec.json.goldmaster b/IntegrationTests/GoldMaster/iRate.podspec.json.goldmaster index 704b8a8c..2090f551 100644 --- a/IntegrationTests/GoldMaster/iRate.podspec.json.goldmaster +++ b/IntegrationTests/GoldMaster/iRate.podspec.json.goldmaster @@ -1,3 +1,4 @@ +load('@build_bazel_rules_apple//apple:resources.bzl', 'apple_bundle_import') load( "//Vendor/rules_pods/BazelExtensions:extensions.bzl", "pch_with_name_hint", @@ -88,7 +89,7 @@ objc_library( ] + [ "-fmodule-name=iRate_pod_module" ], - bundles = [ + data = [ ":iRate_Bundle_iRate" ], visibility = [ @@ -102,7 +103,7 @@ acknowledged_target( ], value = "//Vendor/iRate/pod_support_buildable:acknowledgement_fragment" ) -objc_bundle( +apple_bundle_import( name = "iRate_Bundle_iRate", bundle_imports = glob( [ diff --git a/IntegrationTests/GoldMaster/youtube-ios-player-helper.podspec.json.goldmaster b/IntegrationTests/GoldMaster/youtube-ios-player-helper.podspec.json.goldmaster index 2e497eda..ed54622d 100644 --- a/IntegrationTests/GoldMaster/youtube-ios-player-helper.podspec.json.goldmaster +++ b/IntegrationTests/GoldMaster/youtube-ios-player-helper.podspec.json.goldmaster @@ -1,3 +1,5 @@ +load('@build_bazel_rules_swift//swift:swift.bzl', 'swift_library') +load('@build_bazel_rules_apple//apple:resources.bzl', 'apple_bundle_import') load( "//Vendor/rules_pods/BazelExtensions:extensions.bzl", "pch_with_name_hint", @@ -15,7 +17,6 @@ native.config_setting( "compilation_mode": "opt" } ) -load('@build_bazel_rules_swift//swift:swift.bzl', 'swift_library') config_setting( name = "iosCase", values = { @@ -164,7 +165,7 @@ objc_library( ] + [ "-fmodule-name=youtube-ios-player-helper_pod_module" ], - bundles = [ + data = [ ":youtube-ios-player-helper_Bundle_Assets" ], visibility = [ @@ -344,7 +345,7 @@ objc_library( ] + [ "-fmodule-name=youtube-ios-player-helper_pod_module" ], - bundles = [ + data = [ ":youtube-ios-player-helper_Bundle_Assets" ], visibility = [ @@ -358,7 +359,7 @@ acknowledged_target( ], value = "//Vendor/youtube-ios-player-helper/pod_support_buildable:acknowledgement_fragment" ) -objc_bundle( +apple_bundle_import( name = "youtube-ios-player-helper_Bundle_Assets", bundle_imports = glob( [ diff --git a/Sources/PodToBUILD/BuildFile.swift b/Sources/PodToBUILD/BuildFile.swift index 33ffee25..5dc605aa 100644 --- a/Sources/PodToBUILD/BuildFile.swift +++ b/Sources/PodToBUILD/BuildFile.swift @@ -81,6 +81,7 @@ public func GetBuildOptions() -> BuildOptions { return sharedBuildOptions } + /// Config Setting Nodes /// Write Build dependent COPTS. /// @note We consume this as an expression in ObjCLibrary @@ -105,9 +106,22 @@ public func makeConfigSettingNodes() -> SkylarkNode { return .lines([.lines(comment), releaseConfig]) } + +public func makeLoadNodes(forConvertibles skylarkConvertibles: [SkylarkConvertible]) -> SkylarkNode { + let hasSwift = skylarkConvertibles.first(where: { $0 is SwiftLibrary }) != nil + let hasAppleBundleImport = skylarkConvertibles.first(where: { $0 is AppleBundleImport }) != nil + let hasAppleResourceBundle = skylarkConvertibles.first(where: { $0 is AppleResourceBundle }) != nil + return .lines( [ + hasSwift ? SkylarkNode.skylark("load('@build_bazel_rules_swift//swift:swift.bzl', 'swift_library')") : nil, + hasAppleBundleImport ? SkylarkNode.skylark("load('@build_bazel_rules_apple//apple:resources.bzl', 'apple_bundle_import')") : nil, + hasAppleResourceBundle ? SkylarkNode.skylark("load('@build_bazel_rules_apple//apple:resources.bzl', 'apple_resource_bundle')") : nil + ].compactMap { $0 } + ) +} + // Make Nodes to be inserted at the beginning of skylark output // public for test purposes -public func makePrefixNodes(includeSwift: Bool) -> SkylarkNode { +public func makePrefixNodes() -> SkylarkNode { let name = "rules_pods" let extFile = getRulePrefix(name: name) + "BazelExtensions:extensions.bzl" @@ -119,11 +133,7 @@ public func makePrefixNodes(includeSwift: Bool) -> SkylarkNode { .basic(.string("gen_module_map")), .basic(.string("gen_includes"))]), makeConfigSettingNodes(), - ] + (includeSwift ? [ - // Assume that the user is using the default naming convetion of - // swift_library. - SkylarkNode.skylark("load('@build_bazel_rules_swift//swift:swift.bzl', 'swift_library')") - ] : []) + ] return .lines(lineNodes) } @@ -184,8 +194,7 @@ public struct PodBuildFile: SkylarkConvertible { BuildFileContext.set(BuildFileContext(convertibles: skylarkConvertibles)) let convertibleNodes: [SkylarkNode] = skylarkConvertibles.compactMap { $0.toSkylark() } BuildFileContext.set(nil) - let hasSwift = skylarkConvertibles.first(where: { $0 is SwiftLibrary }) != nil - return .lines([makePrefixNodes(includeSwift: hasSwift)] + convertibleNodes) + return .lines([makeLoadNodes(forConvertibles: skylarkConvertibles)] + [makePrefixNodes()] + convertibleNodes) } public static func with(podSpec: PodSpec, buildOptions: BuildOptions = EmptyBuildOptions.shared) -> PodBuildFile { @@ -204,18 +213,15 @@ public struct PodBuildFile: SkylarkConvertible { }) } - // For all prebuilt bundles we found, create an ObjcBundle target. This target differs from AppleResourceBundle - // because it is stricter about keeping the structure of the bundle contents intact. let bundleTargets = bundleResources.map { (strArr: [String]) -> [BazelTarget] in strArr.map { (bundlePath: String) -> BazelTarget in - let bundleName = ObjcBundle.extractBundleName(fromPath: bundlePath) + let bundleName = AppleBundleImport.extractBundleName(fromPath: bundlePath) let name = "\(spec.moduleName ?? spec.name)_Bundle_\(bundleName)" let bundleImports = AttrSet<[String]>(basic: ["\(bundlePath)/**"]) - return ObjcBundle(name: name, bundleImports: bundleImports) + return AppleBundleImport(name: name, bundleImports: bundleImports) } } - let resourceBundles = (AttrSet<[String: [String]]> .sequence(attrSet: resourceBundleAttrSet) .map { k, v -> BazelTarget in diff --git a/Sources/PodToBUILD/ObjcLibrary.swift b/Sources/PodToBUILD/ObjcLibrary.swift index ec42d202..53595f04 100644 --- a/Sources/PodToBUILD/ObjcLibrary.swift +++ b/Sources/PodToBUILD/ObjcLibrary.swift @@ -25,8 +25,8 @@ public let PodSupportDir = "pod_support/" /// initialization phase, all Public headers are symlinked into this directory. public let PodSupportSystemPublicHeaderDir = "pod_support/Headers/Public/" -// https://docs.bazel.build/versions/master/be/objective-c.html#objc_bundle -public struct ObjcBundle: BazelTarget { +// https://github.com/bazelbuild/rules_apple/blob/master/doc/rules-resources.md#apple_bundle_import +public struct AppleBundleImport: BazelTarget { let name: String let bundleImports: AttrSet<[String]> @@ -36,7 +36,7 @@ public struct ObjcBundle: BazelTarget { public func toSkylark() -> SkylarkNode { return .functionCall( - name: "objc_bundle", + name: "apple_bundle_import", arguments: [ .named(name: "name", value: bazelLabel(fromString: name).toSkylark()), .named(name: "bundle_imports", @@ -53,6 +53,7 @@ public struct ObjcBundle: BazelTarget { } + // https://github.com/bazelbuild/rules_apple/blob/0.13.0/doc/rules-resources.md#apple_resource_bundle public struct AppleResourceBundle: BazelTarget { let name: String @@ -361,7 +362,7 @@ public struct ObjcLibrary: BazelTarget, UserConfigurable, SourceExcludable { let prebuiltBundles = spec ^* liftToAttr(PodSpec.lens.resources .. ReadonlyLens { $0.filter { s in s.hasSuffix(".bundle") } - .map(ObjcBundle.extractBundleName) + .map(AppleBundleImport.extractBundleName) .map { k in ":\(spec.moduleName ?? spec.name)_Bundle_\(k)" } .map(bazelLabel)}) @@ -682,15 +683,28 @@ public struct ObjcLibrary: BazelTarget, UserConfigurable, SourceExcludable { value: (lib.copts.toSkylark() .+. buildConfigDependenctCOpts .+. getPodIQuotes().toSkylark() ) <> ["-fmodule-name=" + moduleName + "_pod_module"].toSkylark())) - if !lib.resources.isEmpty { - libArguments.append(.named(name: "resources", - value: lib.resources.toSkylark())) - } - if !lib.bundles.isEmpty { - libArguments.append(.named(name: "bundles", - value: lib.bundles.sorted(by: (<)).toSkylark())) + if !lib.bundles.isEmpty || !lib.resources.isEmpty { + let dataVal: SkylarkNode = [ + lib.bundles.isEmpty ? nil : lib.bundles.sorted(by: { (s1, s2) -> Bool in + return s1 < s2 + }).toSkylark(), + lib.resources.isEmpty ? nil : lib.resources.toSkylark() + ] + .compactMap { $0 } + .reduce([].toSkylark()) { (res, node) -> SkylarkNode in + if res.isEmpty { + return node + } + if node.isEmpty { + return res + } + return res .+. node + } + libArguments.append(.named(name: "data", + value: dataVal.toSkylark())) } + libArguments.append(.named( name: "visibility", value: ["//visibility:public"].toSkylark() diff --git a/Sources/PodToBUILD/SwiftLibrary.swift b/Sources/PodToBUILD/SwiftLibrary.swift index eb260c01..8513e5b0 100644 --- a/Sources/PodToBUILD/SwiftLibrary.swift +++ b/Sources/PodToBUILD/SwiftLibrary.swift @@ -7,7 +7,7 @@ // // Represent a swift_library in Bazel -// https://github.com/bazelbuild/rules_apple/blob/master/doc/rules-swift.md +// https://github.com/bazelbuild/rules_swift/blob/master/doc/rules.md#swift_library // Note: Swift support is currently in progress // TODO: // - XCConfig / compiler flags