Skip to content

Commit 3ebe7a2

Browse files
authored
macos: add xcframework Bazel targets (#4113)
1 parent fe89ca4 commit 3ebe7a2

6 files changed

Lines changed: 239 additions & 32 deletions

File tree

platform/BUILD.bazel

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,50 @@ objc_library(
242242
],
243243
)
244244

245+
# sdk for the macOS static target which includes the resources.
246+
objc_library(
247+
name = "macos-sdk",
248+
hdrs = [
249+
"//platform/darwin:darwin_objc_hdrs",
250+
"//platform/darwin:generated_style_public_hdrs",
251+
"//platform/macos:macos_public_hdrs",
252+
],
253+
data = ["//platform/macos:resources"],
254+
module_name = "MapLibre",
255+
sdk_dylibs = [
256+
"libz",
257+
"libsqlite3",
258+
"libc++",
259+
],
260+
sdk_frameworks = [
261+
"Security",
262+
],
263+
visibility = ["//visibility:public"],
264+
deps = [
265+
":macos-objc",
266+
":macos-objcpp",
267+
],
268+
)
269+
270+
# sdk for the macOS dynamic target. Lacking the resources bundle since for dynamic
271+
# they are in the main package.
272+
objc_library(
273+
name = "macos-sdk-dynamic",
274+
sdk_dylibs = [
275+
"libz",
276+
"libsqlite3",
277+
"libc++",
278+
],
279+
sdk_frameworks = [
280+
"Security",
281+
],
282+
visibility = ["//visibility:public"],
283+
deps = [
284+
":macos-objc",
285+
":macos-objcpp",
286+
],
287+
)
288+
245289
objc_library(
246290
name = "app_custom_drawable_layer_objcpp_srcs",
247291
srcs = [

platform/default/BUILD.bazel

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,12 @@ cc_library(
8686
"src/mbgl/util/timer.cpp",
8787
"src/mbgl/util/webp_reader.cpp",
8888
],
89-
"@platforms//os:osx": [
89+
"//platform/macos:macos_libuv_loop": [
9090
"src/mbgl/util/async_task.cpp",
9191
"src/mbgl/util/run_loop.cpp",
9292
"src/mbgl/util/timer.cpp",
9393
],
94+
"//platform/macos:macos_cfrunloop_loop": [],
9495
"//conditions:default": [],
9596
}),
9697
hdrs = [
@@ -114,7 +115,7 @@ cc_library(
114115
"include",
115116
],
116117
linkopts = select({
117-
"@platforms//os:macos": [
118+
"//platform/macos:macos_libuv_loop": [
118119
"-lsqlite3",
119120
"-luv",
120121
"-lz",
@@ -126,6 +127,15 @@ cc_library(
126127
"-licui18n",
127128
"-licudata",
128129
],
130+
"//platform/macos:macos_cfrunloop_loop": [
131+
"-lsqlite3",
132+
"-lz",
133+
"-lcurl",
134+
"-lpng",
135+
"-ljpeg",
136+
"-lwebp",
137+
"-licucore",
138+
],
129139
"//conditions:default": [],
130140
}),
131141
visibility = [
@@ -147,10 +157,14 @@ cc_library(
147157
"default-collator",
148158
"//vendor:sqlite",
149159
],
150-
"@platforms//os:osx": [
160+
"//platform/macos:macos_libuv_loop": [
151161
":default-collator",
152162
"//platform/darwin:darwin-loop",
153163
"@libuv",
154164
],
165+
"//platform/macos:macos_cfrunloop_loop": [
166+
":default-collator",
167+
"//platform/darwin:darwin-loop",
168+
],
155169
}),
156170
)

platform/macos/BUILD.bazel

Lines changed: 126 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
load("@aspect_rules_js//js:defs.bzl", "js_library")
2+
load("@bazel_skylib//rules:common_settings.bzl", "string_flag")
3+
load("@rules_apple//apple:apple.bzl", "apple_static_xcframework", "apple_xcframework")
24
load("@rules_apple//apple:macos.bzl", "macos_command_line_application")
5+
load("@rules_apple//apple:resources.bzl", "apple_resource_bundle")
6+
load("@rules_apple//apple:versioning.bzl", "apple_bundle_version")
37
load(
48
"@rules_xcodeproj//xcodeproj:defs.bzl",
59
"top_level_target",
@@ -9,11 +13,42 @@ load(
913
"bazel/files.bzl",
1014
"MLN_MACOS_PRIVATE_HEADERS",
1115
"MLN_MACOS_PUBLIC_HEADERS",
12-
"MLN_MACOS_PUBLIC_METAL_HEADERS",
13-
"MLN_MACOS_PUBLIC_OBJCPP_METAL_SOURCE",
1416
"MLN_MACOS_PUBLIC_OBJCPP_SOURCE",
1517
"MLN_MACOS_PUBLIC_OBJC_SOURCE",
1618
)
19+
load("//platform/ios/bazel:macros.bzl", "info_plist")
20+
21+
# Selects the macOS event loop implementation
22+
# Use --//platform/macos:macos_loop=cfrunloop for AppKit/SwiftUI apps (xcframework builds)
23+
# Default is libuv for backwards compatibility with existing targets
24+
25+
string_flag(
26+
name = "macos_loop",
27+
build_setting_default = "libuv",
28+
values = [
29+
"cfrunloop",
30+
"libuv",
31+
],
32+
visibility = ["//visibility:public"],
33+
)
34+
35+
config_setting(
36+
name = "macos_libuv_loop",
37+
constraint_values = ["@platforms//os:osx"],
38+
flag_values = {
39+
":macos_loop": "libuv",
40+
},
41+
visibility = ["//visibility:public"],
42+
)
43+
44+
config_setting(
45+
name = "macos_cfrunloop_loop",
46+
constraint_values = ["@platforms//os:osx"],
47+
flag_values = {
48+
":macos_loop": "cfrunloop",
49+
},
50+
visibility = ["//visibility:public"],
51+
)
1752

1853
filegroup(
1954
name = "macos_private_hdrs",
@@ -23,13 +58,13 @@ filegroup(
2358

2459
filegroup(
2560
name = "macos_public_hdrs",
26-
srcs = MLN_MACOS_PUBLIC_HEADERS + MLN_MACOS_PUBLIC_METAL_HEADERS,
61+
srcs = MLN_MACOS_PUBLIC_HEADERS,
2762
visibility = ["//visibility:public"],
2863
)
2964

3065
filegroup(
3166
name = "macos_objcpp_srcs",
32-
srcs = MLN_MACOS_PUBLIC_OBJCPP_SOURCE + MLN_MACOS_PUBLIC_OBJCPP_METAL_SOURCE,
67+
srcs = MLN_MACOS_PUBLIC_OBJCPP_SOURCE,
3368
visibility = ["//visibility:public"],
3469
)
3570

@@ -39,6 +74,93 @@ filegroup(
3974
visibility = ["//visibility:public"],
4075
)
4176

77+
info_plist(
78+
name = "info_plist",
79+
out = "Info.plist",
80+
base_info_plist = "framework/Info.plist",
81+
)
82+
83+
info_plist(
84+
name = "info_static_plist",
85+
out = "Info-static.plist",
86+
base_info_plist = "framework/Info-static.plist",
87+
)
88+
89+
genrule(
90+
name = "mln_defines",
91+
outs = ["MLNDefines.h"],
92+
cmd = select({
93+
"//:metal_renderer": "echo '#define MLN_RENDER_BACKEND_METAL 1' > $@",
94+
"//conditions:default": "echo '' > $@",
95+
}),
96+
)
97+
98+
public_hdrs = [
99+
":mln_defines",
100+
":macos_public_hdrs",
101+
"//platform/darwin:darwin_objc_hdrs",
102+
"//platform/darwin:generated_style_public_hdrs",
103+
]
104+
105+
apple_bundle_version(
106+
name = "maplibre_macos_version",
107+
build_label_pattern = "maplibre_macos_{version}",
108+
build_version = "{version}",
109+
capture_groups = {
110+
"version": "[0-9]+.[0-9]+.[0-9]+",
111+
},
112+
fallback_build_label = "maplibre_macos_1.2.3456789",
113+
short_version_string = "{version}",
114+
)
115+
116+
apple_resource_bundle(
117+
name = "resources",
118+
bundle_id = "com.maplibre.mapbox",
119+
bundle_name = "Mapbox",
120+
infoplists = ["info_static_plist"],
121+
resources = glob([
122+
"sdk/*.lproj/**",
123+
"sdk/*.pdf",
124+
]),
125+
visibility = ["//visibility:public"],
126+
)
127+
128+
apple_static_xcframework(
129+
name = "MapLibre.static",
130+
bundle_id = "com.maplibre.mapbox",
131+
bundle_name = "MapLibre",
132+
infoplists = ["info_static_plist"],
133+
macos = [
134+
"x86_64",
135+
"arm64",
136+
],
137+
minimum_os_versions = {"macos": "13.0"},
138+
public_hdrs = public_hdrs,
139+
version = ":maplibre_macos_version",
140+
visibility = ["//visibility:public"],
141+
deps = ["//platform:macos-sdk"],
142+
)
143+
144+
apple_xcframework(
145+
name = "MapLibre.dynamic",
146+
bundle_id = "com.maplibre.mapbox",
147+
bundle_name = "MapLibre",
148+
data = glob([
149+
"sdk/*.lproj/**",
150+
"sdk/*.pdf",
151+
]),
152+
infoplists = ["info_plist"],
153+
macos = [
154+
"x86_64",
155+
"arm64",
156+
],
157+
minimum_os_versions = {"macos": "13.0"},
158+
public_hdrs = public_hdrs,
159+
version = ":maplibre_macos_version",
160+
visibility = ["//visibility:public"],
161+
deps = ["//platform:macos-sdk-dynamic"],
162+
)
163+
42164
macos_command_line_application(
43165
name = "MapLibreMac",
44166
minimum_deployment_os_version = "13.0",
@@ -78,7 +200,6 @@ exports_files(
78200
MLN_MACOS_PRIVATE_HEADERS +
79201
MLN_MACOS_PUBLIC_HEADERS +
80202
MLN_MACOS_PUBLIC_OBJCPP_SOURCE +
81-
MLN_MACOS_PUBLIC_OBJCPP_METAL_SOURCE +
82203
MLN_MACOS_PUBLIC_OBJC_SOURCE,
83204
)
84205

platform/macos/bazel/files.bzl

Lines changed: 8 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,12 @@ MLN_MACOS_PUBLIC_OBJCPP_SOURCE = [
22
"src/MLNAttributionButton.mm",
33
"src/MLNMapView+IBAdditions.mm",
44
"src/MLNMapView+Impl.mm",
5+
"src/MLNMapView+Metal.mm",
56
"src/MLNMapView.mm",
67
"src/NSColor+MLNAdditions.mm",
78
"src/NSImage+MLNAdditions.mm",
89
]
910

10-
MLN_MACOS_PUBLIC_OBJCPP_OPENGL_SOURCE = [
11-
"src/MLNMapView+OpenGL.mm",
12-
"src/MLNOpenGLLayer.mm",
13-
]
14-
15-
MLN_MACOS_PUBLIC_METAL_HEADERS = [
16-
"src/MLNMapView+Metal.h",
17-
]
18-
19-
MLN_MACOS_PUBLIC_OBJCPP_METAL_SOURCE = [
20-
"src/MLNMapView+Metal.mm",
21-
]
22-
23-
MLN_MACOS_PUBLIC_OPENGL_HEADERS = [
24-
"src/MLNOpenGLLayer.h",
25-
"src/MLNMapView+OpenGL.h",
26-
]
27-
2811
MLN_MACOS_PUBLIC_OBJC_SOURCE = [
2912
"src/MLNAnnotationImage.m",
3013
"src/MLNCompassCell.m",
@@ -33,19 +16,20 @@ MLN_MACOS_PUBLIC_OBJC_SOURCE = [
3316

3417
MLN_MACOS_PUBLIC_HEADERS = [
3518
"src/MLNAnnotationImage.h",
36-
"src/NSImage+MLNAdditions.h",
37-
"src/NSColor+MLNAdditions.h",
38-
"src/NSProcessInfo+MLNAdditions.h",
39-
"src/MLNCompassCell.h",
4019
"src/MLNAttributionButton.h",
41-
"src/MLNMapView+Impl.h",
20+
"src/MLNCompassCell.h",
4221
"src/MLNMapView+IBAdditions.h",
43-
"src/MLNMapViewDelegate.h",
4422
"src/MLNMapView.h",
23+
"src/MLNMapViewDelegate.h",
4524
"src/Mapbox.h",
25+
"src/NSProcessInfo+MLNAdditions.h",
4626
]
4727

4828
MLN_MACOS_PRIVATE_HEADERS = [
4929
"src/MLNAnnotationImage_Private.h",
30+
"src/MLNMapView+Impl.h",
31+
"src/MLNMapView+Metal.h",
5032
"src/MLNMapView_Private.h",
33+
"src/NSColor+MLNAdditions.h",
34+
"src/NSImage+MLNAdditions.h",
5135
]
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>CFBundleDevelopmentRegion</key>
6+
<string>en</string>
7+
<key>CFBundleIdentifier</key>
8+
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
9+
<key>CFBundleInfoDictionaryVersion</key>
10+
<string>6.0</string>
11+
<key>CFBundleName</key>
12+
<string>$(PRODUCT_NAME)</string>
13+
<key>CFBundleSignature</key>
14+
<string>????</string>
15+
<key>CFBundleVersion</key>
16+
<string>15256</string>
17+
<key>NSPrincipalClass</key>
18+
<string></string>
19+
</dict>
20+
</plist>
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>CFBundleDevelopmentRegion</key>
6+
<string>en</string>
7+
<key>CFBundleExecutable</key>
8+
<string>$(EXECUTABLE_NAME)</string>
9+
<key>CFBundleIdentifier</key>
10+
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
11+
<key>CFBundleInfoDictionaryVersion</key>
12+
<string>6.0</string>
13+
<key>CFBundleName</key>
14+
<string>$(PRODUCT_NAME)</string>
15+
<key>CFBundlePackageType</key>
16+
<string>FMWK</string>
17+
<key>CFBundleSignature</key>
18+
<string>????</string>
19+
<key>CFBundleVersion</key>
20+
<string>15256</string>
21+
<key>NSPrincipalClass</key>
22+
<string></string>
23+
</dict>
24+
</plist>

0 commit comments

Comments
 (0)