Auto detect PyYAML and disable generator based tests if not available. (#7449)
Fixes #7448
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 36b05b6..d4240cc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -322,10 +322,19 @@
else()
find_package(Python3 COMPONENTS Interpreter Development.Module REQUIRED)
endif()
-elseif(IREE_BUILD_COMPILER)
+elseif(IREE_BUILD_COMPILER OR IREE_BUILD_TESTS)
find_package(Python3 COMPONENTS Interpreter REQUIRED)
endif()
+# Extended Python environment checks.
+if(Python3_FOUND)
+ iree_detect_pyyaml()
+endif()
+
+if(IREE_BUILD_TESTS AND NOT IREE_PYYAML_FOUND)
+ message(WARNING "IREE's regression test suite requires PyYAML to run all tests. It is not installed, so some tests will be disabled.")
+endif()
+
#-------------------------------------------------------------------------------
# Check if git submodules have been initialized.
# This will only run if python3 is available.
@@ -515,7 +524,7 @@
add_subdirectory(iree/tools)
if(IREE_BUILD_TRACY)
- if(NOT LINUX)
+ if(NOT CMAKE_SYSTEM_NAME MATCHES "Linux")
message(WARNING "Building Tracy (IREE_BUILD_TRACY) on non-Linux is unsupported and may fail below.")
endif()
add_subdirectory(build_tools/third_party/tracy ${CMAKE_CURRENT_BINARY_DIR}/tracy)
diff --git a/build_tools/cmake/iree_python.cmake b/build_tools/cmake/iree_python.cmake
index 447ab91..221fc22 100644
--- a/build_tools/cmake/iree_python.cmake
+++ b/build_tools/cmake/iree_python.cmake
@@ -7,6 +7,29 @@
include(CMakeParseArguments)
###############################################################################
+# Package detection
+###############################################################################
+
+# Checks whether the PyYAML package is available. Sets IREE_PYYAML_FOUND to
+# ON if so.
+function(iree_detect_pyyaml)
+ execute_process(
+ COMMAND ${Python3_EXECUTABLE} -c "import yaml"
+ RESULT_VARIABLE EXIT_CODE
+ OUTPUT_QUIET
+ ERROR_QUIET
+ )
+ if(EXIT_CODE)
+ message(STATUS "Looking for PyYAML - not found (some features may not be available: install with 'python -m pip install PyYAML' or equiv for your system)")
+ set(IREE_PYYAML_FOUND OFF PARENT_SCOPE)
+ else()
+ message(STATUS "Looking for PyYAML - found")
+ set(IREE_PYYAML_FOUND ON PARENT_SCOPE)
+ endif()
+endfunction()
+
+
+###############################################################################
# Main user rules
###############################################################################
diff --git a/build_tools/cmake/iree_trace_runner_test.cmake b/build_tools/cmake/iree_trace_runner_test.cmake
index 2e34645..b214a35 100644
--- a/build_tools/cmake/iree_trace_runner_test.cmake
+++ b/build_tools/cmake/iree_trace_runner_test.cmake
@@ -148,6 +148,13 @@
return()
endif()
+ # Traces are YAML files and we assume that PyYAML is required. See the
+ # warning that is emitted in aggregate in the main CMakeLists.txt if this
+ # is not true.
+ if(NOT IREE_PYYAML_FOUND)
+ return()
+ endif()
+
cmake_parse_arguments(
_RULE
""
@@ -183,7 +190,7 @@
iree_package_name(_PACKAGE_NAME)
set(_NAME "${_PACKAGE_NAME}_${_RULE_NAME}")
-
+
set(_SRC "${CMAKE_CURRENT_BINARY_DIR}/${_RULE_NAME}.mlir")
set(_GENERATOR_OUTPUT "${_SRC}")
diff --git a/llvm-external-projects/iree-compiler-api/CMakeLists.txt b/llvm-external-projects/iree-compiler-api/CMakeLists.txt
index 45d26c6..749e4c7 100644
--- a/llvm-external-projects/iree-compiler-api/CMakeLists.txt
+++ b/llvm-external-projects/iree-compiler-api/CMakeLists.txt
@@ -52,13 +52,12 @@
endif()
message(STATUS "iree-compiler-api Directories:
- IREE_COMPILER_API_SOURCE_DIR = ${IREE_COMPILER_API_SOURCE_DIR}
- IREE_COMPILER_API_BINARY_DIR = ${IREE_COMPILER_API_BINARY_DIR}
- IREE_SOURCE_DIR = ${IREE_SOURCE_DIR}
- IREE_BINARY_DIR = ${IREE_BINARY_DIR}
- LLVM_MAIN_SRC_DIR = ${LLVM_MAIN_SRC_DIR}
- LLVM_MAIN_BINARY_DIR = ${LLVM_MAIN_BINARY_DIR}
-")
+ IREE_COMPILER_API_SOURCE_DIR = ${IREE_COMPILER_API_SOURCE_DIR}
+ IREE_COMPILER_API_BINARY_DIR = ${IREE_COMPILER_API_BINARY_DIR}
+ IREE_SOURCE_DIR = ${IREE_SOURCE_DIR}
+ IREE_BINARY_DIR = ${IREE_BINARY_DIR}
+ LLVM_MAIN_SRC_DIR = ${LLVM_MAIN_SRC_DIR}
+ LLVM_MAIN_BINARY_DIR = ${LLVM_MAIN_BINARY_DIR}")
# LLVM dependent project directories.
set(LLD_MAIN_SRC_DIR ${LLVM_MAIN_SRC_DIR}/../lld)