9eebe6a45e
Commit 79b1f89f7d
causes the WEST
variable to no longer cached in the CMakeCache. However,
the Eclipse plugin needs this WEST variable so that it can
invoke west properly. So tell CMake to put it in the cache.
Signed-off-by: Daniel Leung <daniel.leung@intel.com>
97 lines
3.4 KiB
CMake
97 lines
3.4 KiB
CMake
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
# west is an optional dependency. We need to run west using the same
|
|
# Python interpreter as everything else, though, so we play some extra
|
|
# tricks.
|
|
|
|
# When west runs cmake, it sets WEST_PYTHON to its interpreter. If
|
|
# it's defined, we assume west is installed. We do these checks here
|
|
# instead of in the failure paths below to avoid CMake warnings about
|
|
# WEST_PYTHON not being used.
|
|
if(DEFINED WEST_PYTHON)
|
|
# Cut out any symbolic links, e.g. python3.x -> python
|
|
get_filename_component(west_realpath ${WEST_PYTHON} REALPATH)
|
|
get_filename_component(python_realpath ${PYTHON_EXECUTABLE} REALPATH)
|
|
|
|
# If realpaths differ from the variables we're using, add extra
|
|
# diagnostics.
|
|
if(NOT ("${west_realpath}" STREQUAL "${WEST_PYTHON}"))
|
|
set(west_realpath_msg " (real path ${west_realpath})")
|
|
else()
|
|
set(west_realpath_msg "")
|
|
endif()
|
|
if(NOT ("${python_realpath}" STREQUAL "${PYTHON_EXECUTABLE}"))
|
|
set(python_realpath_msg " (real path ${python_realpath})")
|
|
else()
|
|
set(python_realpath_msg "")
|
|
endif()
|
|
endif()
|
|
|
|
execute_process(
|
|
COMMAND
|
|
${PYTHON_EXECUTABLE}
|
|
-c
|
|
"import west.version; print(west.version.__version__, end='')"
|
|
OUTPUT_VARIABLE west_version
|
|
ERROR_VARIABLE west_version_err
|
|
RESULT_VARIABLE west_version_output_result
|
|
)
|
|
|
|
if(west_version_output_result)
|
|
if(DEFINED WEST_PYTHON)
|
|
if(NOT (${west_realpath} STREQUAL ${python_realpath}))
|
|
set(PYTHON_EXECUTABLE_OUT_OF_SYNC "\nOr verify these installations:\n\
|
|
The Python version used by west is: ${WEST_PYTHON}${west_realpath_msg}\n\
|
|
The Python version used by CMake is: ${PYTHON_EXECUTABLE}${python_realpath_msg}")
|
|
endif()
|
|
|
|
message(FATAL_ERROR "Unable to import west.version from '${PYTHON_EXECUTABLE}':\n${west_version_err}\
|
|
Please install with:\n\
|
|
${PYTHON_EXECUTABLE} -m pip install west\
|
|
${PYTHON_EXECUTABLE_OUT_OF_SYNC}")
|
|
else()
|
|
# WEST_PYTHON is undefined and we couldn't import west. That's
|
|
# fine; it's optional.
|
|
set(WEST WEST-NOTFOUND CACHE INTERNAL "West")
|
|
endif()
|
|
else()
|
|
# We can import west from PYTHON_EXECUTABLE and have its version.
|
|
|
|
# Make sure its version matches the minimum required one.
|
|
set(MIN_WEST_VERSION 0.7.1)
|
|
if(${west_version} VERSION_LESS ${MIN_WEST_VERSION})
|
|
message(FATAL_ERROR "The detected west version, ${west_version}, is unsupported.\n\
|
|
The minimum supported version is ${MIN_WEST_VERSION}.\n\
|
|
Please upgrade with:\n\
|
|
${PYTHON_EXECUTABLE} -m pip install --upgrade west\
|
|
${PYTHON_EXECUTABLE_OUT_OF_SYNC}\n")
|
|
endif()
|
|
|
|
# Set WEST to a COMMAND prefix as if it were a find_program()
|
|
# result.
|
|
#
|
|
# From west 0.8 forward, you can run 'python -m west' to run
|
|
# the command line application.
|
|
set(WEST_MODULE west)
|
|
if(${west_version} VERSION_LESS 0.8)
|
|
# In west 0.7.x, this wasn't supported yet, but it happens to be
|
|
# possible to run 'python -m west.app.main'.
|
|
string(APPEND WEST_MODULE .app.main)
|
|
endif()
|
|
|
|
# Need to cache this so the Zephyr Eclipse plugin knows
|
|
# how to invoke West.
|
|
set(WEST ${PYTHON_EXECUTABLE} -m ${WEST_MODULE} CACHE INTERNAL "West")
|
|
|
|
# Print information about the west module we're relying on. This
|
|
# will still work even after output is one line.
|
|
message(STATUS "Found west (found suitable version \"${west_version}\", minimum required is \"${MIN_WEST_VERSION}\")")
|
|
|
|
execute_process(
|
|
COMMAND ${WEST} topdir
|
|
OUTPUT_VARIABLE WEST_TOPDIR
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
WORKING_DIRECTORY ${ZEPHYR_BASE}
|
|
)
|
|
endif()
|