Skip to content

Commit a55c984

Browse files
committed
Add top-level CMake kernels target
ghstack-source-id: 0ef821c ghstack-comment-id: 3111912326 Pull-Request: #12806
1 parent 24fd1a5 commit a55c984

File tree

2 files changed

+93
-1
lines changed

2 files changed

+93
-1
lines changed

CMakeLists.txt

Lines changed: 60 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)
@@ -730,8 +735,62 @@ add_library(executorch_extensions INTERFACE)
730735
add_library(executorch::extensions ALIAS executorch_extensions)
731736
target_link_libraries(executorch_extensions INTERFACE ${_executorch_extensions})
732737

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

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)