300 lines
7.6 KiB
Python
300 lines
7.6 KiB
Python
load("@aspect_rules_js//js:defs.bzl", "js_binary", "js_library", "js_run_binary")
|
|
load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
|
|
load("@npm//:defs.bzl", "npm_link_all_packages")
|
|
load("@rules_cc//cc:defs.bzl", "cc_library")
|
|
load(
|
|
"//bazel:core.bzl",
|
|
"MLN_LAYER_PLUGIN_HEADERS",
|
|
"MLN_LAYER_PLUGIN_SOURCE",
|
|
"MLN_CORE_HEADERS",
|
|
"MLN_CORE_SOURCE",
|
|
"MLN_DRAWABLES_GL_HEADERS",
|
|
"MLN_DRAWABLES_GL_SOURCE",
|
|
"MLN_DRAWABLES_HEADERS",
|
|
"MLN_DRAWABLES_MTL_HEADERS",
|
|
"MLN_DRAWABLES_MTL_SOURCE",
|
|
"MLN_DRAWABLES_SOURCE",
|
|
"MLN_GENERATED_OPENGL_SHADER_HEADERS",
|
|
"MLN_GENERATED_SHADER_HEADERS",
|
|
"MLN_GENERATED_SHADER_SOURCE",
|
|
"MLN_GENERATED_STYLE_SOURCE",
|
|
"MLN_OPENGL_HEADERS",
|
|
"MLN_OPENGL_SOURCE",
|
|
"MLN_PRIVATE_GENERATED_STYLE_HEADERS",
|
|
"MLN_PUBLIC_GENERATED_STYLE_HEADERS",
|
|
"MLN_SHAPING_HARFBUZZ_SRCS",
|
|
)
|
|
load("//bazel:flags.bzl", "CPP_FLAGS", "MAPLIBRE_FLAGS")
|
|
|
|
# Generate code required by the core
|
|
|
|
js_run_binary(
|
|
name = "generated_style_code",
|
|
srcs = glob(
|
|
["**/*.ejs"],
|
|
allow_empty = False,
|
|
),
|
|
outs = MLN_PUBLIC_GENERATED_STYLE_HEADERS +
|
|
MLN_PRIVATE_GENERATED_STYLE_HEADERS +
|
|
MLN_GENERATED_STYLE_SOURCE,
|
|
tool = ":generate-style-code-script",
|
|
)
|
|
|
|
js_run_binary(
|
|
name = "generated_shaders",
|
|
srcs = ["shaders/manifest.json"] + glob(
|
|
["shaders/*.glsl"],
|
|
allow_empty = False,
|
|
),
|
|
outs = MLN_GENERATED_SHADER_HEADERS +
|
|
MLN_GENERATED_SHADER_SOURCE +
|
|
MLN_GENERATED_OPENGL_SHADER_HEADERS,
|
|
tool = ":generate-shader-code-script",
|
|
)
|
|
|
|
# This header only target strips the __generated__ prefix for the compiler
|
|
# search paths, making the location of generated code transparent to the build
|
|
cc_library(
|
|
name = "mbgl-core-generated-public-artifacts",
|
|
hdrs = [
|
|
":generated_shaders",
|
|
":generated_style_code",
|
|
] + MLN_PUBLIC_GENERATED_STYLE_HEADERS +
|
|
MLN_GENERATED_SHADER_HEADERS +
|
|
select({
|
|
"//:metal_renderer": [],
|
|
"//conditions:default": MLN_GENERATED_OPENGL_SHADER_HEADERS,
|
|
}),
|
|
visibility = ["//visibility:public"],
|
|
)
|
|
|
|
# ditto, but for private headers (under the src/ path)
|
|
cc_library(
|
|
name = "mbgl-core-generated-private-artifacts",
|
|
hdrs = [":generated_style_code"] + MLN_PRIVATE_GENERATED_STYLE_HEADERS,
|
|
visibility = ["//visibility:private"],
|
|
)
|
|
|
|
# Generated source is inserted directly into the core target, no need to remove
|
|
# the prefix from the path.
|
|
cc_library(
|
|
name = "mbgl-core",
|
|
srcs = MLN_LAYER_PLUGIN_SOURCE +
|
|
MLN_CORE_SOURCE +
|
|
MLN_GENERATED_SHADER_SOURCE +
|
|
MLN_GENERATED_STYLE_SOURCE + select({
|
|
":drawable_renderer": MLN_OPENGL_SOURCE + MLN_DRAWABLES_SOURCE + MLN_DRAWABLES_GL_SOURCE,
|
|
":metal_renderer": MLN_DRAWABLES_SOURCE + MLN_DRAWABLES_MTL_SOURCE,
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"//:harfbuzz_text_shaping": MLN_SHAPING_HARFBUZZ_SRCS,
|
|
"//conditions:default": [],
|
|
}),
|
|
hdrs = MLN_LAYER_PLUGIN_HEADERS + MLN_CORE_HEADERS + select({
|
|
":drawable_renderer": MLN_OPENGL_HEADERS + MLN_DRAWABLES_HEADERS + MLN_DRAWABLES_GL_HEADERS,
|
|
":metal_renderer": MLN_DRAWABLES_HEADERS + MLN_DRAWABLES_MTL_HEADERS,
|
|
"//conditions:default": [],
|
|
}),
|
|
copts = CPP_FLAGS + MAPLIBRE_FLAGS,
|
|
defines = select({
|
|
":drawable_renderer": [
|
|
"MLN_RENDER_BACKEND_OPENGL=1",
|
|
],
|
|
":metal_renderer": [
|
|
"MLN_RENDER_BACKEND_METAL=1",
|
|
],
|
|
}) + select({
|
|
"@platforms//os:ios": ["GLES_SILENCE_DEPRECATION=1"],
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"//:harfbuzz_text_shaping": ["MLN_TEXT_SHAPING_HARFBUZZ=1"],
|
|
"//conditions:default": [],
|
|
}),
|
|
includes = [
|
|
"include",
|
|
"src",
|
|
] + select({
|
|
":metal_renderer": [
|
|
"vendor/metal-cpp",
|
|
],
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"//:harfbuzz_text_shaping": [
|
|
"vendor/freetype/include",
|
|
"vendor/harfbuzz/src",
|
|
],
|
|
"//conditions:default": [],
|
|
}),
|
|
local_defines = [
|
|
r"MLN_VERSION_REV=\"standalone\"",
|
|
],
|
|
visibility = ["//visibility:public"],
|
|
deps = [
|
|
":mbgl-core-generated-private-artifacts",
|
|
":mbgl-core-generated-public-artifacts",
|
|
"//vendor:boost",
|
|
"//vendor:earcut.hpp",
|
|
"//vendor:eternal",
|
|
"//vendor:maplibre-native-base",
|
|
"//vendor:parsedate",
|
|
"//vendor:pmtiles",
|
|
"//vendor:polylabel",
|
|
"//vendor:protozero",
|
|
"//vendor:unique_resource",
|
|
"//vendor:unordered_dense",
|
|
"//vendor:vector-tile",
|
|
"//vendor:wagyu",
|
|
] + select({
|
|
"@platforms//os:ios": [
|
|
"//vendor:icu",
|
|
],
|
|
"@platforms//os:osx": [
|
|
"//vendor:icu",
|
|
],
|
|
"@platforms//os:linux": [
|
|
"//vendor:sqlite",
|
|
],
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
":metal_renderer": [
|
|
"//vendor:metal-cpp",
|
|
],
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
":harfbuzz_text_shaping": [
|
|
"//vendor:freetype",
|
|
"//vendor:harfbuzz",
|
|
],
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
":rust": [
|
|
"//rustutils:rustutilslib",
|
|
],
|
|
"//conditions:default": [
|
|
"//vendor:csscolorparser",
|
|
],
|
|
}),
|
|
)
|
|
|
|
# Selects the rendering implementation to utilize in the core
|
|
|
|
string_flag(
|
|
name = "renderer",
|
|
build_setting_default = "drawable",
|
|
values = [
|
|
"drawable",
|
|
"metal",
|
|
],
|
|
)
|
|
|
|
config_setting(
|
|
name = "drawable_renderer",
|
|
flag_values = {
|
|
":renderer": "drawable",
|
|
},
|
|
)
|
|
|
|
config_setting(
|
|
name = "metal_renderer",
|
|
flag_values = {
|
|
":renderer": "metal",
|
|
},
|
|
)
|
|
|
|
# Selects the shaping implementation to utilize in the core
|
|
|
|
string_flag(
|
|
name = "shaping",
|
|
build_setting_default = "harfbuzz",
|
|
values = [
|
|
"legacy",
|
|
"harfbuzz",
|
|
],
|
|
)
|
|
|
|
config_setting(
|
|
name = "harfbuzz_text_shaping",
|
|
flag_values = {
|
|
":shaping": "harfbuzz",
|
|
},
|
|
)
|
|
|
|
config_setting(
|
|
name = "legacy_text_shaping",
|
|
flag_values = {
|
|
":shaping": "legacy",
|
|
},
|
|
)
|
|
|
|
bool_flag(
|
|
name = "use_rust",
|
|
build_setting_default = False,
|
|
visibility = ["//visibility:public"],
|
|
)
|
|
|
|
config_setting(
|
|
name = "rust",
|
|
flag_values = {
|
|
"//:use_rust": "true",
|
|
},
|
|
)
|
|
|
|
exports_files(
|
|
[
|
|
"LICENSE.md",
|
|
"scripts/style-spec-reference/v8.json",
|
|
],
|
|
visibility = ["//visibility:public"],
|
|
)
|
|
|
|
npm_link_all_packages(
|
|
name = "node_modules",
|
|
)
|
|
|
|
js_binary(
|
|
name = "generate-style-code-script",
|
|
data = [
|
|
":node_modules/argparse",
|
|
":node_modules/csscolorparser",
|
|
":style-code",
|
|
":style-spec",
|
|
],
|
|
entry_point = "scripts/generate-style-code.mjs",
|
|
)
|
|
|
|
js_binary(
|
|
name = "generate-shader-code-script",
|
|
data = [
|
|
":node_modules/argparse",
|
|
],
|
|
entry_point = "shaders/generate_shader_code.mjs",
|
|
)
|
|
|
|
js_library(
|
|
name = "style-spec",
|
|
srcs = ["scripts/style-spec.mjs"],
|
|
data = glob([
|
|
"scripts/style-spec-reference/*.json",
|
|
]),
|
|
visibility = ["//visibility:public"],
|
|
)
|
|
|
|
js_library(
|
|
name = "style-code",
|
|
srcs = ["scripts/style-code.mjs"],
|
|
visibility = ["//visibility:public"],
|
|
deps = [
|
|
":node_modules/ejs",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "maplibre_lib",
|
|
srcs = [],
|
|
visibility = ["//visibility:public"],
|
|
deps = select({
|
|
"@platforms//os:macos": ["//platform:macos-objcpp"],
|
|
"//conditions:default": [],
|
|
}),
|
|
)
|