Skip to content

Commit 2f3812a

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: d71d97f ghstack-comment-id: 2699501745 Pull Request resolved: #8954
1 parent ee7b559 commit 2f3812a

File tree

36 files changed

+285
-249
lines changed

36 files changed

+285
-249
lines changed

.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" \

CMakeLists.txt

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ include(${PROJECT_SOURCE_DIR}/tools/cmake/common/preset.cmake)
5252
include(${PROJECT_SOURCE_DIR}/tools/cmake/Utils.cmake)
5353
include(CMakeDependentOption)
5454
include(ExternalProject)
55+
include(GNUInstallDirs)
5556

5657
if(NOT CMAKE_CXX_STANDARD)
5758
set(CMAKE_CXX_STANDARD 17)
@@ -168,7 +169,6 @@ endif()
168169
add_subdirectory(third-party)
169170

170171
if(NOT DEFINED FXDIV_SOURCE_DIR)
171-
include(GNUInstallDirs)
172172
get_extra_cmake_args_for_external_project(FXDIV_EXTRA_CMAKE_ARGS)
173173
set(FXDIV_SOURCE_DIR
174174
"${CMAKE_CURRENT_LIST_DIR}/backends/xnnpack/third-party/FXdiv"
@@ -247,7 +247,6 @@ if(EXECUTORCH_BUILD_PTHREADPOOL)
247247
set(PTHREADPOOL_SOURCE_DIR
248248
"${CMAKE_CURRENT_LIST_DIR}/backends/xnnpack/third-party/pthreadpool"
249249
)
250-
include(GNUInstallDirs)
251250
set(PTHREADPOOL_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/pthreadpool")
252251
set(PTHREADPOOL_INSTALL_DIR "${PTHREADPOOL_BINARY_DIR}/install")
253252
set(PTHREADPOOL_LIBRARY
@@ -309,9 +308,10 @@ if(NOT "${_repo_dir_name}" STREQUAL "executorch")
309308
)
310309
endif()
311310
set(_common_include_directories
312-
${CMAKE_CURRENT_SOURCE_DIR}/..
313-
${CMAKE_CURRENT_SOURCE_DIR}/runtime/core/portable_type/c10
314-
)
311+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
312+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/runtime/core/portable_type/c10>
313+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
314+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/executorch/runtime/core/portable_type/c10>)
315315

316316
#
317317
# The `_<target>_srcs` lists are defined by including ${EXECUTORCH_SRCS_FILE}.
@@ -485,50 +485,51 @@ add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/configurations)
485485
# ${CMAKE_INSTALL_PREFIX}/
486486
install(
487487
DIRECTORY runtime/core/
488-
DESTINATION include/executorch/runtime/core
488+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/executorch/runtime/core
489489
FILES_MATCHING
490490
PATTERN "*.h"
491491
)
492492
install(
493493
DIRECTORY runtime/executor/
494-
DESTINATION include/executorch/runtime/executor
494+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/executorch/runtime/executor
495495
FILES_MATCHING
496496
PATTERN "*.h"
497497
)
498498
install(
499499
DIRECTORY runtime/kernel/
500-
DESTINATION include/executorch/runtime/kernel
500+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/executorch/runtime/kernel
501501
FILES_MATCHING
502502
PATTERN "*.h"
503503
)
504504
install(
505505
DIRECTORY runtime/platform/
506-
DESTINATION include/executorch/runtime/platform
506+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/executorch/runtime/platform
507507
FILES_MATCHING
508508
PATTERN "*.h"
509509
)
510510
install(
511511
DIRECTORY extension/kernel_util/
512-
DESTINATION include/executorch/extension/kernel_util
512+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/executorch/extension/kernel_util
513513
FILES_MATCHING
514514
PATTERN "*.h"
515515
)
516516
install(
517517
DIRECTORY extension/tensor/
518-
DESTINATION include/executorch/extension/tensor
518+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/executorch/extension/tensor
519519
FILES_MATCHING
520520
PATTERN "*.h"
521521
)
522522
install(
523523
DIRECTORY extension/threadpool/
524-
DESTINATION include/executorch/extension/threadpool
524+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/executorch/extension/threadpool
525525
FILES_MATCHING
526526
PATTERN "*.h"
527527
)
528528
install(
529529
TARGETS executorch executorch_core
530+
EXPORT ExecuTorchTargets
530531
INCLUDES
531-
DESTINATION ${_common_include_directories}
532+
DESTINATION include
532533
)
533534
install(FILES tools/cmake/Utils.cmake tools/cmake/executorch-config.cmake
534535
DESTINATION lib/cmake/ExecuTorch
@@ -594,7 +595,7 @@ if(EXECUTORCH_BUILD_EXTENSION_MODULE)
594595
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/extension/module)
595596
install(
596597
DIRECTORY extension/module/
597-
DESTINATION include/executorch/extension/module
598+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/executorch/extension/module
598599
FILES_MATCHING
599600
PATTERN "*.h"
600601
)
@@ -709,6 +710,7 @@ if(EXECUTORCH_BUILD_PYBIND)
709710
target_link_libraries(portable_lib PRIVATE ${_dep_libs})
710711

711712
install(TARGETS portable_lib
713+
EXPORT ExecuTorchTargets
712714
LIBRARY DESTINATION executorch/extension/pybindings
713715
)
714716
endif()
@@ -792,5 +794,9 @@ endif()
792794

793795
include(Test.cmake)
794796

797+
install(EXPORT ExecuTorchTargets
798+
FILE ExecuTorchTargets.cmake
799+
DESTINATION lib/cmake/ExecuTorch)
800+
795801
# Print all the configs that were called with announce_configured_options.
796802
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}/")
@@ -79,7 +79,8 @@ target_compile_options(mpsdelegate PUBLIC ${_common_compile_options})
7979
target_compile_options(mpsdelegate PRIVATE "-fno-objc-arc")
8080

8181
install(
82-
TARGETS mpsdelegate
82+
TARGETS mpsdelegate mps_schema
83+
EXPORT ExecuTorchTargets
8384
DESTINATION lib
8485
INCLUDES
8586
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
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+
)

backends/qualcomm/CMakeLists.txt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,11 @@ add_subdirectory(
229229
${QNN_EXECUTORCH_ROOT_DIR}/aot/ir
230230
${CMAKE_CURRENT_BINARY_DIR}/qnn_executorch/ir
231231
)
232-
install(TARGETS qnn_executorch_backend DESTINATION lib)
232+
install(
233+
TARGETS qnn_executorch_backend
234+
EXPORT ExecuTorchTargets
235+
DESTINATION lib
236+
)
233237

234238
# QNN pybind
235239
if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "x86_64")

backends/vulkan/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ endif()
135135

136136
install(
137137
TARGETS vulkan_backend
138+
EXPORT ExecuTorchTargets
138139
DESTINATION lib
139140
INCLUDES
140141
DESTINATION ${COMMON_INCLUDES}

backends/xnnpack/CMakeLists.txt

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ if(EXECUTORCH_XNNPACK_ENABLE_KLEIDI)
3535
add_definitions(-DENABLE_XNNPACK_KLEIDI)
3636
endif()
3737

38-
set(_common_include_directories ${EXECUTORCH_ROOT}/..)
3938
set(_common_compile_options -Wno-deprecated-declarations -fPIC)
4039

4140
set(_xnnpack_schema__include_dir "${CMAKE_BINARY_DIR}/schema/include")
@@ -88,8 +87,10 @@ unset(MV_COMMAND)
8887
add_library(xnnpack_schema INTERFACE ${_xnnpack_schema__outputs})
8988
set_target_properties(xnnpack_schema PROPERTIES LINKER_LANGUAGE CXX)
9089
target_include_directories(
91-
xnnpack_schema INTERFACE ${_xnnpack_schema__include_dir}
92-
${EXECUTORCH_ROOT}/third-party/flatbuffers/include
90+
xnnpack_schema
91+
INTERFACE
92+
$<BUILD_INTERFACE:${_xnnpack_schema__include_dir}>
93+
$<BUILD_INTERFACE:${EXECUTORCH_ROOT}/third-party/flatbuffers/include>
9394
)
9495

9596
include(cmake/Dependencies.cmake)
@@ -101,24 +102,25 @@ target_link_libraries(
101102
xnnpack_backend PUBLIC ${xnnpack_third_party} executorch_core xnnpack_schema
102103
extension_threadpool
103104
)
104-
105105
target_include_directories(
106106
xnnpack_backend PUBLIC ${_common_include_directories}
107107
)
108-
target_include_directories(xnnpack_backend PUBLIC ${XNNPACK_INCLUDE_DIR})
108+
target_include_directories(xnnpack_backend PRIVATE ${XNNPACK_INCLUDE_DIR})
109109
target_include_directories(
110110
xnnpack_backend
111-
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/third-party/pthreadpool/include
111+
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/third-party/pthreadpool/include
112112
)
113113
target_include_directories(
114114
xnnpack_backend
115-
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/third-party/cpuinfo/include
115+
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/third-party/cpuinfo/include
116116
)
117117
target_compile_options(xnnpack_backend PUBLIC ${_common_compile_options})
118118
target_link_options_shared_lib(xnnpack_backend)
119119

120120
install(
121-
TARGETS xnnpack_backend
121+
TARGETS xnnpack_backend xnnpack_schema
122+
EXPORT ExecuTorchTargets
123+
DESTINATION lib
122124
INCLUDES
123125
DESTINATION ${_common_include_directories}
124126
)

configurations/CMakeLists.txt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,5 +60,9 @@ if(EXECUTORCH_BUILD_KERNELS_OPTIMIZED)
6060
executorch_core
6161
)
6262

63-
install(TARGETS optimized_native_cpu_ops_lib DESTINATION lib)
63+
install(
64+
TARGETS optimized_native_cpu_ops_lib
65+
EXPORT ExecuTorchTargets
66+
DESTINATION lib
67+
)
6468
endif()

devtools/CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@
55
# LICENSE file in the root directory of this source tree.
66

77
# The include directory that will contain the generated schema headers.
8-
set(DEVTOOLS_INCLUDE_DIR "${CMAKE_BINARY_DIR}/devtools/include")
8+
set(DEVTOOLS_INCLUDE_DIR_NO_BUILD_INTERFACE ${CMAKE_BINARY_DIR}/devtools/include)
9+
set(DEVTOOLS_INCLUDE_DIR
10+
$<BUILD_INTERFACE:${DEVTOOLS_INCLUDE_DIR_NO_BUILD_INTERFACE}>
11+
)
912

1013
add_subdirectory(etdump)
1114
add_subdirectory(bundled_program)

0 commit comments

Comments
 (0)