llvm/third-party/benchmark/bindings/python/nanobind.BUILD

load("@bazel_skylib//lib:selects.bzl", "selects")

licenses(["notice"])

package(default_visibility = ["//visibility:public"])

config_setting(
    name = "msvc_compiler",
    flag_values = {"@bazel_tools//tools/cpp:compiler": "msvc-cl"},
)

selects.config_setting_group(
    name = "winplusmsvc",
    match_all = [
        "@platforms//os:windows",
        ":msvc_compiler",
    ],
)

cc_library(
    name = "nanobind",
    srcs = glob([
        "src/*.cpp",
    ]),
    additional_linker_inputs = select({
        "@platforms//os:macos": [":cmake/darwin-ld-cpython.sym"],
        "//conditions:default": [],
    }),
    copts = select({
        ":msvc_compiler": [
            "/EHsc",  # exceptions
            "/Os",  # size optimizations
            "/GL",  # LTO / whole program optimization
        ],
        # these should work on both clang and gcc.
        "//conditions:default": [
            "-fexceptions",
            "-flto",
            "-Os",
        ],
    }),
    includes = [
        "ext/robin_map/include",
        "include",
    ],
    linkopts = select({
        ":winplusmsvc": ["/LTGC"],  # Windows + MSVC.
        "@platforms//os:macos": ["-Wl,@$(location :cmake/darwin-ld-cpython.sym)"],  # Apple.
        "//conditions:default": [],
    }),
    textual_hdrs = glob(
        [
            "include/**/*.h",
            "src/*.h",
            "ext/robin_map/include/tsl/*.h",
        ],
    ),
    deps = ["@python_headers"],
)