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