Skip to content

Commit fc05cb1

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: efb6f61 ghstack-comment-id: 2699501745 Pull Request resolved: #8954
1 parent 3b120e4 commit fc05cb1

File tree

57 files changed

+494
-347
lines changed

Some content is hidden

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

57 files changed

+494
-347
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

.github/workflows/trunk.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ jobs:
242242
setup_script_args=""
243243
if [[ ${{ matrix.os}} == "bare_metal" ]]; then
244244
toolchain_prefix=arm-none-eabi-
245-
threshold="104000" # should be ~103.7KB, set threshold to 104KB.
245+
threshold="108260"
246246
toolchain_cmake=examples/arm/ethos-u-setup/arm-none-eabi-gcc.cmake
247247
elif [[ ${{ matrix.os}} == "zephyr-preset" ]]; then
248248
setup_script_args="--target-toolchain zephyr"
@@ -269,7 +269,7 @@ jobs:
269269
if [[ ${{ matrix.os}} == "bare_metal" ]]; then
270270
bash test/build_size_test.sh "-DCMAKE_TOOLCHAIN_FILE=${toolchain_cmake} -DEXECUTORCH_BUILD_ARM_BAREMETAL=ON"
271271
elif [[ ${{ matrix.os}} == "zephyr-preset" ]]; then
272-
CXXFLAGS=${cxx_flags} cmake --preset zephyr -DCMAKE_BUILD_TYPE=Release -DEXECUTORCH_OPTIMIZE_SIZE=ON -DCMAKE_INSTALL_PREFIX=cmake-out -Bcmake-out .
272+
CXXFLAGS=${cxx_flags} cmake --preset zephyr -DCMAKE_BUILD_TYPE=Release -DEXECUTORCH_OPTIMIZE_SIZE=ON -DEXECUTORCH_BUILD_EXTENSION_DATA_LOADER=ON -DCMAKE_INSTALL_PREFIX=cmake-out -Bcmake-out .
273273
cmake --build cmake-out -j9 --target install --config Release
274274
CXXFLAGS=${cxx_flags} cmake -DCMAKE_TOOLCHAIN_FILE=${toolchain_cmake} -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=cmake-out -Bcmake-out/test test
275275
cmake --build cmake-out/test -j9 --config Release

CMakeLists.txt

Lines changed: 75 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+
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+
)
219231
endif()
220232

221233
if(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
)
272295
endif()
273296
set(_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}/
448473
install(
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
)
454479
install(
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
)
460485
install(
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
)
466491
install(
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
)
472497
install(
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
)
478503
install(
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
)
484509
install(
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
)
490515
install(
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

499525
if(EXECUTORCH_BUILD_ARM_BAREMETAL)
@@ -546,6 +572,12 @@ endif()
546572

547573
if(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+
)
549581
endif()
550582

551583
if(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
)
573605
endif()
574606

575607
if(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()
581624
endif()
582625

583626
if(EXECUTORCH_BUILD_EXTENSION_LLM_RUNNER)
584627
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/extension/llm/runner)
585628
endif()
586629

630+
if(EXECUTORCH_BUILD_EXTENSION_LLM_APPLE)
631+
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/extension/llm/apple)
632+
endif()
633+
587634
if(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
)
695744
endif()
696745

@@ -775,5 +824,11 @@ endif()
775824

776825
include(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.
779834
print_configured_options()

backends/apple/coreml/CMakeLists.txt

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -105,18 +105,24 @@ 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
109+
PUBLIC
110+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/runtime/util>
111+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/executorch/backends/apple/coreml/runtime/util>
109112
)
110113
if(APPLE)
111114
target_link_libraries(coreml_util PRIVATE ${FOUNDATION_FRAMEWORK})
112115
endif()
113116
target_compile_options(coreml_util PUBLIC -fPIC)
114117

118+
install(TARGETS coreml_util DESTINATION lib)
119+
115120
install(
116-
TARGETS coreml_util
117-
DESTINATION lib
118-
INCLUDES
119-
DESTINATION ${_common_include_directories}
121+
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/runtime/util
122+
DESTINATION
123+
${CMAKE_INSTALL_INCLUDEDIR}/executorch/backends/apple/coreml/runtime/util
124+
FILES_MATCHING
125+
PATTERN "*.h"
120126
)
121127

122128
# CoreML inmemoryfs
@@ -134,7 +140,10 @@ endif()
134140

135141
add_library(coreml_inmemoryfs ${INMEMORYFS_SOURCES})
136142
target_include_directories(
137-
coreml_inmemoryfs PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/runtime/inmemoryfs
143+
coreml_inmemoryfs
144+
PUBLIC
145+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/runtime/inmemoryfs>
146+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/executorch/backends/apple/coreml/runtime/inmemoryfs>
138147
)
139148
if(APPLE)
140149
target_link_libraries(
@@ -150,6 +159,14 @@ install(
150159
DESTINATION ${_common_include_directories}
151160
)
152161

162+
install(
163+
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/runtime/inmemoryfs
164+
DESTINATION
165+
${CMAKE_INSTALL_INCLUDE_DIR}/executorch/backends/apple/coreml/runtime/inmemoryfs
166+
FILES_MATCHING
167+
PATTERN "*.h"
168+
)
169+
153170
# executorchcoreml
154171

155172
if(EXECUTORCH_BUILD_PYBIND)
@@ -232,9 +249,10 @@ if(APPLE)
232249
endif()
233250

234251
install(
235-
TARGETS coremldelegate
252+
TARGETS coremldelegate coreml_util coreml_inmemoryfs
253+
EXPORT ExecuTorchTargets
236254
DESTINATION lib
237255
INCLUDES
238-
DESTINATION ${_common_include_directories}
256+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
239257
)
240258
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}

0 commit comments

Comments
 (0)