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