@@ -54,6 +54,7 @@ include(${PROJECT_SOURCE_DIR}/tools/cmake/common/preset.cmake)
5454include (${PROJECT_SOURCE_DIR} /tools/cmake/Utils.cmake)
5555include (CMakeDependentOption)
5656include (ExternalProject)
57+ include (GNUInstallDirs)
5758
5859if (NOT CMAKE_CXX_STANDARD)
5960 set (CMAKE_CXX_STANDARD 17)
@@ -175,6 +176,7 @@ if(NOT DEFINED FXDIV_SOURCE_DIR)
175176 )
176177 set (FXDIV_SOURCE_DIR "backends/xnnpack/third-party/FXdiv" )
177178 add_subdirectory ("${FXDIV_SOURCE_DIR} " )
179+ executorch_move_interface_include_directories_to_build_time_only(fxdiv)
178180 set (CMAKE_POSITION_INDEPENDENT_CODE
179181 ${ORIGINAL_CMAKE_POSITION_INDEPENDENT_CODE_FLAG}
180182 )
@@ -186,7 +188,9 @@ if(EXECUTORCH_BUILD_CPUINFO)
186188 ${CMAKE_POSITION_INDEPENDENT_CODE}
187189 )
188190 set (CMAKE_POSITION_INDEPENDENT_CODE ON )
189- set (CPUINFO_SOURCE_DIR "backends/xnnpack/third-party/cpuinfo" )
191+ set (CPUINFO_SOURCE_DIR
192+ "${CMAKE_CURRENT_LIST_DIR} /backends/xnnpack/third-party/cpuinfo"
193+ )
190194 set (CPUINFO_BUILD_TOOLS
191195 OFF
192196 CACHE BOOL ""
@@ -216,6 +220,14 @@ if(EXECUTORCH_BUILD_CPUINFO)
216220 set (CMAKE_POSITION_INDEPENDENT_CODE
217221 ${ORIGINAL_CMAKE_POSITION_INDEPENDENT_CODE_FLAG}
218222 )
223+ executorch_add_prefix_to_public_headers(cpuinfo "${CPUINFO_SOURCE_DIR} /" )
224+ install (
225+ TARGETS cpuinfo
226+ EXPORT ExecuTorchTargets
227+ DESTINATION lib
228+ INCLUDES
229+ DESTINATION ${_common_include_directories}
230+ )
219231endif ()
220232
221233if (EXECUTORCH_BUILD_PTHREADPOOL)
@@ -248,6 +260,17 @@ if(EXECUTORCH_BUILD_PTHREADPOOL)
248260 )
249261 endif ()
250262 add_subdirectory ("${PTHREADPOOL_SOURCE_DIR} " )
263+ executorch_move_interface_include_directories_to_build_time_only(pthreadpool)
264+ executorch_move_interface_include_directories_to_build_time_only(
265+ pthreadpool_interface
266+ )
267+ install (
268+ TARGETS pthreadpool pthreadpool_interface fxdiv
269+ EXPORT ExecuTorchTargets
270+ DESTINATION lib
271+ INCLUDES
272+ DESTINATION ${_common_include_directories}
273+ )
251274 set (CMAKE_POSITION_INDEPENDENT_CODE
252275 ${ORIGINAL_CMAKE_POSITION_INDEPENDENT_CODE_FLAG}
253276 )
@@ -271,8 +294,10 @@ if(NOT "${_repo_dir_name}" STREQUAL "executorch")
271294 )
272295endif ()
273296set (_common_include_directories
274- ${CMAKE_CURRENT_SOURCE_DIR} /..
275- ${CMAKE_CURRENT_SOURCE_DIR} /runtime/core/portable_type/c10
297+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /..>
298+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /runtime/core/portable_type/c10>
299+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >
300+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} /executorch/runtime/core/portable_type/c10>
276301)
277302
278303#
@@ -447,53 +472,54 @@ add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/configurations)
447472# ${CMAKE_INSTALL_PREFIX}/
448473install (
449474 DIRECTORY runtime/core/
450- DESTINATION include /executorch/runtime/core
475+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /executorch/runtime/core
451476 FILES_MATCHING
452477 PATTERN "*.h"
453478)
454479install (
455480 DIRECTORY runtime/executor/
456- DESTINATION include /executorch/runtime/executor
481+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /executorch/runtime/executor
457482 FILES_MATCHING
458483 PATTERN "*.h"
459484)
460485install (
461486 DIRECTORY runtime/kernel/
462- DESTINATION include /executorch/runtime/kernel
487+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /executorch/runtime/kernel
463488 FILES_MATCHING
464489 PATTERN "*.h"
465490)
466491install (
467492 DIRECTORY runtime/platform/
468- DESTINATION include /executorch/runtime/platform
493+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /executorch/runtime/platform
469494 FILES_MATCHING
470495 PATTERN "*.h"
471496)
472497install (
473498 DIRECTORY extension/kernel_util/
474- DESTINATION include /executorch/extension/kernel_util
499+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /executorch/extension/kernel_util
475500 FILES_MATCHING
476501 PATTERN "*.h"
477502)
478503install (
479504 DIRECTORY extension/tensor/
480- DESTINATION include /executorch/extension/tensor
505+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /executorch/extension/tensor
481506 FILES_MATCHING
482507 PATTERN "*.h"
483508)
484509install (
485510 DIRECTORY extension/threadpool/
486- DESTINATION include /executorch/extension/threadpool
511+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /executorch/extension/threadpool
487512 FILES_MATCHING
488513 PATTERN "*.h"
489514)
490515install (
491516 TARGETS executorch executorch_core
517+ EXPORT ExecuTorchTargets
492518 INCLUDES
493- DESTINATION ${_common_include_directories }
519+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR }
494520)
495- install (FILES tools/cmake/Utils.cmake tools/cmake/ executorch-config.cmake
496- DESTINATION lib /cmake/ExecuTorch
521+ install (FILES tools/cmake/executorch-config.cmake
522+ DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/ExecuTorch
497523)
498524
499525if (EXECUTORCH_BUILD_ARM_BAREMETAL)
@@ -546,6 +572,12 @@ endif()
546572
547573if (EXECUTORCH_BUILD_EXTENSION_DATA_LOADER)
548574 add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR} /extension/data_loader)
575+ install (
576+ DIRECTORY extension/data_loader/
577+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /executorch/extension/data_loader
578+ FILES_MATCHING
579+ PATTERN "*.h"
580+ )
549581endif ()
550582
551583if (EXECUTORCH_BUILD_EXTENSION_EVALUE_UTIL)
@@ -566,24 +598,39 @@ if(EXECUTORCH_BUILD_EXTENSION_MODULE)
566598 add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR} /extension/module)
567599 install (
568600 DIRECTORY extension/module/
569- DESTINATION include /executorch/extension/module
601+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /executorch/extension/module
570602 FILES_MATCHING
571603 PATTERN "*.h"
572604 )
573605endif ()
574606
575607if (EXECUTORCH_BUILD_EXTENSION_LLM)
608+ if (EXECUTORCH_BUILD_EXTENSION_LLM_RUNNER)
609+ set (SUPPORT_REGEX_LOOKAHEAD ON )
610+ # llama/runner/CMakeLists.txt builds a shared library libllama_runner.so
611+ # that transitively depends on tokenizers. Need to build tokenizers with
612+ # -fPIC.
613+ set (ORIGINAL_CMAKE_POSITION_INDEPENDENT_CODE_FLAG
614+ ${CMAKE_POSITION_INDEPENDENT_CODE}
615+ )
616+ set (CMAKE_POSITION_INDEPENDENT_CODE ON )
617+ endif ()
576618 add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR} /extension/llm/tokenizers)
577- endif ()
578-
579- if (EXECUTORCH_BUILD_EXTENSION_LLM_APPLE)
580- add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR} /extension/llm/apple )
619+ if (EXECUTORCH_BUILD_EXTENSION_LLM_RUNNER)
620+ set (CMAKE_POSITION_INDEPENDENT_CODE
621+ ${ORIGINAL_CMAKE_POSITION_INDEPENDENT_CODE_FLAG}
622+ )
623+ endif ()
581624endif ()
582625
583626if (EXECUTORCH_BUILD_EXTENSION_LLM_RUNNER)
584627 add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR} /extension/llm/runner)
585628endif ()
586629
630+ if (EXECUTORCH_BUILD_EXTENSION_LLM_APPLE)
631+ add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR} /extension/llm/apple )
632+ endif ()
633+
587634if (EXECUTORCH_BUILD_EXTENSION_RUNNER_UTIL)
588635 add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR} /extension/runner_util)
589636 install (
@@ -689,8 +736,10 @@ if(EXECUTORCH_BUILD_PYBIND)
689736 target_compile_options (portable_lib PUBLIC ${_pybind_compile_options} )
690737 target_link_libraries (portable_lib PRIVATE ${_dep_libs} )
691738
692- install (TARGETS portable_lib
693- LIBRARY DESTINATION executorch/extension/pybindings
739+ install (
740+ TARGETS portable_lib
741+ EXPORT ExecuTorchTargets
742+ LIBRARY DESTINATION executorch/extension/pybindings
694743 )
695744endif ()
696745
@@ -775,5 +824,11 @@ endif()
775824
776825include (Test .cmake)
777826
827+ install (
828+ EXPORT ExecuTorchTargets
829+ FILE ExecuTorchTargets.cmake
830+ DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/ExecuTorch
831+ )
832+
778833# Print all the configs that were called with announce_configured_options.
779834print_configured_options()
0 commit comments