From 8779aab3bc05167b96024914f7d0b914ebc887c2 Mon Sep 17 00:00:00 2001 From: mwilsnd <53413200+mwilsnd@users.noreply.github.com> Date: Wed, 5 Jul 2023 18:41:03 -0500 Subject: [PATCH] Bazel Updates, Code generation (#1285) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- BUILD.bazel | 152 ++++++++++++++--------- bazel/core.bzl | 202 ++++++++++++++++--------------- bazel/flags.bzl | 87 +++++++++++-- bazel/macros.bzl | 5 + platform/ios/BUILD.bazel | 3 +- scripts/generate-style-code.js | 45 +++++-- shaders/generate_shader_code.js | 15 ++- src/mbgl/gl/renderer_backend.cpp | 6 +- 8 files changed, 331 insertions(+), 184 deletions(-) create mode 100644 bazel/macros.bzl diff --git a/BUILD.bazel b/BUILD.bazel index b10cfe321..7dd819a9b 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -1,67 +1,55 @@ load("//bazel:flags.bzl", "CPP_FLAGS", "MAPLIBRE_FLAGS") load("@bazel_skylib//rules:common_settings.bzl", "string_flag") -load("//bazel:core.bzl", "MLN_CORE_SOURCE", "MLN_CORE_HEADERS", "MLN_OPENGL_SOURCE", "MLN_OPENGL_HEADERS", "MLN_DRAWABLES_SOURCE", "MLN_DRAWABLES_HEADERS") - -string_flag( - name = "renderer", - build_setting_default = "drawable", - values=["legacy", "drawable", "split"] -) - -config_setting( - name = "legacy_renderer", - flag_values = { - ":renderer": "legacy" - } -) - -config_setting( - name = "drawable_renderer", - flag_values = { - ":renderer": "drawable" - } -) - -config_setting( - name = "split_renderer", - flag_values = { - ":renderer": "split" - } +load("//bazel:core.bzl", + "MLN_PUBLIC_GENERATED_STYLE_HEADERS", + "MLN_PRIVATE_GENERATED_STYLE_HEADERS", + "MLN_GENERATED_STYLE_SOURCE", + "MLN_GENERATED_SHADER_HEADERS", + "MLN_CORE_SOURCE", + "MLN_CORE_HEADERS", + "MLN_OPENGL_SOURCE", + "MLN_OPENGL_HEADERS", + "MLN_DRAWABLES_SOURCE", + "MLN_DRAWABLES_HEADERS", ) +load("//bazel:macros.bzl", "appendList") # Generate code required by the core +# All generated code is placed in the prefix location __generated__ +# by our generator scripts and genrules +PREFIXED = { + "MLN_PUBLIC_GENERATED_STYLE_HEADERS": appendList(MLN_PUBLIC_GENERATED_STYLE_HEADERS, "__generated__/"), + "MLN_PRIVATE_GENERATED_STYLE_HEADERS": appendList(MLN_PRIVATE_GENERATED_STYLE_HEADERS, "__generated__/"), + "MLN_GENERATED_STYLE_SOURCE": appendList(MLN_GENERATED_STYLE_SOURCE, "__generated__/"), + "MLN_GENERATED_SHADER_HEADERS": appendList(MLN_GENERATED_SHADER_HEADERS, "__generated__/"), +} + filegroup( name = "style_data", - srcs = glob( - ["**/*.ejs"], - allow_empty = False, - ), + srcs = glob(["**/*.ejs"], allow_empty = False) ) genrule( name = "generated_style_code", - srcs = ["style_data"], - outs = MLN_PUBLIC_GENERATED_STYLE_HEADERS + - MLN_PRIVATE_GENERATED_STYLE_HEADERS + - MLN_GENERATED_STYLE_SOURCE, cmd = "node $(execpath scripts/generate-style-code.js) --root $(RULEDIR)", tools = ["scripts/generate-style-code.js"], + srcs = ["style_data"], + outs = PREFIXED["MLN_PUBLIC_GENERATED_STYLE_HEADERS"] + + PREFIXED["MLN_PRIVATE_GENERATED_STYLE_HEADERS"] + + PREFIXED["MLN_GENERATED_STYLE_SOURCE"], ) filegroup( name = "shader_data", - srcs = ["shaders/manifest.json"] + glob( - ["shaders/*.glsl"], - allow_empty = False, - ), + srcs = ["shaders/manifest.json"] + glob(["shaders/*.glsl"], allow_empty = False) ) genrule( name = "generated_shaders", - srcs = ["shader_data"], - outs = MLN_GENERATED_SHADER_HEADERS, cmd = "node $(execpath shaders/generate_shader_code.js) --root $(RULEDIR)", tools = ["shaders/generate_shader_code.js"], + srcs = ["shader_data"], + outs = PREFIXED["MLN_GENERATED_SHADER_HEADERS"], ) # This header only target strips the __generated__ prefix for the compiler @@ -69,12 +57,13 @@ genrule( cc_library( name = "mbgl-core-generated-public-artifacts", srcs = [], - hdrs = MLN_PUBLIC_GENERATED_STYLE_HEADERS + - MLN_GENERATED_SHADER_HEADERS, + hdrs = PREFIXED["MLN_PUBLIC_GENERATED_STYLE_HEADERS"] + + PREFIXED["MLN_GENERATED_SHADER_HEADERS"], + strip_include_prefix = "__generated__/include", visibility = ["//visibility:public"], deps = [ - ":generated_shaders", ":generated_style_code", + ":generated_shaders", ], ) @@ -82,7 +71,8 @@ cc_library( cc_library( name = "mbgl-core-generated-private-artifacts", srcs = [], - hdrs = MLN_PRIVATE_GENERATED_STYLE_HEADERS, + hdrs = PREFIXED["MLN_PRIVATE_GENERATED_STYLE_HEADERS"], + strip_include_prefix = "__generated__/src", visibility = ["//visibility:private"], deps = [ ":generated_style_code", @@ -93,21 +83,36 @@ cc_library( # the prefix from the path. cc_library( name = "mbgl-core", - srcs = MLN_CORE_SOURCE + select({ - ":drawable_renderer": MLN_DRAWABLES_SOURCE, - ":split_renderer": MLN_DRAWABLES_SOURCE, - "//conditions:default": [] - }) + MLN_OPENGL_SOURCE, - hdrs = MLN_CORE_HEADERS + select({ - ":drawable_renderer": MLN_DRAWABLES_HEADERS, - ":split_renderer": MLN_DRAWABLES_HEADERS, - "//conditions:default": [] - }) + MLN_OPENGL_HEADERS, + srcs = MLN_CORE_SOURCE + + PREFIXED["MLN_GENERATED_STYLE_SOURCE"] + + MLN_OPENGL_SOURCE + + select({ + ":drawable_renderer": MLN_DRAWABLES_SOURCE, + ":split_renderer": MLN_DRAWABLES_SOURCE, + "//conditions:default": [] + }), + hdrs = MLN_CORE_HEADERS + + MLN_OPENGL_HEADERS + + select({ + ":drawable_renderer": MLN_DRAWABLES_HEADERS, + ":split_renderer": MLN_DRAWABLES_HEADERS, + "//conditions:default": [] + }), copts = CPP_FLAGS + MAPLIBRE_FLAGS, defines = select({ - ":legacy_renderer": ["MLN_LEGACY_RENDERER=1", "MLN_DRAWABLE_RENDERER=0"], - ":drawable_renderer": ["MLN_LEGACY_RENDERER=0", "MLN_DRAWABLE_RENDERER=1"], - ":split_renderer": ["MLN_LEGACY_RENDERER=1", "MLN_DRAWABLE_RENDERER=1", "MLN_RENDERER_SPLIT_VIEW=1"], + ":legacy_renderer": [ + "MLN_LEGACY_RENDERER=1", + "MLN_DRAWABLE_RENDERER=0" + ], + ":drawable_renderer": [ + "MLN_LEGACY_RENDERER=0", + "MLN_DRAWABLE_RENDERER=1" + ], + ":split_renderer": [ + "MLN_LEGACY_RENDERER=1", + "MLN_DRAWABLE_RENDERER=1", + "MLN_RENDERER_SPLIT_VIEW=1" + ], }) + select({ "//:ios": ["GLES_SILENCE_DEPRECATION=1"], "//conditions:default": [] @@ -121,8 +126,8 @@ cc_library( ], visibility = ["//visibility:public"], deps = [ - ":mbgl-core-generated-private-artifacts", ":mbgl-core-generated-public-artifacts", + ":mbgl-core-generated-private-artifacts", "//vendor:boost", "//vendor:csscolorparser", "//vendor:earcut.hpp", @@ -184,6 +189,35 @@ config_setting( }, ) +# Selects the rendering implementation to utilize in the core + +string_flag( + name = "renderer", + build_setting_default = "legacy", + values=["legacy", "drawable", "split"] +) + +config_setting( + name = "legacy_renderer", + flag_values = { + ":renderer": "legacy" + } +) + +config_setting( + name = "drawable_renderer", + flag_values = { + ":renderer": "drawable" + } +) + +config_setting( + name = "split_renderer", + flag_values = { + ":renderer": "split" + } +) + exports_files( [ "LICENSE.md", diff --git a/bazel/core.bzl b/bazel/core.bzl index 1aae21fab..16c5edf48 100644 --- a/bazel/core.bzl +++ b/bazel/core.bzl @@ -1,10 +1,105 @@ -# MLN_RENDERER_DEFINES = select({ -# ":legacy_renderer": ["MLN_LEGACY_RENDERER=1"], -# "//conditions:default": ["MLN_LEGACY_RENDERER=0"] -# }) + select({ -# ":drawable_renderer": ["MLN_DRAWABLE_RENDERER=1"], -# "//conditions:default": ["MLN_DRAWABLE_RENDERER=0"] -# }) +MLN_PUBLIC_GENERATED_STYLE_HEADERS = [ + "include/mbgl/style/layers/circle_layer.hpp", + "include/mbgl/style/layers/fill_layer.hpp", + "include/mbgl/style/layers/line_layer.hpp", + "include/mbgl/style/layers/symbol_layer.hpp", + "include/mbgl/style/layers/heatmap_layer.hpp", + "include/mbgl/style/layers/fill_extrusion_layer.hpp", + "include/mbgl/style/layers/raster_layer.hpp", + "include/mbgl/style/layers/hillshade_layer.hpp", + "include/mbgl/style/layers/background_layer.hpp", + "include/mbgl/style/layers/location_indicator_layer.hpp", + "include/mbgl/style/light.hpp", +] + +MLN_PRIVATE_GENERATED_STYLE_HEADERS = [ + "src/mbgl/style/layers/fill_layer_properties.hpp", + "src/mbgl/style/layers/line_layer_properties.hpp", + "src/mbgl/style/layers/symbol_layer_properties.hpp", + "src/mbgl/style/layers/circle_layer_properties.hpp", + "src/mbgl/style/layers/heatmap_layer_properties.hpp", + "src/mbgl/style/layers/fill_extrusion_layer_properties.hpp", + "src/mbgl/style/layers/raster_layer_properties.hpp", + "src/mbgl/style/layers/hillshade_layer_properties.hpp", + "src/mbgl/style/layers/background_layer_properties.hpp", + "src/mbgl/style/layers/location_indicator_layer_properties.hpp", +] + +MLN_GENERATED_STYLE_SOURCE = [ + "src/mbgl/style/layers/fill_layer_properties.cpp", + "src/mbgl/style/layers/fill_layer.cpp", + "src/mbgl/style/layers/line_layer_properties.cpp", + "src/mbgl/style/layers/line_layer.cpp", + "src/mbgl/style/layers/symbol_layer_properties.cpp", + "src/mbgl/style/layers/symbol_layer.cpp", + "src/mbgl/style/layers/circle_layer_properties.cpp", + "src/mbgl/style/layers/circle_layer.cpp", + "src/mbgl/style/layers/heatmap_layer_properties.cpp", + "src/mbgl/style/layers/heatmap_layer.cpp", + "src/mbgl/style/layers/fill_extrusion_layer_properties.cpp", + "src/mbgl/style/layers/fill_extrusion_layer.cpp", + "src/mbgl/style/layers/raster_layer_properties.cpp", + "src/mbgl/style/layers/raster_layer.cpp", + "src/mbgl/style/layers/hillshade_layer_properties.cpp", + "src/mbgl/style/layers/hillshade_layer.cpp", + "src/mbgl/style/layers/background_layer_properties.cpp", + "src/mbgl/style/layers/background_layer.cpp", + "src/mbgl/style/layers/location_indicator_layer_properties.cpp", + "src/mbgl/style/layers/location_indicator_layer.cpp", + "src/mbgl/style/light.cpp", +] + +MLN_GENERATED_SHADER_HEADERS = [ + "include/mbgl/shaders/shader_source.hpp", + "include/mbgl/shaders/shader_manifest.hpp", + "include/mbgl/shaders/gl/background.hpp", + "include/mbgl/shaders/gl/background_pattern.hpp", + "include/mbgl/shaders/gl/circle.hpp", + "include/mbgl/shaders/gl/clipping_mask.hpp", + "include/mbgl/shaders/gl/collision_box.hpp", + "include/mbgl/shaders/gl/collision_circle.hpp", + "include/mbgl/shaders/gl/debug.hpp", + "include/mbgl/shaders/gl/drawable_background.hpp", + "include/mbgl/shaders/gl/drawable_background_pattern.hpp", + "include/mbgl/shaders/gl/drawable_circle.hpp", + "include/mbgl/shaders/gl/drawable_fill.hpp", + "include/mbgl/shaders/gl/drawable_fill_outline.hpp", + "include/mbgl/shaders/gl/drawable_fill_outline_pattern.hpp", + "include/mbgl/shaders/gl/drawable_fill_extrusion.hpp", + "include/mbgl/shaders/gl/drawable_fill_extrusion_pattern.hpp", + "include/mbgl/shaders/gl/drawable_fill_pattern.hpp", + "include/mbgl/shaders/gl/drawable_line_gradient.hpp", + "include/mbgl/shaders/gl/drawable_line_pattern.hpp", + "include/mbgl/shaders/gl/drawable_line_sdf.hpp", + "include/mbgl/shaders/gl/drawable_line.hpp", + "include/mbgl/shaders/gl/drawable_heatmap.hpp", + "include/mbgl/shaders/gl/drawable_heatmap_texture.hpp", + "include/mbgl/shaders/gl/drawable_raster.hpp", + "include/mbgl/shaders/gl/drawable_symbol_icon.hpp", + "include/mbgl/shaders/gl/drawable_symbol_sdf_text.hpp", + "include/mbgl/shaders/gl/drawable_symbol_sdf_icon.hpp", + "include/mbgl/shaders/gl/drawable_symbol_text_and_icon.hpp", + "include/mbgl/shaders/gl/fill_extrusion_pattern.hpp", + "include/mbgl/shaders/gl/fill_extrusion.hpp", + "include/mbgl/shaders/gl/fill_outline_pattern.hpp", + "include/mbgl/shaders/gl/fill_outline.hpp", + "include/mbgl/shaders/gl/fill_pattern.hpp", + "include/mbgl/shaders/gl/fill.hpp", + "include/mbgl/shaders/gl/heatmap_texture.hpp", + "include/mbgl/shaders/gl/heatmap.hpp", + "include/mbgl/shaders/gl/hillshade_prepare.hpp", + "include/mbgl/shaders/gl/hillshade.hpp", + "include/mbgl/shaders/gl/line_gradient.hpp", + "include/mbgl/shaders/gl/line_pattern.hpp", + "include/mbgl/shaders/gl/line_sdf.hpp", + "include/mbgl/shaders/gl/line.hpp", + "include/mbgl/shaders/gl/prelude.hpp", + "include/mbgl/shaders/gl/raster.hpp", + "include/mbgl/shaders/gl/symbol_icon.hpp", + "include/mbgl/shaders/gl/symbol_sdf_text.hpp", + "include/mbgl/shaders/gl/symbol_sdf_icon.hpp", + "include/mbgl/shaders/gl/symbol_text_and_icon.hpp", +] MLN_CORE_SOURCE = [ "src/mbgl/actor/mailbox.cpp", @@ -336,53 +431,25 @@ MLN_CORE_SOURCE = [ "src/mbgl/style/layer_impl.cpp", "src/mbgl/style/layer_impl.hpp", "src/mbgl/style/layer_observer.hpp", - "src/mbgl/style/layers/background_layer.cpp", "src/mbgl/style/layers/background_layer_impl.cpp", "src/mbgl/style/layers/background_layer_impl.hpp", - "src/mbgl/style/layers/background_layer_properties.cpp", - "src/mbgl/style/layers/background_layer_properties.hpp", - "src/mbgl/style/layers/circle_layer.cpp", "src/mbgl/style/layers/circle_layer_impl.cpp", "src/mbgl/style/layers/circle_layer_impl.hpp", - "src/mbgl/style/layers/circle_layer_properties.cpp", - "src/mbgl/style/layers/circle_layer_properties.hpp", - "src/mbgl/style/layers/fill_extrusion_layer.cpp", "src/mbgl/style/layers/fill_extrusion_layer_impl.cpp", "src/mbgl/style/layers/fill_extrusion_layer_impl.hpp", - "src/mbgl/style/layers/fill_extrusion_layer_properties.cpp", - "src/mbgl/style/layers/fill_extrusion_layer_properties.hpp", - "src/mbgl/style/layers/fill_layer.cpp", "src/mbgl/style/layers/fill_layer_impl.cpp", "src/mbgl/style/layers/fill_layer_impl.hpp", - "src/mbgl/style/layers/fill_layer_properties.cpp", - "src/mbgl/style/layers/fill_layer_properties.hpp", - "src/mbgl/style/layers/heatmap_layer.cpp", "src/mbgl/style/layers/heatmap_layer_impl.cpp", "src/mbgl/style/layers/heatmap_layer_impl.hpp", - "src/mbgl/style/layers/heatmap_layer_properties.cpp", - "src/mbgl/style/layers/heatmap_layer_properties.hpp", - "src/mbgl/style/layers/hillshade_layer.cpp", "src/mbgl/style/layers/hillshade_layer_impl.cpp", "src/mbgl/style/layers/hillshade_layer_impl.hpp", - "src/mbgl/style/layers/hillshade_layer_properties.cpp", - "src/mbgl/style/layers/hillshade_layer_properties.hpp", - "src/mbgl/style/layers/line_layer.cpp", "src/mbgl/style/layers/line_layer_impl.cpp", "src/mbgl/style/layers/line_layer_impl.hpp", - "src/mbgl/style/layers/line_layer_properties.cpp", - "src/mbgl/style/layers/line_layer_properties.hpp", - "src/mbgl/style/layers/raster_layer.cpp", "src/mbgl/style/layers/raster_layer_impl.cpp", "src/mbgl/style/layers/raster_layer_impl.hpp", - "src/mbgl/style/layers/raster_layer_properties.cpp", - "src/mbgl/style/layers/raster_layer_properties.hpp", - "src/mbgl/style/layers/symbol_layer.cpp", "src/mbgl/style/layers/symbol_layer_impl.cpp", "src/mbgl/style/layers/symbol_layer_impl.hpp", - "src/mbgl/style/layers/symbol_layer_properties.cpp", - "src/mbgl/style/layers/symbol_layer_properties.hpp", "src/mbgl/style/layout_property.hpp", - "src/mbgl/style/light.cpp", "src/mbgl/style/light_impl.cpp", "src/mbgl/style/light_impl.hpp", "src/mbgl/style/light_observer.hpp", @@ -683,16 +750,6 @@ MLN_CORE_HEADERS = [ "include/mbgl/style/image.hpp", "include/mbgl/style/layer.hpp", "include/mbgl/style/layer_properties.hpp", - "include/mbgl/style/layers/background_layer.hpp", - "include/mbgl/style/layers/circle_layer.hpp", - "include/mbgl/style/layers/fill_extrusion_layer.hpp", - "include/mbgl/style/layers/fill_layer.hpp", - "include/mbgl/style/layers/heatmap_layer.hpp", - "include/mbgl/style/layers/hillshade_layer.hpp", - "include/mbgl/style/layers/line_layer.hpp", - "include/mbgl/style/layers/raster_layer.hpp", - "include/mbgl/style/layers/symbol_layer.hpp", - "include/mbgl/style/light.hpp", "include/mbgl/style/position.hpp", "include/mbgl/style/property_expression.hpp", "include/mbgl/style/property_value.hpp", @@ -813,11 +870,8 @@ MLN_OPENGL_SOURCE = [ "src/mbgl/platform/gl_functions.cpp", "src/mbgl/renderer/layers/render_location_indicator_layer.cpp", "src/mbgl/renderer/layers/render_location_indicator_layer.hpp", - "src/mbgl/style/layers/location_indicator_layer.cpp", "src/mbgl/style/layers/location_indicator_layer_impl.cpp", "src/mbgl/style/layers/location_indicator_layer_impl.hpp", - "src/mbgl/style/layers/location_indicator_layer_properties.cpp", - "src/mbgl/style/layers/location_indicator_layer_properties.hpp" ] MLN_OPENGL_HEADERS = [ @@ -828,57 +882,6 @@ MLN_OPENGL_HEADERS = [ "include/mbgl/gl/renderer_backend.hpp", "include/mbgl/layermanager/location_indicator_layer_factory.hpp", "include/mbgl/platform/gl_functions.hpp", - "include/mbgl/style/layers/location_indicator_layer.hpp", - "include/mbgl/shaders/shader_source.hpp", - "include/mbgl/shaders/shader_manifest.hpp", - "include/mbgl/shaders/gl/background.hpp", - "include/mbgl/shaders/gl/background_pattern.hpp", - "include/mbgl/shaders/gl/circle.hpp", - "include/mbgl/shaders/gl/clipping_mask.hpp", - "include/mbgl/shaders/gl/collision_box.hpp", - "include/mbgl/shaders/gl/collision_circle.hpp", - "include/mbgl/shaders/gl/debug.hpp", - "include/mbgl/shaders/gl/drawable_background.hpp", - "include/mbgl/shaders/gl/drawable_background_pattern.hpp", - "include/mbgl/shaders/gl/drawable_circle.hpp", - "include/mbgl/shaders/gl/drawable_fill.hpp", - "include/mbgl/shaders/gl/drawable_fill_outline.hpp", - "include/mbgl/shaders/gl/drawable_fill_outline_pattern.hpp", - "include/mbgl/shaders/gl/drawable_fill_extrusion.hpp", - "include/mbgl/shaders/gl/drawable_fill_extrusion_pattern.hpp", - "include/mbgl/shaders/gl/drawable_fill_pattern.hpp", - "include/mbgl/shaders/gl/drawable_line_gradient.hpp", - "include/mbgl/shaders/gl/drawable_line_pattern.hpp", - "include/mbgl/shaders/gl/drawable_line_sdf.hpp", - "include/mbgl/shaders/gl/drawable_line.hpp", - "include/mbgl/shaders/gl/drawable_heatmap.hpp", - "include/mbgl/shaders/gl/drawable_heatmap_texture.hpp", - "include/mbgl/shaders/gl/drawable_raster.hpp", - "include/mbgl/shaders/gl/drawable_symbol_icon.hpp", - "include/mbgl/shaders/gl/drawable_symbol_sdf_text.hpp", - "include/mbgl/shaders/gl/drawable_symbol_sdf_icon.hpp", - "include/mbgl/shaders/gl/drawable_symbol_text_and_icon.hpp", - "include/mbgl/shaders/gl/fill_extrusion_pattern.hpp", - "include/mbgl/shaders/gl/fill_extrusion.hpp", - "include/mbgl/shaders/gl/fill_outline_pattern.hpp", - "include/mbgl/shaders/gl/fill_outline.hpp", - "include/mbgl/shaders/gl/fill_pattern.hpp", - "include/mbgl/shaders/gl/fill.hpp", - "include/mbgl/shaders/gl/heatmap_texture.hpp", - "include/mbgl/shaders/gl/heatmap.hpp", - "include/mbgl/shaders/gl/hillshade_prepare.hpp", - "include/mbgl/shaders/gl/hillshade.hpp", - "include/mbgl/shaders/gl/line_gradient.hpp", - "include/mbgl/shaders/gl/line_pattern.hpp", - "include/mbgl/shaders/gl/line_sdf.hpp", - "include/mbgl/shaders/gl/line.hpp", - "include/mbgl/shaders/gl/prelude.hpp", - "include/mbgl/shaders/gl/raster.hpp", - "include/mbgl/shaders/gl/shader_group_gl.hpp", - "include/mbgl/shaders/gl/symbol_icon.hpp", - "include/mbgl/shaders/gl/symbol_sdf_text.hpp", - "include/mbgl/shaders/gl/symbol_sdf_icon.hpp", - "include/mbgl/shaders/gl/symbol_text_and_icon.hpp" ] MLN_DRAWABLES_SOURCE = [ @@ -950,6 +953,7 @@ MLN_DRAWABLES_HEADERS = [ "include/mbgl/util/identity.hpp", "include/mbgl/util/suppress_copies.hpp", "include/mbgl/shaders/gl/shader_program_gl.hpp", + "include/mbgl/shaders/gl/shader_group_gl.hpp", "include/mbgl/gl/drawable_gl.hpp", "include/mbgl/gl/drawable_gl_builder.hpp", "include/mbgl/gl/layer_group_gl.hpp", diff --git a/bazel/flags.bzl b/bazel/flags.bzl index 301e03c04..ef13b133e 100644 --- a/bazel/flags.bzl +++ b/bazel/flags.bzl @@ -4,7 +4,7 @@ Applies to objective-c files that can't take the added CPP_FLAGS. Included in the CPP flags below. """ -WARNING_FLAGS = [ +GCC_CLANG_COMMON_FLAGS = [ "-Wall", "-Werror", "-Wextra", @@ -12,8 +12,52 @@ WARNING_FLAGS = [ "-Wno-unused-variable", "-Wno-variadic-macros", "-Wno-unknown-pragmas", -] + select({ - "//:ios": [ +] + +MSVC_FLAGS = [ + "/Wall", + "/WX", + "/wd4068", # Unknown pragma + "/wd4820", # Padding + "/wd5045", # Compiler will insert Spectre mitigation for memory load + "/wd4643", # Non-conformant forward decl + "/wd4623", # Default ctor implicitly deleted + "/wd5027", # Default move ctor implicitly deleted + "/wd4626", # Assignment operator implicitly deleted + "/wd4514", # Unreferenced inline function has been removed + "/wd4582", # Constructor is not implicitly called + "/wd4365", # Signed/unsigned mismatch + "/wd4388", # Signed/unsigned mismatch + "/wd4244", # Conversion, possible loss of data + "/wd4242", # Conversion, possible loss of data + "/wd4625", # Copy constructor was implicitly defined as deleted + "/wd5026", # Move constructor was implicitly defined as deleted + "/wd5219", # Implicit conversion, possible loss of data + "/wd5246", # Initialization of a subobject should be wrapped in braces + "/wd4201", # Nonstandard extension used: nameless struct/union + "/wd4868", # Compiler may not enforce left-to-right evaluation order in braced initializer list + "/wd4061", # Eenumerator in switch of enum is not explicitly handled by a case label + "/wd4464", # Relative include path contains '..' + "/wd4668", # is not defined as a preprocessor macro, replacing with '0' for '#if/#elif' + "/wd4800", # Implicit conversion from 'unsigned __int64' to bool. Possible information loss + "/wd4355", # 'this': used in base member initializer list + "/wd5204", # Class has virtual functions, but its trivial destructor is not virtual; instances of objects derived from this class may not be destructed + "/wd5220", # A non-static data member with a volatile qualified type no longer implies + "/wd4619", # (boost) #pragma warning: there is no warning number + "/wd5031", # (boost) #pragma warning(pop): likely mismatch, popping warning state pushed in different file + "/wd5243", # (boost) using incomplete class can cause potential one definition rule violation due to ABI limitation + "/wd4371", # (boost) layout of class may have changed from a previous version of the compiler due to better packing of member + "/wd4435", # (boost) Object layout under /vd2 will change due to virtual base + "/wd4702", # Unreachable code + "/wd4710", # Function not inlined + "/wd5041", # out-of-line definition for constexpr static data member is not needed and is deprecated in C++17 + "/wd4946", # reinterpret_cast used between related classes + "/wd4459", # declaration of 'x' hides global declaration + "/wd4373", # virtual function overrides 'x', previous versions of the compiler did not override when parameters only differed by const/volatile qualifiers +] + +WARNING_FLAGS = select({ + "//:ios": GCC_CLANG_COMMON_FLAGS + [ "-Wno-newline-eof", "-Wno-nested-anon-types", "-Wno-c++11-narrowing", @@ -21,19 +65,35 @@ WARNING_FLAGS = [ "-Wno-tautological-constant-compare", "-Wno-gnu-anonymous-struct", ], - "//:linux": [], + "//:linux": GCC_CLANG_COMMON_FLAGS, + "//:windows": MSVC_FLAGS, }) """ Compilation flags used for all .cpp and .mm targets. """ -CPP_FLAGS = WARNING_FLAGS + [ +GCC_CLANG_CPP_FLAGS = GCC_CLANG_COMMON_FLAGS + [ "-fexceptions", "-fno-rtti", "-ftemplate-depth=1024", "-std=c++17", ] + +MSVC_CPP_FLAGS = MSVC_FLAGS + [ + "/EHsc", + "/std:c++17", + "/GR-", + "/permissive-", + "/utf-8", +] + +CPP_FLAGS = select({ + "//:ios": GCC_CLANG_CPP_FLAGS, + "//:linux": GCC_CLANG_CPP_FLAGS, + "//:windows": MSVC_CPP_FLAGS, +}) + """ Compilation flags related to the Maplibre codebase. Relevant for all .cpp .mm and .m code - src/* @@ -42,8 +102,15 @@ Compilation flags related to the Maplibre codebase. Relevant for all .cpp .mm an Not important for any vendors that are imported. """ -MAPLIBRE_FLAGS = [ - "-DMBGL_USE_GLES2=1", - "-DMBGL_RENDER_BACKEND_OPENGL=1", - "-DGLES_SILENCE_DEPRECATION", -] +MAPLIBRE_FLAGS = select({ + "//:windows": [ + "/DMBGL_USE_GLES2=1", + "/DMBGL_RENDER_BACKEND_OPENGL=1", + "/D_USE_MATH_DEFINES", + ], + "//conditions:default": [ + "-DMBGL_USE_GLES2=1", + "-DMBGL_RENDER_BACKEND_OPENGL=1", + "-DGLES_SILENCE_DEPRECATION", + ] +}) diff --git a/bazel/macros.bzl b/bazel/macros.bzl new file mode 100644 index 000000000..f523875f9 --- /dev/null +++ b/bazel/macros.bzl @@ -0,0 +1,5 @@ +def appendList(items, prefix): + out = [] + for item in items: + out.append(prefix + item) + return out diff --git a/platform/ios/BUILD.bazel b/platform/ios/BUILD.bazel index f37a6a734..9365090c4 100644 --- a/platform/ios/BUILD.bazel +++ b/platform/ios/BUILD.bazel @@ -394,7 +394,7 @@ _IOS_APPLICATION_RESOURCES = [ ios_application( name = "App", - bundle_id = "{}.maplibre.app".format(BUNDLE_ID_PREFIX), + bundle_id = "org.maplibre.app", families = [ "iphone", "ipad", @@ -454,6 +454,7 @@ xcodeproj( minimum_xcode_version = "14", project_name = "MapLibre", tags = ["manual"], + bazel_env = {"PATH": "/bin:/usr/bin:/usr/local/bin"}, default_xcode_configuration = "Debug", xcode_configurations = { "Debug": {"//command_line_option:compilation_mode": "dbg"}, diff --git a/scripts/generate-style-code.js b/scripts/generate-style-code.js index d2a23f60d..e5f97aac2 100755 --- a/scripts/generate-style-code.js +++ b/scripts/generate-style-code.js @@ -22,6 +22,35 @@ const args = (() => { return parser.parse_args(); })(); +let writeGenerated; +if (args.root) { + const targetRoot = path.join(args.root, "__generated__"); + if (args.root) { + if (!fs.existsSync(targetRoot)) { + fs.mkdirSync(); + } + } + + writeGenerated = (pathString, contents) => { + const location = path.parse( + path.relative(__dirname + "/../", path.normalize(pathString)) + ); + + pathString = path.join(targetRoot, location.dir); + if (!fs.existsSync(pathString)) { + fs.mkdirSync(pathString, {recursive: true}); + } + + writeIfModified( + path.join(pathString, location.name + location.ext), contents); + } +} else { + writeGenerated = (pathString, contents) => { + writeIfModified(pathString, contents); + }; +} + + function parseCSSColor(str) { const color = colorParser.parseCSSColor(str); return [ @@ -273,16 +302,16 @@ const layers = Object.keys(spec.layer.type.values).map((type) => { for (const layer of layers) { const layerFileName = layer.type.replace('-', '_'); - writeIfModified(`src/mbgl/style/layers/${layerFileName}_layer_properties.hpp`, propertiesHpp(layer), args.root); - writeIfModified(`src/mbgl/style/layers/${layerFileName}_layer_properties.cpp`, propertiesCpp(layer), args.root); + writeGenerated(`${__dirname}/../src/mbgl/style/layers/${layerFileName}_layer_properties.hpp`, propertiesHpp(layer)); + writeGenerated(`${__dirname}/../src/mbgl/style/layers/${layerFileName}_layer_properties.cpp`, propertiesCpp(layer)); // Remove our fake property for the external interace. if (layer.type === 'line') { layer.paintProperties = layer.paintProperties.filter(property => property.name !== 'line-floor-width'); } - writeIfModified(`include/mbgl/style/layers/${layerFileName}_layer.hpp`, layerHpp(layer), args.root); - writeIfModified(`src/mbgl/style/layers/${layerFileName}_layer.cpp`, layerCpp(layer), args.root); + writeGenerated(`${__dirname}/../include/mbgl/style/layers/${layerFileName}_layer.hpp`, layerHpp(layer)); + writeGenerated(`${__dirname}/../src/mbgl/style/layers/${layerFileName}_layer.cpp`, layerCpp(layer)); } // Light @@ -298,7 +327,7 @@ const lightProperties = Object.keys(spec[`light`]).reduce((memo, name) => { // to get a deterministic order. lightProperties.sort((a, b) => collator.compare(a.name, b.name)); -const lightHpp = ejs.compile(fs.readFileSync(`include/mbgl/style/light.hpp.ejs`, 'utf8'), {strict: true}); -const lightCpp = ejs.compile(fs.readFileSync(`src/mbgl/style/light.cpp.ejs`, 'utf8'), {strict: true}); -writeIfModified(`include/mbgl/style/light.hpp`, lightHpp({properties: lightProperties}), args.root); -writeIfModified(`src/mbgl/style/light.cpp`, lightCpp({properties: lightProperties}), args.root); +const lightHpp = ejs.compile(fs.readFileSync(`${__dirname}/../include/mbgl/style/light.hpp.ejs`, 'utf8'), {strict: true}); +const lightCpp = ejs.compile(fs.readFileSync(`${__dirname}/../src/mbgl/style/light.cpp.ejs`, 'utf8'), {strict: true}); +writeGenerated(`${__dirname}/../include/mbgl/style/light.hpp`, lightHpp({properties: lightProperties})); +writeGenerated(`${__dirname}/../src/mbgl/style/light.cpp`, lightCpp({properties: lightProperties})); diff --git a/shaders/generate_shader_code.js b/shaders/generate_shader_code.js index 4b083daed..b6266a5c1 100644 --- a/shaders/generate_shader_code.js +++ b/shaders/generate_shader_code.js @@ -221,11 +221,13 @@ const args = (() => { // Generate shader source headers const shaderRoot = "shaders/"; -const outputRoot = path.join((args.root ? args.root : ""), "include/mbgl/shaders"); let generatedHeaders = []; let shaderNames = []; -console.log("Writing shaders to ", outputRoot); +const targetRoot = path.join(args.root, "__generated__"); +if (!fs.existsSync(targetRoot)) { + fs.mkdirSync(); +} JSON.parse(fs.readFileSync(path.join(shaderRoot, "manifest.json"))) .filter(it => typeof it == "object") @@ -243,6 +245,11 @@ JSON.parse(fs.readFileSync(path.join(shaderRoot, "manifest.json"))) ? pragmaMapConvertOnlyVertexArrays(vertexSource, pragmaMap, attribMap, "vertex") : pragmaMapConvert(vertexSource, pragmaMap, attribMap, "vertex"); + const glRoot = path.join(args.root, "__generated__/include/mbgl/shaders/gl"); + if (!fs.existsSync(glRoot)) { + fs.mkdirSync(glRoot, {recursive: true}); // Ensure target directory is available + } + fs.writeFileSync( path.join(glRoot, elem.header + ".hpp"), `${generatedHeader} @@ -268,7 +275,7 @@ struct ShaderSource { ); // Generate the manifest -fs.writeFileSync(path.join(outputRoot, "shader_manifest.hpp"), +fs.writeFileSync(path.join(args.root, "__generated__/include/mbgl/shaders/shader_manifest.hpp"), `${generatedHeader} #pragma once #include @@ -279,7 +286,7 @@ ${generatedHeaders.join('\n')} `); // Generate shader_source.hpp -fs.writeFileSync(path.join(outputRoot, "shader_source.hpp"), +fs.writeFileSync(path.join(args.root, "__generated__/include/mbgl/shaders/shader_source.hpp"), `${generatedHeader} #pragma once #include diff --git a/src/mbgl/gl/renderer_backend.cpp b/src/mbgl/gl/renderer_backend.cpp index 169f26f1f..745598bc3 100644 --- a/src/mbgl/gl/renderer_backend.cpp +++ b/src/mbgl/gl/renderer_backend.cpp @@ -84,9 +84,9 @@ void registerTypes(gfx::ShaderRegistry& registry, const ProgramParameters& progr /// registry instance provided already has conflicting programs present. ( [&]() { - using Ty = shaders::ShaderSource; - if (!registry.registerShaderGroup(std::make_shared>(programParameters), Ty::name)) { - throw std::runtime_error("Failed to register " + std::string(Ty::name) + " with shader registry!"); + const auto name = std::string(shaders::ShaderSource::name); + if (!registry.registerShaderGroup(std::make_shared>(programParameters), name)) { + throw std::runtime_error("Failed to register " + name + " with shader registry!"); } }(), ...);