Skip to content

Commit b57d209

Browse files
committed
Add top-level CMake kernels target
ghstack-source-id: d4f48bb ghstack-comment-id: 3111912326 Pull-Request: #12806
1 parent 5326f31 commit b57d209

File tree

2 files changed

+89
-1
lines changed

2 files changed

+89
-1
lines changed

CMakeLists.txt

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,9 @@ set(_executorch_backends "")
357357
# A list of all configured extensions.
358358
set(_executorch_extensions "")
359359

360+
# A list of all configured kernel libraries.
361+
set(_executorch_kernels "")
362+
360363
target_link_libraries(executorch_core PRIVATE program_schema)
361364
if(ANDROID)
362365
target_link_libraries(executorch_core PUBLIC log)
@@ -706,11 +709,13 @@ endif()
706709
if(EXECUTORCH_BUILD_KERNELS_LLM)
707710
# TODO: move all custom kernels to ${CMAKE_CURRENT_SOURCE_DIR}/kernels/custom
708711
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/extension/llm/custom_ops)
712+
list(APPEND _executorch_kernels custom_ops_aot_lib)
709713
endif()
710714

711715
if(EXECUTORCH_BUILD_KERNELS_QUANTIZED)
712716
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/kernels/quantized)
713717
target_link_options_shared_lib(quantized_ops_lib)
718+
list(APPEND _executorch_kernels quantized_ops_lib)
714719
endif()
715720

716721
if(EXECUTORCH_BUILD_VULKAN)
@@ -728,8 +733,58 @@ target_link_libraries(executorch_backends INTERFACE ${_executorch_backends})
728733
add_library(executorch_extensions INTERFACE)
729734
target_link_libraries(executorch_extensions INTERFACE ${_executorch_extensions})
730735

736+
# A target containing all configured kernels, with selective build, if enabled.
737+
add_library(executorch_kernels INTERFACE)
738+
if(NOT EXECUTORCH_SELECT_OPS_YAML STREQUAL "" OR NOT EXECUTORCH_SELECT_OPS_LIST STREQUAL "" OR NOT EXECUTORCH_SELECT_OPS_MODEL STREQUAL "")
739+
gen_selected_ops(
740+
LIB_NAME
741+
"executorch_selected_kernels"
742+
OPS_SCHEMA_YAML
743+
"${EXECUTORCH_SELECT_OPS_LIB}"
744+
ROOT_OPS
745+
"${EXECUTORCH_SELECT_OPS_LIST}"
746+
INCLUDE_ALL_OPS
747+
FALSE
748+
OPS_FROM_MODEL
749+
"${EXECUTORCH_SELECT_OPS_MODEL}"
750+
DTYPE_SELECTIVE_BUILD
751+
"${EXECUTORCH_ENABLE_DTYPE_SELECTIVE_BUILD}"
752+
)
753+
754+
generate_bindings_for_kernels(
755+
LIB_NAME
756+
"executorch_selected_kernels"
757+
FUNCTIONS_YAML
758+
${EXECUTORCH_ROOT}/kernels/portable/functions.yaml
759+
CUSTOM_OPS_YAML
760+
""
761+
DTYPE_SELECTIVE_BUILD
762+
"${EXECUTORCH_ENABLE_DTYPE_SELECTIVE_BUILD}"
763+
)
764+
765+
gen_operators_lib(
766+
LIB_NAME
767+
"executorch_selected_kernels"
768+
KERNEL_LIBS
769+
"portable_kernels"
770+
DEPS
771+
executorch_core
772+
DTYPE_SELECTIVE_BUILD
773+
"${EXECUTORCH_ENABLE_DTYPE_SELECTIVE_BUILD}"
774+
)
775+
list(APPEND _executorch_kernels executorch_selected_kernels)
776+
else()
777+
# No selective build - link the full library.
778+
if(EXECUTORCH_BUILD_KERNELS_OPTIMIZED)
779+
list(APPEND _executorch_kernels optimized_native_cpu_ops_lib)
780+
else()
781+
list(APPEND _executorch_kernels portable_ops_lib)
782+
endif()
783+
endif()
784+
target_link_libraries(executorch_kernels INTERFACE ${_executorch_kernels})
785+
731786
install(
732-
TARGETS executorch_backends executorch_extensions
787+
TARGETS executorch_backends executorch_extensions executorch_kernels
733788
INCLUDES
734789
DESTINATION ${_common_include_directories}
735790
)

tools/cmake/preset/default.cmake

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,28 @@ define_overridable_option(
203203
EXECUTORCH_USE_CPP_CODE_COVERAGE "Build with code coverage enabled" BOOL OFF
204204
)
205205

206+
# Selective build options. These affect the executorch_kernels target.
207+
define_overridable_option(
208+
EXECUTORCH_SELECT_OPS_YAML
209+
"Build the executorch_kernels target with YAML selective build config."
210+
STRING ""
211+
)
212+
define_overridable_option(
213+
EXECUTORCH_SELECT_OPS_LIST
214+
"Build the executorch_kernels target with a list of selected operators."
215+
STRING ""
216+
)
217+
define_overridable_option(
218+
EXECUTORCH_SELECT_OPS_MODEL
219+
"Build the executorch_kernels target with only operators from the given model .pte file."
220+
STRING ""
221+
)
222+
define_overridable_option(
223+
EXECUTORCH_ENABLE_DTYPE_SELECTIVE_BUILD
224+
"Build the executorch_kernels target with only operator implementations for selected data types."
225+
BOOL FALSE
226+
)
227+
206228
# ------------------------------------------------------------------------------
207229
# Validations
208230
#
@@ -253,6 +275,17 @@ check_conflicting_options_on(
253275
EXECUTORCH_BUILD_CPUINFO
254276
)
255277

278+
# Selective build specifiers are mutually exclusive.
279+
check_conflicting_options_on(
280+
IF_ON EXECUTORCH_SELECT_OPS_YAML CONFLICTS_WITH
281+
EXECUTORCH_SELECT_OPS_LIST EXECUTORCH_SELECT_OPS_MODEL
282+
)
283+
284+
check_conflicting_options_on(
285+
IF_ON EXECUTORCH_SELECT_OPS_LIST CONFLICTS_WITH
286+
EXECUTORCH_SELECT_OPS_MODEL
287+
)
288+
256289
if(NOT EXISTS ${EXECUTORCH_PAL_DEFAULT_FILE_PATH})
257290
message(
258291
FATAL_ERROR

0 commit comments

Comments
 (0)