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 + + +