load("//tools/build_defs/oss:rn_defs.bzl", "APPLE", "IOS", "MACOSX", "react_native_xplat_dep", "rn_xplat_cxx_library")

rn_xplat_cxx_library(
    name = "jsi",
    srcs = [
        "jsi/jsi.cpp",
    ],
    header_namespace = "",
    exported_headers = [
        "jsi/instrumentation.h",
        "jsi/jsi.h",
        "jsi/jsi-inl.h",
        "jsi/jsilib.h",
    ],
    compiler_flags = [
        "-O3",
        "-Wextra",
        "-Wcast-qual",
        "-Wdelete-non-virtual-dtor",
        "-Wwrite-strings",
    ],
    cxx_compiler_flags = [
        "-Wglobal-constructors",
        "-Wmissing-prototypes",
    ],
    fbobjc_compiler_flags = [
        "-Wglobal-constructors",
        "-Wmissing-prototypes",
    ],
    labels = ["supermodule:xplat/default/public.react_native.infra"],
    visibility = ["PUBLIC"],
)

rn_xplat_cxx_library(
    name = "JSIDynamic",
    srcs = [
        "jsi/JSIDynamic.cpp",
    ],
    header_namespace = "",
    exported_headers = [
        "jsi/JSIDynamic.h",
    ],
    fbobjc_force_static = True,
    labels = ["supermodule:xplat/default/public.react_native.infra"],
    visibility = [
        "PUBLIC",
    ],
    xcode_public_headers_symlinks = True,
    deps = [
        "//xplat/folly:molly",
        react_native_xplat_dep("jsi:jsi"),
    ],
)

rn_xplat_cxx_library(
    name = "JSCRuntime",
    srcs = [
        "JSCRuntime.cpp",
    ],
    header_namespace = "jsi",
    exported_headers = [
        "JSCRuntime.h",
    ],
    apple_sdks = (IOS, MACOSX),
    fbobjc_compiler_flags = [
        "-Os",
    ],
    fbobjc_frameworks = [
        "$SDKROOT/System/Library/Frameworks/JavaScriptCore.framework",
    ],
    labels = ["supermodule:xplat/default/public.react_native.infra"],
    platforms = APPLE,
    visibility = ["PUBLIC"],
    xplat_mangled_args = {
        "soname": "libjscjsi.$(ext)",
    },
    exported_deps = [
        react_native_xplat_dep("jsi:jsi"),
    ],
)
