Skip to content

Commit 367389a

Browse files
authored
[bazel] For SwiftSyntax to compile with optimizations (realm#4311)
This avoids potential stack overflows and slowness when just working on SwiftLint itself with bazel. These compiles take a lot longer but as long as you're not updating swift-syntax that should be a 1 time penalty
1 parent ef248f6 commit 367389a

3 files changed

Lines changed: 63 additions & 13 deletions

File tree

BUILD

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,7 @@ swift_library(
2121
visibility = ["//visibility:public"],
2222
deps = [
2323
"@com_github_jpsim_sourcekitten//:SourceKittenFramework",
24-
"@com_github_apple_swift_syntax//:SwiftSyntax",
25-
"@com_github_apple_swift_syntax//:SwiftSyntaxBuilder",
26-
"@com_github_apple_swift_syntax//:SwiftParser",
27-
"@com_github_apple_swift_syntax//:SwiftOperators",
24+
"@com_github_apple_swift_syntax//:optlibs",
2825
"@sourcekitten_com_github_jpsim_yams//:Yams",
2926
] + select({
3027
"@platforms//os:linux": ["@com_github_krzyzanowskim_cryptoswift//:CryptoSwift"],
@@ -34,8 +31,8 @@ swift_library(
3431

3532
swift_library(
3633
name = "swiftlint.library",
37-
module_name = "swiftlint",
3834
srcs = glob(["Source/swiftlint/**/*.swift"]),
35+
module_name = "swiftlint",
3936
visibility = ["//visibility:public"],
4037
deps = [
4138
":SwiftLintFramework",

bazel/SwiftSyntax.BUILD

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library")
2+
load("@//bazel:opt_wrapper.bzl", "opt_wrapper")
23

34
cc_library(
45
name = "_CSwiftSyntax",
@@ -13,45 +14,62 @@ swift_library(
1314
srcs = glob(["Sources/SwiftSyntax/**/*.swift"]),
1415
module_name = "SwiftSyntax",
1516
private_deps = ["_CSwiftSyntax"],
16-
visibility = ["//visibility:public"],
1717
)
1818

1919
swift_library(
2020
name = "SwiftBasicFormat",
2121
srcs = glob(["Sources/SwiftBasicFormat/**/*.swift"]),
2222
module_name = "SwiftBasicFormat",
23-
visibility = ["//visibility:public"],
2423
deps = [":SwiftSyntax"],
2524
)
2625

2726
swift_library(
2827
name = "SwiftDiagnostics",
2928
srcs = glob(["Sources/SwiftDiagnostics/**/*.swift"]),
3029
module_name = "SwiftDiagnostics",
31-
visibility = ["//visibility:public"],
3230
deps = [":SwiftSyntax"],
3331
)
3432

3533
swift_library(
3634
name = "SwiftParser",
3735
srcs = glob(["Sources/SwiftParser/**/*.swift"]),
3836
module_name = "SwiftParser",
39-
visibility = ["//visibility:public"],
40-
deps = [":SwiftSyntax", ":SwiftDiagnostics", ":SwiftBasicFormat"],
37+
deps = [
38+
":SwiftBasicFormat",
39+
":SwiftDiagnostics",
40+
":SwiftSyntax",
41+
],
4142
)
4243

4344
swift_library(
4445
name = "SwiftSyntaxBuilder",
4546
srcs = glob(["Sources/SwiftSyntaxBuilder/**/*.swift"]),
4647
module_name = "SwiftSyntaxBuilder",
47-
visibility = ["//visibility:public"],
48-
deps = [":SwiftSyntax", ":SwiftBasicFormat", ":SwiftParser"],
48+
deps = [
49+
":SwiftBasicFormat",
50+
":SwiftParser",
51+
":SwiftSyntax",
52+
],
4953
)
5054

5155
swift_library(
5256
name = "SwiftOperators",
5357
srcs = glob(["Sources/SwiftOperators/**/*.swift"]),
5458
module_name = "SwiftOperators",
59+
deps = [
60+
":SwiftDiagnostics",
61+
":SwiftParser",
62+
":SwiftSyntax",
63+
],
64+
)
65+
66+
opt_wrapper(
67+
name = "optlibs",
5568
visibility = ["//visibility:public"],
56-
deps = [":SwiftSyntax", ":SwiftDiagnostics", ":SwiftParser"],
69+
deps = [
70+
":SwiftOperators",
71+
":SwiftParser",
72+
":SwiftSyntax",
73+
":SwiftSyntaxBuilder",
74+
],
5775
)

bazel/opt_wrapper.bzl

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
load("@build_bazel_rules_swift//swift:swift.bzl", "SwiftInfo", "swift_common")
2+
3+
def _force_opt_impl(_settings, _attr):
4+
return {"//command_line_option:compilation_mode": "opt"}
5+
6+
_force_opt = transition(
7+
implementation = _force_opt_impl,
8+
inputs = [],
9+
outputs = ["//command_line_option:compilation_mode"],
10+
)
11+
12+
def _impl(ctx):
13+
ccinfos = []
14+
swiftinfos = []
15+
16+
for dep in ctx.attr.deps:
17+
ccinfos.append(dep[CcInfo])
18+
swiftinfos.append(dep[SwiftInfo])
19+
20+
return [
21+
cc_common.merge_cc_infos(direct_cc_infos = ccinfos),
22+
swift_common.create_swift_info(swift_infos = swiftinfos),
23+
]
24+
25+
opt_wrapper = rule(
26+
implementation = _impl,
27+
attrs = {
28+
"deps": attr.label_list(
29+
cfg = _force_opt,
30+
),
31+
"_allowlist_function_transition": attr.label(
32+
default = "@bazel_tools//tools/allowlists/function_transition_allowlist",
33+
),
34+
},
35+
)

0 commit comments

Comments
 (0)