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# This file is intended to have helper functions to keep the CMakeLists.txt 9*523fa7a6SAndroid Build Coastguard Worker# concise. If there are any helper function can be re-used, it's recommented to 10*523fa7a6SAndroid Build Coastguard Worker# add them here. 11*523fa7a6SAndroid Build Coastguard Worker# 12*523fa7a6SAndroid Build Coastguard Worker# ### Editing this file ### 13*523fa7a6SAndroid Build Coastguard Worker# 14*523fa7a6SAndroid Build Coastguard Worker# This file should be formatted with 15*523fa7a6SAndroid Build Coastguard Worker# ~~~ 16*523fa7a6SAndroid Build Coastguard Worker# cmake-format -i Utils.cmake 17*523fa7a6SAndroid Build Coastguard Worker# ~~~ 18*523fa7a6SAndroid Build Coastguard Worker# It should also be cmake-lint clean. 19*523fa7a6SAndroid Build Coastguard Worker# 20*523fa7a6SAndroid Build Coastguard Worker 21*523fa7a6SAndroid Build Coastguard Worker# Public function to print summary for all configurations. For new variables, 22*523fa7a6SAndroid Build Coastguard Worker# it's recommended to add them here. 23*523fa7a6SAndroid Build Coastguard Workerfunction(executorch_print_configuration_summary) 24*523fa7a6SAndroid Build Coastguard Worker message(STATUS "") 25*523fa7a6SAndroid Build Coastguard Worker message(STATUS "******** Summary ********") 26*523fa7a6SAndroid Build Coastguard Worker message(STATUS " CMAKE_BUILD_TYPE : ${CMAKE_BUILD_TYPE}") 27*523fa7a6SAndroid Build Coastguard Worker message(STATUS " CMAKE_CXX_STANDARD : ${CMAKE_CXX_STANDARD}") 28*523fa7a6SAndroid Build Coastguard Worker message(STATUS " CMAKE_CXX_COMPILER_ID : ${CMAKE_CXX_COMPILER_ID}") 29*523fa7a6SAndroid Build Coastguard Worker message(STATUS " CMAKE_TOOLCHAIN_FILE : ${CMAKE_TOOLCHAIN_FILE}") 30*523fa7a6SAndroid Build Coastguard Worker message(STATUS " BUCK2 : ${BUCK2}") 31*523fa7a6SAndroid Build Coastguard Worker message(STATUS " PYTHON_EXECUTABLE : ${PYTHON_EXECUTABLE}") 32*523fa7a6SAndroid Build Coastguard Worker message(STATUS " FLATC_EXECUTABLE : ${FLATC_EXECUTABLE}") 33*523fa7a6SAndroid Build Coastguard Worker message( 34*523fa7a6SAndroid Build Coastguard Worker STATUS 35*523fa7a6SAndroid Build Coastguard Worker " EXECUTORCH_ENABLE_LOGGING : ${EXECUTORCH_ENABLE_LOGGING}" 36*523fa7a6SAndroid Build Coastguard Worker ) 37*523fa7a6SAndroid Build Coastguard Worker message(STATUS " EXECUTORCH_ENABLE_PROGRAM_VERIFICATION : " 38*523fa7a6SAndroid Build Coastguard Worker "${EXECUTORCH_ENABLE_PROGRAM_VERIFICATION}" 39*523fa7a6SAndroid Build Coastguard Worker ) 40*523fa7a6SAndroid Build Coastguard Worker message( 41*523fa7a6SAndroid Build Coastguard Worker STATUS " EXECUTORCH_LOG_LEVEL : ${EXECUTORCH_LOG_LEVEL}" 42*523fa7a6SAndroid Build Coastguard Worker ) 43*523fa7a6SAndroid Build Coastguard Worker message(STATUS " EXECUTORCH_BUILD_ANDROID_JNI : " 44*523fa7a6SAndroid Build Coastguard Worker "${EXECUTORCH_BUILD_ANDROID_JNI}" 45*523fa7a6SAndroid Build Coastguard Worker ) 46*523fa7a6SAndroid Build Coastguard Worker message(STATUS " EXECUTORCH_BUILD_ARM_BAREMETAL : " 47*523fa7a6SAndroid Build Coastguard Worker "${EXECUTORCH_BUILD_ARM_BAREMETAL}" 48*523fa7a6SAndroid Build Coastguard Worker ) 49*523fa7a6SAndroid Build Coastguard Worker message( 50*523fa7a6SAndroid Build Coastguard Worker STATUS 51*523fa7a6SAndroid Build Coastguard Worker " EXECUTORCH_BUILD_COREML : ${EXECUTORCH_BUILD_COREML}" 52*523fa7a6SAndroid Build Coastguard Worker ) 53*523fa7a6SAndroid Build Coastguard Worker message(STATUS " EXECUTORCH_BUILD_KERNELS_CUSTOM : " 54*523fa7a6SAndroid Build Coastguard Worker "${EXECUTORCH_BUILD_KERNELS_CUSTOM}" 55*523fa7a6SAndroid Build Coastguard Worker ) 56*523fa7a6SAndroid Build Coastguard Worker message(STATUS " EXECUTORCH_BUILD_EXECUTOR_RUNNER : " 57*523fa7a6SAndroid Build Coastguard Worker "${EXECUTORCH_BUILD_EXECUTOR_RUNNER}" 58*523fa7a6SAndroid Build Coastguard Worker ) 59*523fa7a6SAndroid Build Coastguard Worker message(STATUS " EXECUTORCH_BUILD_EXTENSION_DATA_LOADER : " 60*523fa7a6SAndroid Build Coastguard Worker "${EXECUTORCH_BUILD_EXTENSION_DATA_LOADER}" 61*523fa7a6SAndroid Build Coastguard Worker ) 62*523fa7a6SAndroid Build Coastguard Worker message(STATUS " EXECUTORCH_BUILD_EXTENSION_MODULE : " 63*523fa7a6SAndroid Build Coastguard Worker "${EXECUTORCH_BUILD_EXTENSION_MODULE}" 64*523fa7a6SAndroid Build Coastguard Worker ) 65*523fa7a6SAndroid Build Coastguard Worker message(STATUS " EXECUTORCH_BUILD_EXTENSION_RUNNER_UTIL : " 66*523fa7a6SAndroid Build Coastguard Worker "${EXECUTORCH_BUILD_EXTENSION_RUNNER_UTIL}" 67*523fa7a6SAndroid Build Coastguard Worker ) 68*523fa7a6SAndroid Build Coastguard Worker message(STATUS " EXECUTORCH_BUILD_EXTENSION_TENSOR : " 69*523fa7a6SAndroid Build Coastguard Worker "${EXECUTORCH_BUILD_EXTENSION_TENSOR}" 70*523fa7a6SAndroid Build Coastguard Worker ) 71*523fa7a6SAndroid Build Coastguard Worker message(STATUS " EXECUTORCH_BUILD_EXTENSION_TRAINING : " 72*523fa7a6SAndroid Build Coastguard Worker "${EXECUTORCH_BUILD_EXTENSION_TRAINING}" 73*523fa7a6SAndroid Build Coastguard Worker ) 74*523fa7a6SAndroid Build Coastguard Worker message( 75*523fa7a6SAndroid Build Coastguard Worker STATUS 76*523fa7a6SAndroid Build Coastguard Worker " EXECUTORCH_BUILD_FLATC : ${EXECUTORCH_BUILD_FLATC}" 77*523fa7a6SAndroid Build Coastguard Worker ) 78*523fa7a6SAndroid Build Coastguard Worker message( 79*523fa7a6SAndroid Build Coastguard Worker STATUS 80*523fa7a6SAndroid Build Coastguard Worker " EXECUTORCH_BUILD_GFLAGS : ${EXECUTORCH_BUILD_GFLAGS}" 81*523fa7a6SAndroid Build Coastguard Worker ) 82*523fa7a6SAndroid Build Coastguard Worker message( 83*523fa7a6SAndroid Build Coastguard Worker STATUS 84*523fa7a6SAndroid Build Coastguard Worker " EXECUTORCH_BUILD_GTESTS : ${EXECUTORCH_BUILD_GTESTS}" 85*523fa7a6SAndroid Build Coastguard Worker ) 86*523fa7a6SAndroid Build Coastguard Worker message(STATUS " EXECUTORCH_BUILD_HOST_TARGETS : " 87*523fa7a6SAndroid Build Coastguard Worker "${EXECUTORCH_BUILD_HOST_TARGETS}" 88*523fa7a6SAndroid Build Coastguard Worker ) 89*523fa7a6SAndroid Build Coastguard Worker message( 90*523fa7a6SAndroid Build Coastguard Worker STATUS " EXECUTORCH_BUILD_MPS : ${EXECUTORCH_BUILD_MPS}" 91*523fa7a6SAndroid Build Coastguard Worker ) 92*523fa7a6SAndroid Build Coastguard Worker message( 93*523fa7a6SAndroid Build Coastguard Worker STATUS 94*523fa7a6SAndroid Build Coastguard Worker " EXECUTORCH_BUILD_PYBIND : ${EXECUTORCH_BUILD_PYBIND}" 95*523fa7a6SAndroid Build Coastguard Worker ) 96*523fa7a6SAndroid Build Coastguard Worker message( 97*523fa7a6SAndroid Build Coastguard Worker STATUS " EXECUTORCH_BUILD_QNN : ${EXECUTORCH_BUILD_QNN}" 98*523fa7a6SAndroid Build Coastguard Worker ) 99*523fa7a6SAndroid Build Coastguard Worker message(STATUS " EXECUTORCH_BUILD_KERNELS_OPTIMIZED : " 100*523fa7a6SAndroid Build Coastguard Worker "${EXECUTORCH_BUILD_KERNELS_OPTIMIZED}" 101*523fa7a6SAndroid Build Coastguard Worker ) 102*523fa7a6SAndroid Build Coastguard Worker message(STATUS " EXECUTORCH_BUILD_KERNELS_QUANTIZED : " 103*523fa7a6SAndroid Build Coastguard Worker "${EXECUTORCH_BUILD_KERNELS_QUANTIZED}" 104*523fa7a6SAndroid Build Coastguard Worker ) 105*523fa7a6SAndroid Build Coastguard Worker message( 106*523fa7a6SAndroid Build Coastguard Worker STATUS " EXECUTORCH_BUILD_DEVTOOLS : ${EXECUTORCH_BUILD_DEVTOOLS}" 107*523fa7a6SAndroid Build Coastguard Worker ) 108*523fa7a6SAndroid Build Coastguard Worker message( 109*523fa7a6SAndroid Build Coastguard Worker STATUS 110*523fa7a6SAndroid Build Coastguard Worker " EXECUTORCH_BUILD_SIZE_TEST : ${EXECUTORCH_BUILD_SIZE_TEST}" 111*523fa7a6SAndroid Build Coastguard Worker ) 112*523fa7a6SAndroid Build Coastguard Worker message( 113*523fa7a6SAndroid Build Coastguard Worker STATUS 114*523fa7a6SAndroid Build Coastguard Worker " EXECUTORCH_BUILD_XNNPACK : ${EXECUTORCH_BUILD_XNNPACK}" 115*523fa7a6SAndroid Build Coastguard Worker ) 116*523fa7a6SAndroid Build Coastguard Worker message( 117*523fa7a6SAndroid Build Coastguard Worker STATUS 118*523fa7a6SAndroid Build Coastguard Worker " EXECUTORCH_BUILD_VULKAN : ${EXECUTORCH_BUILD_VULKAN}" 119*523fa7a6SAndroid Build Coastguard Worker ) 120*523fa7a6SAndroid Build Coastguard Worker message( 121*523fa7a6SAndroid Build Coastguard Worker STATUS 122*523fa7a6SAndroid Build Coastguard Worker " EXECUTORCH_BUILD_PTHREADPOOL : ${EXECUTORCH_BUILD_PTHREADPOOL}" 123*523fa7a6SAndroid Build Coastguard Worker ) 124*523fa7a6SAndroid Build Coastguard Worker message( 125*523fa7a6SAndroid Build Coastguard Worker STATUS 126*523fa7a6SAndroid Build Coastguard Worker " EXECUTORCH_BUILD_CPUINFO : ${EXECUTORCH_BUILD_CPUINFO}" 127*523fa7a6SAndroid Build Coastguard Worker ) 128*523fa7a6SAndroid Build Coastguard Worker 129*523fa7a6SAndroid Build Coastguard Workerendfunction() 130*523fa7a6SAndroid Build Coastguard Worker 131*523fa7a6SAndroid Build Coastguard Worker# This is the funtion to use -Wl, --whole-archive to link static library NB: 132*523fa7a6SAndroid Build Coastguard Worker# target_link_options is broken for this case, it only append the interface link 133*523fa7a6SAndroid Build Coastguard Worker# options of the first library. 134*523fa7a6SAndroid Build Coastguard Workerfunction(kernel_link_options target_name) 135*523fa7a6SAndroid Build Coastguard Worker # target_link_options(${target_name} INTERFACE 136*523fa7a6SAndroid Build Coastguard Worker # "$<LINK_LIBRARY:WHOLE_ARCHIVE,target_name>") 137*523fa7a6SAndroid Build Coastguard Worker target_link_options( 138*523fa7a6SAndroid Build Coastguard Worker ${target_name} INTERFACE "SHELL:LINKER:--whole-archive \ 139*523fa7a6SAndroid Build Coastguard Worker $<TARGET_FILE:${target_name}> \ 140*523fa7a6SAndroid Build Coastguard Worker LINKER:--no-whole-archive" 141*523fa7a6SAndroid Build Coastguard Worker ) 142*523fa7a6SAndroid Build Coastguard Workerendfunction() 143*523fa7a6SAndroid Build Coastguard Worker 144*523fa7a6SAndroid Build Coastguard Worker# Same as kernel_link_options but it's for MacOS linker 145*523fa7a6SAndroid Build Coastguard Workerfunction(macos_kernel_link_options target_name) 146*523fa7a6SAndroid Build Coastguard Worker target_link_options( 147*523fa7a6SAndroid Build Coastguard Worker ${target_name} INTERFACE 148*523fa7a6SAndroid Build Coastguard Worker "SHELL:LINKER:-force_load,$<TARGET_FILE:${target_name}>" 149*523fa7a6SAndroid Build Coastguard Worker ) 150*523fa7a6SAndroid Build Coastguard Workerendfunction() 151*523fa7a6SAndroid Build Coastguard Worker 152*523fa7a6SAndroid Build Coastguard Worker# Same as kernel_link_options but it's for MSVC linker 153*523fa7a6SAndroid Build Coastguard Workerfunction(msvc_kernel_link_options target_name) 154*523fa7a6SAndroid Build Coastguard Worker target_link_options( 155*523fa7a6SAndroid Build Coastguard Worker ${target_name} INTERFACE 156*523fa7a6SAndroid Build Coastguard Worker "SHELL:LINKER:/WHOLEARCHIVE:$<TARGET_FILE:${target_name}>" 157*523fa7a6SAndroid Build Coastguard Worker ) 158*523fa7a6SAndroid Build Coastguard Workerendfunction() 159*523fa7a6SAndroid Build Coastguard Worker 160*523fa7a6SAndroid Build Coastguard Worker# Ensure that the load-time constructor functions run. By default, the linker 161*523fa7a6SAndroid Build Coastguard Worker# would remove them since there are no other references to them. 162*523fa7a6SAndroid Build Coastguard Workerfunction(target_link_options_shared_lib target_name) 163*523fa7a6SAndroid Build Coastguard Worker if(APPLE) 164*523fa7a6SAndroid Build Coastguard Worker macos_kernel_link_options(${target_name}) 165*523fa7a6SAndroid Build Coastguard Worker elseif(MSVC) 166*523fa7a6SAndroid Build Coastguard Worker msvc_kernel_link_options(${target_name}) 167*523fa7a6SAndroid Build Coastguard Worker else() 168*523fa7a6SAndroid Build Coastguard Worker kernel_link_options(${target_name}) 169*523fa7a6SAndroid Build Coastguard Worker endif() 170*523fa7a6SAndroid Build Coastguard Workerendfunction() 171*523fa7a6SAndroid Build Coastguard Worker 172*523fa7a6SAndroid Build Coastguard Worker# Extract source files based on toml config. This is useful to keep buck2 and 173*523fa7a6SAndroid Build Coastguard Worker# cmake aligned. Do not regenerate if file exists. 174*523fa7a6SAndroid Build Coastguard Workerfunction(extract_sources sources_file) 175*523fa7a6SAndroid Build Coastguard Worker if(EXISTS "${sources_file}") 176*523fa7a6SAndroid Build Coastguard Worker message(STATUS "executorch: Using source file list ${sources_file}") 177*523fa7a6SAndroid Build Coastguard Worker else() 178*523fa7a6SAndroid Build Coastguard Worker # A file wasn't generated. Run a script to extract the source lists from the 179*523fa7a6SAndroid Build Coastguard Worker # buck2 build system and write them to a file we can include. 180*523fa7a6SAndroid Build Coastguard Worker # 181*523fa7a6SAndroid Build Coastguard Worker # NOTE: This will only happen once during cmake setup, so it will not re-run 182*523fa7a6SAndroid Build Coastguard Worker # if the buck2 targets change. 183*523fa7a6SAndroid Build Coastguard Worker message(STATUS "executorch: Generating source file list ${sources_file}") 184*523fa7a6SAndroid Build Coastguard Worker if(EXECUTORCH_ROOT) 185*523fa7a6SAndroid Build Coastguard Worker set(executorch_root ${EXECUTORCH_ROOT}) 186*523fa7a6SAndroid Build Coastguard Worker else() 187*523fa7a6SAndroid Build Coastguard Worker set(executorch_root ${CMAKE_CURRENT_SOURCE_DIR}) 188*523fa7a6SAndroid Build Coastguard Worker endif() 189*523fa7a6SAndroid Build Coastguard Worker 190*523fa7a6SAndroid Build Coastguard Worker if(ANDROID_ABI) 191*523fa7a6SAndroid Build Coastguard Worker if("${ANDROID_ABI}" STREQUAL "arm64-v8a") 192*523fa7a6SAndroid Build Coastguard Worker set(target_platforms_arg "--target-platforms=shim//:android-arm64") 193*523fa7a6SAndroid Build Coastguard Worker elseif("${ANDROID_ABI}" STREQUAL "x86_64") 194*523fa7a6SAndroid Build Coastguard Worker set(target_platforms_arg "--target-platforms=shim//:android-x86_64") 195*523fa7a6SAndroid Build Coastguard Worker else() 196*523fa7a6SAndroid Build Coastguard Worker message(FATAL_ERROR "Unsupported ANDROID_ABI setting ${ANDROID_ABI}. Please add it here!") 197*523fa7a6SAndroid Build Coastguard Worker endif() 198*523fa7a6SAndroid Build Coastguard Worker endif() 199*523fa7a6SAndroid Build Coastguard Worker execute_process( 200*523fa7a6SAndroid Build Coastguard Worker COMMAND 201*523fa7a6SAndroid Build Coastguard Worker ${PYTHON_EXECUTABLE} ${executorch_root}/build/extract_sources.py 202*523fa7a6SAndroid Build Coastguard Worker --config=${executorch_root}/build/cmake_deps.toml --out=${sources_file} 203*523fa7a6SAndroid Build Coastguard Worker --buck2=${BUCK2} ${target_platforms_arg} 204*523fa7a6SAndroid Build Coastguard Worker OUTPUT_VARIABLE gen_srcs_output 205*523fa7a6SAndroid Build Coastguard Worker ERROR_VARIABLE gen_srcs_error 206*523fa7a6SAndroid Build Coastguard Worker RESULT_VARIABLE gen_srcs_exit_code 207*523fa7a6SAndroid Build Coastguard Worker WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 208*523fa7a6SAndroid Build Coastguard Worker ) 209*523fa7a6SAndroid Build Coastguard Worker 210*523fa7a6SAndroid Build Coastguard Worker if(NOT gen_srcs_exit_code EQUAL 0) 211*523fa7a6SAndroid Build Coastguard Worker message("Error while generating ${sources_file}. " 212*523fa7a6SAndroid Build Coastguard Worker "Exit code: ${gen_srcs_exit_code}" 213*523fa7a6SAndroid Build Coastguard Worker ) 214*523fa7a6SAndroid Build Coastguard Worker message("Output:\n${gen_srcs_output}") 215*523fa7a6SAndroid Build Coastguard Worker message("Error:\n${gen_srcs_error}") 216*523fa7a6SAndroid Build Coastguard Worker message(FATAL_ERROR "executorch: source list generation failed") 217*523fa7a6SAndroid Build Coastguard Worker endif() 218*523fa7a6SAndroid Build Coastguard Worker endif() 219*523fa7a6SAndroid Build Coastguard Workerendfunction() 220*523fa7a6SAndroid Build Coastguard Worker 221*523fa7a6SAndroid Build Coastguard Worker# Sets the value of the BUCK2 variable by searching for a buck2 binary with the 222*523fa7a6SAndroid Build Coastguard Worker# correct version. 223*523fa7a6SAndroid Build Coastguard Worker# 224*523fa7a6SAndroid Build Coastguard Worker# The resolve_buck.py script uses the following logic to find buck2: 1) If BUCK2 225*523fa7a6SAndroid Build Coastguard Worker# argument is set explicitly, use it. Warn if the version is incorrect. 2) Look 226*523fa7a6SAndroid Build Coastguard Worker# for a binary named buck2 on the system path. Take it if it is the correct 227*523fa7a6SAndroid Build Coastguard Worker# version. 3) Check for a previously downloaded buck2 binary (from step 4). 4) 228*523fa7a6SAndroid Build Coastguard Worker# Download and cache correct version of buck2. 229*523fa7a6SAndroid Build Coastguard Workerfunction(resolve_buck2) 230*523fa7a6SAndroid Build Coastguard Worker if(EXECUTORCH_ROOT) 231*523fa7a6SAndroid Build Coastguard Worker set(executorch_root ${EXECUTORCH_ROOT}) 232*523fa7a6SAndroid Build Coastguard Worker else() 233*523fa7a6SAndroid Build Coastguard Worker set(executorch_root ${CMAKE_CURRENT_SOURCE_DIR}) 234*523fa7a6SAndroid Build Coastguard Worker endif() 235*523fa7a6SAndroid Build Coastguard Worker 236*523fa7a6SAndroid Build Coastguard Worker set(resolve_buck2_command 237*523fa7a6SAndroid Build Coastguard Worker ${PYTHON_EXECUTABLE} ${executorch_root}/build/resolve_buck.py 238*523fa7a6SAndroid Build Coastguard Worker --cache_dir=${CMAKE_CURRENT_BINARY_DIR}/buck2-bin 239*523fa7a6SAndroid Build Coastguard Worker ) 240*523fa7a6SAndroid Build Coastguard Worker 241*523fa7a6SAndroid Build Coastguard Worker if(NOT ${BUCK2} STREQUAL "") 242*523fa7a6SAndroid Build Coastguard Worker list(APPEND resolve_buck2_command --buck2=${BUCK2}) 243*523fa7a6SAndroid Build Coastguard Worker endif() 244*523fa7a6SAndroid Build Coastguard Worker 245*523fa7a6SAndroid Build Coastguard Worker execute_process( 246*523fa7a6SAndroid Build Coastguard Worker COMMAND ${resolve_buck2_command} 247*523fa7a6SAndroid Build Coastguard Worker OUTPUT_VARIABLE resolve_buck2_output 248*523fa7a6SAndroid Build Coastguard Worker ERROR_VARIABLE resolve_buck2_error 249*523fa7a6SAndroid Build Coastguard Worker RESULT_VARIABLE resolve_buck2_exit_code 250*523fa7a6SAndroid Build Coastguard Worker WORKING_DIRECTORY ${executorch_root} 251*523fa7a6SAndroid Build Coastguard Worker OUTPUT_STRIP_TRAILING_WHITESPACE 252*523fa7a6SAndroid Build Coastguard Worker ) 253*523fa7a6SAndroid Build Coastguard Worker 254*523fa7a6SAndroid Build Coastguard Worker # $BUCK2 is a copy of the var from the parent scope. This block will set 255*523fa7a6SAndroid Build Coastguard Worker # $buck2 to the value we want to return. 256*523fa7a6SAndroid Build Coastguard Worker if(resolve_buck2_exit_code EQUAL 0) 257*523fa7a6SAndroid Build Coastguard Worker set(buck2 ${resolve_buck2_output}) 258*523fa7a6SAndroid Build Coastguard Worker message(STATUS "Resolved buck2 as ${resolve_buck2_output}.") 259*523fa7a6SAndroid Build Coastguard Worker elseif(resolve_buck2_exit_code EQUAL 2) 260*523fa7a6SAndroid Build Coastguard Worker # Wrong buck version used. Stop here to ensure that the user sees the error. 261*523fa7a6SAndroid Build Coastguard Worker message(FATAL_ERROR "Failed to resolve buck2.\n${resolve_buck2_error}") 262*523fa7a6SAndroid Build Coastguard Worker else() 263*523fa7a6SAndroid Build Coastguard Worker # Unexpected failure of the script. Warn. 264*523fa7a6SAndroid Build Coastguard Worker message(WARNING "Failed to resolve buck2.") 265*523fa7a6SAndroid Build Coastguard Worker message(WARNING "${resolve_buck2_error}") 266*523fa7a6SAndroid Build Coastguard Worker 267*523fa7a6SAndroid Build Coastguard Worker if("${BUCK2}" STREQUAL "") 268*523fa7a6SAndroid Build Coastguard Worker set(buck2 "buck2") 269*523fa7a6SAndroid Build Coastguard Worker endif() 270*523fa7a6SAndroid Build Coastguard Worker endif() 271*523fa7a6SAndroid Build Coastguard Worker 272*523fa7a6SAndroid Build Coastguard Worker # Update the var in the parent scope. Note that this does not modify our 273*523fa7a6SAndroid Build Coastguard Worker # local $BUCK2 value. 274*523fa7a6SAndroid Build Coastguard Worker set(BUCK2 "${buck2}" PARENT_SCOPE) 275*523fa7a6SAndroid Build Coastguard Worker 276*523fa7a6SAndroid Build Coastguard Worker # The buck2 daemon can get stuck. Killing it can help. 277*523fa7a6SAndroid Build Coastguard Worker message(STATUS "Killing buck2 daemon") 278*523fa7a6SAndroid Build Coastguard Worker execute_process( 279*523fa7a6SAndroid Build Coastguard Worker # Note that we need to use the local buck2 variable. BUCK2 is only set in 280*523fa7a6SAndroid Build Coastguard Worker # the parent scope, and can still be empty in this scope. 281*523fa7a6SAndroid Build Coastguard Worker COMMAND "${buck2} kill" 282*523fa7a6SAndroid Build Coastguard Worker WORKING_DIRECTORY ${executorch_root} 283*523fa7a6SAndroid Build Coastguard Worker COMMAND_ECHO STDOUT 284*523fa7a6SAndroid Build Coastguard Worker ) 285*523fa7a6SAndroid Build Coastguard Workerendfunction() 286*523fa7a6SAndroid Build Coastguard Worker 287*523fa7a6SAndroid Build Coastguard Worker# Sets the value of the PYTHON_EXECUTABLE variable to 'python' if in an active 288*523fa7a6SAndroid Build Coastguard Worker# (non-base) conda environment, and 'python3' otherwise. This maintains 289*523fa7a6SAndroid Build Coastguard Worker# backwards compatibility for non-conda users and avoids conda users needing to 290*523fa7a6SAndroid Build Coastguard Worker# explicitly set PYTHON_EXECUTABLE=python. 291*523fa7a6SAndroid Build Coastguard Workerfunction(resolve_python_executable) 292*523fa7a6SAndroid Build Coastguard Worker # Counter-intuitively, CONDA_DEFAULT_ENV contains the name of the active 293*523fa7a6SAndroid Build Coastguard Worker # environment. 294*523fa7a6SAndroid Build Coastguard Worker if(DEFINED ENV{CONDA_DEFAULT_ENV} AND NOT $ENV{CONDA_DEFAULT_ENV} STREQUAL 295*523fa7a6SAndroid Build Coastguard Worker "base" 296*523fa7a6SAndroid Build Coastguard Worker ) 297*523fa7a6SAndroid Build Coastguard Worker set(PYTHON_EXECUTABLE 298*523fa7a6SAndroid Build Coastguard Worker python 299*523fa7a6SAndroid Build Coastguard Worker PARENT_SCOPE 300*523fa7a6SAndroid Build Coastguard Worker ) 301*523fa7a6SAndroid Build Coastguard Worker else() 302*523fa7a6SAndroid Build Coastguard Worker set(PYTHON_EXECUTABLE 303*523fa7a6SAndroid Build Coastguard Worker python3 304*523fa7a6SAndroid Build Coastguard Worker PARENT_SCOPE 305*523fa7a6SAndroid Build Coastguard Worker ) 306*523fa7a6SAndroid Build Coastguard Worker endif() 307*523fa7a6SAndroid Build Coastguard Workerendfunction() 308