@@ -144,6 +144,8 @@ option(EXECUTORCH_BUILD_COREML "Build the Core ML backend" OFF)
144144
145145option (EXECUTORCH_BUILD_CUSTOM "Build the custom kernels" OFF )
146146
147+ option (EXECUTORCH_BUILD_CUSTOM_OPS_AOT "Build the custom ops lib for AOT" OFF )
148+
147149option (EXECUTORCH_BUILD_EXTENSION_DATA_LOADER "Build the Data Loader extension"
148150 OFF )
149151
@@ -175,17 +177,29 @@ option(EXECUTORCH_BUILD_VULKAN "Build the Vulkan backend" OFF)
175177#
176178# pthreadpool: build pthreadpool library. Disable on unsupported platforms
177179#
178- cmake_dependent_option (EXECUTORCH_BUILD_PTHREADPOOL "Build pthreadpool library."
179- ON "NOT EXECUTORCH_BUILD_ARM_BAREMETAL" OFF )
180+ cmake_dependent_option (
181+ EXECUTORCH_BUILD_PTHREADPOOL "Build pthreadpool library." ON
182+ "NOT EXECUTORCH_BUILD_ARM_BAREMETAL" OFF )
180183
181184#
182185# cpuinfo: build cpuinfo library. Disable on unsupported platforms
183186#
184187cmake_dependent_option (EXECUTORCH_BUILD_CPUINFO "Build cpuinfo library." ON
185188 "NOT EXECUTORCH_BUILD_ARM_BAREMETAL" OFF )
186189
190+ if (EXECUTORCH_BUILD_CUSTOM_OPS_AOT)
191+ set (EXECUTORCH_BUILD_CUSTOM ON )
192+ endif ()
193+
194+ if (EXECUTORCH_BUILD_CUSTOM)
195+ set (EXECUTORCH_BUILD_OPTIMIZED ON )
196+ endif ()
197+
187198if (EXECUTORCH_BUILD_CPUINFO)
188199 # --- cpuinfo
200+ set (ORIGINAL_CMAKE_POSITION_INDEPENDENT_CODE_FLAG
201+ ${CMAKE_POSITION_INDEPENDENT_CODE } )
202+ set (CMAKE_POSITION_INDEPENDENT_CODE ON )
189203 set (CPUINFO_SOURCE_DIR "backends/xnnpack/third-party/cpuinfo" )
190204 set (CPUINFO_BUILD_TOOLS
191205 OFF
@@ -207,10 +221,15 @@ if(EXECUTORCH_BUILD_CPUINFO)
207221 CACHE STRING "" )
208222 set (CLOG_SOURCE_DIR "${CPUINFO_SOURCE_DIR } /deps/clog" )
209223 add_subdirectory ("${CPUINFO_SOURCE_DIR } " )
224+ set (CMAKE_POSITION_INDEPENDENT_CODE
225+ ${ORIGINAL_CMAKE_POSITION_INDEPENDENT_CODE_FLAG} )
210226endif ()
211227
212228if (EXECUTORCH_BUILD_PTHREADPOOL)
213229 # --- pthreadpool
230+ set (ORIGINAL_CMAKE_POSITION_INDEPENDENT_CODE_FLAG
231+ ${CMAKE_POSITION_INDEPENDENT_CODE } )
232+ set (CMAKE_POSITION_INDEPENDENT_CODE ON )
214233 set (PTHREADPOOL_SOURCE_DIR "backends/xnnpack/third-party/pthreadpool" )
215234 set (PTHREADPOOL_BUILD_TESTS
216235 OFF
@@ -230,6 +249,8 @@ if(EXECUTORCH_BUILD_PTHREADPOOL)
230249 CACHE STRING "" )
231250 endif ()
232251 add_subdirectory ("${PTHREADPOOL_SOURCE_DIR } " )
252+ set (CMAKE_POSITION_INDEPENDENT_CODE
253+ ${ORIGINAL_CMAKE_POSITION_INDEPENDENT_CODE_FLAG} )
233254endif ()
234255
235256if (NOT PYTHON_EXECUTABLE)
@@ -352,23 +373,28 @@ add_subdirectory(schema)
352373# Only contains primitive operators; does not contain portable kernels or other
353374# full operators. Does not contain any backends.
354375#
355-
356- add_library (executorch ${_executorch__srcs} )
357- target_link_libraries (executorch PRIVATE program_schema )
358- target_link_options_shared_lib (executorch )
376+ add_library (executorch_no_prim_ops ${_executorch_no_prim_ops__srcs} )
377+ target_link_libraries (executorch_no_prim_ops PRIVATE program_schema )
359378# Check if dl exists for this toolchain and only then link it.
360379find_library (DL_LIBRARY_EXISTS NAMES dl )
361380# Check if the library was found
362381if (DL_LIBRARY_EXISTS)
363- target_link_libraries (executorch PRIVATE dl ) # For dladdr()
382+ target_link_libraries (executorch_no_prim_ops PRIVATE dl ) # For dladdr()
364383endif ()
365- target_include_directories (executorch PUBLIC ${_common_include_directories} )
366- target_compile_options (executorch PUBLIC ${_common_compile_options} )
384+ target_include_directories (executorch_no_prim_ops PUBLIC ${_common_include_directories} )
385+ target_compile_options (executorch_no_prim_ops PUBLIC ${_common_compile_options} )
367386if (MAX_KERNEL_NUM)
368- target_compile_definitions (executorch
387+ target_compile_definitions (executorch_no_prim_ops
369388 PRIVATE MAX_KERNEL_NUM=${MAX_KERNEL_NUM} )
370389endif ()
371390
391+ add_library (executorch ${_executorch__srcs} )
392+ target_link_libraries (executorch PRIVATE executorch_no_prim_ops )
393+ target_link_libraries (executorch INTERFACE program_schema )
394+ target_include_directories (executorch PUBLIC ${_common_include_directories} )
395+ target_compile_options (executorch PUBLIC ${_common_compile_options} )
396+ target_link_options_shared_lib (executorch )
397+
372398#
373399# portable_ops_lib: A library to register core ATen ops using portable kernels,
374400# see kernels/portable/CMakeLists.txt.
@@ -504,25 +530,42 @@ if(EXECUTORCH_BUILD_PYBIND)
504530 add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR } /sdk )
505531 endif ()
506532
533+ # find pytorch lib, to allow pybind to take at::Tensor as input/output
534+ find_package (Torch CONFIG REQUIRED )
535+ find_library (TORCH_PYTHON_LIBRARY torch_python
536+ PATHS "${TORCH_INSTALL_PREFIX} /lib" )
537+
538+ set (_dep_libs
539+ ${TORCH_PYTHON_LIBRARY}
540+ bundled_program
541+ etdump
542+ executorch
543+ extension_data_loader
544+ portable_ops_lib
545+ util
546+ torch)
547+
507548 if (EXECUTORCH_BUILD_COREML)
508- set (PYBIND_LINK_COREML " coremldelegate" )
549+ list ( APPEND _dep_libs coremldelegate)
509550 endif ()
510551
511552 if (EXECUTORCH_BUILD_MPS)
512- set (PYBIND_LINK_MPS " mpsdelegate" )
553+ list ( APPEND _dep_libs mpsdelegate)
513554 endif ()
514555
515556 if (EXECUTORCH_BUILD_XNNPACK)
516- # need to explicitly specify XNNPACK here
517- # otherwise uses XNNPACK symbols from libtorch_cpu
518- set (PYBIND_LINK_XNNPACK xnnpack_backend XNNPACK)
557+ # need to explicitly specify XNNPACK here otherwise uses XNNPACK symbols
558+ # from libtorch_cpu
559+ list ( APPEND _dep_libs xnnpack_backend XNNPACK)
519560 endif ()
520561
521- # find pytorch lib, to allow pybind to take at::Tensor as input/output
522- find_package (Torch CONFIG REQUIRED )
523- find_library (TORCH_PYTHON_LIBRARY torch_python
524- PATHS "${TORCH_INSTALL_PREFIX} /lib" )
562+ if (EXECUTORCH_BUILD_CUSTOM)
563+ list (APPEND _dep_libs custom_ops)
564+ endif ()
525565
566+ if (EXECUTORCH_BUILD_CUSTOM_OPS_AOT)
567+ list (APPEND _dep_libs custom_ops_aot_lib)
568+ endif ()
526569 # compile options for pybind
527570
528571 set (_pybind_compile_options -Wno-deprecated-declarations -fPIC -frtti
@@ -544,19 +587,7 @@ if(EXECUTORCH_BUILD_PYBIND)
544587 PUBLIC EXECUTORCH_PYTHON_MODULE_NAME=portable_lib )
545588 target_include_directories (portable_lib PRIVATE ${TORCH_INCLUDE_DIRS} )
546589 target_compile_options (portable_lib PUBLIC ${_pybind_compile_options} )
547- target_link_libraries (
548- portable_lib
549- PUBLIC ${TORCH_PYTHON_LIBRARY}
550- bundled_program
551- etdump
552- executorch
553- extension_data_loader
554- portable_ops_lib
555- util
556- torch
557- ${PYBIND_LINK_COREML}
558- ${PYBIND_LINK_MPS}
559- ${PYBIND_LINK_XNNPACK} )
590+ target_link_libraries (portable_lib PUBLIC ${_dep_libs} )
560591
561592 install (TARGETS portable_lib
562593 LIBRARY DESTINATION executorch/extension/pybindings)
0 commit comments