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    contacts = ["[email protected]"],
34    cxx_srcs = glob(["platform/cxx/**/*.cpp"]),
35    # FIXME: android relies on stubs implemented for the cxx platform
36    fbandroid_srcs = glob(["platform/cxx/**/*.cpp"]),
37    fbandroid_tests_override = [],
38    fbobjc_compiler_flags = APPLE_COMPILER_FLAGS,
39    fbobjc_preprocessor_flags = get_preprocessor_flags_for_build_mode() + get_apple_inspector_flags() + [
40        "-DLOG_TAG=\"ReactNative\"",
41        "-DWITH_FBSYSTRACE=1",
42    ],
43    force_static = True,
44    ios_deps = [
45        "//xplat/js/react-native-github:RCTCxxBridge",
46        "//xplat/js/react-native-github:RCTImage",
47    ],
48    ios_exported_headers = subdir_glob(
49        [
50            ("", "*.h"),
51            ("platform/ios", "RCTImagePrimitivesConversions.h"),
52        ],
53        prefix = "react/renderer/imagemanager",
54    ),
55    ios_frameworks = [
56        "$SDKROOT/System/Library/Frameworks/CoreGraphics.framework",
57        "$SDKROOT/System/Library/Frameworks/Foundation.framework",
58        "$SDKROOT/System/Library/Frameworks/UIKit.framework",
59    ],
60    ios_headers = subdir_glob(
61        [
62            ("", "*.h"),
63            ("platform/ios", "**/*.h"),
64        ],
65        prefix = "",
66    ),
67    ios_srcs = glob(
68        [
69            "platform/ios/**/*.cpp",
70            "platform/ios/**/*.mm",
71        ],
72    ),
73    labels = [
74        "pfh:ReactNative_CommonInfrastructurePlaceholder",
75        "supermodule:xplat/default/public.react_native.infra",
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        "//xplat/folly:headers_only_do_not_use",
87        "//xplat/folly:molly",
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/folly:molly",
112        "//xplat/third-party/gmock:gtest",
113    ],
114)
115