1load(
2    "//tools/build_defs/oss:rn_defs.bzl",
3    "ANDROID",
4    "APPLE",
5    "CXX",
6    "YOGA_CXX_TARGET",
7    "fb_xplat_cxx_test",
8    "get_apple_compiler_flags",
9    "get_apple_inspector_flags",
10    "get_preprocessor_flags_for_build_mode",
11    "react_native_xplat_target",
12    "rn_xplat_cxx_library",
13    "subdir_glob",
14)
15
16APPLE_COMPILER_FLAGS = get_apple_compiler_flags()
17
18rn_xplat_cxx_library(
19    name = "imagemanager",
20    srcs = glob(
21        ["*.cpp"],
22        exclude = glob(["tests/**/*.cpp"]),
23    ),
24    headers = subdir_glob(
25        [("", "*.h")],
26        prefix = "",
27    ),
28    header_namespace = "",
29    exported_headers = subdir_glob(
30        [("", "*.h")],
31        prefix = "react/renderer/imagemanager",
32    ),
33    compiler_flags_pedantic = True,
34    contacts = ["[email protected]"],
35    cxx_srcs = glob(["platform/cxx/**/*.cpp"]),
36    # FIXME: android relies on stubs implemented for the cxx platform
37    fbandroid_srcs = glob(["platform/cxx/**/*.cpp"]),
38    fbandroid_tests_override = [],
39    fbobjc_compiler_flags = APPLE_COMPILER_FLAGS,
40    fbobjc_preprocessor_flags = get_preprocessor_flags_for_build_mode() + get_apple_inspector_flags() + [
41        "-DLOG_TAG=\"ReactNative\"",
42        "-DWITH_FBSYSTRACE=1",
43    ],
44    force_static = True,
45    ios_deps = [
46        "//xplat/js/react-native-github:RCTCxxBridge",
47        "//xplat/js/react-native-github:RCTImage",
48    ],
49    ios_exported_headers = subdir_glob(
50        [
51            ("", "*.h"),
52            ("platform/ios", "RCTImagePrimitivesConversions.h"),
53        ],
54        prefix = "react/renderer/imagemanager",
55    ),
56    ios_frameworks = [
57        "$SDKROOT/System/Library/Frameworks/CoreGraphics.framework",
58        "$SDKROOT/System/Library/Frameworks/Foundation.framework",
59        "$SDKROOT/System/Library/Frameworks/UIKit.framework",
60    ],
61    ios_headers = subdir_glob(
62        [
63            ("", "*.h"),
64            ("platform/ios", "**/*.h"),
65        ],
66        prefix = "",
67    ),
68    ios_srcs = glob(
69        [
70            "platform/ios/**/*.cpp",
71            "platform/ios/**/*.mm",
72        ],
73    ),
74    labels = [
75        "pfh:ReactNative_CommonInfrastructurePlaceholder",
76    ],
77    macosx_tests_override = [],
78    platforms = (ANDROID, APPLE, CXX),
79    preprocessor_flags = [
80        "-DLOG_TAG=\"ReactNative\"",
81        "-DWITH_FBSYSTRACE=1",
82    ],
83    tests = [":tests"],
84    visibility = ["PUBLIC"],
85    deps = [
86        YOGA_CXX_TARGET,
87        react_native_xplat_target("react/debug:debug"),
88        react_native_xplat_target("react/renderer/core:core"),
89        react_native_xplat_target("react/renderer/mounting:mounting"),
90        react_native_xplat_target("react/renderer/debug:debug"),
91        react_native_xplat_target("react/renderer/graphics:graphics"),
92    ],
93)
94
95fb_xplat_cxx_test(
96    name = "tests",
97    srcs = glob(["tests/**/*.cpp"]),
98    headers = glob(["tests/**/*.h"]),
99    compiler_flags = [
100        "-fexceptions",
101        "-frtti",
102        "-std=c++17",
103        "-Wall",
104    ],
105    contacts = ["[email protected]"],
106    platforms = (APPLE, CXX),
107    deps = [
108        ":imagemanager",
109        "//xplat/third-party/gmock:gtest",
110    ],
111)
112