1*523fa7a6SAndroid Build Coastguard Worker# Copyright (c) Meta Platforms, Inc. and affiliates. 2*523fa7a6SAndroid Build Coastguard Worker# All rights reserved. 3*523fa7a6SAndroid Build Coastguard Worker# 4*523fa7a6SAndroid Build Coastguard Worker# This source code is licensed under the BSD-style license found in the 5*523fa7a6SAndroid Build Coastguard Worker# LICENSE file in the root directory of this source tree. 6*523fa7a6SAndroid Build Coastguard Worker 7*523fa7a6SAndroid Build Coastguard Worker# 8*523fa7a6SAndroid Build Coastguard Worker# Simple CMake build system for runtime components. 9*523fa7a6SAndroid Build Coastguard Worker# 10*523fa7a6SAndroid Build Coastguard Worker# ### One-time setup ### 11*523fa7a6SAndroid Build Coastguard Worker# 12*523fa7a6SAndroid Build Coastguard Worker# Configure the CMake build system. It's good practice to do this whenever 13*523fa7a6SAndroid Build Coastguard Worker# cloning or pulling the upstream repo. Once this is done, you don't need to do 14*523fa7a6SAndroid Build Coastguard Worker# it again until you pull from the upstream repo again. 15*523fa7a6SAndroid Build Coastguard Worker# 16*523fa7a6SAndroid Build Coastguard Worker# NOTE: Build options can be configured by passing arguments to cmake. For 17*523fa7a6SAndroid Build Coastguard Worker# example, to enable the EXECUTORCH_BUILD_XNNPACK option, change the cmake 18*523fa7a6SAndroid Build Coastguard Worker# command to 'cmake -DEXECUTORCH_BUILD_XNNPACK=ON ..'. 19*523fa7a6SAndroid Build Coastguard Worker#[[ 20*523fa7a6SAndroid Build Coastguard Worker (rm -rf cmake-out \ 21*523fa7a6SAndroid Build Coastguard Worker && mkdir cmake-out \ 22*523fa7a6SAndroid Build Coastguard Worker && cd cmake-out \ 23*523fa7a6SAndroid Build Coastguard Worker && cmake ..) 24*523fa7a6SAndroid Build Coastguard Worker]] 25*523fa7a6SAndroid Build Coastguard Worker# 26*523fa7a6SAndroid Build Coastguard Worker# ### Build ### 27*523fa7a6SAndroid Build Coastguard Worker# 28*523fa7a6SAndroid Build Coastguard Worker# NOTE: The `-j` argument specifies how many jobs/processes to use when 29*523fa7a6SAndroid Build Coastguard Worker# building, and tends to speed up the build significantly. It's typical to use 30*523fa7a6SAndroid Build Coastguard Worker# "core count + 1" as the `-j` value. 31*523fa7a6SAndroid Build Coastguard Worker# ~~~ 32*523fa7a6SAndroid Build Coastguard Worker# cmake --build cmake-out -j9 33*523fa7a6SAndroid Build Coastguard Worker# ~~~ 34*523fa7a6SAndroid Build Coastguard Worker# 35*523fa7a6SAndroid Build Coastguard Worker# ### Editing this file ### 36*523fa7a6SAndroid Build Coastguard Worker# 37*523fa7a6SAndroid Build Coastguard Worker# This file should be formatted with 38*523fa7a6SAndroid Build Coastguard Worker# ~~~ 39*523fa7a6SAndroid Build Coastguard Worker# cmake-format -i CMakeLists.txt 40*523fa7a6SAndroid Build Coastguard Worker# ~~~ 41*523fa7a6SAndroid Build Coastguard Worker# It should also be cmake-lint clean. 42*523fa7a6SAndroid Build Coastguard Worker# 43*523fa7a6SAndroid Build Coastguard Worker 44*523fa7a6SAndroid Build Coastguard Workercmake_minimum_required(VERSION 3.19) 45*523fa7a6SAndroid Build Coastguard Workerproject(executorch) 46*523fa7a6SAndroid Build Coastguard Workerinclude(build/Utils.cmake) 47*523fa7a6SAndroid Build Coastguard Workerinclude(CMakeDependentOption) 48*523fa7a6SAndroid Build Coastguard Worker 49*523fa7a6SAndroid Build Coastguard Workerset(CMAKE_EXPORT_COMPILE_COMMANDS ON) 50*523fa7a6SAndroid Build Coastguard Worker 51*523fa7a6SAndroid Build Coastguard Workerif(NOT CMAKE_CXX_STANDARD) 52*523fa7a6SAndroid Build Coastguard Worker set(CMAKE_CXX_STANDARD 17) 53*523fa7a6SAndroid Build Coastguard Workerendif() 54*523fa7a6SAndroid Build Coastguard Worker 55*523fa7a6SAndroid Build Coastguard Workerif(NOT CMAKE_BUILD_TYPE) 56*523fa7a6SAndroid Build Coastguard Worker set(CMAKE_BUILD_TYPE Debug) 57*523fa7a6SAndroid Build Coastguard Workerendif() 58*523fa7a6SAndroid Build Coastguard Worker 59*523fa7a6SAndroid Build Coastguard Worker# ------------------------------ OPTIONS ------------------------------------- 60*523fa7a6SAndroid Build Coastguard Worker# WARNING: Please don't add example specific options in this CMakeLists.txt. 61*523fa7a6SAndroid Build Coastguard Worker# Instead please use `find_package(executorch REQUIRED)` in the example 62*523fa7a6SAndroid Build Coastguard Worker# directory and add a new executable in the example `CMakeLists.txt`. 63*523fa7a6SAndroid Build Coastguard Worker 64*523fa7a6SAndroid Build Coastguard Worker# _default_release_disabled_options: default value for options that should be 65*523fa7a6SAndroid Build Coastguard Worker# disabled in Release mode by default. Users can still manually enable them, 66*523fa7a6SAndroid Build Coastguard Worker# though. 67*523fa7a6SAndroid Build Coastguard Workerif(CMAKE_BUILD_TYPE STREQUAL "Release") 68*523fa7a6SAndroid Build Coastguard Worker set(_default_release_disabled_options OFF) 69*523fa7a6SAndroid Build Coastguard Workerelse() 70*523fa7a6SAndroid Build Coastguard Worker set(_default_release_disabled_options ON) 71*523fa7a6SAndroid Build Coastguard Workerendif() 72*523fa7a6SAndroid Build Coastguard Worker 73*523fa7a6SAndroid Build Coastguard Worker# Let users override which PAL defaults to use. 74*523fa7a6SAndroid Build Coastguard Worker# 75*523fa7a6SAndroid Build Coastguard Worker# TODO(dbort): Add another option that lets users point to a specific source 76*523fa7a6SAndroid Build Coastguard Worker# file; if set, would override the default option. 77*523fa7a6SAndroid Build Coastguard Workerset(EXECUTORCH_PAL_DEFAULT 78*523fa7a6SAndroid Build Coastguard Worker "posix" 79*523fa7a6SAndroid Build Coastguard Worker CACHE STRING 80*523fa7a6SAndroid Build Coastguard Worker "Which PAL default implementation to use: one of {posix, minimal}" 81*523fa7a6SAndroid Build Coastguard Worker) 82*523fa7a6SAndroid Build Coastguard Worker 83*523fa7a6SAndroid Build Coastguard Workeroption(EXECUTORCH_ENABLE_LOGGING "Build with ET_LOG_ENABLED" 84*523fa7a6SAndroid Build Coastguard Worker ${_default_release_disabled_options} 85*523fa7a6SAndroid Build Coastguard Worker) 86*523fa7a6SAndroid Build Coastguard Workerif(NOT EXECUTORCH_ENABLE_LOGGING) 87*523fa7a6SAndroid Build Coastguard Worker # Avoid pulling in the logging strings, which can be large. Note that this 88*523fa7a6SAndroid Build Coastguard Worker # will set the compiler flag for all targets in this directory, and for all 89*523fa7a6SAndroid Build Coastguard Worker # subdirectories included after this point. 90*523fa7a6SAndroid Build Coastguard Worker add_definitions(-DET_LOG_ENABLED=0) 91*523fa7a6SAndroid Build Coastguard Workerendif() 92*523fa7a6SAndroid Build Coastguard Worker 93*523fa7a6SAndroid Build Coastguard Worker# Configure log level. Must be one of debug, info, error, fatal. 94*523fa7a6SAndroid Build Coastguard Workerset(EXECUTORCH_LOG_LEVEL 95*523fa7a6SAndroid Build Coastguard Worker "Info" 96*523fa7a6SAndroid Build Coastguard Worker CACHE STRING "Build with the given ET_MIN_LOG_LEVEL value" 97*523fa7a6SAndroid Build Coastguard Worker) 98*523fa7a6SAndroid Build Coastguard Workerstring(TOLOWER "${EXECUTORCH_LOG_LEVEL}" LOG_LEVEL_LOWER) 99*523fa7a6SAndroid Build Coastguard Workerif(LOG_LEVEL_LOWER STREQUAL "debug") 100*523fa7a6SAndroid Build Coastguard Worker add_definitions(-DET_MIN_LOG_LEVEL=Debug) 101*523fa7a6SAndroid Build Coastguard Workerelseif(LOG_LEVEL_LOWER STREQUAL "info") 102*523fa7a6SAndroid Build Coastguard Worker add_definitions(-DET_MIN_LOG_LEVEL=Info) 103*523fa7a6SAndroid Build Coastguard Workerelseif(LOG_LEVEL_LOWER STREQUAL "error") 104*523fa7a6SAndroid Build Coastguard Worker add_definitions(-DET_MIN_LOG_LEVEL=Error) 105*523fa7a6SAndroid Build Coastguard Workerelseif(LOG_LEVEL_LOWER STREQUAL "fatal") 106*523fa7a6SAndroid Build Coastguard Worker add_definitions(-DET_MIN_LOG_LEVEL=Fatal) 107*523fa7a6SAndroid Build Coastguard Workerelse() 108*523fa7a6SAndroid Build Coastguard Worker message( 109*523fa7a6SAndroid Build Coastguard Worker SEND_ERROR 110*523fa7a6SAndroid Build Coastguard Worker "Unknown log level \"${EXECUTORCH_LOG_LEVEL}\". Expected one of Debug, " 111*523fa7a6SAndroid Build Coastguard Worker + "Info, Error, or Fatal." 112*523fa7a6SAndroid Build Coastguard Worker ) 113*523fa7a6SAndroid Build Coastguard Workerendif() 114*523fa7a6SAndroid Build Coastguard Worker 115*523fa7a6SAndroid Build Coastguard Workeroption(EXECUTORCH_ENABLE_PROGRAM_VERIFICATION 116*523fa7a6SAndroid Build Coastguard Worker "Build with ET_ENABLE_PROGRAM_VERIFICATION" 117*523fa7a6SAndroid Build Coastguard Worker ${_default_release_disabled_options} 118*523fa7a6SAndroid Build Coastguard Worker) 119*523fa7a6SAndroid Build Coastguard Workerif(NOT EXECUTORCH_ENABLE_PROGRAM_VERIFICATION) 120*523fa7a6SAndroid Build Coastguard Worker # Avoid pulling in the flatbuffer data verification logic, which can add about 121*523fa7a6SAndroid Build Coastguard Worker # 20kB. Note that this will set the compiler flag for all targets in this 122*523fa7a6SAndroid Build Coastguard Worker # directory, and for all subdirectories included after this point. 123*523fa7a6SAndroid Build Coastguard Worker add_definitions(-DET_ENABLE_PROGRAM_VERIFICATION=0) 124*523fa7a6SAndroid Build Coastguard Workerendif() 125*523fa7a6SAndroid Build Coastguard Worker 126*523fa7a6SAndroid Build Coastguard Workeroption(EXECUTORCH_ENABLE_EVENT_TRACER "Build with ET_EVENT_TRACER_ENABLED=ON" 127*523fa7a6SAndroid Build Coastguard Worker OFF 128*523fa7a6SAndroid Build Coastguard Worker) 129*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_ENABLE_EVENT_TRACER) 130*523fa7a6SAndroid Build Coastguard Worker add_definitions(-DET_EVENT_TRACER_ENABLED) 131*523fa7a6SAndroid Build Coastguard Workerendif() 132*523fa7a6SAndroid Build Coastguard Worker 133*523fa7a6SAndroid Build Coastguard Workeroption(EXECUTORCH_DO_NOT_USE_CXX11_ABI "Define _GLIBCXX_USE_CXX11_ABI=0 if ON" 134*523fa7a6SAndroid Build Coastguard Worker OFF 135*523fa7a6SAndroid Build Coastguard Worker) 136*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_DO_NOT_USE_CXX11_ABI) 137*523fa7a6SAndroid Build Coastguard Worker add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0) 138*523fa7a6SAndroid Build Coastguard Workerendif() 139*523fa7a6SAndroid Build Coastguard Worker# -ffunction-sections -fdata-sections: breaks function and data into sections so 140*523fa7a6SAndroid Build Coastguard Worker# they can be properly gc'd. -s: strip symbol. -fno-exceptions -fno-rtti: 141*523fa7a6SAndroid Build Coastguard Worker# disables exceptions and runtime type. 142*523fa7a6SAndroid Build Coastguard Workerset(CMAKE_CXX_FLAGS_RELEASE 143*523fa7a6SAndroid Build Coastguard Worker "-ffunction-sections -fdata-sections -fno-exceptions -fno-rtti" 144*523fa7a6SAndroid Build Coastguard Worker) 145*523fa7a6SAndroid Build Coastguard Workerif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") 146*523fa7a6SAndroid Build Coastguard Worker set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s") 147*523fa7a6SAndroid Build Coastguard Workerendif() 148*523fa7a6SAndroid Build Coastguard Worker 149*523fa7a6SAndroid Build Coastguard Workeroption(OPTIMIZE_SIZE "Build executorch runtime optimizing for binary size" OFF) 150*523fa7a6SAndroid Build Coastguard Workerif(OPTIMIZE_SIZE) 151*523fa7a6SAndroid Build Coastguard Worker # -Os: Optimize for size 152*523fa7a6SAndroid Build Coastguard Worker set(CMAKE_CXX_FLAGS_RELEASE "-Os ${CMAKE_CXX_FLAGS_RELEASE}") 153*523fa7a6SAndroid Build Coastguard Workerelse() 154*523fa7a6SAndroid Build Coastguard Worker # -O2: Moderate opt. 155*523fa7a6SAndroid Build Coastguard Worker set(CMAKE_CXX_FLAGS_RELEASE "-O2 ${CMAKE_CXX_FLAGS_RELEASE}") 156*523fa7a6SAndroid Build Coastguard Workerendif() 157*523fa7a6SAndroid Build Coastguard Worker 158*523fa7a6SAndroid Build Coastguard Workerset(CMAKE_CXX_FLAGS_DEBUG "-O0 -g") 159*523fa7a6SAndroid Build Coastguard Worker 160*523fa7a6SAndroid Build Coastguard Workeroption(EXECUTORCH_BUILD_ANDROID_JNI "Build Android JNI" OFF) 161*523fa7a6SAndroid Build Coastguard Worker 162*523fa7a6SAndroid Build Coastguard Workeroption(EXECUTORCH_BUILD_ARM_BAREMETAL 163*523fa7a6SAndroid Build Coastguard Worker "Build the Arm Baremetal flow for Cortex-M and Ethos-U" OFF 164*523fa7a6SAndroid Build Coastguard Worker) 165*523fa7a6SAndroid Build Coastguard Worker 166*523fa7a6SAndroid Build Coastguard Workeroption(EXECUTORCH_BUILD_COREML "Build the Core ML backend" OFF) 167*523fa7a6SAndroid Build Coastguard Worker 168*523fa7a6SAndroid Build Coastguard Workeroption(EXECUTORCH_BUILD_KERNELS_CUSTOM "Build the custom kernels" OFF) 169*523fa7a6SAndroid Build Coastguard Worker 170*523fa7a6SAndroid Build Coastguard Workeroption(EXECUTORCH_BUILD_KERNELS_CUSTOM_AOT "Build the custom ops lib for AOT" 171*523fa7a6SAndroid Build Coastguard Worker OFF 172*523fa7a6SAndroid Build Coastguard Worker) 173*523fa7a6SAndroid Build Coastguard Worker 174*523fa7a6SAndroid Build Coastguard Workeroption(EXECUTORCH_BUILD_EXTENSION_DATA_LOADER "Build the Data Loader extension" 175*523fa7a6SAndroid Build Coastguard Worker OFF 176*523fa7a6SAndroid Build Coastguard Worker) 177*523fa7a6SAndroid Build Coastguard Worker 178*523fa7a6SAndroid Build Coastguard Workeroption(EXECUTORCH_BUILD_EXTENSION_MODULE "Build the Module extension" OFF) 179*523fa7a6SAndroid Build Coastguard Worker 180*523fa7a6SAndroid Build Coastguard Workeroption(EXECUTORCH_BUILD_EXTENSION_RUNNER_UTIL "Build the Runner Util extension" 181*523fa7a6SAndroid Build Coastguard Worker OFF 182*523fa7a6SAndroid Build Coastguard Worker) 183*523fa7a6SAndroid Build Coastguard Worker 184*523fa7a6SAndroid Build Coastguard Workeroption(EXECUTORCH_BUILD_EXTENSION_TENSOR "Build the Tensor extension" OFF) 185*523fa7a6SAndroid Build Coastguard Worker 186*523fa7a6SAndroid Build Coastguard Workeroption(EXECUTORCH_BUILD_EXTENSION_TRAINING "Build the training extension" OFF) 187*523fa7a6SAndroid Build Coastguard Worker 188*523fa7a6SAndroid Build Coastguard Workeroption(EXECUTORCH_BUILD_GTESTS "Build googletest based test binaries" OFF) 189*523fa7a6SAndroid Build Coastguard Worker 190*523fa7a6SAndroid Build Coastguard Workeroption(EXECUTORCH_BUILD_MPS "Build the MPS backend" OFF) 191*523fa7a6SAndroid Build Coastguard Worker 192*523fa7a6SAndroid Build Coastguard Workeroption(EXECUTORCH_BUILD_NEURON "Build the backends/mediatek directory" OFF) 193*523fa7a6SAndroid Build Coastguard Worker 194*523fa7a6SAndroid Build Coastguard Workeroption(EXECUTORCH_BUILD_PYBIND "Build the Python Bindings" OFF) 195*523fa7a6SAndroid Build Coastguard Worker 196*523fa7a6SAndroid Build Coastguard Workeroption(EXECUTORCH_BUILD_QNN "Build the Qualcomm backend" OFF) 197*523fa7a6SAndroid Build Coastguard Worker 198*523fa7a6SAndroid Build Coastguard Workeroption(EXECUTORCH_BUILD_KERNELS_OPTIMIZED "Build the optimized kernels" OFF) 199*523fa7a6SAndroid Build Coastguard Worker 200*523fa7a6SAndroid Build Coastguard Workeroption(EXECUTORCH_BUILD_KERNELS_QUANTIZED "Build the quantized kernels" OFF) 201*523fa7a6SAndroid Build Coastguard Worker 202*523fa7a6SAndroid Build Coastguard Workeroption(EXECUTORCH_BUILD_DEVTOOLS "Build the ExecuTorch Developer Tools") 203*523fa7a6SAndroid Build Coastguard Worker 204*523fa7a6SAndroid Build Coastguard Workeroption(EXECUTORCH_NNLIB_OPT "Build Cadence backend Hifi nnlib kernel" OFF) 205*523fa7a6SAndroid Build Coastguard Worker 206*523fa7a6SAndroid Build Coastguard Workeroption(EXECUTORCH_CADENCE_CPU_RUNNER "Build Cadence backend CPU runner" OFF) 207*523fa7a6SAndroid Build Coastguard Worker 208*523fa7a6SAndroid Build Coastguard Workeroption(EXECUTORCH_BUILD_SIZE_TEST "Build the size test" OFF) 209*523fa7a6SAndroid Build Coastguard Worker 210*523fa7a6SAndroid Build Coastguard Workeroption(EXECUTORCH_BUILD_XNNPACK "Build the XNNPACK backend" OFF) 211*523fa7a6SAndroid Build Coastguard Worker 212*523fa7a6SAndroid Build Coastguard Workeroption(EXECUTORCH_BUILD_VULKAN "Build the Vulkan backend" OFF) 213*523fa7a6SAndroid Build Coastguard Worker 214*523fa7a6SAndroid Build Coastguard Workeroption(BUILD_EXECUTORCH_PORTABLE_OPS "Build portable_ops library" ON) 215*523fa7a6SAndroid Build Coastguard Worker 216*523fa7a6SAndroid Build Coastguard Workeroption(EXECUTORCH_USE_DL "Use libdl library" ON) 217*523fa7a6SAndroid Build Coastguard Worker 218*523fa7a6SAndroid Build Coastguard Workeroption(EXECUTORCH_BUILD_CADENCE "Build the Cadence DSP backend" OFF) 219*523fa7a6SAndroid Build Coastguard Worker 220*523fa7a6SAndroid Build Coastguard Worker# 221*523fa7a6SAndroid Build Coastguard Worker# pthreadpool: build pthreadpool library. Disable on unsupported platforms 222*523fa7a6SAndroid Build Coastguard Worker# 223*523fa7a6SAndroid Build Coastguard Workercmake_dependent_option( 224*523fa7a6SAndroid Build Coastguard Worker EXECUTORCH_BUILD_PTHREADPOOL "Build pthreadpool library." ON 225*523fa7a6SAndroid Build Coastguard Worker "NOT EXECUTORCH_BUILD_ARM_BAREMETAL" OFF 226*523fa7a6SAndroid Build Coastguard Worker) 227*523fa7a6SAndroid Build Coastguard Worker 228*523fa7a6SAndroid Build Coastguard Worker# 229*523fa7a6SAndroid Build Coastguard Worker# cpuinfo: build cpuinfo library. Disable on unsupported platforms 230*523fa7a6SAndroid Build Coastguard Worker# 231*523fa7a6SAndroid Build Coastguard Workercmake_dependent_option( 232*523fa7a6SAndroid Build Coastguard Worker EXECUTORCH_BUILD_CPUINFO "Build cpuinfo library." ON 233*523fa7a6SAndroid Build Coastguard Worker "NOT EXECUTORCH_BUILD_ARM_BAREMETAL" OFF 234*523fa7a6SAndroid Build Coastguard Worker) 235*523fa7a6SAndroid Build Coastguard Worker 236*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_BUILD_KERNELS_CUSTOM_AOT) 237*523fa7a6SAndroid Build Coastguard Worker set(EXECUTORCH_BUILD_EXTENSION_TENSOR ON) 238*523fa7a6SAndroid Build Coastguard Worker set(EXECUTORCH_BUILD_KERNELS_CUSTOM ON) 239*523fa7a6SAndroid Build Coastguard Workerendif() 240*523fa7a6SAndroid Build Coastguard Worker 241*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_BUILD_KERNELS_CUSTOM) 242*523fa7a6SAndroid Build Coastguard Worker set(EXECUTORCH_BUILD_KERNELS_OPTIMIZED ON) 243*523fa7a6SAndroid Build Coastguard Workerendif() 244*523fa7a6SAndroid Build Coastguard Worker 245*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_BUILD_CPUINFO) 246*523fa7a6SAndroid Build Coastguard Worker # --- cpuinfo 247*523fa7a6SAndroid Build Coastguard Worker set(ORIGINAL_CMAKE_POSITION_INDEPENDENT_CODE_FLAG 248*523fa7a6SAndroid Build Coastguard Worker ${CMAKE_POSITION_INDEPENDENT_CODE} 249*523fa7a6SAndroid Build Coastguard Worker ) 250*523fa7a6SAndroid Build Coastguard Worker set(CMAKE_POSITION_INDEPENDENT_CODE ON) 251*523fa7a6SAndroid Build Coastguard Worker set(CPUINFO_SOURCE_DIR "backends/xnnpack/third-party/cpuinfo") 252*523fa7a6SAndroid Build Coastguard Worker set(CPUINFO_BUILD_TOOLS 253*523fa7a6SAndroid Build Coastguard Worker OFF 254*523fa7a6SAndroid Build Coastguard Worker CACHE BOOL "" 255*523fa7a6SAndroid Build Coastguard Worker ) 256*523fa7a6SAndroid Build Coastguard Worker set(CPUINFO_BUILD_UNIT_TESTS 257*523fa7a6SAndroid Build Coastguard Worker OFF 258*523fa7a6SAndroid Build Coastguard Worker CACHE BOOL "" 259*523fa7a6SAndroid Build Coastguard Worker ) 260*523fa7a6SAndroid Build Coastguard Worker set(CPUINFO_BUILD_MOCK_TESTS 261*523fa7a6SAndroid Build Coastguard Worker OFF 262*523fa7a6SAndroid Build Coastguard Worker CACHE BOOL "" 263*523fa7a6SAndroid Build Coastguard Worker ) 264*523fa7a6SAndroid Build Coastguard Worker set(CPUINFO_BUILD_BENCHMARKS 265*523fa7a6SAndroid Build Coastguard Worker OFF 266*523fa7a6SAndroid Build Coastguard Worker CACHE BOOL "" 267*523fa7a6SAndroid Build Coastguard Worker ) 268*523fa7a6SAndroid Build Coastguard Worker set(CPUINFO_LIBRARY_TYPE 269*523fa7a6SAndroid Build Coastguard Worker "static" 270*523fa7a6SAndroid Build Coastguard Worker CACHE STRING "" 271*523fa7a6SAndroid Build Coastguard Worker ) 272*523fa7a6SAndroid Build Coastguard Worker set(CPUINFO_LOG_LEVEL 273*523fa7a6SAndroid Build Coastguard Worker "error" 274*523fa7a6SAndroid Build Coastguard Worker CACHE STRING "" 275*523fa7a6SAndroid Build Coastguard Worker ) 276*523fa7a6SAndroid Build Coastguard Worker set(CLOG_SOURCE_DIR "${CPUINFO_SOURCE_DIR}/deps/clog") 277*523fa7a6SAndroid Build Coastguard Worker add_subdirectory("${CPUINFO_SOURCE_DIR}") 278*523fa7a6SAndroid Build Coastguard Worker set(CMAKE_POSITION_INDEPENDENT_CODE 279*523fa7a6SAndroid Build Coastguard Worker ${ORIGINAL_CMAKE_POSITION_INDEPENDENT_CODE_FLAG} 280*523fa7a6SAndroid Build Coastguard Worker ) 281*523fa7a6SAndroid Build Coastguard Workerendif() 282*523fa7a6SAndroid Build Coastguard Worker 283*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_BUILD_PTHREADPOOL) 284*523fa7a6SAndroid Build Coastguard Worker # --- pthreadpool 285*523fa7a6SAndroid Build Coastguard Worker set(ORIGINAL_CMAKE_POSITION_INDEPENDENT_CODE_FLAG 286*523fa7a6SAndroid Build Coastguard Worker ${CMAKE_POSITION_INDEPENDENT_CODE} 287*523fa7a6SAndroid Build Coastguard Worker ) 288*523fa7a6SAndroid Build Coastguard Worker set(CMAKE_POSITION_INDEPENDENT_CODE ON) 289*523fa7a6SAndroid Build Coastguard Worker set(PTHREADPOOL_SOURCE_DIR "backends/xnnpack/third-party/pthreadpool") 290*523fa7a6SAndroid Build Coastguard Worker set(PTHREADPOOL_BUILD_TESTS 291*523fa7a6SAndroid Build Coastguard Worker OFF 292*523fa7a6SAndroid Build Coastguard Worker CACHE BOOL "" 293*523fa7a6SAndroid Build Coastguard Worker ) 294*523fa7a6SAndroid Build Coastguard Worker set(PTHREADPOOL_BUILD_BENCHMARKS 295*523fa7a6SAndroid Build Coastguard Worker OFF 296*523fa7a6SAndroid Build Coastguard Worker CACHE BOOL "" 297*523fa7a6SAndroid Build Coastguard Worker ) 298*523fa7a6SAndroid Build Coastguard Worker set(PTHREADPOOL_LIBRARY_TYPE 299*523fa7a6SAndroid Build Coastguard Worker "static" 300*523fa7a6SAndroid Build Coastguard Worker CACHE STRING "" 301*523fa7a6SAndroid Build Coastguard Worker ) 302*523fa7a6SAndroid Build Coastguard Worker set(PTHREADPOOL_ALLOW_DEPRECATED_API 303*523fa7a6SAndroid Build Coastguard Worker ON 304*523fa7a6SAndroid Build Coastguard Worker CACHE BOOL "" 305*523fa7a6SAndroid Build Coastguard Worker ) 306*523fa7a6SAndroid Build Coastguard Worker if(APPLE) 307*523fa7a6SAndroid Build Coastguard Worker set(PTHREADPOOL_SYNC_PRIMITIVE 308*523fa7a6SAndroid Build Coastguard Worker "condvar" 309*523fa7a6SAndroid Build Coastguard Worker CACHE STRING "" 310*523fa7a6SAndroid Build Coastguard Worker ) 311*523fa7a6SAndroid Build Coastguard Worker endif() 312*523fa7a6SAndroid Build Coastguard Worker add_subdirectory("${PTHREADPOOL_SOURCE_DIR}") 313*523fa7a6SAndroid Build Coastguard Worker set(CMAKE_POSITION_INDEPENDENT_CODE 314*523fa7a6SAndroid Build Coastguard Worker ${ORIGINAL_CMAKE_POSITION_INDEPENDENT_CODE_FLAG} 315*523fa7a6SAndroid Build Coastguard Worker ) 316*523fa7a6SAndroid Build Coastguard Workerendif() 317*523fa7a6SAndroid Build Coastguard Worker 318*523fa7a6SAndroid Build Coastguard Workerif(NOT PYTHON_EXECUTABLE) 319*523fa7a6SAndroid Build Coastguard Worker resolve_python_executable() 320*523fa7a6SAndroid Build Coastguard Workerendif() 321*523fa7a6SAndroid Build Coastguard Workermessage(STATUS "Using python executable '${PYTHON_EXECUTABLE}'") 322*523fa7a6SAndroid Build Coastguard Worker 323*523fa7a6SAndroid Build Coastguard Worker# TODO(dbort): Fix these warnings and remove this flag. 324*523fa7a6SAndroid Build Coastguard Workerset(_common_compile_options -Wno-deprecated-declarations -fPIC) 325*523fa7a6SAndroid Build Coastguard Worker 326*523fa7a6SAndroid Build Coastguard Worker# Let files say "include <executorch/path/to/header.h>". 327*523fa7a6SAndroid Build Coastguard Worker# TODO(#6475): This requires/assumes that the repo lives in a directory named 328*523fa7a6SAndroid Build Coastguard Worker# exactly `executorch`. Check the assumption first. Remove this check once we 329*523fa7a6SAndroid Build Coastguard Worker# stop relying on the assumption. 330*523fa7a6SAndroid Build Coastguard Workercmake_path(GET CMAKE_CURRENT_SOURCE_DIR FILENAME _repo_dir_name) 331*523fa7a6SAndroid Build Coastguard Workerif(NOT "${_repo_dir_name}" STREQUAL "executorch") 332*523fa7a6SAndroid Build Coastguard Worker message( 333*523fa7a6SAndroid Build Coastguard Worker FATAL_ERROR 334*523fa7a6SAndroid Build Coastguard Worker "The ExecuTorch repo must be cloned into a directory named exactly " 335*523fa7a6SAndroid Build Coastguard Worker "`executorch`; found `${_repo_dir_name}`. See " 336*523fa7a6SAndroid Build Coastguard Worker "https://github.com/pytorch/executorch/issues/6475 for progress on a " 337*523fa7a6SAndroid Build Coastguard Worker "fix for this restriction." 338*523fa7a6SAndroid Build Coastguard Worker ) 339*523fa7a6SAndroid Build Coastguard Workerendif() 340*523fa7a6SAndroid Build Coastguard Workerset(_common_include_directories ${CMAKE_CURRENT_SOURCE_DIR}/..) 341*523fa7a6SAndroid Build Coastguard Worker 342*523fa7a6SAndroid Build Coastguard Worker# 343*523fa7a6SAndroid Build Coastguard Worker# The `_<target>_srcs` lists are defined by including ${EXECUTORCH_SRCS_FILE}. 344*523fa7a6SAndroid Build Coastguard Worker# 345*523fa7a6SAndroid Build Coastguard Worker 346*523fa7a6SAndroid Build Coastguard Workerif(NOT EXECUTORCH_SRCS_FILE) 347*523fa7a6SAndroid Build Coastguard Worker # Find or download buck2 binary. 348*523fa7a6SAndroid Build Coastguard Worker resolve_buck2() 349*523fa7a6SAndroid Build Coastguard Worker 350*523fa7a6SAndroid Build Coastguard Worker # A file wasn't provided. Run a script to extract the source lists from the 351*523fa7a6SAndroid Build Coastguard Worker # buck2 build system and write them to a file we can include. 352*523fa7a6SAndroid Build Coastguard Worker # 353*523fa7a6SAndroid Build Coastguard Worker # NOTE: This will only happen once during cmake setup, so it will not re-run 354*523fa7a6SAndroid Build Coastguard Worker # if the buck2 targets change. 355*523fa7a6SAndroid Build Coastguard Worker message(STATUS "executorch: Generating source lists") 356*523fa7a6SAndroid Build Coastguard Worker set(EXECUTORCH_SRCS_FILE "${CMAKE_CURRENT_BINARY_DIR}/executorch_srcs.cmake") 357*523fa7a6SAndroid Build Coastguard Worker extract_sources(${EXECUTORCH_SRCS_FILE}) 358*523fa7a6SAndroid Build Coastguard Workerendif() 359*523fa7a6SAndroid Build Coastguard Worker 360*523fa7a6SAndroid Build Coastguard Worker# This file defines the `_<target>__srcs` variables used below. 361*523fa7a6SAndroid Build Coastguard Workermessage(STATUS "executorch: Using sources file ${EXECUTORCH_SRCS_FILE}") 362*523fa7a6SAndroid Build Coastguard Workerinclude(${EXECUTORCH_SRCS_FILE}) 363*523fa7a6SAndroid Build Coastguard Worker 364*523fa7a6SAndroid Build Coastguard Worker# 365*523fa7a6SAndroid Build Coastguard Worker# Modify default options when cross-compiling. 366*523fa7a6SAndroid Build Coastguard Worker# 367*523fa7a6SAndroid Build Coastguard Worker# The intent is for the EXECUTORCH_BUILD_HOST_TARGETS option to affect the 368*523fa7a6SAndroid Build Coastguard Worker# default ON/OFF values of host targets around the tree. This way, a user can 369*523fa7a6SAndroid Build Coastguard Worker# disable EXECUTORCH_BUILD_HOST_TARGETS to disable all host targets, and then 370*523fa7a6SAndroid Build Coastguard Worker# optionally re-enable some of those targets. Or they could leave 371*523fa7a6SAndroid Build Coastguard Worker# EXECUTORCH_BUILD_HOST_TARGETS enabled and then optionally disable any given 372*523fa7a6SAndroid Build Coastguard Worker# host target. 373*523fa7a6SAndroid Build Coastguard Worker# 374*523fa7a6SAndroid Build Coastguard Worker# We can then use various cross-compilation hints to set the default value of 375*523fa7a6SAndroid Build Coastguard Worker# EXECUTORCH_BUILD_HOST_TARGETS, which can still be overridden if desired. 376*523fa7a6SAndroid Build Coastguard Worker# 377*523fa7a6SAndroid Build Coastguard Worker 378*523fa7a6SAndroid Build Coastguard Worker# Detect if an iOS toolchain is set. 379*523fa7a6SAndroid Build Coastguard Workerif(CMAKE_TOOLCHAIN_FILE MATCHES ".*(iOS|ios\.toolchain)\.cmake$") 380*523fa7a6SAndroid Build Coastguard Worker set(CMAKE_TOOLCHAIN_IOS ON) 381*523fa7a6SAndroid Build Coastguard Workerelse() 382*523fa7a6SAndroid Build Coastguard Worker set(CMAKE_TOOLCHAIN_IOS OFF) 383*523fa7a6SAndroid Build Coastguard Workerendif() 384*523fa7a6SAndroid Build Coastguard Worker 385*523fa7a6SAndroid Build Coastguard Worker# Detect if an Android toolchain is set. 386*523fa7a6SAndroid Build Coastguard Workerif(CMAKE_TOOLCHAIN_FILE MATCHES ".*android\.toolchain\.cmake$") 387*523fa7a6SAndroid Build Coastguard Worker set(CMAKE_TOOLCHAIN_ANDROID ON) 388*523fa7a6SAndroid Build Coastguard Workerif(NOT ANDROID_PLATFORM) 389*523fa7a6SAndroid Build Coastguard Worker set(ANDROID_PLATFORM android-30) 390*523fa7a6SAndroid Build Coastguard Workerendif() 391*523fa7a6SAndroid Build Coastguard Workerelse() 392*523fa7a6SAndroid Build Coastguard Worker set(CMAKE_TOOLCHAIN_ANDROID OFF) 393*523fa7a6SAndroid Build Coastguard Workerendif() 394*523fa7a6SAndroid Build Coastguard Worker 395*523fa7a6SAndroid Build Coastguard Worker# Add code coverage flags to supported compilers 396*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_USE_CPP_CODE_COVERAGE) 397*523fa7a6SAndroid Build Coastguard Worker if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") 398*523fa7a6SAndroid Build Coastguard Worker string(APPEND CMAKE_C_FLAGS " --coverage -fprofile-abs-path") 399*523fa7a6SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " --coverage -fprofile-abs-path") 400*523fa7a6SAndroid Build Coastguard Worker elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") 401*523fa7a6SAndroid Build Coastguard Worker string(APPEND CMAKE_C_FLAGS " -fprofile-instr-generate -fcoverage-mapping") 402*523fa7a6SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS 403*523fa7a6SAndroid Build Coastguard Worker " -fprofile-instr-generate -fcoverage-mapping" 404*523fa7a6SAndroid Build Coastguard Worker ) 405*523fa7a6SAndroid Build Coastguard Worker else() 406*523fa7a6SAndroid Build Coastguard Worker message(ERROR 407*523fa7a6SAndroid Build Coastguard Worker "Code coverage for compiler ${CMAKE_CXX_COMPILER_ID} is unsupported" 408*523fa7a6SAndroid Build Coastguard Worker ) 409*523fa7a6SAndroid Build Coastguard Worker endif() 410*523fa7a6SAndroid Build Coastguard Workerendif() 411*523fa7a6SAndroid Build Coastguard Worker 412*523fa7a6SAndroid Build Coastguard Worker# EXECUTORCH_BUILD_HOST_TARGETS: Option to control the building of host-only 413*523fa7a6SAndroid Build Coastguard Worker# tools like `flatc`, along with example executables like `executor_runner` and 414*523fa7a6SAndroid Build Coastguard Worker# libraries that it uses, like `gflags`. Disabling this can be helpful when 415*523fa7a6SAndroid Build Coastguard Worker# cross-compiling, but some required tools that would have been built need to be 416*523fa7a6SAndroid Build Coastguard Worker# provided directly (via, for example, FLATC_EXECUTABLE). 417*523fa7a6SAndroid Build Coastguard Workercmake_dependent_option( 418*523fa7a6SAndroid Build Coastguard Worker EXECUTORCH_BUILD_HOST_TARGETS "Build host-only targets." ON 419*523fa7a6SAndroid Build Coastguard Worker "NOT CMAKE_TOOLCHAIN_IOS" OFF 420*523fa7a6SAndroid Build Coastguard Worker) 421*523fa7a6SAndroid Build Coastguard Worker 422*523fa7a6SAndroid Build Coastguard Worker# 423*523fa7a6SAndroid Build Coastguard Worker# flatc: Flatbuffer commandline tool to generate .h files from .fbs files 424*523fa7a6SAndroid Build Coastguard Worker# 425*523fa7a6SAndroid Build Coastguard Workercmake_dependent_option( 426*523fa7a6SAndroid Build Coastguard Worker EXECUTORCH_BUILD_FLATC "Build the flatc executable." ON 427*523fa7a6SAndroid Build Coastguard Worker "NOT FLATC_EXECUTABLE;EXECUTORCH_BUILD_HOST_TARGETS" OFF 428*523fa7a6SAndroid Build Coastguard Worker) 429*523fa7a6SAndroid Build Coastguard Worker 430*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_BUILD_FLATC) 431*523fa7a6SAndroid Build Coastguard Worker if(FLATC_EXECUTABLE) 432*523fa7a6SAndroid Build Coastguard Worker # We could ignore this, but it could lead to confusion about which `flatc` 433*523fa7a6SAndroid Build Coastguard Worker # is actually being used. 434*523fa7a6SAndroid Build Coastguard Worker message( 435*523fa7a6SAndroid Build Coastguard Worker FATAL_ERROR "May not set both EXECUTORCH_BUILD_FLATC and FLATC_EXECUTABLE" 436*523fa7a6SAndroid Build Coastguard Worker ) 437*523fa7a6SAndroid Build Coastguard Worker endif() 438*523fa7a6SAndroid Build Coastguard Worker set(FLATC_EXECUTABLE flatc) 439*523fa7a6SAndroid Build Coastguard Worker set(FLATBUFFERS_BUILD_FLATC 440*523fa7a6SAndroid Build Coastguard Worker ON 441*523fa7a6SAndroid Build Coastguard Worker CACHE BOOL "" 442*523fa7a6SAndroid Build Coastguard Worker ) 443*523fa7a6SAndroid Build Coastguard Worker set(FLATBUFFERS_BUILD_FLATHASH 444*523fa7a6SAndroid Build Coastguard Worker OFF 445*523fa7a6SAndroid Build Coastguard Worker CACHE BOOL "" 446*523fa7a6SAndroid Build Coastguard Worker ) 447*523fa7a6SAndroid Build Coastguard Worker set(FLATBUFFERS_BUILD_FLATLIB 448*523fa7a6SAndroid Build Coastguard Worker OFF 449*523fa7a6SAndroid Build Coastguard Worker CACHE BOOL "" 450*523fa7a6SAndroid Build Coastguard Worker ) 451*523fa7a6SAndroid Build Coastguard Worker set(FLATBUFFERS_BUILD_TESTS 452*523fa7a6SAndroid Build Coastguard Worker OFF 453*523fa7a6SAndroid Build Coastguard Worker CACHE BOOL "" 454*523fa7a6SAndroid Build Coastguard Worker ) 455*523fa7a6SAndroid Build Coastguard Worker set(FLATBUFFERS_INSTALL 456*523fa7a6SAndroid Build Coastguard Worker OFF 457*523fa7a6SAndroid Build Coastguard Worker CACHE BOOL "" 458*523fa7a6SAndroid Build Coastguard Worker ) 459*523fa7a6SAndroid Build Coastguard Worker add_subdirectory(third-party/flatbuffers) 460*523fa7a6SAndroid Build Coastguard Worker 461*523fa7a6SAndroid Build Coastguard Worker # exir lets users set the alignment of tensor data embedded in the flatbuffer, 462*523fa7a6SAndroid Build Coastguard Worker # and some users need an alignment larger than the default, which is typically 463*523fa7a6SAndroid Build Coastguard Worker # 32. 464*523fa7a6SAndroid Build Coastguard Worker target_compile_definitions(flatc PRIVATE FLATBUFFERS_MAX_ALIGNMENT=1024) 465*523fa7a6SAndroid Build Coastguard Workerendif() 466*523fa7a6SAndroid Build Coastguard Workerif(NOT FLATC_EXECUTABLE) 467*523fa7a6SAndroid Build Coastguard Worker message( 468*523fa7a6SAndroid Build Coastguard Worker FATAL_ERROR 469*523fa7a6SAndroid Build Coastguard Worker "FLATC_EXECUTABLE must be set when EXECUTORCH_BUILD_FLATC is disabled. " 470*523fa7a6SAndroid Build Coastguard Worker "Note that EXECUTORCH_BUILD_FLATC may be disabled implicitly when " 471*523fa7a6SAndroid Build Coastguard Worker "cross-compiling or when EXECUTORCH_BUILD_HOST_TARGETS is disabled." 472*523fa7a6SAndroid Build Coastguard Worker ) 473*523fa7a6SAndroid Build Coastguard Workerendif() 474*523fa7a6SAndroid Build Coastguard Worker 475*523fa7a6SAndroid Build Coastguard Worker# 476*523fa7a6SAndroid Build Coastguard Worker# program_schema: Generated .h files from schema/*.fbs inputs 477*523fa7a6SAndroid Build Coastguard Worker# 478*523fa7a6SAndroid Build Coastguard Workeradd_subdirectory(schema) 479*523fa7a6SAndroid Build Coastguard Worker 480*523fa7a6SAndroid Build Coastguard Worker# 481*523fa7a6SAndroid Build Coastguard Worker# executorch_core: Minimal runtime library 482*523fa7a6SAndroid Build Coastguard Worker# 483*523fa7a6SAndroid Build Coastguard Worker# The bare-minimum runtime library, supporting the Program and Method 484*523fa7a6SAndroid Build Coastguard Worker# interfaces. Does not contain any operators, including primitive ops. Does not 485*523fa7a6SAndroid Build Coastguard Worker# contain any backends. 486*523fa7a6SAndroid Build Coastguard Worker# 487*523fa7a6SAndroid Build Coastguard Worker 488*523fa7a6SAndroid Build Coastguard Worker# Remove any PAL-definition files from the sources. 489*523fa7a6SAndroid Build Coastguard Workerlist(FILTER _executorch_core__srcs EXCLUDE REGEX 490*523fa7a6SAndroid Build Coastguard Worker "runtime/platform/default/[^/]*.cpp$" 491*523fa7a6SAndroid Build Coastguard Worker) 492*523fa7a6SAndroid Build Coastguard Worker 493*523fa7a6SAndroid Build Coastguard Worker# Add the source file that maps to the requested default PAL implementation. 494*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_PAL_DEFAULT MATCHES "^(posix|minimal)$") 495*523fa7a6SAndroid Build Coastguard Worker message(STATUS "executorch: Using PAL default '${EXECUTORCH_PAL_DEFAULT}'") 496*523fa7a6SAndroid Build Coastguard Worker list(APPEND _executorch_core__srcs 497*523fa7a6SAndroid Build Coastguard Worker "runtime/platform/default/${EXECUTORCH_PAL_DEFAULT}.cpp" 498*523fa7a6SAndroid Build Coastguard Worker ) 499*523fa7a6SAndroid Build Coastguard Workerelse() 500*523fa7a6SAndroid Build Coastguard Worker message( 501*523fa7a6SAndroid Build Coastguard Worker FATAL_ERROR "Unknown EXECUTORCH_PAL_DEFAULT \"${EXECUTORCH_PAL_DEFAULT}\". " 502*523fa7a6SAndroid Build Coastguard Worker "Expected one of {posix, minimal}." 503*523fa7a6SAndroid Build Coastguard Worker ) 504*523fa7a6SAndroid Build Coastguard Workerendif() 505*523fa7a6SAndroid Build Coastguard Worker 506*523fa7a6SAndroid Build Coastguard Workeradd_library(executorch_core ${_executorch_core__srcs}) 507*523fa7a6SAndroid Build Coastguard Worker 508*523fa7a6SAndroid Build Coastguard Worker# Legacy name alias. 509*523fa7a6SAndroid Build Coastguard Workeradd_library(executorch_no_prim_ops ALIAS executorch_core) 510*523fa7a6SAndroid Build Coastguard Worker 511*523fa7a6SAndroid Build Coastguard Workertarget_link_libraries(executorch_core PRIVATE program_schema) 512*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_USE_DL) 513*523fa7a6SAndroid Build Coastguard Worker # Check if dl exists for this toolchain and only then link it. 514*523fa7a6SAndroid Build Coastguard Worker find_library(DL_LIBRARY_EXISTS NAMES dl) 515*523fa7a6SAndroid Build Coastguard Worker # Check if the library was found 516*523fa7a6SAndroid Build Coastguard Worker if(DL_LIBRARY_EXISTS) 517*523fa7a6SAndroid Build Coastguard Worker target_link_libraries(executorch_core PRIVATE dl) # For dladdr() 518*523fa7a6SAndroid Build Coastguard Worker endif() 519*523fa7a6SAndroid Build Coastguard Workerendif() 520*523fa7a6SAndroid Build Coastguard Workertarget_include_directories( 521*523fa7a6SAndroid Build Coastguard Worker executorch_core PUBLIC ${_common_include_directories} 522*523fa7a6SAndroid Build Coastguard Worker) 523*523fa7a6SAndroid Build Coastguard Workertarget_compile_options(executorch_core PUBLIC ${_common_compile_options}) 524*523fa7a6SAndroid Build Coastguard Workerif(MAX_KERNEL_NUM) 525*523fa7a6SAndroid Build Coastguard Worker target_compile_definitions( 526*523fa7a6SAndroid Build Coastguard Worker executorch_core PRIVATE MAX_KERNEL_NUM=${MAX_KERNEL_NUM} 527*523fa7a6SAndroid Build Coastguard Worker ) 528*523fa7a6SAndroid Build Coastguard Workerendif() 529*523fa7a6SAndroid Build Coastguard Worker 530*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_BUILD_PYBIND AND APPLE) 531*523fa7a6SAndroid Build Coastguard Worker # shared version 532*523fa7a6SAndroid Build Coastguard Worker add_library( 533*523fa7a6SAndroid Build Coastguard Worker executorch_core_shared SHARED ${_executorch_core__srcs} 534*523fa7a6SAndroid Build Coastguard Worker ) 535*523fa7a6SAndroid Build Coastguard Worker target_link_libraries(executorch_core_shared PRIVATE program_schema) 536*523fa7a6SAndroid Build Coastguard Worker if(DL_LIBRARY_EXISTS) 537*523fa7a6SAndroid Build Coastguard Worker # For dladdr() 538*523fa7a6SAndroid Build Coastguard Worker target_link_libraries(executorch_core_shared PRIVATE dl) 539*523fa7a6SAndroid Build Coastguard Worker endif() 540*523fa7a6SAndroid Build Coastguard Worker target_include_directories( 541*523fa7a6SAndroid Build Coastguard Worker executorch_core_shared PUBLIC ${_common_include_directories} 542*523fa7a6SAndroid Build Coastguard Worker ) 543*523fa7a6SAndroid Build Coastguard Worker target_compile_options( 544*523fa7a6SAndroid Build Coastguard Worker executorch_core_shared PUBLIC ${_common_compile_options} 545*523fa7a6SAndroid Build Coastguard Worker ) 546*523fa7a6SAndroid Build Coastguard Worker if(MAX_KERNEL_NUM) 547*523fa7a6SAndroid Build Coastguard Worker target_compile_definitions( 548*523fa7a6SAndroid Build Coastguard Worker executorch_core_shared PRIVATE MAX_KERNEL_NUM=${MAX_KERNEL_NUM} 549*523fa7a6SAndroid Build Coastguard Worker ) 550*523fa7a6SAndroid Build Coastguard Worker endif() 551*523fa7a6SAndroid Build Coastguard Workerendif() 552*523fa7a6SAndroid Build Coastguard Worker 553*523fa7a6SAndroid Build Coastguard Worker# 554*523fa7a6SAndroid Build Coastguard Worker# executorch: Primary runtime library with primitive operators. 555*523fa7a6SAndroid Build Coastguard Worker# 556*523fa7a6SAndroid Build Coastguard Worker# Provides the Program and Method interfaces, along with primitive operators. 557*523fa7a6SAndroid Build Coastguard Worker# Does not contain portable kernels or other full operators. Does not contain 558*523fa7a6SAndroid Build Coastguard Worker# any backends. 559*523fa7a6SAndroid Build Coastguard Worker# 560*523fa7a6SAndroid Build Coastguard Workeradd_library(executorch ${_executorch__srcs}) 561*523fa7a6SAndroid Build Coastguard Workertarget_link_libraries(executorch PRIVATE executorch_core) 562*523fa7a6SAndroid Build Coastguard Workertarget_include_directories(executorch PUBLIC ${_common_include_directories}) 563*523fa7a6SAndroid Build Coastguard Workertarget_compile_options(executorch PUBLIC ${_common_compile_options}) 564*523fa7a6SAndroid Build Coastguard Workertarget_link_options_shared_lib(executorch) 565*523fa7a6SAndroid Build Coastguard Worker 566*523fa7a6SAndroid Build Coastguard Worker# 567*523fa7a6SAndroid Build Coastguard Worker# portable_ops_lib: A library to register core ATen ops using portable kernels, 568*523fa7a6SAndroid Build Coastguard Worker# see kernels/portable/CMakeLists.txt. 569*523fa7a6SAndroid Build Coastguard Worker# 570*523fa7a6SAndroid Build Coastguard Worker# Real integrations should supply their own YAML file that only lists the 571*523fa7a6SAndroid Build Coastguard Worker# operators necessary for the models that will run. 572*523fa7a6SAndroid Build Coastguard Worker# 573*523fa7a6SAndroid Build Coastguard Workerif(BUILD_EXECUTORCH_PORTABLE_OPS) 574*523fa7a6SAndroid Build Coastguard Worker add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/kernels/portable) 575*523fa7a6SAndroid Build Coastguard Workerendif() 576*523fa7a6SAndroid Build Coastguard Worker 577*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_BUILD_KERNELS_OPTIMIZED) 578*523fa7a6SAndroid Build Coastguard Worker add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/kernels/optimized) 579*523fa7a6SAndroid Build Coastguard Workerendif() 580*523fa7a6SAndroid Build Coastguard Worker 581*523fa7a6SAndroid Build Coastguard Workeradd_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/configurations) 582*523fa7a6SAndroid Build Coastguard Worker 583*523fa7a6SAndroid Build Coastguard Worker# 584*523fa7a6SAndroid Build Coastguard Worker# gflags: Commandline flag host library. 585*523fa7a6SAndroid Build Coastguard Worker# 586*523fa7a6SAndroid Build Coastguard Workercmake_dependent_option( 587*523fa7a6SAndroid Build Coastguard Worker EXECUTORCH_BUILD_GFLAGS "Build the gflags library." ON 588*523fa7a6SAndroid Build Coastguard Worker EXECUTORCH_BUILD_HOST_TARGETS OFF 589*523fa7a6SAndroid Build Coastguard Worker) 590*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_BUILD_GFLAGS) 591*523fa7a6SAndroid Build Coastguard Worker add_subdirectory(third-party/gflags) 592*523fa7a6SAndroid Build Coastguard Workerendif() 593*523fa7a6SAndroid Build Coastguard Worker 594*523fa7a6SAndroid Build Coastguard Worker# Install `executorch` library as well as `executorch-config.cmake` under 595*523fa7a6SAndroid Build Coastguard Worker# ${CMAKE_INSTALL_PREFIX}/ 596*523fa7a6SAndroid Build Coastguard Workerinstall( 597*523fa7a6SAndroid Build Coastguard Worker TARGETS executorch executorch_core 598*523fa7a6SAndroid Build Coastguard Worker DESTINATION lib 599*523fa7a6SAndroid Build Coastguard Worker INCLUDES 600*523fa7a6SAndroid Build Coastguard Worker DESTINATION ${_common_include_directories} 601*523fa7a6SAndroid Build Coastguard Worker) 602*523fa7a6SAndroid Build Coastguard Workerinstall(FILES build/executorch-config.cmake DESTINATION lib/cmake/ExecuTorch) 603*523fa7a6SAndroid Build Coastguard Worker 604*523fa7a6SAndroid Build Coastguard Worker# 605*523fa7a6SAndroid Build Coastguard Worker# executor_runner: Host tool that demonstrates program execution. 606*523fa7a6SAndroid Build Coastguard Worker# 607*523fa7a6SAndroid Build Coastguard Workercmake_dependent_option( 608*523fa7a6SAndroid Build Coastguard Worker EXECUTORCH_BUILD_EXECUTOR_RUNNER "Build the executor_runner executable" ON 609*523fa7a6SAndroid Build Coastguard Worker EXECUTORCH_BUILD_HOST_TARGETS OFF 610*523fa7a6SAndroid Build Coastguard Worker) 611*523fa7a6SAndroid Build Coastguard Worker 612*523fa7a6SAndroid Build Coastguard Worker# Add googletest if any test targets should be built 613*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_BUILD_GTESTS) 614*523fa7a6SAndroid Build Coastguard Worker add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/third-party/googletest) 615*523fa7a6SAndroid Build Coastguard Workerendif() 616*523fa7a6SAndroid Build Coastguard Worker 617*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_BUILD_ARM_BAREMETAL) 618*523fa7a6SAndroid Build Coastguard Worker add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/backends/arm) 619*523fa7a6SAndroid Build Coastguard Workerendif() 620*523fa7a6SAndroid Build Coastguard Worker 621*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_BUILD_CADENCE) 622*523fa7a6SAndroid Build Coastguard Worker add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/backends/cadence) 623*523fa7a6SAndroid Build Coastguard Workerendif() 624*523fa7a6SAndroid Build Coastguard Worker 625*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_BUILD_COREML) 626*523fa7a6SAndroid Build Coastguard Worker add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/backends/apple/coreml) 627*523fa7a6SAndroid Build Coastguard Workerendif() 628*523fa7a6SAndroid Build Coastguard Worker 629*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_BUILD_MPS) 630*523fa7a6SAndroid Build Coastguard Worker add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/backends/apple/mps) 631*523fa7a6SAndroid Build Coastguard Workerendif() 632*523fa7a6SAndroid Build Coastguard Worker 633*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_BUILD_NEURON) 634*523fa7a6SAndroid Build Coastguard Worker add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/backends/mediatek) 635*523fa7a6SAndroid Build Coastguard Workerendif() 636*523fa7a6SAndroid Build Coastguard Worker 637*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_BUILD_QNN) 638*523fa7a6SAndroid Build Coastguard Worker add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/backends/qualcomm) 639*523fa7a6SAndroid Build Coastguard Workerendif() 640*523fa7a6SAndroid Build Coastguard Worker 641*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_BUILD_XNNPACK) 642*523fa7a6SAndroid Build Coastguard Worker add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/backends/xnnpack) 643*523fa7a6SAndroid Build Coastguard Workerendif() 644*523fa7a6SAndroid Build Coastguard Worker 645*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_BUILD_DEVTOOLS) 646*523fa7a6SAndroid Build Coastguard Worker set(EXECUTORCH_BUILD_EXTENSION_DATA_LOADER 647*523fa7a6SAndroid Build Coastguard Worker ON 648*523fa7a6SAndroid Build Coastguard Worker CACHE BOOL "EXECUTORCH_BUILD_EXTENSION_DATA_LOADER" FORCE 649*523fa7a6SAndroid Build Coastguard Worker ) 650*523fa7a6SAndroid Build Coastguard Worker add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/devtools) 651*523fa7a6SAndroid Build Coastguard Workerendif() 652*523fa7a6SAndroid Build Coastguard Worker 653*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_BUILD_EXTENSION_APPLE) 654*523fa7a6SAndroid Build Coastguard Worker add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/extension/apple) 655*523fa7a6SAndroid Build Coastguard Workerendif() 656*523fa7a6SAndroid Build Coastguard Worker 657*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_BUILD_EXTENSION_DATA_LOADER) 658*523fa7a6SAndroid Build Coastguard Worker add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/extension/data_loader) 659*523fa7a6SAndroid Build Coastguard Workerendif() 660*523fa7a6SAndroid Build Coastguard Worker 661*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_BUILD_EXTENSION_MODULE) 662*523fa7a6SAndroid Build Coastguard Worker add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/extension/module) 663*523fa7a6SAndroid Build Coastguard Workerendif() 664*523fa7a6SAndroid Build Coastguard Worker 665*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_BUILD_EXTENSION_TRAINING) 666*523fa7a6SAndroid Build Coastguard Worker add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/extension/training) 667*523fa7a6SAndroid Build Coastguard Workerendif() 668*523fa7a6SAndroid Build Coastguard Worker 669*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_BUILD_EXTENSION_RUNNER_UTIL) 670*523fa7a6SAndroid Build Coastguard Worker add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/extension/runner_util) 671*523fa7a6SAndroid Build Coastguard Workerendif() 672*523fa7a6SAndroid Build Coastguard Worker 673*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_BUILD_EXTENSION_TENSOR) 674*523fa7a6SAndroid Build Coastguard Worker add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/extension/tensor) 675*523fa7a6SAndroid Build Coastguard Workerendif() 676*523fa7a6SAndroid Build Coastguard Worker 677*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_BUILD_PTHREADPOOL 678*523fa7a6SAndroid Build Coastguard Worker AND EXECUTORCH_BUILD_CPUINFO 679*523fa7a6SAndroid Build Coastguard Worker AND CMAKE_CXX_STANDARD GREATER_EQUAL 14 680*523fa7a6SAndroid Build Coastguard Worker) 681*523fa7a6SAndroid Build Coastguard Worker add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/extension/threadpool) 682*523fa7a6SAndroid Build Coastguard Workerendif() 683*523fa7a6SAndroid Build Coastguard Worker 684*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_BUILD_PYBIND) 685*523fa7a6SAndroid Build Coastguard Worker add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/third-party/pybind11) 686*523fa7a6SAndroid Build Coastguard Worker 687*523fa7a6SAndroid Build Coastguard Worker if(NOT EXECUTORCH_BUILD_EXTENSION_DATA_LOADER) 688*523fa7a6SAndroid Build Coastguard Worker add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/extension/data_loader) 689*523fa7a6SAndroid Build Coastguard Worker endif() 690*523fa7a6SAndroid Build Coastguard Worker 691*523fa7a6SAndroid Build Coastguard Worker if(NOT EXECUTORCH_BUILD_DEVTOOLS) 692*523fa7a6SAndroid Build Coastguard Worker add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/devtools) 693*523fa7a6SAndroid Build Coastguard Worker endif() 694*523fa7a6SAndroid Build Coastguard Worker 695*523fa7a6SAndroid Build Coastguard Worker # find pytorch lib, to allow pybind to take at::Tensor as input/output 696*523fa7a6SAndroid Build Coastguard Worker find_package(Torch CONFIG REQUIRED) 697*523fa7a6SAndroid Build Coastguard Worker find_library( 698*523fa7a6SAndroid Build Coastguard Worker TORCH_PYTHON_LIBRARY torch_python PATHS "${TORCH_INSTALL_PREFIX}/lib" 699*523fa7a6SAndroid Build Coastguard Worker ) 700*523fa7a6SAndroid Build Coastguard Worker 701*523fa7a6SAndroid Build Coastguard Worker set(_dep_libs 702*523fa7a6SAndroid Build Coastguard Worker ${TORCH_PYTHON_LIBRARY} 703*523fa7a6SAndroid Build Coastguard Worker bundled_program 704*523fa7a6SAndroid Build Coastguard Worker etdump 705*523fa7a6SAndroid Build Coastguard Worker executorch 706*523fa7a6SAndroid Build Coastguard Worker extension_data_loader 707*523fa7a6SAndroid Build Coastguard Worker util 708*523fa7a6SAndroid Build Coastguard Worker torch 709*523fa7a6SAndroid Build Coastguard Worker ) 710*523fa7a6SAndroid Build Coastguard Worker 711*523fa7a6SAndroid Build Coastguard Worker if(EXECUTORCH_BUILD_KERNELS_OPTIMIZED) 712*523fa7a6SAndroid Build Coastguard Worker list(APPEND _dep_libs optimized_native_cpu_ops_lib) 713*523fa7a6SAndroid Build Coastguard Worker else() 714*523fa7a6SAndroid Build Coastguard Worker list(APPEND _dep_libs portable_ops_lib) 715*523fa7a6SAndroid Build Coastguard Worker endif() 716*523fa7a6SAndroid Build Coastguard Worker 717*523fa7a6SAndroid Build Coastguard Worker if(EXECUTORCH_BUILD_COREML) 718*523fa7a6SAndroid Build Coastguard Worker list(APPEND _dep_libs coremldelegate) 719*523fa7a6SAndroid Build Coastguard Worker endif() 720*523fa7a6SAndroid Build Coastguard Worker 721*523fa7a6SAndroid Build Coastguard Worker if(EXECUTORCH_BUILD_MPS) 722*523fa7a6SAndroid Build Coastguard Worker list(APPEND _dep_libs mpsdelegate) 723*523fa7a6SAndroid Build Coastguard Worker endif() 724*523fa7a6SAndroid Build Coastguard Worker 725*523fa7a6SAndroid Build Coastguard Worker if(EXECUTORCH_BUILD_XNNPACK) 726*523fa7a6SAndroid Build Coastguard Worker # need to explicitly specify XNNPACK here otherwise uses XNNPACK symbols 727*523fa7a6SAndroid Build Coastguard Worker # from libtorch_cpu 728*523fa7a6SAndroid Build Coastguard Worker list(APPEND _dep_libs xnnpack_backend XNNPACK) 729*523fa7a6SAndroid Build Coastguard Worker endif() 730*523fa7a6SAndroid Build Coastguard Worker 731*523fa7a6SAndroid Build Coastguard Worker # compile options for pybind 732*523fa7a6SAndroid Build Coastguard Worker set(_pybind_compile_options 733*523fa7a6SAndroid Build Coastguard Worker -Wno-deprecated-declarations 734*523fa7a6SAndroid Build Coastguard Worker -fPIC 735*523fa7a6SAndroid Build Coastguard Worker -frtti 736*523fa7a6SAndroid Build Coastguard Worker -fexceptions 737*523fa7a6SAndroid Build Coastguard Worker ) 738*523fa7a6SAndroid Build Coastguard Worker if(EXECUTORCH_DO_NOT_USE_CXX11_ABI) 739*523fa7a6SAndroid Build Coastguard Worker # libtorch is built with the old ABI, so we need to do the same for any 740*523fa7a6SAndroid Build Coastguard Worker # .cpp files that include torch, c10, or ATen targets. Note that PyTorch 741*523fa7a6SAndroid Build Coastguard Worker # nightly binary is built with _GLIBCXX_USE_CXX11_ABI set to 0 while its 742*523fa7a6SAndroid Build Coastguard Worker # CI build sets this to 1 (default) 743*523fa7a6SAndroid Build Coastguard Worker list(APPEND _pybind_compile_options -D_GLIBCXX_USE_CXX11_ABI=0) 744*523fa7a6SAndroid Build Coastguard Worker endif() 745*523fa7a6SAndroid Build Coastguard Worker 746*523fa7a6SAndroid Build Coastguard Worker # util lib 747*523fa7a6SAndroid Build Coastguard Worker add_library( 748*523fa7a6SAndroid Build Coastguard Worker util ${CMAKE_CURRENT_SOURCE_DIR}/extension/evalue_util/print_evalue.cpp 749*523fa7a6SAndroid Build Coastguard Worker ${CMAKE_CURRENT_SOURCE_DIR}/extension/aten_util/aten_bridge.cpp 750*523fa7a6SAndroid Build Coastguard Worker ) 751*523fa7a6SAndroid Build Coastguard Worker target_include_directories( 752*523fa7a6SAndroid Build Coastguard Worker util PUBLIC ${_common_include_directories} ${TORCH_INCLUDE_DIRS} 753*523fa7a6SAndroid Build Coastguard Worker ) 754*523fa7a6SAndroid Build Coastguard Worker target_compile_options(util PUBLIC ${_pybind_compile_options}) 755*523fa7a6SAndroid Build Coastguard Worker target_link_libraries(util PRIVATE torch c10 executorch extension_tensor) 756*523fa7a6SAndroid Build Coastguard Worker 757*523fa7a6SAndroid Build Coastguard Worker # pybind portable_lib 758*523fa7a6SAndroid Build Coastguard Worker pybind11_add_module(portable_lib SHARED extension/pybindings/pybindings.cpp) 759*523fa7a6SAndroid Build Coastguard Worker # The actual output file needs a leading underscore so it can coexist with 760*523fa7a6SAndroid Build Coastguard Worker # portable_lib.py in the same python package. 761*523fa7a6SAndroid Build Coastguard Worker set_target_properties(portable_lib PROPERTIES OUTPUT_NAME "_portable_lib") 762*523fa7a6SAndroid Build Coastguard Worker target_compile_definitions( 763*523fa7a6SAndroid Build Coastguard Worker portable_lib PUBLIC EXECUTORCH_PYTHON_MODULE_NAME=_portable_lib 764*523fa7a6SAndroid Build Coastguard Worker ) 765*523fa7a6SAndroid Build Coastguard Worker target_include_directories(portable_lib PRIVATE ${TORCH_INCLUDE_DIRS}) 766*523fa7a6SAndroid Build Coastguard Worker target_compile_options(portable_lib PUBLIC ${_pybind_compile_options}) 767*523fa7a6SAndroid Build Coastguard Worker target_link_libraries(portable_lib PRIVATE ${_dep_libs}) 768*523fa7a6SAndroid Build Coastguard Worker if(APPLE) 769*523fa7a6SAndroid Build Coastguard Worker # pip wheels will need to be able to find the torch libraries. On Linux, the 770*523fa7a6SAndroid Build Coastguard Worker # .so has non-absolute dependencies on libs like "libtorch.so" without 771*523fa7a6SAndroid Build Coastguard Worker # paths; as long as we `import torch` first, those dependencies will work. 772*523fa7a6SAndroid Build Coastguard Worker # But Apple dylibs do not support non-absolute dependencies, so we need to 773*523fa7a6SAndroid Build Coastguard Worker # tell the loader where to look for its libraries. The LC_LOAD_DYLIB entries 774*523fa7a6SAndroid Build Coastguard Worker # for the torch libraries will look like "@rpath/libtorch.dylib", so we can 775*523fa7a6SAndroid Build Coastguard Worker # add an LC_RPATH entry to look in a directory relative to the installed 776*523fa7a6SAndroid Build Coastguard Worker # location of our _portable_lib.so file. To see these LC_* values, run 777*523fa7a6SAndroid Build Coastguard Worker # `otool -l _portable_lib*.so`. 778*523fa7a6SAndroid Build Coastguard Worker set_target_properties( 779*523fa7a6SAndroid Build Coastguard Worker portable_lib 780*523fa7a6SAndroid Build Coastguard Worker PROPERTIES # Assume that this library will be installed in 781*523fa7a6SAndroid Build Coastguard Worker # `site-packages/executorch/extension/pybindings`, and that 782*523fa7a6SAndroid Build Coastguard Worker # the torch libs are in `site-packages/torch/lib`. 783*523fa7a6SAndroid Build Coastguard Worker BUILD_RPATH "@loader_path/../../../torch/lib" 784*523fa7a6SAndroid Build Coastguard Worker INSTALL_RPATH "@loader_path/../../../torch/lib" 785*523fa7a6SAndroid Build Coastguard Worker # Assume <executorch> is the root `site-packages/executorch` 786*523fa7a6SAndroid Build Coastguard Worker # Need to add <executorch>/extension/llm/custom_ops for 787*523fa7a6SAndroid Build Coastguard Worker # libcustom_ops_aot_lib.dylib 788*523fa7a6SAndroid Build Coastguard Worker BUILD_RPATH "@loader_path/../../extension/llm/custom_ops" 789*523fa7a6SAndroid Build Coastguard Worker INSTALL_RPATH "@loader_path/../../extension/llm/custom_ops" 790*523fa7a6SAndroid Build Coastguard Worker # Need to add <executorch>/kernels/quantized for 791*523fa7a6SAndroid Build Coastguard Worker # libquantized_ops_aot_lib.dylib 792*523fa7a6SAndroid Build Coastguard Worker BUILD_RPATH "@loader_path/../../kernels/quantized" 793*523fa7a6SAndroid Build Coastguard Worker INSTALL_RPATH "@loader_path/../../kernels/quantized" 794*523fa7a6SAndroid Build Coastguard Worker ) 795*523fa7a6SAndroid Build Coastguard Worker else() 796*523fa7a6SAndroid Build Coastguard Worker set_target_properties( 797*523fa7a6SAndroid Build Coastguard Worker portable_lib 798*523fa7a6SAndroid Build Coastguard Worker PROPERTIES 799*523fa7a6SAndroid Build Coastguard Worker # Assume <executorch> is the root `site-packages/executorch` 800*523fa7a6SAndroid Build Coastguard Worker # Need to add <executorch>/extension/llm/custom_ops for 801*523fa7a6SAndroid Build Coastguard Worker # libcustom_ops_aot_lib 802*523fa7a6SAndroid Build Coastguard Worker # Need to add <executorch>/kernels/quantized for 803*523fa7a6SAndroid Build Coastguard Worker # libquantized_ops_aot_lib 804*523fa7a6SAndroid Build Coastguard Worker BUILD_RPATH 805*523fa7a6SAndroid Build Coastguard Worker "$ORIGIN:$ORIGIN/../../extension/llm/custom_ops:$ORIGIN/../../kernels/quantized" 806*523fa7a6SAndroid Build Coastguard Worker ) 807*523fa7a6SAndroid Build Coastguard Worker endif() 808*523fa7a6SAndroid Build Coastguard Worker 809*523fa7a6SAndroid Build Coastguard Worker install(TARGETS portable_lib 810*523fa7a6SAndroid Build Coastguard Worker LIBRARY DESTINATION executorch/extension/pybindings 811*523fa7a6SAndroid Build Coastguard Worker ) 812*523fa7a6SAndroid Build Coastguard Workerendif() 813*523fa7a6SAndroid Build Coastguard Worker 814*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_BUILD_KERNELS_CUSTOM) 815*523fa7a6SAndroid Build Coastguard Worker # TODO: move all custom kernels to ${CMAKE_CURRENT_SOURCE_DIR}/kernels/custom 816*523fa7a6SAndroid Build Coastguard Worker add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/extension/llm/custom_ops) 817*523fa7a6SAndroid Build Coastguard Workerendif() 818*523fa7a6SAndroid Build Coastguard Worker 819*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_BUILD_KERNELS_QUANTIZED) 820*523fa7a6SAndroid Build Coastguard Worker add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/kernels/quantized) 821*523fa7a6SAndroid Build Coastguard Worker target_link_options_shared_lib(quantized_ops_lib) 822*523fa7a6SAndroid Build Coastguard Workerendif() 823*523fa7a6SAndroid Build Coastguard Worker 824*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_BUILD_EXECUTOR_RUNNER) 825*523fa7a6SAndroid Build Coastguard Worker # Baseline libraries that executor_runner will link against. 826*523fa7a6SAndroid Build Coastguard Worker set(_executor_runner_libs executorch gflags) 827*523fa7a6SAndroid Build Coastguard Worker 828*523fa7a6SAndroid Build Coastguard Worker if(EXECUTORCH_BUILD_KERNELS_OPTIMIZED) 829*523fa7a6SAndroid Build Coastguard Worker list(APPEND _executor_runner_libs optimized_native_cpu_ops_lib) 830*523fa7a6SAndroid Build Coastguard Worker elseif(EXECUTORCH_BUILD_CADENCE) 831*523fa7a6SAndroid Build Coastguard Worker list(APPEND _executor_runner_libs cadence_ops_lib) 832*523fa7a6SAndroid Build Coastguard Worker else() 833*523fa7a6SAndroid Build Coastguard Worker list(APPEND _executor_runner_libs portable_ops_lib) 834*523fa7a6SAndroid Build Coastguard Worker endif() 835*523fa7a6SAndroid Build Coastguard Worker 836*523fa7a6SAndroid Build Coastguard Worker # Generate lib to register quantized ops 837*523fa7a6SAndroid Build Coastguard Worker if(EXECUTORCH_BUILD_KERNELS_QUANTIZED) 838*523fa7a6SAndroid Build Coastguard Worker list(APPEND _executor_runner_libs quantized_ops_lib) 839*523fa7a6SAndroid Build Coastguard Worker endif() 840*523fa7a6SAndroid Build Coastguard Worker 841*523fa7a6SAndroid Build Coastguard Worker add_executable(executor_runner ${_executor_runner__srcs}) 842*523fa7a6SAndroid Build Coastguard Worker if(CMAKE_BUILD_TYPE STREQUAL "Release") 843*523fa7a6SAndroid Build Coastguard Worker if(APPLE) 844*523fa7a6SAndroid Build Coastguard Worker target_link_options(executor_runner PRIVATE "LINKER:-dead_strip") 845*523fa7a6SAndroid Build Coastguard Worker else() 846*523fa7a6SAndroid Build Coastguard Worker target_link_options(executor_runner PRIVATE "LINKER:--gc-sections") 847*523fa7a6SAndroid Build Coastguard Worker endif() 848*523fa7a6SAndroid Build Coastguard Worker endif() 849*523fa7a6SAndroid Build Coastguard Worker target_link_libraries(executor_runner ${_executor_runner_libs}) 850*523fa7a6SAndroid Build Coastguard Worker target_compile_options(executor_runner PUBLIC ${_common_compile_options}) 851*523fa7a6SAndroid Build Coastguard Workerendif() 852*523fa7a6SAndroid Build Coastguard Worker 853*523fa7a6SAndroid Build Coastguard Workerif(EXECUTORCH_BUILD_VULKAN) 854*523fa7a6SAndroid Build Coastguard Worker add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/backends/vulkan) 855*523fa7a6SAndroid Build Coastguard Workerendif() 856*523fa7a6SAndroid Build Coastguard Worker 857*523fa7a6SAndroid Build Coastguard Worker# Print all summary 858*523fa7a6SAndroid Build Coastguard Workerexecutorch_print_configuration_summary() 859