diff --git a/platform/BUILD.bazel b/platform/BUILD.bazel
index 731b0e347..414d32c64 100644
--- a/platform/BUILD.bazel
+++ b/platform/BUILD.bazel
@@ -242,6 +242,50 @@ objc_library(
],
)
+# sdk for the macOS static target which includes the resources.
+objc_library(
+ name = "macos-sdk",
+ hdrs = [
+ "//platform/darwin:darwin_objc_hdrs",
+ "//platform/darwin:generated_style_public_hdrs",
+ "//platform/macos:macos_public_hdrs",
+ ],
+ data = ["//platform/macos:resources"],
+ module_name = "MapLibre",
+ sdk_dylibs = [
+ "libz",
+ "libsqlite3",
+ "libc++",
+ ],
+ sdk_frameworks = [
+ "Security",
+ ],
+ visibility = ["//visibility:public"],
+ deps = [
+ ":macos-objc",
+ ":macos-objcpp",
+ ],
+)
+
+# sdk for the macOS dynamic target. Lacking the resources bundle since for dynamic
+# they are in the main package.
+objc_library(
+ name = "macos-sdk-dynamic",
+ sdk_dylibs = [
+ "libz",
+ "libsqlite3",
+ "libc++",
+ ],
+ sdk_frameworks = [
+ "Security",
+ ],
+ visibility = ["//visibility:public"],
+ deps = [
+ ":macos-objc",
+ ":macos-objcpp",
+ ],
+)
+
objc_library(
name = "app_custom_drawable_layer_objcpp_srcs",
srcs = [
diff --git a/platform/default/BUILD.bazel b/platform/default/BUILD.bazel
index e22c12db9..2f686c7ed 100644
--- a/platform/default/BUILD.bazel
+++ b/platform/default/BUILD.bazel
@@ -86,11 +86,12 @@ cc_library(
"src/mbgl/util/timer.cpp",
"src/mbgl/util/webp_reader.cpp",
],
- "@platforms//os:osx": [
+ "//platform/macos:macos_libuv_loop": [
"src/mbgl/util/async_task.cpp",
"src/mbgl/util/run_loop.cpp",
"src/mbgl/util/timer.cpp",
],
+ "//platform/macos:macos_cfrunloop_loop": [],
"//conditions:default": [],
}),
hdrs = [
@@ -114,7 +115,7 @@ cc_library(
"include",
],
linkopts = select({
- "@platforms//os:macos": [
+ "//platform/macos:macos_libuv_loop": [
"-lsqlite3",
"-luv",
"-lz",
@@ -126,6 +127,15 @@ cc_library(
"-licui18n",
"-licudata",
],
+ "//platform/macos:macos_cfrunloop_loop": [
+ "-lsqlite3",
+ "-lz",
+ "-lcurl",
+ "-lpng",
+ "-ljpeg",
+ "-lwebp",
+ "-licucore",
+ ],
"//conditions:default": [],
}),
visibility = [
@@ -147,10 +157,14 @@ cc_library(
"default-collator",
"//vendor:sqlite",
],
- "@platforms//os:osx": [
+ "//platform/macos:macos_libuv_loop": [
":default-collator",
"//platform/darwin:darwin-loop",
"@libuv",
],
+ "//platform/macos:macos_cfrunloop_loop": [
+ ":default-collator",
+ "//platform/darwin:darwin-loop",
+ ],
}),
)
diff --git a/platform/macos/BUILD.bazel b/platform/macos/BUILD.bazel
index af9bebb9c..6118fb939 100644
--- a/platform/macos/BUILD.bazel
+++ b/platform/macos/BUILD.bazel
@@ -1,5 +1,9 @@
load("@aspect_rules_js//js:defs.bzl", "js_library")
+load("@bazel_skylib//rules:common_settings.bzl", "string_flag")
+load("@rules_apple//apple:apple.bzl", "apple_static_xcframework", "apple_xcframework")
load("@rules_apple//apple:macos.bzl", "macos_command_line_application")
+load("@rules_apple//apple:resources.bzl", "apple_resource_bundle")
+load("@rules_apple//apple:versioning.bzl", "apple_bundle_version")
load(
"@rules_xcodeproj//xcodeproj:defs.bzl",
"top_level_target",
@@ -9,11 +13,42 @@ load(
"bazel/files.bzl",
"MLN_MACOS_PRIVATE_HEADERS",
"MLN_MACOS_PUBLIC_HEADERS",
- "MLN_MACOS_PUBLIC_METAL_HEADERS",
- "MLN_MACOS_PUBLIC_OBJCPP_METAL_SOURCE",
"MLN_MACOS_PUBLIC_OBJCPP_SOURCE",
"MLN_MACOS_PUBLIC_OBJC_SOURCE",
)
+load("//platform/ios/bazel:macros.bzl", "info_plist")
+
+# Selects the macOS event loop implementation
+# Use --//platform/macos:macos_loop=cfrunloop for AppKit/SwiftUI apps (xcframework builds)
+# Default is libuv for backwards compatibility with existing targets
+
+string_flag(
+ name = "macos_loop",
+ build_setting_default = "libuv",
+ values = [
+ "cfrunloop",
+ "libuv",
+ ],
+ visibility = ["//visibility:public"],
+)
+
+config_setting(
+ name = "macos_libuv_loop",
+ constraint_values = ["@platforms//os:osx"],
+ flag_values = {
+ ":macos_loop": "libuv",
+ },
+ visibility = ["//visibility:public"],
+)
+
+config_setting(
+ name = "macos_cfrunloop_loop",
+ constraint_values = ["@platforms//os:osx"],
+ flag_values = {
+ ":macos_loop": "cfrunloop",
+ },
+ visibility = ["//visibility:public"],
+)
filegroup(
name = "macos_private_hdrs",
@@ -23,13 +58,13 @@ filegroup(
filegroup(
name = "macos_public_hdrs",
- srcs = MLN_MACOS_PUBLIC_HEADERS + MLN_MACOS_PUBLIC_METAL_HEADERS,
+ srcs = MLN_MACOS_PUBLIC_HEADERS,
visibility = ["//visibility:public"],
)
filegroup(
name = "macos_objcpp_srcs",
- srcs = MLN_MACOS_PUBLIC_OBJCPP_SOURCE + MLN_MACOS_PUBLIC_OBJCPP_METAL_SOURCE,
+ srcs = MLN_MACOS_PUBLIC_OBJCPP_SOURCE,
visibility = ["//visibility:public"],
)
@@ -39,6 +74,93 @@ filegroup(
visibility = ["//visibility:public"],
)
+info_plist(
+ name = "info_plist",
+ out = "Info.plist",
+ base_info_plist = "framework/Info.plist",
+)
+
+info_plist(
+ name = "info_static_plist",
+ out = "Info-static.plist",
+ base_info_plist = "framework/Info-static.plist",
+)
+
+genrule(
+ name = "mln_defines",
+ outs = ["MLNDefines.h"],
+ cmd = select({
+ "//:metal_renderer": "echo '#define MLN_RENDER_BACKEND_METAL 1' > $@",
+ "//conditions:default": "echo '' > $@",
+ }),
+)
+
+public_hdrs = [
+ ":mln_defines",
+ ":macos_public_hdrs",
+ "//platform/darwin:darwin_objc_hdrs",
+ "//platform/darwin:generated_style_public_hdrs",
+]
+
+apple_bundle_version(
+ name = "maplibre_macos_version",
+ build_label_pattern = "maplibre_macos_{version}",
+ build_version = "{version}",
+ capture_groups = {
+ "version": "[0-9]+.[0-9]+.[0-9]+",
+ },
+ fallback_build_label = "maplibre_macos_1.2.3456789",
+ short_version_string = "{version}",
+)
+
+apple_resource_bundle(
+ name = "resources",
+ bundle_id = "com.maplibre.mapbox",
+ bundle_name = "Mapbox",
+ infoplists = ["info_static_plist"],
+ resources = glob([
+ "sdk/*.lproj/**",
+ "sdk/*.pdf",
+ ]),
+ visibility = ["//visibility:public"],
+)
+
+apple_static_xcframework(
+ name = "MapLibre.static",
+ bundle_id = "com.maplibre.mapbox",
+ bundle_name = "MapLibre",
+ infoplists = ["info_static_plist"],
+ macos = [
+ "x86_64",
+ "arm64",
+ ],
+ minimum_os_versions = {"macos": "13.0"},
+ public_hdrs = public_hdrs,
+ version = ":maplibre_macos_version",
+ visibility = ["//visibility:public"],
+ deps = ["//platform:macos-sdk"],
+)
+
+apple_xcframework(
+ name = "MapLibre.dynamic",
+ bundle_id = "com.maplibre.mapbox",
+ bundle_name = "MapLibre",
+ data = glob([
+ "sdk/*.lproj/**",
+ "sdk/*.pdf",
+ ]),
+ infoplists = ["info_plist"],
+ macos = [
+ "x86_64",
+ "arm64",
+ ],
+ minimum_os_versions = {"macos": "13.0"},
+ public_hdrs = public_hdrs,
+ version = ":maplibre_macos_version",
+ visibility = ["//visibility:public"],
+ deps = ["//platform:macos-sdk-dynamic"],
+)
+
macos_command_line_application(
name = "MapLibreMac",
minimum_deployment_os_version = "13.0",
@@ -78,7 +200,6 @@ exports_files(
MLN_MACOS_PRIVATE_HEADERS +
MLN_MACOS_PUBLIC_HEADERS +
MLN_MACOS_PUBLIC_OBJCPP_SOURCE +
- MLN_MACOS_PUBLIC_OBJCPP_METAL_SOURCE +
MLN_MACOS_PUBLIC_OBJC_SOURCE,
)
diff --git a/platform/macos/bazel/files.bzl b/platform/macos/bazel/files.bzl
index 889fabb1b..b61f5669b 100644
--- a/platform/macos/bazel/files.bzl
+++ b/platform/macos/bazel/files.bzl
@@ -2,29 +2,12 @@ MLN_MACOS_PUBLIC_OBJCPP_SOURCE = [
"src/MLNAttributionButton.mm",
"src/MLNMapView+IBAdditions.mm",
"src/MLNMapView+Impl.mm",
+ "src/MLNMapView+Metal.mm",
"src/MLNMapView.mm",
"src/NSColor+MLNAdditions.mm",
"src/NSImage+MLNAdditions.mm",
]
-MLN_MACOS_PUBLIC_OBJCPP_OPENGL_SOURCE = [
- "src/MLNMapView+OpenGL.mm",
- "src/MLNOpenGLLayer.mm",
-]
-
-MLN_MACOS_PUBLIC_METAL_HEADERS = [
- "src/MLNMapView+Metal.h",
-]
-
-MLN_MACOS_PUBLIC_OBJCPP_METAL_SOURCE = [
- "src/MLNMapView+Metal.mm",
-]
-
-MLN_MACOS_PUBLIC_OPENGL_HEADERS = [
- "src/MLNOpenGLLayer.h",
- "src/MLNMapView+OpenGL.h",
-]
-
MLN_MACOS_PUBLIC_OBJC_SOURCE = [
"src/MLNAnnotationImage.m",
"src/MLNCompassCell.m",
@@ -33,19 +16,20 @@ MLN_MACOS_PUBLIC_OBJC_SOURCE = [
MLN_MACOS_PUBLIC_HEADERS = [
"src/MLNAnnotationImage.h",
- "src/NSImage+MLNAdditions.h",
- "src/NSColor+MLNAdditions.h",
- "src/NSProcessInfo+MLNAdditions.h",
- "src/MLNCompassCell.h",
"src/MLNAttributionButton.h",
- "src/MLNMapView+Impl.h",
+ "src/MLNCompassCell.h",
"src/MLNMapView+IBAdditions.h",
- "src/MLNMapViewDelegate.h",
"src/MLNMapView.h",
+ "src/MLNMapViewDelegate.h",
"src/Mapbox.h",
+ "src/NSProcessInfo+MLNAdditions.h",
]
MLN_MACOS_PRIVATE_HEADERS = [
"src/MLNAnnotationImage_Private.h",
+ "src/MLNMapView+Impl.h",
+ "src/MLNMapView+Metal.h",
"src/MLNMapView_Private.h",
+ "src/NSColor+MLNAdditions.h",
+ "src/NSImage+MLNAdditions.h",
]
diff --git a/platform/macos/framework/Info-static.plist b/platform/macos/framework/Info-static.plist
new file mode 100644
index 000000000..a4d8b7330
--- /dev/null
+++ b/platform/macos/framework/Info-static.plist
@@ -0,0 +1,20 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 15256
+ NSPrincipalClass
+
+
+
diff --git a/platform/macos/framework/Info.plist b/platform/macos/framework/Info.plist
new file mode 100644
index 000000000..323e2211d
--- /dev/null
+++ b/platform/macos/framework/Info.plist
@@ -0,0 +1,24 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 15256
+ NSPrincipalClass
+
+
+