xref: /aosp_15_r20/external/executorch/runtime/platform/targets.bzl (revision 523fa7a60841cd1ecfb9cc4201f1ca8b03ed023a)
1*523fa7a6SAndroid Build Coastguard Workerload("@fbsource//xplat/executorch/build:runtime_wrapper.bzl", "runtime")
2*523fa7a6SAndroid Build Coastguard Workerload(":log.bzl", "get_et_logging_flags")
3*523fa7a6SAndroid Build Coastguard Worker
4*523fa7a6SAndroid Build Coastguard Workerdef _select_pal(dict_):
5*523fa7a6SAndroid Build Coastguard Worker    """Returns an element of `dict_` based on the value of the
6*523fa7a6SAndroid Build Coastguard Worker    `executorch.pal_default` build config value. Fails if no corresponding entry
7*523fa7a6SAndroid Build Coastguard Worker    exists.
8*523fa7a6SAndroid Build Coastguard Worker    """
9*523fa7a6SAndroid Build Coastguard Worker    pal_default = native.read_config("executorch", "pal_default", "posix")
10*523fa7a6SAndroid Build Coastguard Worker    if not pal_default in dict_:
11*523fa7a6SAndroid Build Coastguard Worker        fail("Missing key for executorch.pal_default value '{}' in dict '{}'".format(pal_default, dict_))
12*523fa7a6SAndroid Build Coastguard Worker    return dict_[pal_default]
13*523fa7a6SAndroid Build Coastguard Worker
14*523fa7a6SAndroid Build Coastguard Workerdef profiling_enabled():
15*523fa7a6SAndroid Build Coastguard Worker    return native.read_config("executorch", "prof_enabled", "false") == "true"
16*523fa7a6SAndroid Build Coastguard Worker
17*523fa7a6SAndroid Build Coastguard Workerdef get_profiling_flags():
18*523fa7a6SAndroid Build Coastguard Worker    profiling_flags = []
19*523fa7a6SAndroid Build Coastguard Worker    if profiling_enabled():
20*523fa7a6SAndroid Build Coastguard Worker        profiling_flags += ["-DPROFILING_ENABLED"]
21*523fa7a6SAndroid Build Coastguard Worker    prof_buf_size = native.read_config("executorch", "prof_buf_size", None)
22*523fa7a6SAndroid Build Coastguard Worker    if prof_buf_size != None:
23*523fa7a6SAndroid Build Coastguard Worker        if not profiling_enabled():
24*523fa7a6SAndroid Build Coastguard Worker            fail("Cannot set profiling buffer size without enabling profiling first.")
25*523fa7a6SAndroid Build Coastguard Worker        profiling_flags += ["-DMAX_PROFILE_EVENTS={}".format(prof_buf_size), "-DMAX_MEM_PROFILE_EVENTS={}".format(prof_buf_size)]
26*523fa7a6SAndroid Build Coastguard Worker    num_prof_blocks = native.read_config("executorch", "num_prof_blocks", None)
27*523fa7a6SAndroid Build Coastguard Worker    if num_prof_blocks != None:
28*523fa7a6SAndroid Build Coastguard Worker        if not profiling_enabled():
29*523fa7a6SAndroid Build Coastguard Worker            fail("Cannot configure number of profiling blocks without enabling profiling first.")
30*523fa7a6SAndroid Build Coastguard Worker        profiling_flags += ["-DMAX_PROFILE_BLOCKS={}".format(num_prof_blocks)]
31*523fa7a6SAndroid Build Coastguard Worker    return profiling_flags
32*523fa7a6SAndroid Build Coastguard Worker
33*523fa7a6SAndroid Build Coastguard Workerdef define_common_targets():
34*523fa7a6SAndroid Build Coastguard Worker    """Defines targets that should be shared between fbcode and xplat.
35*523fa7a6SAndroid Build Coastguard Worker
36*523fa7a6SAndroid Build Coastguard Worker    The directory containing this targets.bzl file should also contain both
37*523fa7a6SAndroid Build Coastguard Worker    TARGETS and BUCK files that call this function.
38*523fa7a6SAndroid Build Coastguard Worker    """
39*523fa7a6SAndroid Build Coastguard Worker
40*523fa7a6SAndroid Build Coastguard Worker    # Default implementations of pal functions. These are weak symbols, so
41*523fa7a6SAndroid Build Coastguard Worker    # client defined implementations will overide them.
42*523fa7a6SAndroid Build Coastguard Worker    runtime.cxx_library(
43*523fa7a6SAndroid Build Coastguard Worker        name = "platform_private",
44*523fa7a6SAndroid Build Coastguard Worker        srcs = _select_pal({
45*523fa7a6SAndroid Build Coastguard Worker            "minimal": ["default/minimal.cpp"],
46*523fa7a6SAndroid Build Coastguard Worker            "posix": ["default/posix.cpp"],
47*523fa7a6SAndroid Build Coastguard Worker        }),
48*523fa7a6SAndroid Build Coastguard Worker        deps = [
49*523fa7a6SAndroid Build Coastguard Worker            ":pal_interface",
50*523fa7a6SAndroid Build Coastguard Worker        ],
51*523fa7a6SAndroid Build Coastguard Worker        visibility = [
52*523fa7a6SAndroid Build Coastguard Worker            "//executorch/core/...",
53*523fa7a6SAndroid Build Coastguard Worker        ],
54*523fa7a6SAndroid Build Coastguard Worker        # WARNING: using a deprecated API to avoid being built into a shared
55*523fa7a6SAndroid Build Coastguard Worker        # library. In the case of dynamically loading .so library we don't want
56*523fa7a6SAndroid Build Coastguard Worker        # it to depend on other .so libraries because that way we have to
57*523fa7a6SAndroid Build Coastguard Worker        # specify library directory path.
58*523fa7a6SAndroid Build Coastguard Worker        force_static = True,
59*523fa7a6SAndroid Build Coastguard Worker    )
60*523fa7a6SAndroid Build Coastguard Worker
61*523fa7a6SAndroid Build Coastguard Worker    # Interfaces for executorch users
62*523fa7a6SAndroid Build Coastguard Worker    runtime.cxx_library(
63*523fa7a6SAndroid Build Coastguard Worker        name = "platform",
64*523fa7a6SAndroid Build Coastguard Worker        exported_headers = [
65*523fa7a6SAndroid Build Coastguard Worker            "abort.h",
66*523fa7a6SAndroid Build Coastguard Worker            "assert.h",
67*523fa7a6SAndroid Build Coastguard Worker            "clock.h",
68*523fa7a6SAndroid Build Coastguard Worker            "log.h",
69*523fa7a6SAndroid Build Coastguard Worker            "profiler.h",
70*523fa7a6SAndroid Build Coastguard Worker            "runtime.h",
71*523fa7a6SAndroid Build Coastguard Worker        ],
72*523fa7a6SAndroid Build Coastguard Worker        srcs = [
73*523fa7a6SAndroid Build Coastguard Worker            "abort.cpp",
74*523fa7a6SAndroid Build Coastguard Worker            "log.cpp",
75*523fa7a6SAndroid Build Coastguard Worker            "profiler.cpp",
76*523fa7a6SAndroid Build Coastguard Worker            "runtime.cpp",
77*523fa7a6SAndroid Build Coastguard Worker        ],
78*523fa7a6SAndroid Build Coastguard Worker        exported_preprocessor_flags = get_profiling_flags() + get_et_logging_flags(),
79*523fa7a6SAndroid Build Coastguard Worker        exported_deps = [
80*523fa7a6SAndroid Build Coastguard Worker            "//executorch/runtime/platform:pal_interface",
81*523fa7a6SAndroid Build Coastguard Worker            ":compiler",
82*523fa7a6SAndroid Build Coastguard Worker            ":platform_private",
83*523fa7a6SAndroid Build Coastguard Worker        ],
84*523fa7a6SAndroid Build Coastguard Worker        visibility = [
85*523fa7a6SAndroid Build Coastguard Worker            "//executorch/...",
86*523fa7a6SAndroid Build Coastguard Worker            "@EXECUTORCH_CLIENTS",
87*523fa7a6SAndroid Build Coastguard Worker        ],
88*523fa7a6SAndroid Build Coastguard Worker        # WARNING: using a deprecated API to avoid being built into a shared
89*523fa7a6SAndroid Build Coastguard Worker        # library. In the case of dynamically loading so library we don't want
90*523fa7a6SAndroid Build Coastguard Worker        # it to depend on other so libraries because that way we have to
91*523fa7a6SAndroid Build Coastguard Worker        # specify library directory path.
92*523fa7a6SAndroid Build Coastguard Worker        force_static = True,
93*523fa7a6SAndroid Build Coastguard Worker    )
94*523fa7a6SAndroid Build Coastguard Worker
95*523fa7a6SAndroid Build Coastguard Worker    # Library for backend implementers to define implementations against.
96*523fa7a6SAndroid Build Coastguard Worker    runtime.cxx_library(
97*523fa7a6SAndroid Build Coastguard Worker        name = "pal_interface",
98*523fa7a6SAndroid Build Coastguard Worker        exported_headers = [
99*523fa7a6SAndroid Build Coastguard Worker            "platform.h",
100*523fa7a6SAndroid Build Coastguard Worker            "system.h",
101*523fa7a6SAndroid Build Coastguard Worker            "types.h",
102*523fa7a6SAndroid Build Coastguard Worker        ],
103*523fa7a6SAndroid Build Coastguard Worker        exported_deps = [
104*523fa7a6SAndroid Build Coastguard Worker            ":compiler",
105*523fa7a6SAndroid Build Coastguard Worker        ],
106*523fa7a6SAndroid Build Coastguard Worker        exported_preprocessor_flags = select(
107*523fa7a6SAndroid Build Coastguard Worker            {
108*523fa7a6SAndroid Build Coastguard Worker                "DEFAULT": [],
109*523fa7a6SAndroid Build Coastguard Worker                "ovr_config//os:linux": ["-DET_USE_LIBDL"],
110*523fa7a6SAndroid Build Coastguard Worker                "ovr_config//os:macos": ["-DET_USE_LIBDL"],
111*523fa7a6SAndroid Build Coastguard Worker            },
112*523fa7a6SAndroid Build Coastguard Worker        ),
113*523fa7a6SAndroid Build Coastguard Worker        visibility = [
114*523fa7a6SAndroid Build Coastguard Worker            "//executorch/...",
115*523fa7a6SAndroid Build Coastguard Worker            "@EXECUTORCH_CLIENTS",
116*523fa7a6SAndroid Build Coastguard Worker        ],
117*523fa7a6SAndroid Build Coastguard Worker    )
118*523fa7a6SAndroid Build Coastguard Worker
119*523fa7a6SAndroid Build Coastguard Worker    # Common compiler directives such as 'unlikely' or 'deprecated'
120*523fa7a6SAndroid Build Coastguard Worker    runtime.cxx_library(
121*523fa7a6SAndroid Build Coastguard Worker        name = "compiler",
122*523fa7a6SAndroid Build Coastguard Worker        exported_headers = [
123*523fa7a6SAndroid Build Coastguard Worker            "compiler.h",
124*523fa7a6SAndroid Build Coastguard Worker        ],
125*523fa7a6SAndroid Build Coastguard Worker        visibility = [
126*523fa7a6SAndroid Build Coastguard Worker            "//executorch/...",
127*523fa7a6SAndroid Build Coastguard Worker            "@EXECUTORCH_CLIENTS",
128*523fa7a6SAndroid Build Coastguard Worker        ],
129*523fa7a6SAndroid Build Coastguard Worker    )
130