Files
MapLibreParticleLab/BUILD.bazel
2025-04-16 02:18:42 +02:00

257 lines
6.5 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_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_STYLE_SOURCE",
"MLN_OPENGL_HEADERS",
"MLN_OPENGL_SOURCE",
"MLN_PRIVATE_GENERATED_STYLE_HEADERS",
"MLN_PUBLIC_GENERATED_STYLE_HEADERS",
)
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_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_CORE_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": [],
}),
hdrs = 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": [],
}),
includes = [
"include",
"src",
] + select({
":metal_renderer": [
"vendor/metal-cpp",
],
"//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",
],
"//conditions:default": [],
}) + select({
":metal_renderer": [
"//vendor:metal-cpp",
],
"//conditions:default": [],
}) + select({
":rust": [
"//rustutils:rustutilslib",
],
"//conditions:default": [
"//vendor:csscolorparser",
],
}),
)
genrule(
name = "git_hash",
outs = ["hash"],
cmd = """
git rev-parse HEAD > $@
""",
local = True,
visibility = ["//visibility:public"],
)
# 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",
},
)
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": [],
}),
)