Skip to content

Commit 6501fcc

Browse files
authored
fix: specify all defines as local using copts (#1094)
In an attempt to localize defines to specific targets, we specify defines/macros for all target types (e.g., `swift_library`, `objc_library`, and `cc_library`) targets using `copts`. Fixes #1093.
1 parent 018e6f0 commit 6501fcc

File tree

2 files changed

+36
-36
lines changed

2 files changed

+36
-36
lines changed

swiftpkg/internal/swiftpkg_build_files.bzl

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,13 @@ def _swift_target_build_file(pkg_ctx, target):
7171
deps_without_plugins = [dep for dep in deps if dep.value[0] not in plugins]
7272
attrs["deps"] = bzl_selects.to_starlark(deps_without_plugins)
7373

74-
defines = [
74+
# NOTE: We specify defines using copts so that they stay local to the
75+
# target. Specifying them using the defines attribute will propagate them.
76+
copts = [
7577
# SPM directive instructing the code to build as if a Swift package.
7678
# https://github.com/apple/swift-package-manager/blob/main/Documentation/Usage.md#packaging-legacy-code
77-
"SWIFT_PACKAGE",
79+
"-DSWIFT_PACKAGE",
7880
]
79-
copts = []
8081

8182
# GH046: Support plugins.
8283

@@ -89,8 +90,11 @@ def _swift_target_build_file(pkg_ctx, target):
8990

9091
if target.swift_settings != None:
9192
if len(target.swift_settings.defines) > 0:
92-
defines.extend(lists.flatten([
93-
bzl_selects.new_from_build_setting(bs)
93+
copts.extend(lists.flatten([
94+
bzl_selects.new_from_build_setting(
95+
bs,
96+
values_map_fn = lambda v: "-D" + v,
97+
)
9498
for bs in target.swift_settings.defines
9599
]))
96100
if len(target.swift_settings.unsafe_flags) > 0:
@@ -103,8 +107,6 @@ def _swift_target_build_file(pkg_ctx, target):
103107
copts.append("-enable-experimental-feature")
104108
copts.extend(lists.flatten(bzl_selects.new_from_build_setting(bs)))
105109

106-
if len(defines) > 0:
107-
attrs["defines"] = bzl_selects.to_starlark(defines)
108110
if len(copts) > 0:
109111
attrs["copts"] = bzl_selects.to_starlark(copts)
110112

@@ -233,29 +235,31 @@ def _clang_target_build_file(repository_ctx, pkg_ctx, target):
233235
if res_build_file:
234236
all_build_files.append(res_build_file)
235237

236-
defines = [
237-
# The SWIFT_PACKAGE define is a magical value that SPM uses when it
238-
# builds clang libraries that will be used as Swift modules.
239-
"SWIFT_PACKAGE=1",
240-
]
241-
242238
# The copts may be updated by functions that were executed before this
243239
# point. Use whatever has been set.
244240
copts = attrs.get("copts", [])
245241

242+
# The SWIFT_PACKAGE define is a magical value that SPM uses when it
243+
# builds clang libraries that will be used as Swift modules.
244+
copts.append("-DSWIFT_PACKAGE=1")
245+
246246
local_includes = [
247247
bzl_selects.new(value = p, kind = _condition_kinds.private_includes)
248248
for p in clang_src_info.private_includes
249249
]
250250

251+
def _normalize_and_create_copt_define(value):
252+
normalized = scg.normalize_define_value(value)
253+
return "-D" + normalized
254+
251255
all_settings = lists.compact([target.clang_settings, target.cxx_settings])
252256
for settings in all_settings:
253-
defines.extend(lists.flatten([
257+
copts.extend(lists.flatten([
254258
bzl_selects.new_from_build_setting(
255259
bs,
256260
# Define values can contain spaces. Bazel requires that they
257261
# are already escaped.
258-
values_map_fn = scg.normalize_define_value,
262+
values_map_fn = _normalize_and_create_copt_define,
259263
)
260264
for bs in settings.defines
261265
]))
@@ -336,8 +340,6 @@ def _clang_target_build_file(repository_ctx, pkg_ctx, target):
336340
},
337341
)
338342

339-
attrs["defines"] = bzl_selects.to_starlark(defines)
340-
341343
bzl_target_name = target.label.name
342344

343345
if target.objc_src_info != None:

swiftpkg/tests/swiftpkg_build_files_tests.bzl

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -578,7 +578,7 @@ load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library")
578578
swift_library(
579579
name = "RegularSwiftTargetAsLibrary.rspm",
580580
always_include_developer_search_paths = True,
581-
defines = ["SWIFT_PACKAGE"],
581+
copts = ["-DSWIFT_PACKAGE"],
582582
deps = [],
583583
module_name = "RegularSwiftTargetAsLibrary",
584584
srcs = ["Source/RegularSwiftTargetAsLibrary/RegularSwiftTargetAsLibrary.swift"],
@@ -599,7 +599,7 @@ load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library")
599599
swift_library(
600600
name = "RegularTargetForExec.rspm",
601601
always_include_developer_search_paths = True,
602-
defines = ["SWIFT_PACKAGE"],
602+
copts = ["-DSWIFT_PACKAGE"],
603603
deps = ["@swiftpkg_mypackage//:RegularSwiftTargetAsLibrary.rspm"],
604604
module_name = "RegularTargetForExec",
605605
srcs = ["Source/RegularTargetForExec/main.swift"],
@@ -616,7 +616,7 @@ load("@build_bazel_rules_swift//swift:swift.bzl", "swift_test")
616616
617617
swift_test(
618618
name = "RegularSwiftTargetAsLibraryTests.rspm",
619-
defines = ["SWIFT_PACKAGE"],
619+
copts = ["-DSWIFT_PACKAGE"],
620620
deps = ["@swiftpkg_mypackage//:RegularSwiftTargetAsLibrary.rspm"],
621621
module_name = "RegularSwiftTargetAsLibraryTests",
622622
srcs = ["Tests/RegularSwiftTargetAsLibraryTests/RegularSwiftTargetAsLibraryTests.swift"],
@@ -633,15 +633,15 @@ load("@build_bazel_rules_swift//swift:swift.bzl", "swift_binary")
633633
swift_binary(
634634
name = "SwiftExecutableTarget.rspm",
635635
copts = [
636+
"-DSWIFT_PACKAGE",
636637
"-enable-experimental-feature",
637638
"BuiltinModule",
638639
] + select({
639-
"@rules_swift_package_manager//config_settings/spm/configuration:release": ["-cross-module-optimization"],
640+
"@rules_swift_package_manager//config_settings/spm/platform:ios": ["-DFOOBAR"],
641+
"@rules_swift_package_manager//config_settings/spm/platform:tvos": ["-DFOOBAR"],
640642
"//conditions:default": [],
641-
}),
642-
defines = ["SWIFT_PACKAGE"] + select({
643-
"@rules_swift_package_manager//config_settings/spm/platform:ios": ["FOOBAR"],
644-
"@rules_swift_package_manager//config_settings/spm/platform:tvos": ["FOOBAR"],
643+
}) + select({
644+
"@rules_swift_package_manager//config_settings/spm/configuration:release": ["-cross-module-optimization"],
645645
"//conditions:default": [],
646646
}),
647647
deps = [],
@@ -663,16 +663,14 @@ cc_library(
663663
"-fobjc-arc",
664664
"-fPIC",
665665
"-fmodule-name=ClangLibrary",
666+
"-DSWIFT_PACKAGE=1",
667+
"-DPLATFORM_POSIX=1",
666668
"-Iexternal/bzlmodmangled~swiftpkg_mypackage/src",
667669
"-Iexternal/bzlmodmangled~swiftpkg_mypackage",
668670
] + select({
669671
"@rules_swift_package_manager//config_settings/spm/configuration:release": ["-danger"],
670672
"//conditions:default": [],
671673
}),
672-
defines = [
673-
"SWIFT_PACKAGE=1",
674-
"PLATFORM_POSIX=1",
675-
],
676674
hdrs = ["include/external.h"],
677675
includes = ["include"],
678676
srcs = [
@@ -707,9 +705,9 @@ objc_library(
707705
"-fobjc-arc",
708706
"-fPIC",
709707
"-fmodule-name=ObjcLibrary",
708+
"-DSWIFT_PACKAGE=1",
710709
"-Iexternal/bzlmodmangled~swiftpkg_mypackage/src",
711710
],
712-
defines = ["SWIFT_PACKAGE=1"],
713711
deps = [
714712
"@swiftpkg_mypackage//:ObjcLibraryDep.rspm",
715713
"@swiftpkg_mypackage//:ObjcLibraryDep.rspm_modulemap",
@@ -766,9 +764,9 @@ objc_library(
766764
"-fobjc-arc",
767765
"-fPIC",
768766
"-fmodule-name=ObjcLibraryWithModulemap",
767+
"-DSWIFT_PACKAGE=1",
769768
"-Iexternal/bzlmodmangled~swiftpkg_mypackage/src",
770769
],
771-
defines = ["SWIFT_PACKAGE=1"],
772770
deps = [
773771
"@swiftpkg_mypackage//:ObjcLibraryDep.rspm",
774772
"@swiftpkg_mypackage//:ObjcLibraryDep.rspm_modulemap",
@@ -812,7 +810,7 @@ load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library")
812810
swift_library(
813811
name = "SwiftLibraryWithConditionalDep.rspm",
814812
always_include_developer_search_paths = True,
815-
defines = ["SWIFT_PACKAGE"],
813+
copts = ["-DSWIFT_PACKAGE"],
816814
deps = ["@swiftpkg_mypackage//:ClangLibrary.rspm"] + select({
817815
"@rules_swift_package_manager//config_settings/spm/platform:ios": ["@swiftpkg_mypackage//:RegularSwiftTargetAsLibrary.rspm"],
818816
"@rules_swift_package_manager//config_settings/spm/platform:tvos": ["@swiftpkg_mypackage//:RegularSwiftTargetAsLibrary.rspm"],
@@ -837,9 +835,9 @@ cc_library(
837835
"-fobjc-arc",
838836
"-fPIC",
839837
"-fmodule-name=ClangLibraryWithConditionalDep",
838+
"-DSWIFT_PACKAGE=1",
840839
"-Iexternal/bzlmodmangled~swiftpkg_mypackage/src",
841840
],
842-
defines = ["SWIFT_PACKAGE=1"],
843841
deps = select({
844842
"@rules_swift_package_manager//config_settings/spm/platform:ios": ["@swiftpkg_mypackage//:ClangLibrary.rspm"],
845843
"@rules_swift_package_manager//config_settings/spm/platform:tvos": ["@swiftpkg_mypackage//:ClangLibrary.rspm"],
@@ -875,7 +873,7 @@ generate_modulemap(
875873
swift_library(
876874
name = "SwiftForObjcTarget.rspm",
877875
always_include_developer_search_paths = True,
878-
defines = ["SWIFT_PACKAGE"],
876+
copts = ["-DSWIFT_PACKAGE"],
879877
deps = [
880878
"@swiftpkg_mypackage//:ObjcLibraryDep.rspm",
881879
"@swiftpkg_mypackage//:ObjcLibraryDep.rspm_modulemap",
@@ -917,8 +915,8 @@ resource_bundle_infoplist(
917915
swift_library(
918916
name = "SwiftLibraryWithFilePathResource.rspm",
919917
always_include_developer_search_paths = True,
918+
copts = ["-DSWIFT_PACKAGE"],
920919
data = [":SwiftLibraryWithFilePathResource.rspm_resource_bundle"],
921-
defines = ["SWIFT_PACKAGE"],
922920
deps = [],
923921
module_name = "SwiftLibraryWithFilePathResource",
924922
srcs = [
@@ -962,10 +960,10 @@ objc_library(
962960
"-fPIC",
963961
"-fmodule-name=ObjcLibraryWithResources",
964962
"-include$(location :ObjcLibraryWithResources.rspm_objc_resource_bundle_accessor_hdr)",
963+
"-DSWIFT_PACKAGE=1",
965964
"-Iexternal/bzlmodmangled~swiftpkg_mypackage/src",
966965
],
967966
data = [":ObjcLibraryWithResources.rspm_resource_bundle"],
968-
defines = ["SWIFT_PACKAGE=1"],
969967
enable_modules = True,
970968
hdrs = ["include/external.h"],
971969
includes = ["include"],

0 commit comments

Comments
 (0)