Skip to content

Commit bbbf400

Browse files
committed
WIP: attempt to use CMake EXPORT
The CMake EXPORT feature seems like it's supposed to make target_compile_options etc. work nicely for both in-project builds and also projects that consume your project by installing it and finding it with find_package. Using EXPORT would make it easy to have similar behavior to Buck's exported_preprocessor_flags, for example. Unfortunately, I am currently stalled here by XNNPACK's lack of use of EXPORT. I tried working around dependencies that don't use EXPORT by re-installing them with EXPORT ourselves, but XNNPACK has rather a lot so I'm sending this out to highlight the problem and ask if there's another way. I found some similar issues in TFLite: tensorflow/tensorflow#57658 tensorflow/tensorflow#87172 ghstack-source-id: 8b7ec9a ghstack-comment-id: 2699501745 Pull Request resolved: #8954
1 parent 2d854b7 commit bbbf400

File tree

56 files changed

+473
-343
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+473
-343
lines changed

.ci/scripts/build-qnn-sdk.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ set_up_aot() {
3333
-DEXECUTORCH_BUILD_DEVTOOLS=ON \
3434
-DEXECUTORCH_BUILD_EXTENSION_MODULE=ON \
3535
-DEXECUTORCH_BUILD_EXTENSION_DATA_LOADER=ON \
36+
-DEXECUTORCH_BUILD_EXTENSION_EXTENSION_LLM=ON \
37+
-DEXECUTORCH_BUILD_EXTENSION_EXTENSION_LLM_RUNNER=ON \
3638
-DEXECUTORCH_BUILD_EXTENSION_FLAT_TENSOR=ON \
3739
-DEXECUTORCH_BUILD_EXTENSION_TENSOR=ON \
3840
-DEXECUTORCH_ENABLE_EVENT_TRACER=ON \

.ci/scripts/test_llama.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ cmake_install_executorch_libraries() {
150150
echo "Installing libexecutorch.a, libextension_module.so, libportable_ops_lib.a"
151151
rm -rf cmake-out
152152
retry cmake --preset llm \
153+
-DBUILD_TESTING=OFF \
153154
-DCMAKE_INSTALL_PREFIX=cmake-out \
154155
-DCMAKE_BUILD_TYPE="$CMAKE_BUILD_TYPE" \
155156
-DEXECUTORCH_BUILD_QNN="$QNN" \

.ci/scripts/test_llama_torchao_lowbit.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ cmake -DPYTHON_EXECUTABLE=python \
2929
-DEXECUTORCH_ENABLE_LOGGING=1 \
3030
-DCMAKE_BUILD_TYPE=Release \
3131
-DEXECUTORCH_BUILD_EXTENSION_DATA_LOADER=ON \
32+
-DEXECUTORCH_BUILD_EXTENSION_LLM=ON \
33+
-DEXECUTORCH_BUILD_EXTENSION_LLM_RUNNER=ON \
3234
-DEXECUTORCH_BUILD_EXTENSION_MODULE=ON \
3335
-DEXECUTORCH_BUILD_EXTENSION_FLAT_TENSOR=ON \
3436
-DEXECUTORCH_BUILD_EXTENSION_TENSOR=ON \

.ci/scripts/test_llava.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ EXECUTORCH_COMMON_CMAKE_ARGS=" \
3838
-DEXECUTORCH_BUILD_EXTENSION_MODULE=ON \
3939
-DEXECUTORCH_BUILD_EXTENSION_DATA_LOADER=ON \
4040
-DEXECUTORCH_BUILD_EXTENSION_FLAT_TENSOR=ON \
41+
-DEXECUTORCH_BUILD_EXTENSION_LLM=ON \
42+
-DEXECUTORCH_BUILD_EXTENSION_LLM_RUNNER=ON \
4143
-DEXECUTORCH_BUILD_EXTENSION_TENSOR=ON \
4244
-DEXECUTORCH_BUILD_KERNELS_LLM=ON \
4345
-DEXECUTORCH_BUILD_KERNELS_OPTIMIZED=ON \

.github/workflows/pull.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ jobs:
371371
size=${arr[4]}
372372
# threshold=48120 on devserver with gcc11.4
373373
# todo(lfq): update once binary size is below 50kb.
374-
threshold="55584"
374+
threshold="63776"
375375
if [[ "$size" -le "$threshold" ]]; then
376376
echo "Success $size <= $threshold"
377377
else
@@ -406,7 +406,7 @@ jobs:
406406
output=$(ls -la cmake-out/test/size_test)
407407
arr=($output)
408408
size=${arr[4]}
409-
threshold="51728"
409+
threshold="51744"
410410
if [[ "$size" -le "$threshold" ]]; then
411411
echo "Success $size <= $threshold"
412412
else

CMakeLists.txt

Lines changed: 73 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ include(${PROJECT_SOURCE_DIR}/tools/cmake/common/preset.cmake)
5454
include(${PROJECT_SOURCE_DIR}/tools/cmake/Utils.cmake)
5555
include(CMakeDependentOption)
5656
include(ExternalProject)
57+
include(GNUInstallDirs)
5758

5859
if(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+
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+
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+
)
219231
endif()
220232

221233
if(EXECUTORCH_BUILD_PTHREADPOOL)
@@ -248,6 +260,15 @@ if(EXECUTORCH_BUILD_PTHREADPOOL)
248260
)
249261
endif()
250262
add_subdirectory("${PTHREADPOOL_SOURCE_DIR}")
263+
move_interface_include_directories_to_build_time_only(pthreadpool)
264+
move_interface_include_directories_to_build_time_only(pthreadpool_interface)
265+
install(
266+
TARGETS pthreadpool pthreadpool_interface fxdiv
267+
EXPORT ExecuTorchTargets
268+
DESTINATION lib
269+
INCLUDES
270+
DESTINATION ${_common_include_directories}
271+
)
251272
set(CMAKE_POSITION_INDEPENDENT_CODE
252273
${ORIGINAL_CMAKE_POSITION_INDEPENDENT_CODE_FLAG}
253274
)
@@ -271,8 +292,10 @@ if(NOT "${_repo_dir_name}" STREQUAL "executorch")
271292
)
272293
endif()
273294
set(_common_include_directories
274-
${CMAKE_CURRENT_SOURCE_DIR}/..
275-
${CMAKE_CURRENT_SOURCE_DIR}/runtime/core/portable_type/c10
295+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
296+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/runtime/core/portable_type/c10>
297+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
298+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/executorch/runtime/core/portable_type/c10>
276299
)
277300

278301
#
@@ -447,53 +470,54 @@ add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/configurations)
447470
# ${CMAKE_INSTALL_PREFIX}/
448471
install(
449472
DIRECTORY runtime/core/
450-
DESTINATION include/executorch/runtime/core
473+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/executorch/runtime/core
451474
FILES_MATCHING
452475
PATTERN "*.h"
453476
)
454477
install(
455478
DIRECTORY runtime/executor/
456-
DESTINATION include/executorch/runtime/executor
479+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/executorch/runtime/executor
457480
FILES_MATCHING
458481
PATTERN "*.h"
459482
)
460483
install(
461484
DIRECTORY runtime/kernel/
462-
DESTINATION include/executorch/runtime/kernel
485+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/executorch/runtime/kernel
463486
FILES_MATCHING
464487
PATTERN "*.h"
465488
)
466489
install(
467490
DIRECTORY runtime/platform/
468-
DESTINATION include/executorch/runtime/platform
491+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/executorch/runtime/platform
469492
FILES_MATCHING
470493
PATTERN "*.h"
471494
)
472495
install(
473496
DIRECTORY extension/kernel_util/
474-
DESTINATION include/executorch/extension/kernel_util
497+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/executorch/extension/kernel_util
475498
FILES_MATCHING
476499
PATTERN "*.h"
477500
)
478501
install(
479502
DIRECTORY extension/tensor/
480-
DESTINATION include/executorch/extension/tensor
503+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/executorch/extension/tensor
481504
FILES_MATCHING
482505
PATTERN "*.h"
483506
)
484507
install(
485508
DIRECTORY extension/threadpool/
486-
DESTINATION include/executorch/extension/threadpool
509+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/executorch/extension/threadpool
487510
FILES_MATCHING
488511
PATTERN "*.h"
489512
)
490513
install(
491514
TARGETS executorch executorch_core
515+
EXPORT ExecuTorchTargets
492516
INCLUDES
493-
DESTINATION ${_common_include_directories}
517+
DESTINATION include
494518
)
495-
install(FILES tools/cmake/Utils.cmake tools/cmake/executorch-config.cmake
496-
DESTINATION lib/cmake/ExecuTorch
519+
install(FILES tools/cmake/executorch-config.cmake
520+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ExecuTorch
497521
)
498522

499523
if(EXECUTORCH_BUILD_ARM_BAREMETAL)
@@ -546,6 +570,12 @@ endif()
546570

547571
if(EXECUTORCH_BUILD_EXTENSION_DATA_LOADER)
548572
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/extension/data_loader)
573+
install(
574+
DIRECTORY extension/data_loader/
575+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/executorch/extension/data_loader
576+
FILES_MATCHING
577+
PATTERN "*.h"
578+
)
549579
endif()
550580

551581
if(EXECUTORCH_BUILD_EXTENSION_EVALUE_UTIL)
@@ -566,24 +596,39 @@ if(EXECUTORCH_BUILD_EXTENSION_MODULE)
566596
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/extension/module)
567597
install(
568598
DIRECTORY extension/module/
569-
DESTINATION include/executorch/extension/module
599+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/executorch/extension/module
570600
FILES_MATCHING
571601
PATTERN "*.h"
572602
)
573603
endif()
574604

575605
if(EXECUTORCH_BUILD_EXTENSION_LLM)
606+
if(EXECUTORCH_BUILD_EXTENSION_LLM_RUNNER)
607+
set(SUPPORT_REGEX_LOOKAHEAD ON)
608+
# llama/runner/CMakeLists.txt builds a shared library libllama_runner.so
609+
# that transitively depends on tokenizers. Need to build tokenizers with
610+
# -fPIC.
611+
set(ORIGINAL_CMAKE_POSITION_INDEPENDENT_CODE_FLAG
612+
${CMAKE_POSITION_INDEPENDENT_CODE}
613+
)
614+
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
615+
endif()
576616
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)
617+
if(EXECUTORCH_BUILD_EXTENSION_LLM_RUNNER)
618+
set(CMAKE_POSITION_INDEPENDENT_CODE
619+
${ORIGINAL_CMAKE_POSITION_INDEPENDENT_CODE_FLAG}
620+
)
621+
endif()
581622
endif()
582623

583624
if(EXECUTORCH_BUILD_EXTENSION_LLM_RUNNER)
584625
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/extension/llm/runner)
585626
endif()
586627

628+
if(EXECUTORCH_BUILD_EXTENSION_LLM_APPLE)
629+
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/extension/llm/apple)
630+
endif()
631+
587632
if(EXECUTORCH_BUILD_EXTENSION_RUNNER_UTIL)
588633
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/extension/runner_util)
589634
install(
@@ -689,8 +734,10 @@ if(EXECUTORCH_BUILD_PYBIND)
689734
target_compile_options(portable_lib PUBLIC ${_pybind_compile_options})
690735
target_link_libraries(portable_lib PRIVATE ${_dep_libs})
691736

692-
install(TARGETS portable_lib
693-
LIBRARY DESTINATION executorch/extension/pybindings
737+
install(
738+
TARGETS portable_lib
739+
EXPORT ExecuTorchTargets
740+
LIBRARY DESTINATION executorch/extension/pybindings
694741
)
695742
endif()
696743

@@ -775,5 +822,11 @@ endif()
775822

776823
include(Test.cmake)
777824

825+
install(
826+
EXPORT ExecuTorchTargets
827+
FILE ExecuTorchTargets.cmake
828+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ExecuTorch
829+
)
830+
778831
# Print all the configs that were called with announce_configured_options.
779832
print_configured_options()

backends/apple/coreml/CMakeLists.txt

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ endif()
105105

106106
add_library(coreml_util ${UTIL_SOURCES})
107107
target_include_directories(
108-
coreml_util PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/runtime/util
108+
coreml_util PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/runtime/util> $<INSTALL_INTERFACE:include/executorch/backends/apple/coreml/runtime/util>
109109
)
110110
if(APPLE)
111111
target_link_libraries(coreml_util PRIVATE ${FOUNDATION_FRAMEWORK})
@@ -115,8 +115,13 @@ target_compile_options(coreml_util PUBLIC -fPIC)
115115
install(
116116
TARGETS coreml_util
117117
DESTINATION lib
118-
INCLUDES
119-
DESTINATION ${_common_include_directories}
118+
)
119+
120+
install(
121+
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/runtime/util
122+
DESTINATION include/executorch/backends/apple/coreml/runtime/util
123+
FILES_MATCHING
124+
PATTERN "*.h"
120125
)
121126

122127
# CoreML inmemoryfs
@@ -134,7 +139,7 @@ endif()
134139

135140
add_library(coreml_inmemoryfs ${INMEMORYFS_SOURCES})
136141
target_include_directories(
137-
coreml_inmemoryfs PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/runtime/inmemoryfs
142+
coreml_inmemoryfs PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/runtime/inmemoryfs> $<INSTALL_INTERFACE:include/executorch/backends/apple/coreml/runtime/inmemoryfs>
138143
)
139144
if(APPLE)
140145
target_link_libraries(
@@ -150,6 +155,13 @@ install(
150155
DESTINATION ${_common_include_directories}
151156
)
152157

158+
install(
159+
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/runtime/inmemoryfs
160+
DESTINATION include/executorch/backends/apple/coreml/runtime/inmemoryfs
161+
FILES_MATCHING
162+
PATTERN "*.h"
163+
)
164+
153165
# executorchcoreml
154166

155167
if(EXECUTORCH_BUILD_PYBIND)
@@ -232,9 +244,10 @@ if(APPLE)
232244
endif()
233245

234246
install(
235-
TARGETS coremldelegate
247+
TARGETS coremldelegate coreml_util coreml_inmemoryfs
248+
EXPORT ExecuTorchTargets
236249
DESTINATION lib
237250
INCLUDES
238-
DESTINATION ${_common_include_directories}
251+
DESTINATION include
239252
)
240253
endif()

backends/apple/mps/CMakeLists.txt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ endif()
1919
include(${EXECUTORCH_ROOT}/tools/cmake/Utils.cmake)
2020

2121
set(_common_compile_options -Wno-deprecated-declarations)
22-
set(_common_include_directories ${EXECUTORCH_ROOT}/..)
2322

2423
set(_mps_schema__include_dir "${CMAKE_BINARY_DIR}/schema/include")
2524

@@ -51,9 +50,10 @@ add_library(mps_schema INTERFACE ${_mps_schema__outputs})
5150
set_target_properties(mps_schema PROPERTIES LINKER_LANGUAGE CXX)
5251
target_include_directories(
5352
mps_schema
54-
INTERFACE ${_mps_schema__include_dir}
55-
${EXECUTORCH_ROOT}/third-party/flatbuffers/include
56-
${_common_include_directories}
53+
INTERFACE
54+
$<BUILD_INTERFACE:${_mps_schema__include_dir}>
55+
$<BUILD_INTERFACE:${EXECUTORCH_ROOT}/third-party/flatbuffers/include>
56+
${_common_include_directories}
5757
)
5858

5959
list(TRANSFORM _mps_backend__srcs PREPEND "${EXECUTORCH_ROOT}/")
@@ -75,7 +75,8 @@ target_compile_options(mpsdelegate PUBLIC ${_common_compile_options})
7575
target_compile_options(mpsdelegate PRIVATE "-fno-objc-arc")
7676

7777
install(
78-
TARGETS mpsdelegate
78+
TARGETS mpsdelegate mps_schema
79+
EXPORT ExecuTorchTargets
7980
DESTINATION lib
8081
INCLUDES
8182
DESTINATION ${_common_include_directories}

backends/mediatek/CMakeLists.txt

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,20 @@ target_link_libraries(
3030
)
3131
target_sources(
3232
neuron_backend
33-
INTERFACE ${CMAKE_CURRENT_LIST_DIR}/runtime/include/NeuronBackend.h
34-
${CMAKE_CURRENT_LIST_DIR}/runtime/include/NeuronBufferAllocator.h
35-
${CMAKE_CURRENT_LIST_DIR}/runtime/include/NeuronExecutor.h
36-
${CMAKE_CURRENT_LIST_DIR}/runtime/include/NeuronLog.h
37-
${CMAKE_CURRENT_LIST_DIR}/runtime/include/api/APUWareUtilsLib.h
38-
${CMAKE_CURRENT_LIST_DIR}/runtime/include/api/NeuronAdapterShim.h
33+
INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/runtime/include/NeuronBackend.h>
34+
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/runtime/include/NeuronBufferAllocator.h>
35+
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/runtime/include/NeuronExecutor.h>
36+
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/runtime/include/NeuronLog.h>
37+
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/runtime/include/api/APUWareUtilsLib.h>
38+
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/runtime/include/api/NeuronAdapterShim.h>
3939
PRIVATE ${CMAKE_CURRENT_LIST_DIR}/runtime/NeuronBackend.cpp
4040
${CMAKE_CURRENT_LIST_DIR}/runtime/NeuronExecutor.cpp
4141
${CMAKE_CURRENT_LIST_DIR}/runtime/NeuronBufferAllocator.cpp
4242
)
4343
executorch_target_link_options_shared_lib(neuron_backend)
4444

45-
install(TARGETS neuron_backend DESTINATION lib)
45+
install(
46+
TARGETS neuron_backend
47+
EXPORT ExecuTorchTargets
48+
DESTINATION lib
49+
)

0 commit comments

Comments
 (0)