diff --git a/.github/workflows/build_package.yml b/.github/workflows/build_package.yml index f8daebaa920b..75eaf987518a 100644 --- a/.github/workflows/build_package.yml +++ b/.github/workflows/build_package.yml @@ -194,7 +194,7 @@ jobs: # In pip 21.3, in-tree builds became the default and only way to # build. We require that and make sure to be past that threshold. export CIBW_BEFORE_BUILD="python -m pip install --upgrade pip>=21.3" - python -m cibuildwheel --output-dir bindist ./main_checkout/llvm-external-projects/iree-compiler-api + python -m cibuildwheel --output-dir bindist ./main_checkout/iree/compiler # Compiler tools wheels are not python version specific, so just build # for one examplar python version. diff --git a/.gitignore b/.gitignore index a6b335207731..db16c8fc19a9 100644 --- a/.gitignore +++ b/.gitignore @@ -49,6 +49,9 @@ compile_commands.json *.venv .venv +# Python deployment artifacts +*.whl + # Android Studio / Gradle files .cxx .gradle diff --git a/CMakeLists.txt b/CMakeLists.txt index e6bd7991b5d8..ff9e98546794 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -476,12 +476,23 @@ else() ${CMAKE_CURRENT_BINARY_DIR}/third_party/llvm-project/llvm/tools/mlir/include ) + # TODO: It should be possible to fix upstream targets so as to not require + # any of these. Remove as they become unnecessary. function(_hack_llvm_include_paths) set(_common_include_dirs + # LLVM $ $ + + # MLIR $ $ + + # LLD + $ + $ + + # MHLO $ ) # Avoid globally modifying paths by instead adding the include paths to the @@ -645,6 +656,16 @@ endif() # and tracy, and must come after it. if(${IREE_BUILD_PYTHON_BINDINGS}) add_subdirectory(bindings/python) + # Write out a .env file to make IDEs and developers happy. + # Yes, we are writing this to the source dir. It is only for IDEs and if + # it gets clobbered, it is fine. + set(_pythonpath_env "PYTHONPATH=${CMAKE_CURRENT_BINARY_DIR}/bindings/python\n") + file(GENERATE OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/.env" + CONTENT "${_pythonpath_env}" + ) + file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/.env" + CONTENT "${_pythonpath_env}" + ) endif() if(${IREE_BUILD_BINDINGS_TFLITE}) @@ -673,36 +694,6 @@ endif() set(IREE_PUBLIC_INCLUDE_DIRS "${IREE_COMMON_INCLUDE_DIRS}" CACHE INTERNAL "IREE: Include Directories" FORCE) -# Include the iree-compiler-api sub-project. We do this for development -# and CI so that developers have access to the API and tools it provides -# (otherwise, they would need to build multiple top-level projects). -# However, logically, iree-compiler-api depends on iree, and for deployment -# is always built standalone, taking responsibility to include iree and LLVM -# as sub-projects. -# The dependency mode is controlled by the variables -# IREE_COMPILER_API_STANDALONE, which will be set if iree-compiler-api is -# top-level. Otherwise, we set IREE_COMPILER_API_SUB_PROJECT, indicating it -# is being embedded as a sub project. -if(IREE_BUILD_COMPILER AND IREE_BUILD_PYTHON_BINDINGS) - if(NOT IREE_COMPILER_API_STANDALONE) - message(STATUS "Including iree-compiler-api as a sub-project") - set(IREE_COMPILER_API_SUB_PROJECT ON) - add_subdirectory(llvm-external-projects/iree-compiler-api - "${CMAKE_CURRENT_BINARY_DIR}/compiler-api") - - # Write out a .env file to make IDEs and developers happy. - # Yes, we are writing this to the source dir. It is only for IDEs and if - # it gets clobbered, it is fine. - set(_pythonpath_env "PYTHONPATH=$\n") - file(GENERATE OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/.env" - CONTENT "${_pythonpath_env}" - ) - file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/.env" - CONTENT "${_pythonpath_env}" - ) - endif() -endif() - #------------------------------------------------------------------------------- # IREE benchmark tools #------------------------------------------------------------------------------- diff --git a/build_tools/bazel/build_core.sh b/build_tools/bazel/build_core.sh index e076e9c187ca..a696b1a940da 100755 --- a/build_tools/bazel/build_core.sh +++ b/build_tools/bazel/build_core.sh @@ -84,7 +84,6 @@ bazel \ query \ --config=non_darwin \ //iree/... + //build_tools/... + \ - //llvm-external-projects/iree-compiler-api/... + \ //llvm-external-projects/iree-dialects/... | \ xargs --max-args 1000000 --max-chars 1000000 --exit \ bazel \ diff --git a/build_tools/cmake/iree_python.cmake b/build_tools/cmake/iree_python.cmake index 48fd3d3b097f..18d66b0fb8bf 100644 --- a/build_tools/cmake/iree_python.cmake +++ b/build_tools/cmake/iree_python.cmake @@ -336,7 +336,7 @@ function(iree_py_test) set_property(TEST ${_NAME_PATH} PROPERTY LABELS "${_RULE_LABELS}") set_property(TEST ${_NAME_PATH} PROPERTY ENVIRONMENT - "PYTHONPATH=${IREE_BINARY_DIR}/compiler-api/python_package:${IREE_BINARY_DIR}/bindings/python:$ENV{PYTHONPATH}" + "PYTHONPATH=${IREE_BINARY_DIR}/bindings/python:$ENV{PYTHONPATH}" "TEST_TMPDIR=${IREE_BINARY_DIR}/tmp/${_NAME}_test_tmpdir" ) iree_add_test_environment_properties(${_NAME_PATH}) diff --git a/build_tools/pytype/check_diff.sh b/build_tools/pytype/check_diff.sh index 9b7c8b4bce97..a7756b7a8bae 100755 --- a/build_tools/pytype/check_diff.sh +++ b/build_tools/pytype/check_diff.sh @@ -26,7 +26,9 @@ fi # We seperate the python files into multiple pytype calls because otherwise # Ninja gets confused. See https://github.com/google/pytype/issues/198 -BASE=$(echo "${FILES?}" | grep -vP '^(\./)?integrations/*$') +BASE=$(echo "${FILES?}" | \ + grep -vP '^(\./)?integrations/*$' | \ + grep -vP '(\./)?setup\.py$') IREE_TF=$(echo "${FILES?}" | \ grep -P '^(\./)?integrations/tensorflow/bindings/python/iree/tf/.*') IREE_XLA=$(echo "${FILES?}" | \ diff --git a/llvm-external-projects/iree-compiler-api/BUILD.bazel b/iree/compiler/API/BUILD similarity index 88% rename from llvm-external-projects/iree-compiler-api/BUILD.bazel rename to iree/compiler/API/BUILD index 8ad8fcd9cbb7..70517786ce2e 100644 --- a/llvm-external-projects/iree-compiler-api/BUILD.bazel +++ b/iree/compiler/API/BUILD @@ -37,13 +37,13 @@ filegroup( filegroup( name = "python_compiler_api", - srcs = glob(["python/iree/compiler/api/*.py"]), + srcs = glob(["python/iree/compiler/transforms/*.py"]), ) filegroup( name = "unittests_tools_testdata", srcs = glob([ - "unittests/tools/testdata/*", + "python/test/tools/testdata/*", ]), ) @@ -54,15 +54,14 @@ filegroup( cc_library( name = "CAPI", srcs = [ - "lib/CAPI/Compiler.cpp", - "lib/CAPI/Lld.cpp", - "lib/CAPI/Tools.cpp", + "Compiler.cpp", + "Lld.cpp", + "Tools.cpp", ], hdrs = [ - "include/iree-compiler-c/Compiler.h", - "include/iree-compiler-c/Tools.h", + "Compiler.h", + "Tools.h", ], - includes = ["include"], deps = [ "//iree/compiler/ConstEval", "//iree/compiler/Dialect/VM/IR", diff --git a/llvm-external-projects/iree-compiler-api/lib/CAPI/CMakeLists.txt b/iree/compiler/API/CMakeLists.txt similarity index 50% rename from llvm-external-projects/iree-compiler-api/lib/CAPI/CMakeLists.txt rename to iree/compiler/API/CMakeLists.txt index e257db0bfff5..0bcacfd47eec 100644 --- a/llvm-external-projects/iree-compiler-api/lib/CAPI/CMakeLists.txt +++ b/iree/compiler/API/CMakeLists.txt @@ -1,3 +1,22 @@ +# Copyright 2022 The IREE Authors +# +# Licensed under the Apache License v2.0 with LLVM Exceptions. +# See https://llvm.org/LICENSE.txt for license information. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +################################################################################ +# CAPI library using the LLVM build system. +# +# WARNING WILL ROBINSON! +# This does not look like the rest of IREE. It is directly using the upstream +# LLVM build system in order to create bundled compiler API binaries that +# are consistent with LLVM. Consult upstream CMake macros if you don't +# understand what this does. +################################################################################ + +include(AddLLVM) +include(AddMLIR) + # LLD may not have been enabled at the global level (typically because we # are not building for a CPU backend). If not, don't add API support for it. set(_OPTIONAL_SOURCES) @@ -14,7 +33,7 @@ if(TARGET lld) ) endif() -add_mlir_public_c_api_library(IREECompilerAPICompilerCAPI +add_mlir_public_c_api_library(IREECompilerCAPILib Compiler.cpp Tools.cpp ${_OPTIONAL_SOURCES} @@ -46,12 +65,19 @@ add_mlir_public_c_api_library(IREECompilerAPICompilerCAPI ) if(IREE_BUILD_TORCH_MLIR_SUPPORT) - target_compile_definitions(obj.IREECompilerAPICompilerCAPI + target_compile_definitions(obj.IREECompilerCAPILib PUBLIC IREE_HAVE_TORCH_MLIR_DIALECTS ) endif() -# TODO: Fix upstream so there is a way to know what the actual compile target -# is (versus prefixing with "obj." which is conditional). -iree_compiler_target_includes(obj.IREECompilerAPICompilerCAPI) +add_subdirectory(test) + +################################################################################ +# Language specific bindings. +# These have an ordering dependency on the backing CAPI being defined. +################################################################################ + +if(IREE_BUILD_PYTHON_BINDINGS) + add_subdirectory(python) +endif() diff --git a/llvm-external-projects/iree-compiler-api/lib/CAPI/Compiler.cpp b/iree/compiler/API/Compiler.cpp similarity index 99% rename from llvm-external-projects/iree-compiler-api/lib/CAPI/Compiler.cpp rename to iree/compiler/API/Compiler.cpp index 51aa04ed2ee2..0a4b03ae508a 100644 --- a/llvm-external-projects/iree-compiler-api/lib/CAPI/Compiler.cpp +++ b/iree/compiler/API/Compiler.cpp @@ -4,7 +4,7 @@ // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -#include "iree-compiler-c/Compiler.h" +#include "iree/compiler/API/Compiler.h" #include "iree/compiler/ConstEval/Passes.h" #include "iree/compiler/Dialect/VM/IR/VMOps.h" diff --git a/llvm-external-projects/iree-compiler-api/include/iree-compiler-c/Compiler.h b/iree/compiler/API/Compiler.h similarity index 100% rename from llvm-external-projects/iree-compiler-api/include/iree-compiler-c/Compiler.h rename to iree/compiler/API/Compiler.h diff --git a/llvm-external-projects/iree-compiler-api/lib/CAPI/Lld.cpp b/iree/compiler/API/Lld.cpp similarity index 98% rename from llvm-external-projects/iree-compiler-api/lib/CAPI/Lld.cpp rename to iree/compiler/API/Lld.cpp index 5fa32399c37b..d1a9b875e3fc 100644 --- a/llvm-external-projects/iree-compiler-api/lib/CAPI/Lld.cpp +++ b/iree/compiler/API/Lld.cpp @@ -12,7 +12,7 @@ #include #include -#include "iree-compiler-c/Tools.h" +#include "iree/compiler/API/Tools.h" #include "lld/Common/Driver.h" #include "lld/Common/ErrorHandler.h" #include "lld/Common/Memory.h" diff --git a/llvm-external-projects/iree-compiler-api/README.md b/iree/compiler/API/README.md similarity index 100% rename from llvm-external-projects/iree-compiler-api/README.md rename to iree/compiler/API/README.md diff --git a/llvm-external-projects/iree-compiler-api/lib/CAPI/Tools.cpp b/iree/compiler/API/Tools.cpp similarity index 91% rename from llvm-external-projects/iree-compiler-api/lib/CAPI/Tools.cpp rename to iree/compiler/API/Tools.cpp index e54b595a0928..d4c7a5c0693f 100644 --- a/llvm-external-projects/iree-compiler-api/lib/CAPI/Tools.cpp +++ b/iree/compiler/API/Tools.cpp @@ -4,7 +4,7 @@ // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -#include "iree-compiler-c/Tools.h" +#include "iree/compiler/API/Tools.h" #include "iree/tools/iree_translate_lib.h" diff --git a/llvm-external-projects/iree-compiler-api/include/iree-compiler-c/Tools.h b/iree/compiler/API/Tools.h similarity index 100% rename from llvm-external-projects/iree-compiler-api/include/iree-compiler-c/Tools.h rename to iree/compiler/API/Tools.h diff --git a/llvm-external-projects/iree-compiler-api/python/CMakeLists.txt b/iree/compiler/API/python/CMakeLists.txt similarity index 64% rename from llvm-external-projects/iree-compiler-api/python/CMakeLists.txt rename to iree/compiler/API/python/CMakeLists.txt index 43e4dd6febad..1587cc75ced6 100644 --- a/llvm-external-projects/iree-compiler-api/python/CMakeLists.txt +++ b/iree/compiler/API/python/CMakeLists.txt @@ -1,9 +1,37 @@ +# Copyright 2022 The IREE Authors +# +# Licensed under the Apache License v2.0 with LLVM Exceptions. +# See https://llvm.org/LICENSE.txt for license information. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + include(AddMLIRPython) # Specifies that all MLIR packages are co-located under npcomp. # TODO: Add an upstream cmake param for this vs having a global here. add_compile_definitions("MLIR_PYTHON_PACKAGE_PREFIX=iree.compiler.") +set(_PYTHON_BUILD_PREFIX "${IREE_BINARY_DIR}/bindings/python") +set(_PYTHON_INSTALL_PREFIX "python_packages/iree-compiler") + +# HACK: This should not be necessary, but add_mlir_python_extension is +# accidentally closing over an errant include_directories from up-tree, so +# when built in-tree it is somehow working based on that. This will need +# to be fixed to capture the correct include directories in that macro. +include_directories( + "${IREE_SOURCE_DIR}" + "${IREE_SOURCE_DIR}/llvm-external-projects/iree-dialects/include" + "${IREE_SOURCE_DIR}/third_party/llvm-project/mlir/include" + "${IREE_SOURCE_DIR}/third_party/mlir-hlo/include" +) + +# On Unixes, disable the creation of versioned/symlinked `.so` files. With +# this set, we just generate libIREECompilerAggregateCAPI.so vs making that +# a symlink to a versioned file right next to it. When packaging for Python, +# symlinks are duplicated, so this is pretty important. It is usually set at +# a toolchain level for dedicated Python builds, but is nice to override since +# it makes the build directory suitable for directly packaging. +set(CMAKE_PLATFORM_NO_VERSIONED_SONAME 1) + ################################################################################ # Sources ################################################################################ @@ -36,7 +64,7 @@ declare_mlir_python_extension(IREECompilerAPIPythonExtensions.IREECTransforms SOURCES IREECTransforms.cpp EMBED_CAPI_LINK_LIBS - IREECompilerAPICompilerCAPI + IREECompilerCAPILib PRIVATE_LINK_LIBS LLVMSupport ) @@ -82,15 +110,15 @@ set(_source_components add_mlir_python_common_capi_library(IREECompilerAggregateCAPI INSTALL_COMPONENT IREECompilerPythonModules - INSTALL_DESTINATION python_package/iree/compiler/_mlir_libs - OUTPUT_DIRECTORY "${IREE_COMPILER_API_BINARY_DIR}/python_package/iree/compiler/_mlir_libs" + INSTALL_DESTINATION ${_PYTHON_INSTALL_PREFIX}/iree/compiler/_mlir_libs + OUTPUT_DIRECTORY "${_PYTHON_BUILD_PREFIX}/iree/compiler/_mlir_libs" RELATIVE_INSTALL_ROOT "../../../.." DECLARED_SOURCES ${_source_components} ) add_mlir_python_modules(IREECompilerPythonModules - ROOT_PREFIX "${IREE_COMPILER_API_BINARY_DIR}/python_package/iree/compiler" - INSTALL_PREFIX "python_package/iree/compiler" + ROOT_PREFIX "${_PYTHON_BUILD_PREFIX}/iree/compiler" + INSTALL_PREFIX "${_PYTHON_INSTALL_PREFIX}/iree/compiler" DECLARED_SOURCES ${_source_components} COMMON_CAPI_LINK_LIBS IREECompilerAggregateCAPI @@ -116,12 +144,12 @@ function(add_iree_compiler_busybox_tool target) set_target_properties(${target} PROPERTIES OUTPUT_NAME "${ARG_OUTPUT_NAME}" - RUNTIME_OUTPUT_DIRECTORY "${IREE_COMPILER_API_BINARY_DIR}/python_package/iree/compiler/_mlir_libs" + RUNTIME_OUTPUT_DIRECTORY "${_PYTHON_BUILD_PREFIX}/iree/compiler/_mlir_libs" ) mlir_python_setup_extension_rpath(${target}) add_dependencies(IREECompilerPythonModules ${target}) install(TARGETS ${target} - DESTINATION "python_package/iree/compiler/_mlir_libs" + DESTINATION "${_PYTHON_INSTALL_PREFIX}/iree/compiler/_mlir_libs" ) endfunction() @@ -140,3 +168,9 @@ if(TARGET lld) LldTool.c ) endif() + +################################################################################ +# Subdirectories +################################################################################ + +add_subdirectory(test) diff --git a/llvm-external-projects/iree-compiler-api/python/IREECTransforms.cpp b/iree/compiler/API/python/IREECTransforms.cpp similarity index 98% rename from llvm-external-projects/iree-compiler-api/python/IREECTransforms.cpp rename to iree/compiler/API/python/IREECTransforms.cpp index 74029b101a20..b35049f2a686 100644 --- a/llvm-external-projects/iree-compiler-api/python/IREECTransforms.cpp +++ b/iree/compiler/API/python/IREECTransforms.cpp @@ -4,7 +4,7 @@ // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -#include "iree-compiler-c/Compiler.h" +#include "iree/compiler/API/Compiler.h" #include "mlir-c/Bindings/Python/Interop.h" #include "mlir/Bindings/Python/PybindAdaptors.h" @@ -142,6 +142,9 @@ PYBIND11_MODULE(_ireecTransforms, m) { m.doc() = "ireec transforms API"; ireeCompilerRegisterTargetBackends(); + m.def("register_all_dialects", + [](MlirContext context) { ireeCompilerRegisterAllDialects(context); }); + py::class_(m, "CompilerOptions", "Options for the IREE backend compiler.") .def(py::init([](py::args args) { diff --git a/llvm-external-projects/iree-compiler-api/python/IREECompileTool.c b/iree/compiler/API/python/IREECompileTool.c similarity index 89% rename from llvm-external-projects/iree-compiler-api/python/IREECompileTool.c rename to iree/compiler/API/python/IREECompileTool.c index 5428add66b20..2eae64ef352f 100644 --- a/llvm-external-projects/iree-compiler-api/python/IREECompileTool.c +++ b/iree/compiler/API/python/IREECompileTool.c @@ -4,6 +4,6 @@ // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -#include "iree-compiler-c/Tools.h" +#include "iree/compiler/API/Tools.h" int main(int argc, char **argv) { return ireeCompilerRunMain(argc, argv); } diff --git a/llvm-external-projects/iree-compiler-api/python/LldTool.c b/iree/compiler/API/python/LldTool.c similarity index 89% rename from llvm-external-projects/iree-compiler-api/python/LldTool.c rename to iree/compiler/API/python/LldTool.c index 4fd0c9b6e9a1..dfc2ac6af1b7 100644 --- a/llvm-external-projects/iree-compiler-api/python/LldTool.c +++ b/iree/compiler/API/python/LldTool.c @@ -4,6 +4,6 @@ // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -#include "iree-compiler-c/Tools.h" +#include "iree/compiler/API/Tools.h" int main(int argc, char **argv) { return ireeCompilerRunLldMain(argc, argv); } diff --git a/llvm-external-projects/iree-compiler-api/python/iree/compiler/__init__.py b/iree/compiler/API/python/iree/compiler/__init__.py similarity index 100% rename from llvm-external-projects/iree-compiler-api/python/iree/compiler/__init__.py rename to iree/compiler/API/python/iree/compiler/__init__.py diff --git a/llvm-external-projects/iree-compiler-api/python/iree/compiler/tf.py b/iree/compiler/API/python/iree/compiler/tf.py similarity index 100% rename from llvm-external-projects/iree-compiler-api/python/iree/compiler/tf.py rename to iree/compiler/API/python/iree/compiler/tf.py diff --git a/llvm-external-projects/iree-compiler-api/python/iree/compiler/tflite.py b/iree/compiler/API/python/iree/compiler/tflite.py similarity index 100% rename from llvm-external-projects/iree-compiler-api/python/iree/compiler/tflite.py rename to iree/compiler/API/python/iree/compiler/tflite.py diff --git a/llvm-external-projects/iree-compiler-api/python/iree/compiler/tools/__init__.py b/iree/compiler/API/python/iree/compiler/tools/__init__.py similarity index 100% rename from llvm-external-projects/iree-compiler-api/python/iree/compiler/tools/__init__.py rename to iree/compiler/API/python/iree/compiler/tools/__init__.py diff --git a/llvm-external-projects/iree-compiler-api/python/iree/compiler/tools/binaries.py b/iree/compiler/API/python/iree/compiler/tools/binaries.py similarity index 100% rename from llvm-external-projects/iree-compiler-api/python/iree/compiler/tools/binaries.py rename to iree/compiler/API/python/iree/compiler/tools/binaries.py diff --git a/llvm-external-projects/iree-compiler-api/python/iree/compiler/tools/core.py b/iree/compiler/API/python/iree/compiler/tools/core.py similarity index 100% rename from llvm-external-projects/iree-compiler-api/python/iree/compiler/tools/core.py rename to iree/compiler/API/python/iree/compiler/tools/core.py diff --git a/llvm-external-projects/iree-compiler-api/python/iree/compiler/tools/debugging.py b/iree/compiler/API/python/iree/compiler/tools/debugging.py similarity index 100% rename from llvm-external-projects/iree-compiler-api/python/iree/compiler/tools/debugging.py rename to iree/compiler/API/python/iree/compiler/tools/debugging.py diff --git a/llvm-external-projects/iree-compiler-api/python/iree/compiler/tools/scripts/__init__.py b/iree/compiler/API/python/iree/compiler/tools/scripts/__init__.py similarity index 100% rename from llvm-external-projects/iree-compiler-api/python/iree/compiler/tools/scripts/__init__.py rename to iree/compiler/API/python/iree/compiler/tools/scripts/__init__.py diff --git a/llvm-external-projects/iree-compiler-api/python/iree/compiler/tools/scripts/ireec/__main__.py b/iree/compiler/API/python/iree/compiler/tools/scripts/ireec/__main__.py similarity index 100% rename from llvm-external-projects/iree-compiler-api/python/iree/compiler/tools/scripts/ireec/__main__.py rename to iree/compiler/API/python/iree/compiler/tools/scripts/ireec/__main__.py diff --git a/llvm-external-projects/iree-compiler-api/python/iree/compiler/tools/tf.py b/iree/compiler/API/python/iree/compiler/tools/tf.py similarity index 100% rename from llvm-external-projects/iree-compiler-api/python/iree/compiler/tools/tf.py rename to iree/compiler/API/python/iree/compiler/tools/tf.py diff --git a/llvm-external-projects/iree-compiler-api/python/iree/compiler/tools/tflite.py b/iree/compiler/API/python/iree/compiler/tools/tflite.py similarity index 100% rename from llvm-external-projects/iree-compiler-api/python/iree/compiler/tools/tflite.py rename to iree/compiler/API/python/iree/compiler/tools/tflite.py diff --git a/llvm-external-projects/iree-compiler-api/python/iree/compiler/tools/xla.py b/iree/compiler/API/python/iree/compiler/tools/xla.py similarity index 100% rename from llvm-external-projects/iree-compiler-api/python/iree/compiler/tools/xla.py rename to iree/compiler/API/python/iree/compiler/tools/xla.py diff --git a/llvm-external-projects/iree-compiler-api/python/iree/compiler/transforms/ireec.py b/iree/compiler/API/python/iree/compiler/transforms/ireec.py similarity index 100% rename from llvm-external-projects/iree-compiler-api/python/iree/compiler/transforms/ireec.py rename to iree/compiler/API/python/iree/compiler/transforms/ireec.py diff --git a/llvm-external-projects/iree-compiler-api/python/iree/compiler/xla.py b/iree/compiler/API/python/iree/compiler/xla.py similarity index 100% rename from llvm-external-projects/iree-compiler-api/python/iree/compiler/xla.py rename to iree/compiler/API/python/iree/compiler/xla.py diff --git a/iree/compiler/API/python/test/CMakeLists.txt b/iree/compiler/API/python/test/CMakeLists.txt new file mode 100644 index 000000000000..22bb86c4ede2 --- /dev/null +++ b/iree/compiler/API/python/test/CMakeLists.txt @@ -0,0 +1,8 @@ +# Copyright 2022 The IREE Authors +# +# Licensed under the Apache License v2.0 with LLVM Exceptions. +# See https://llvm.org/LICENSE.txt for license information. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +add_subdirectory(tools) +add_subdirectory(transforms) diff --git a/llvm-external-projects/iree-compiler-api/unittests/tools/CMakeLists.txt b/iree/compiler/API/python/test/tools/CMakeLists.txt similarity index 77% rename from llvm-external-projects/iree-compiler-api/unittests/tools/CMakeLists.txt rename to iree/compiler/API/python/test/tools/CMakeLists.txt index e276d13051d9..5a2a29a910eb 100644 --- a/llvm-external-projects/iree-compiler-api/unittests/tools/CMakeLists.txt +++ b/iree/compiler/API/python/test/tools/CMakeLists.txt @@ -4,30 +4,30 @@ # See https://llvm.org/LICENSE.txt for license information. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -iree_compiler_api_py_test( +iree_py_test( NAME compiler_core_test - MAIN + SRCS "compiler_core_test.py" ) -iree_compiler_api_py_test( +iree_py_test( NAME compiler_tf_test - MAIN + SRCS "compiler_tf_test.py" ) -iree_compiler_api_py_test( +iree_py_test( NAME compiler_tflite_test - MAIN + SRCS "compiler_tflite_test.py" ) -iree_compiler_api_py_test( +iree_py_test( NAME compiler_xla_test - MAIN + SRCS "compiler_xla_test.py" ) diff --git a/llvm-external-projects/iree-compiler-api/unittests/tools/README.md b/iree/compiler/API/python/test/tools/README.md similarity index 100% rename from llvm-external-projects/iree-compiler-api/unittests/tools/README.md rename to iree/compiler/API/python/test/tools/README.md diff --git a/llvm-external-projects/iree-compiler-api/unittests/tools/compiler_core_test.py b/iree/compiler/API/python/test/tools/compiler_core_test.py similarity index 100% rename from llvm-external-projects/iree-compiler-api/unittests/tools/compiler_core_test.py rename to iree/compiler/API/python/test/tools/compiler_core_test.py diff --git a/llvm-external-projects/iree-compiler-api/unittests/tools/compiler_tf_test.py b/iree/compiler/API/python/test/tools/compiler_tf_test.py similarity index 100% rename from llvm-external-projects/iree-compiler-api/unittests/tools/compiler_tf_test.py rename to iree/compiler/API/python/test/tools/compiler_tf_test.py diff --git a/llvm-external-projects/iree-compiler-api/unittests/tools/compiler_tflite_test.py b/iree/compiler/API/python/test/tools/compiler_tflite_test.py similarity index 100% rename from llvm-external-projects/iree-compiler-api/unittests/tools/compiler_tflite_test.py rename to iree/compiler/API/python/test/tools/compiler_tflite_test.py diff --git a/llvm-external-projects/iree-compiler-api/unittests/tools/compiler_xla_test.py b/iree/compiler/API/python/test/tools/compiler_xla_test.py similarity index 100% rename from llvm-external-projects/iree-compiler-api/unittests/tools/compiler_xla_test.py rename to iree/compiler/API/python/test/tools/compiler_xla_test.py diff --git a/llvm-external-projects/iree-compiler-api/unittests/tools/testdata/generate_tflite.py b/iree/compiler/API/python/test/tools/testdata/generate_tflite.py similarity index 100% rename from llvm-external-projects/iree-compiler-api/unittests/tools/testdata/generate_tflite.py rename to iree/compiler/API/python/test/tools/testdata/generate_tflite.py diff --git a/llvm-external-projects/iree-compiler-api/unittests/tools/testdata/generate_xla.py b/iree/compiler/API/python/test/tools/testdata/generate_xla.py similarity index 100% rename from llvm-external-projects/iree-compiler-api/unittests/tools/testdata/generate_xla.py rename to iree/compiler/API/python/test/tools/testdata/generate_xla.py diff --git a/llvm-external-projects/iree-compiler-api/unittests/tools/testdata/tflite_sample.fb b/iree/compiler/API/python/test/tools/testdata/tflite_sample.fb similarity index 100% rename from llvm-external-projects/iree-compiler-api/unittests/tools/testdata/tflite_sample.fb rename to iree/compiler/API/python/test/tools/testdata/tflite_sample.fb diff --git a/llvm-external-projects/iree-compiler-api/unittests/tools/testdata/xla_sample.hlo b/iree/compiler/API/python/test/tools/testdata/xla_sample.hlo similarity index 100% rename from llvm-external-projects/iree-compiler-api/unittests/tools/testdata/xla_sample.hlo rename to iree/compiler/API/python/test/tools/testdata/xla_sample.hlo diff --git a/llvm-external-projects/iree-compiler-api/unittests/tools/testdata/xla_sample.pb b/iree/compiler/API/python/test/tools/testdata/xla_sample.pb similarity index 100% rename from llvm-external-projects/iree-compiler-api/unittests/tools/testdata/xla_sample.pb rename to iree/compiler/API/python/test/tools/testdata/xla_sample.pb diff --git a/iree/compiler/API/python/test/transforms/CMakeLists.txt b/iree/compiler/API/python/test/transforms/CMakeLists.txt new file mode 100644 index 000000000000..18914fd2f24b --- /dev/null +++ b/iree/compiler/API/python/test/transforms/CMakeLists.txt @@ -0,0 +1,7 @@ +# Copyright 2022 The IREE Authors +# +# Licensed under the Apache License v2.0 with LLVM Exceptions. +# See https://llvm.org/LICENSE.txt for license information. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +add_subdirectory(ireec) diff --git a/llvm-external-projects/iree-compiler-api/unittests/transforms/ireec/CMakeLists.txt b/iree/compiler/API/python/test/transforms/ireec/CMakeLists.txt similarity index 72% rename from llvm-external-projects/iree-compiler-api/unittests/transforms/ireec/CMakeLists.txt rename to iree/compiler/API/python/test/transforms/ireec/CMakeLists.txt index e0a903da23b4..384f33ad7934 100644 --- a/llvm-external-projects/iree-compiler-api/unittests/transforms/ireec/CMakeLists.txt +++ b/iree/compiler/API/python/test/transforms/ireec/CMakeLists.txt @@ -4,9 +4,16 @@ # See https://llvm.org/LICENSE.txt for license information. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -iree_compiler_api_py_test( +iree_py_test( NAME compiler_options_test - MAIN + SRCS "compiler_options_test.py" ) + +iree_py_test( + NAME + compile_sample_module + SRCS + "compile_sample_module.py" +) diff --git a/llvm-external-projects/iree-compiler-api/build_tools/smoketest.py b/iree/compiler/API/python/test/transforms/ireec/compile_sample_module.py similarity index 69% rename from llvm-external-projects/iree-compiler-api/build_tools/smoketest.py rename to iree/compiler/API/python/test/transforms/ireec/compile_sample_module.py index 2c12ebabba8e..55eccd8de359 100644 --- a/llvm-external-projects/iree-compiler-api/build_tools/smoketest.py +++ b/iree/compiler/API/python/test/transforms/ireec/compile_sample_module.py @@ -9,14 +9,15 @@ from iree.compiler import ir from iree.compiler import passmanager -from iree.compiler import version +from iree.compiler.transforms import ireec + +# The compiler re-exports API access to a number of dialects. If one of these +# fails to import, it indicates a build issue. from iree.compiler.dialects import arith from iree.compiler.dialects import chlo from iree.compiler.dialects import mhlo from iree.compiler.dialects import iree_input from iree.compiler.dialects import builtin -from iree.compiler.dialects import std -from iree.compiler.dialects import linalg from iree.compiler.dialects import linalg from iree.compiler.dialects import math from iree.compiler.dialects import memref @@ -25,17 +26,13 @@ from iree.compiler.dialects import tosa from iree.compiler.dialects import vector -from iree.compiler.transforms import ireec - # Test the compiler API. with ir.Context() as ctx: - chlo.register_chlo_dialect(ctx) - mhlo.register_mhlo_dialect(ctx) - iree_input.register_dialect(ctx) + ireec.register_all_dialects(ctx) input_module = ir.Module.parse(r""" builtin.module { - builtin.func @fabs(%arg0: tensor<1x4xf32>, %arg1: tensor<4x1xf32>) -> tensor<4x4xf32> { + func.func @fabs(%arg0: tensor<1x4xf32>, %arg1: tensor<4x1xf32>) -> tensor<4x4xf32> { %0 = chlo.broadcast_add %arg0, %arg1 : (tensor<1x4xf32>, tensor<4x1xf32>) -> tensor<4x4xf32> %1 = "mhlo.abs"(%0) : (tensor<4x4xf32>) -> tensor<4x4xf32> return %1 : tensor<4x4xf32> @@ -43,10 +40,10 @@ } """) - options = ireec.CompilerOptions("--iree-input-type=mhlo", - "--iree-hal-target-backends=cpu") + options = ireec.CompilerOptions("--iree-hal-target-backends=cpu") print(options) pm = passmanager.PassManager() + ireec.build_mhlo_import_pass_pipeline(pm) ireec.build_iree_vm_pass_pipeline(options, pm) pm.run(input_module) @@ -54,11 +51,3 @@ bytecode_io = io.BytesIO() ireec.translate_module_to_vm_bytecode(options, input_module, bytecode_io) print(f"Bytecode module len = {len(bytecode_io.getbuffer())}") - -# Check version. -print(f"PACKAGE_SUFFIX={version.PACKAGE_SUFFIX}") -print(f"VERSION={version.VERSION}") -print(f"REVISIONS={version.REVISIONS!r}") - -# Check console scripts. -subprocess.check_output(["iree-compile", "-help"]) diff --git a/llvm-external-projects/iree-compiler-api/unittests/transforms/ireec/compiler_options_test.py b/iree/compiler/API/python/test/transforms/ireec/compiler_options_test.py similarity index 100% rename from llvm-external-projects/iree-compiler-api/unittests/transforms/ireec/compiler_options_test.py rename to iree/compiler/API/python/test/transforms/ireec/compiler_options_test.py diff --git a/llvm-external-projects/iree-compiler-api/unittests/CAPI/CMakeLists.txt b/iree/compiler/API/test/CMakeLists.txt similarity index 94% rename from llvm-external-projects/iree-compiler-api/unittests/CAPI/CMakeLists.txt rename to iree/compiler/API/test/CMakeLists.txt index 5729d1451dcd..5c4514e3cba4 100644 --- a/llvm-external-projects/iree-compiler-api/unittests/CAPI/CMakeLists.txt +++ b/iree/compiler/API/test/CMakeLists.txt @@ -10,7 +10,7 @@ add_executable( ) target_link_libraries(iree-compiler-api-compile-mhlo-test PRIVATE - IREECompilerAPICompilerCAPI + IREECompilerCAPILib MLIRCAPIIR ) diff --git a/llvm-external-projects/iree-compiler-api/unittests/CAPI/compile-mhlo-test-main.c b/iree/compiler/API/test/compile-mhlo-test-main.c similarity index 99% rename from llvm-external-projects/iree-compiler-api/unittests/CAPI/compile-mhlo-test-main.c rename to iree/compiler/API/test/compile-mhlo-test-main.c index 6f8f95a15a9e..dd44804388fc 100644 --- a/llvm-external-projects/iree-compiler-api/unittests/CAPI/compile-mhlo-test-main.c +++ b/iree/compiler/API/test/compile-mhlo-test-main.c @@ -12,8 +12,8 @@ // be the first user of the combined MLIR+IREE CAPI: // https://github.com/google/iree/pull/8582 -#include #include +#include #include static void bytecode_builder_callback(MlirStringRef str, void* userdata) { diff --git a/iree/compiler/BUILD b/iree/compiler/BUILD deleted file mode 100644 index 7c08db28bf24..000000000000 --- a/iree/compiler/BUILD +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright 2019 The IREE Authors -# -# Licensed under the Apache License v2.0 with LLVM Exceptions. -# See https://llvm.org/LICENSE.txt for license information. -# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception - -package( - default_visibility = ["//visibility:public"], - features = ["layering_check"], - licenses = ["notice"], # Apache 2.0 -) - -#===------------------------------------------------------------------------===# -# Public API -#===------------------------------------------------------------------------===# -# TODO(#3817): expose :compiler as the public C API. -# TODO(#3817): expose :cc as the public C++ wrapper API. diff --git a/iree/compiler/CMakeLists.txt b/iree/compiler/CMakeLists.txt index 63535ef573ba..30987f3abb40 100644 --- a/iree/compiler/CMakeLists.txt +++ b/iree/compiler/CMakeLists.txt @@ -11,3 +11,10 @@ iree_add_all_subdirs() ### BAZEL_TO_CMAKE_PRESERVES_ALL_CONTENT_BELOW_THIS_LINE ### + +# Copy Python packaging files to the build dir so that we can install from +# there. +if(IREE_BUILD_PYTHON_BINDINGS) + configure_file(pyproject.toml pyproject.toml COPYONLY) + configure_file(setup.py setup.py @ONLY) +endif() diff --git a/iree/compiler/README.md b/iree/compiler/README.md index 5eb2b89540d0..6d7f6f0b297d 100644 --- a/iree/compiler/README.md +++ b/iree/compiler/README.md @@ -7,6 +7,8 @@ Paths of particular interest include: ``` └── compiler/ + ├── setup.py (builds/installs the compiler Python API) + ├── API/ (C and Python APIs) ├── Bindings/ (used to generate different ABI bindings) ├── Codegen/ (device code generation for assorted APIs) ├── Dialect/ @@ -22,6 +24,7 @@ Paths of particular interest include: │ └── VM/ (abstract Virtual Machine) ├── InputConversion/ (conversions from frontend/input dialects) └── Translation/ (translation pipeline definitions) + ``` Noteworthy compiler components _not_ included here include: @@ -76,3 +79,45 @@ Read more: * https://google.github.io/styleguide/cppguide.html * https://llvm.org/docs/CodingStandards.html * https://clang.llvm.org/docs/ClangFormatStyleOptions.html + +## Standalone Python Builds + +The included `setup.py` file can be used to build Python binaries or directly +install the IREE compiler API. Do note that the compiler is quite heavy and +unless you are developing it and on a significant machine, you will want to +use released binaries. + +There are two ways to build/install Python packages: + +* Directly from the source tree (this is how official releases are done). +* From the build directory while developing. + +It is recommended to use your favorite method for managing +[virtual environemnts](https://docs.python.org/3/library/venv.html) instead +of modifying the system installation. + +Only relatively recent versions of `pip` are supported. Always use the latest +via `pip install --upgrade pip`. + +You can build either from the source or build tree (assumes that CMake has +been configured and the project built). The latter is typically used by +project developers who are already setup for development and want to +incrementally generate Python packages without rebuilding. + +To build a wheel that can be installed on the same Python version and OS: + +``` +python -m pip wheel iree/compiler +``` + +To directly install: + +``` +python -m pip install iree/compiler +``` + +In order to sanity check once the package is installed: + +``` +python iree/compiler/Api/python/test/transforms/ireec/compile_sample_module.py +``` diff --git a/llvm-external-projects/iree-compiler-api/pyproject.toml b/iree/compiler/pyproject.toml similarity index 95% rename from llvm-external-projects/iree-compiler-api/pyproject.toml rename to iree/compiler/pyproject.toml index 43e846cedf7b..d1195bc118a7 100644 --- a/llvm-external-projects/iree-compiler-api/pyproject.toml +++ b/iree/compiler/pyproject.toml @@ -8,6 +8,7 @@ requires = [ "ninja==1.10.2", # MLIR build depends. "numpy", + "packaging", # Version 2.7.0 excluded: https://github.com/pybind/pybind11/issues/3136 "pybind11>=2.6.0,!=2.7.0", "PyYAML", diff --git a/iree/compiler/setup.py b/iree/compiler/setup.py new file mode 100644 index 000000000000..51564771505c --- /dev/null +++ b/iree/compiler/setup.py @@ -0,0 +1,357 @@ +# Copyright 2021 The IREE Authors +# +# Licensed under the Apache License v2.0 with LLVM Exceptions. +# See https://llvm.org/LICENSE.txt for license information. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +# Build/install the iree-compiler-backend python package. +# Note that this includes a relatively large build of LLVM (~2400 C++ files) +# and can take a considerable amount of time, especially with defaults. +# To install: +# pip install . +# To build a wheel: +# pip wheel . +# +# It is recommended to build with Ninja and ccache. To do so, set environment +# variables by prefixing to above invocations: +# CMAKE_C_COMPILER_LAUNCHER=ccache CMAKE_CXX_COMPILER_LAUNCHER=ccache +# +# On CIs, it is often advantageous to re-use/control the CMake build directory. +# This can be set with the IREE_COMPILER_API_CMAKE_BUILD_DIR env var. +from gettext import install +import json +from multiprocessing.spawn import prepare +import os +import platform +import re +import shutil +import subprocess +import sys +import sysconfig + +from distutils.command.build import build as _build +from setuptools import find_namespace_packages, setup, Extension +from setuptools.command.build_ext import build_ext as _build_ext +from setuptools.command.build_py import build_py as _build_py + + +def check_pip_version(): + from packaging import version + # Pip versions < 22.0.3 default to out of tree builds, which is quite + # incompatible with what we do (and has other issues). Pip >= 22.0.4 + # removed this option entirely and are only in-tree builds. Since the + # old behavior can silently produce unworking installations, we aggressively + # suppress it. + try: + import pip + except ModuleNotFoundError: + # If pip not installed, we are obviously not trying to package via pip. + pass + else: + if (version.parse(pip.__version__) < version.parse("21.3")): + print("ERROR: pip version >= 21.3 required") + print("Upgrade: pip install pip --upgrade") + sys.exit(2) + + +check_pip_version() + +# This file can be run directly from the source tree or it can be CMake +# configured so it can run from the build tree with an already existing +# build tree. We detect the difference based on whether the following +# are expanded by CMake. +CONFIGURED_SOURCE_DIR = "@IREE_SOURCE_DIR@" +CONFIGURED_BINARY_DIR = "@IREE_BINARY_DIR@" + +IREE_SOURCE_DIR = None +IREE_BINARY_DIR = None + +# We must do the intermediate installation to a fixed location that agrees +# between what we pass to setup() and cmake. So hard-code it here. +# Note that setup() needs a relative path (to the setup.py file). +SETUPPY_DIR = os.path.realpath(os.path.dirname(__file__)) +CMAKE_INSTALL_DIR_REL = os.path.join("build", "cmake_install") +CMAKE_INSTALL_DIR_ABS = os.path.join(SETUPPY_DIR, CMAKE_INSTALL_DIR_REL) + +IS_CONFIGURED = CONFIGURED_SOURCE_DIR[0] != "@" +if IS_CONFIGURED: + IREE_SOURCE_DIR = CONFIGURED_SOURCE_DIR + IREE_BINARY_DIR = CONFIGURED_BINARY_DIR + print( + f"Running setup.py from build tree: " + f"SOURCE_DIR = {IREE_SOURCE_DIR} " + f"BINARY_DIR = {IREE_BINARY_DIR}", + file=sys.stderr) +else: + IREE_SOURCE_DIR = os.path.join(SETUPPY_DIR, "..", "..") + IREE_BINARY_DIR = os.getenv("IREE_COMPILER_API_CMAKE_BUILD_DIR") + if not IREE_BINARY_DIR: + # Note that setuptools always builds into a "build" directory that + # is a sibling of setup.py, so we just colonize a sub-directory of that + # by default. + IREE_BINARY_DIR = os.path.join(SETUPPY_DIR, "build", "cmake_build") + print( + f"Running setup.py from source tree: " + f"SOURCE_DIR = {IREE_SOURCE_DIR} " + f"BINARY_DIR = {IREE_BINARY_DIR}", + file=sys.stderr) + +# Setup and get version information. +VERSION_INFO_FILE = os.path.join(IREE_SOURCE_DIR, "version_info.json") + + +def load_version_info(): + with open(VERSION_INFO_FILE, "rt") as f: + return json.load(f) + + +try: + version_info = load_version_info() +except FileNotFoundError: + print("version_info.json not found. Using defaults", file=sys.stderr) + version_info = {} + +PACKAGE_SUFFIX = version_info.get("package-suffix") or "" +PACKAGE_VERSION = version_info.get("package-version") or "0.1dev1" + + +def maybe_nuke_cmake_cache(): + # From run to run under pip, we can end up with different paths to ninja, + # which isn't great and will confuse cmake. Detect if the location of + # ninja changes and force a cache flush. + ninja_path = "" + try: + import ninja + except ModuleNotFoundError: + pass + else: + ninja_path = ninja.__file__ + expected_stamp_contents = f"{sys.executable}\n{ninja_path}" + + # In order to speed things up on CI and not rebuild everything, we nuke + # the CMakeCache.txt file if the path to the Python interpreter changed. + # Ideally, CMake would let us reconfigure this dynamically... but it does + # not (and gets very confused). + # We only do this because the compiler is so expensive to build and very + # little of it depends on the Python version. This is a hack. + PYTHON_STAMP_FILE = os.path.join(IREE_BINARY_DIR, "python_stamp.txt") + if os.path.exists(PYTHON_STAMP_FILE): + with open(PYTHON_STAMP_FILE, "rt") as f: + actual_stamp_contents = f.read() + if actual_stamp_contents == expected_stamp_contents: + # All good. + return + + # Mismatch or not found. Clean it. + cmake_cache_file = os.path.join(IREE_BINARY_DIR, "CMakeCache.txt") + if os.path.exists(cmake_cache_file): + print("Removing CMakeCache.txt because Python version changed", + file=sys.stderr) + os.remove(cmake_cache_file) + + # And write. + with open(PYTHON_STAMP_FILE, "wt") as f: + f.write(expected_stamp_contents) + + +def prepare_installation(): + version_py_content = generate_version_py() + print(f"Generating version.py:\n{version_py_content}", file=sys.stderr) + + if not IS_CONFIGURED: + # Build from source tree. + subprocess.check_call(["cmake", "--version"]) + os.makedirs(IREE_BINARY_DIR, exist_ok=True) + maybe_nuke_cmake_cache() + print(f"CMake build dir: {IREE_BINARY_DIR}", file=sys.stderr) + print(f"CMake install dir: {CMAKE_INSTALL_DIR_ABS}", file=sys.stderr) + cfg = "Release" + cmake_args = [ + "-GNinja", + "--log-level=VERBOSE", + "-DIREE_BUILD_PYTHON_BINDINGS=ON", + "-DPython3_EXECUTABLE={}".format(sys.executable), + "-DCMAKE_BUILD_TYPE={}".format(cfg), + ] + + # Enable CUDA if specified. + cuda_target_option = os.getenv("IREE_TARGET_BACKEND_CUDA") + if cuda_target_option: + cmake_args.append(f"-DIREE_TARGET_BACKEND_CUDA={cuda_target_option}") + + # Only do a from-scratch configure if not already configured. + cmake_cache_file = os.path.join(IREE_BINARY_DIR, "CMakeCache.txt") + if not os.path.exists(cmake_cache_file): + print(f"Configuring with: {cmake_args}", file=sys.stderr) + subprocess.check_call(["cmake", IREE_SOURCE_DIR] + cmake_args, + cwd=IREE_BINARY_DIR) + else: + print(f"Not re-configuring (already configured)", file=sys.stderr) + + # Build. + subprocess.check_call( + ["cmake", "--build", ".", "--target", "iree/compiler/API/python/all"], + cwd=IREE_BINARY_DIR) + print("Build complete.", file=sys.stderr) + + # Install the directory we care about. + install_subdirectory = os.path.join(IREE_BINARY_DIR, "iree", "compiler", + "API", "python") + install_args = [ + "-DCMAKE_INSTALL_DO_STRIP=ON", + f"-DCMAKE_INSTALL_PREFIX={CMAKE_INSTALL_DIR_ABS}", + "-P", + os.path.join(install_subdirectory, "cmake_install.cmake"), + ] + print(f"Installing with: {install_args}", file=sys.stderr) + subprocess.check_call(["cmake"] + install_args, cwd=install_subdirectory) + + # Write version.py directly into install dir. + version_py_file = os.path.join(CMAKE_INSTALL_DIR_ABS, "python_packages", + "iree-compiler", "iree", "compiler", + "version.py") + os.makedirs(os.path.dirname(version_py_file), exist_ok=True) + with open(version_py_file, "wt") as f: + f.write(version_py_content) + + print(f"Installation prepared: {CMAKE_INSTALL_DIR_ABS}", file=sys.stderr) + + +class CMakeBuildPy(_build_py): + + def run(self): + # It is critical that the target directory contain all built extensions, + # or else setuptools will helpfully compile an empty binary for us + # (this is the **worst** possible thing it could do). We just copy + # everything. What's another hundred megs between friends? + target_dir = os.path.abspath(self.build_lib) + print(f"Building in target dir: {target_dir}", file=sys.stderr) + os.makedirs(target_dir, exist_ok=True) + print("Copying install to target.", file=sys.stderr) + if os.path.exists(target_dir): + shutil.rmtree(target_dir) + shutil.copytree(os.path.join(CMAKE_INSTALL_DIR_ABS, "python_packages", + "iree-compiler"), + target_dir, + symlinks=False) + print("Target populated.", file=sys.stderr) + + +class CustomBuild(_build): + + def run(self): + self.run_command("build_py") + self.run_command("build_ext") + self.run_command("build_scripts") + + +class CMakeExtension(Extension): + + def __init__(self, name, sourcedir=""): + Extension.__init__(self, name, sources=[]) + self.sourcedir = os.path.abspath(sourcedir) + + +class NoopBuildExtension(_build_ext): + + def __init__(self, *args, **kwargs): + assert False + + def build_extension(self, ext): + pass + + +def generate_version_py(): + return f"""# Auto-generated version info. +PACKAGE_SUFFIX = "{PACKAGE_SUFFIX}" +VERSION = "{PACKAGE_VERSION}" +REVISIONS = {json.dumps(find_git_versions())} +""" + + +def find_git_versions(): + revisions = {} + try: + revisions["IREE"] = subprocess.check_output( + ["git", "rev-parse", "HEAD"], + cwd=IREE_SOURCE_DIR).decode("utf-8").strip() + except subprocess.SubprocessError as e: + print(f"ERROR: Could not get IREE revision: {e}", file=sys.stderr) + revisions["LLVM_PROJECT"] = find_git_submodule_revision( + "third_party/llvm-project") + revisions["MLIR_HLO"] = find_git_submodule_revision("third_party/mlir-hlo") + return revisions + + +def find_git_submodule_revision(submodule_path): + try: + data = subprocess.check_output(["git", "ls-tree", "HEAD", submodule_path], + cwd=IREE_SOURCE_DIR).decode("utf-8").strip() + columns = re.split("\\s+", data) + return columns[2] + except Exception as e: + print( + f"ERROR: Could not get submodule revision for {submodule_path}" + f" ({e})", + file=sys.stderr) + return "" + + +prepare_installation() + +packages = find_namespace_packages(where=os.path.join(CMAKE_INSTALL_DIR_ABS, + "python_packages", + "iree-compiler"), + include=[ + "iree.compiler", + "iree.compiler.*", + ]) +print(f"Found compiler packages: {packages}") + +setup( + name=f"iree-compiler{PACKAGE_SUFFIX}", + version=f"{PACKAGE_VERSION}", + author="IREE Authors", + author_email="iree-discuss@googlegroups.com", + description="IREE Compiler API", + long_description="", + license="Apache-2.0", + classifiers=[ + "Development Status :: 3 - Alpha", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + ], + ext_modules=[ + CMakeExtension("iree.compiler._mlir_libs._mlir"), + CMakeExtension("iree.compiler._mlir_libs._ireeDialects"), + CMakeExtension("iree.compiler._mlir_libs._ireecTransforms"), + CMakeExtension("iree.compiler._mlir_libs._mlirHlo"), + CMakeExtension("iree.compiler._mlir_libs._mlirLinalgPasses"), + ], + cmdclass={ + "build": CustomBuild, + "built_ext": NoopBuildExtension, + "build_py": CMakeBuildPy, + }, + zip_safe=False, + package_dir={ + # Note: Must be relative path, so we line this up with the absolute + # path built above. Note that this must exist prior to the call. + "": f"{CMAKE_INSTALL_DIR_REL}/python_packages/iree-compiler", + }, + packages=packages, + entry_points={ + "console_scripts": [ + "iree-compile = iree.compiler.tools.scripts.ireec.__main__:main", + # TODO: We have renamed to iree-compile on 2022-03-18. Remove + # this alias once no longer needed. + "ireec = iree.compiler.tools.scripts.ireec.__main__:main", + ], + }, + install_requires=[ + "numpy", + "PyYAML", + ], +) diff --git a/llvm-external-projects/iree-compiler-api/.gitignore b/llvm-external-projects/iree-compiler-api/.gitignore deleted file mode 100644 index 381498f275ec..000000000000 --- a/llvm-external-projects/iree-compiler-api/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -/build/ -/build_intree/ -/wheels/ -/*.egg-info/ diff --git a/llvm-external-projects/iree-compiler-api/CMakeLists.txt b/llvm-external-projects/iree-compiler-api/CMakeLists.txt deleted file mode 100644 index 8d475b9f0559..000000000000 --- a/llvm-external-projects/iree-compiler-api/CMakeLists.txt +++ /dev/null @@ -1,163 +0,0 @@ -# This is a standalone project for the creation of compiler API and tools -# packages. It is meant to be built directly and aggregates all other projects -# that make up the IREE compiler input surface area. As a standalone -# project intended for direct distribution, it hard-codes a number of important -# CMake settings for producing optimal binaries and packages. -cmake_minimum_required(VERSION 3.17...3.22) - -if(POLICY CMP0068) - cmake_policy(SET CMP0068 NEW) - set(CMAKE_BUILD_WITH_INSTALL_NAME_DIR ON) -endif() - -if(POLICY CMP0075) - cmake_policy(SET CMP0075 NEW) -endif() - -if(POLICY CMP0077) - cmake_policy(SET CMP0077 NEW) -endif() - -# Honor all visibility presets (please, please, pretty-please). -# This needs to be set as a default because some IREE dependencies specify -# a CMake min version of 3.0, which causes them to set it locally to OLD. -set(CMAKE_POLICY_DEFAULT_CMP0063 NEW) - -project(IREE_COMPILER_API LANGUAGES C CXX) - -if(IREE_COMPILER_API_SUB_PROJECT) - # Building as part of a top-level IREE project. - message(STATUS "Building iree-compiler-api as part of IREE") - set(LLVM_MAIN_SRC_DIR "${IREE_SOURCE_DIR}/third_party/llvm-project/llvm") - set(LLVM_MAIN_BINARY_DIR "${IREE_BINARY_DIR}/third_party/llvm-project") -else() - # Standalone build. - message(STATUS "Building iree-compiler-api standalone") - set(IREE_COMPILER_API_STANDALONE ON) - set(IREE_BUILD_TESTS OFF) # Conflicts with our tests if we are top-level. - set(IREE_BUILD_SAMPLES OFF) - set(LLVM_EXTERNAL_MLIR_IREE_DIALECTS_SOURCE_DIR "${IREE_COMPILER_API_SOURCE_DIR}/../iree-dialects") - set(IREE_SOURCE_DIR "${IREE_COMPILER_API_SOURCE_DIR}/../..") - set(IREE_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/iree") - set(LLVM_MAIN_SRC_DIR "${IREE_COMPILER_API_SOURCE_DIR}/../../third_party/llvm-project/llvm") - set(LLVM_MAIN_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/llvm") - set(LLVM_EXTERNAL_MLIR_HLO_SOURCE_DIR "${IREE_COMPILER_API_SOURCE_DIR}/../../third_party/mlir-hlo") - option(IREE_BUILD_TORCH_MLIR_SUPPORT "Builds support for compiling torch-mlir programs." ON) - if(IREE_BUILD_TORCH_MLIR_SUPPORT) - set(LLVM_EXTERNAL_TORCH_MLIR_DIALECTS_SOURCE_DIR "${IREE_COMPILER_API_SOURCE_DIR}/../../third_party/torch-mlir-dialects") - endif() - # Resources generated on windows must have valid version numbers. - # See set_windows_version_resource_properties. - set(LLVM_VERSION_MAJOR 0) - set(LLVM_VERSION_MINOR 0) - set(LLVM_VERSION_PATCH 0) - set(PACKAGE_VERSION 0) - enable_testing() -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}") - -# LLVM dependent project directories. -set(LLD_MAIN_SRC_DIR ${LLVM_MAIN_SRC_DIR}/../lld) -set(LLD_MAIN_BINARY_DIR ${LLVM_MAIN_BINARY_DIR}/tools/lld) -set(MLIR_MAIN_SRC_DIR ${LLVM_MAIN_SRC_DIR}/../mlir) -set(MLIR_MAIN_BINARY_DIR "${LLVM_MAIN_BINARY_DIR}/tools/mlir") - -# Configuration includes. -include(${IREE_SOURCE_DIR}/build_tools/cmake/iree_cmake_options.cmake) -include(${IREE_SOURCE_DIR}/build_tools/cmake/iree_external_cmake_options.cmake) - -# CMake settings. -set(BUILD_SHARED_LIBS OFF) -set(CMAKE_PLATFORM_NO_VERSIONED_SONAME ON) -set(CMAKE_VISIBILITY_INLINES_HIDDEN ON) -set(CMAKE_C_VISIBILITY_PRESET "hidden") -set(CMAKE_CXX_VISIBILITY_PRESET "hidden") - -# Hack system includes to account for LLVM not doing includes right. -# TODO: Fix this upstream. Each of these system include hacks is broken in -# a different way, so there is not an easy local fix. They should be removed -# one be one until this project builds. Since this is the first time all of this -# has been mashed together, this is disappointing but not unexpected. -macro(add_system_include_hack include_dir) - if("${include_dir}" STREQUAL "") - message(SEND_ERROR "Cannot add empty include dir (will kill tablegen): ${include_dir}") - endif() - include_directories(SYSTEM "${include_dir}") -endmacro() - -add_system_include_hack(${LLVM_MAIN_SRC_DIR}/include) -add_system_include_hack(${LLVM_MAIN_BINARY_DIR}/include) -add_system_include_hack(${LLD_MAIN_SRC_DIR}/include) -add_system_include_hack(${LLD_MAIN_BINARY_DIR}/include) -add_system_include_hack(${MLIR_MAIN_SRC_DIR}/include) -add_system_include_hack(${MLIR_MAIN_BINARY_DIR}/include) -add_system_include_hack(${IREE_SOURCE_DIR}) -add_system_include_hack(${IREE_BINARY_DIR}) -add_system_include_hack(${LLVM_EXTERNAL_MLIR_IREE_DIALECTS_SOURCE_DIR}/include) -add_system_include_hack(${LLVM_MAIN_BINARY_DIR}/tools/iree-dialects/include) -add_system_include_hack(${LLVM_EXTERNAL_MLIR_HLO_SOURCE_DIR}/include) -add_system_include_hack(${LLVM_MAIN_BINARY_DIR}/tools/mlir-hlo/include) -if(IREE_BUILD_TORCH_MLIR_SUPPORT) - add_system_include_hack(${LLVM_EXTERNAL_TORCH_MLIR_DIALECTS_SOURCE_DIR}/include) - add_system_include_hack(${LLVM_MAIN_BINARY_DIR}/tools/torch-mlir-dialects/include) -endif() -add_system_include_hack(${IREE_COMPILER_API_SOURCE_DIR}/include) - -function(iree_compiler_target_includes target) - target_include_directories(${target} PUBLIC - $ - $ - ) -endfunction() - -# Common CMake module paths. -list(APPEND CMAKE_MODULE_PATH ${MLIR_MAIN_SRC_DIR}/cmake/modules) -list(APPEND CMAKE_MODULE_PATH ${LLVM_MAIN_SRC_DIR}/cmake/modules) - -# Configure Python3 deps so that everyone downstream of here latches to the same -# thing. -include(MLIRDetectPythonEnv) -mlir_configure_python_dev_packages() - -# Include IREE and LLVM if building standalone. -if(IREE_COMPILER_API_STANDALONE) - iree_set_compiler_cmake_options() - iree_set_llvm_cmake_options() - iree_add_llvm_external_project(mlir-iree-dialects MLIR_IREE_DIALECTS ${LLVM_EXTERNAL_MLIR_IREE_DIALECTS_SOURCE_DIR}) - iree_add_llvm_external_project(mlir-hlo MLIR_HLO ${LLVM_EXTERNAL_MLIR_HLO_SOURCE_DIR}) - if(IREE_BUILD_TORCH_MLIR_SUPPORT) - iree_add_llvm_external_project(torch-mlir-dialects TORCH_MLIR_DIALECTS ${LLVM_EXTERNAL_TORCH_MLIR_DIALECTS_SOURCE_DIR}) - endif() - set(MLIR_ENABLE_BINDINGS_PYTHON ON) - - # Required mlir-hlo settings. - # TODO: Consider removing this upstream and just using the main - # MLIR_ENABLE_BINDINGS_PYTHON option. - set(MHLO_ENABLE_BINDINGS_PYTHON ON) - - # Required IREE settings. - set(IREE_BUILD_PYTHON_BINDINGS ON) - - # Include LLVM. - message(STATUS "Configuring LLVM from (${LLVM_MAIN_SRC_DIR} into ${LLVM_MAIN_BINARY_DIR})...") - add_subdirectory("${LLVM_MAIN_SRC_DIR}" "${LLVM_MAIN_BINARY_DIR}" EXCLUDE_FROM_ALL) - - # Include IREE. - message(STATUS "Configuring IREE from (${IREE_SOURCE_DIR} into ${IREE_BINARY_DIR}") - add_subdirectory("${IREE_SOURCE_DIR}" "${IREE_BINARY_DIR}" EXCLUDE_FROM_ALL) -endif() - -# Sub-directories. -# Since building outside of the LLVM build system, setup options for local -# sources. -include(HandleLLVMOptions) -add_subdirectory(lib) -add_subdirectory(python) -add_subdirectory(unittests) diff --git a/llvm-external-projects/iree-compiler-api/build_tools/build_python_wheels.sh b/llvm-external-projects/iree-compiler-api/build_tools/build_python_wheels.sh deleted file mode 100755 index 65e76d757230..000000000000 --- a/llvm-external-projects/iree-compiler-api/build_tools/build_python_wheels.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash -# Copyright 2021 The IREE Authors -# -# Licensed under the Apache License v2.0 with LLVM Exceptions. -# See https://llvm.org/LICENSE.txt for license information. -# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception - -set -e - -if [ -z "$PYTHON" ]; then - PYTHON="$(which python)" -fi -version="$("$PYTHON" --version)" -echo "Using python: $PYTHON (version $version)" - -repo_root="$(cd $(dirname $0)/.. && pwd)" -wheelhouse="$repo_root/wheels" -mkdir -p "$wheelhouse" - -echo "---- BUILDING iree-compiler ----" -if [ -x "$(command -v ccache)" ]; then - echo "Using ccache" - export CMAKE_C_COMPILER_LAUNCHER=ccache - export CMAKE_CXX_COMPILER_LAUNCHER=ccache -fi -if [ -x "$(command -v ninja)" ]; then - echo "Using ninja" - export CMAKE_GENERATOR=Ninja -fi -$PYTHON -m pip wheel "${repo_root}" \ - -w "$wheelhouse" -v - -echo "---- INSTALLING iree-compiler ----" -$PYTHON -m pip install -f "$wheelhouse" --force-reinstall iree-compiler-dev - -echo "---- QUICK SMOKE TEST ----" -$PYTHON $repo_root/build_tools/smoketest.py diff --git a/llvm-external-projects/iree-compiler-api/lib/CMakeLists.txt b/llvm-external-projects/iree-compiler-api/lib/CMakeLists.txt deleted file mode 100644 index a5bbf9ef9cbb..000000000000 --- a/llvm-external-projects/iree-compiler-api/lib/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -add_subdirectory(CAPI) diff --git a/llvm-external-projects/iree-compiler-api/setup.py b/llvm-external-projects/iree-compiler-api/setup.py deleted file mode 100644 index bc6f87335f29..000000000000 --- a/llvm-external-projects/iree-compiler-api/setup.py +++ /dev/null @@ -1,227 +0,0 @@ -# Copyright 2021 The IREE Authors -# -# Licensed under the Apache License v2.0 with LLVM Exceptions. -# See https://llvm.org/LICENSE.txt for license information. -# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception - -# Build/install the iree-compiler-backend python package. -# Note that this includes a relatively large build of LLVM (~2400 C++ files) -# and can take a considerable amount of time, especially with defaults. -# To install: -# pip install . --use-feature=in-tree-build -# To build a wheel: -# pip wheel . --use-feature=in-tree-build -# -# It is recommended to build with Ninja and ccache. To do so, set environment -# variables by prefixing to above invocations: -# CMAKE_C_COMPILER_LAUNCHER=ccache CMAKE_CXX_COMPILER_LAUNCHER=ccache -# -# On CIs, it is often advantageous to re-use/control the CMake build directory. -# This can be set with the IREE_COMPILER_API_CMAKE_BUILD_DIR env var. -import json -import os -import platform -import re -import shutil -import subprocess -import sys -import sysconfig - -from distutils.command.build import build as _build -from setuptools import find_namespace_packages, setup, Extension -from setuptools.command.build_ext import build_ext as _build_ext -from setuptools.command.build_py import build_py as _build_py - -# Setup and get version information. -THIS_DIR = os.path.realpath(os.path.dirname(__file__)) -IREESRC_DIR = os.path.join(THIS_DIR, "..", "..") -VERSION_INFO_FILE = os.path.join(IREESRC_DIR, "version_info.json") - - -def load_version_info(): - with open(VERSION_INFO_FILE, "rt") as f: - return json.load(f) - - -try: - version_info = load_version_info() -except FileNotFoundError: - print("version_info.json not found. Using defaults") - version_info = {} - -PACKAGE_SUFFIX = version_info.get("package-suffix") or "" -PACKAGE_VERSION = version_info.get("package-version") or "0.1dev1" - - -class CustomBuild(_build): - - def run(self): - self.run_command("build_py") - self.run_command("build_ext") - self.run_command("build_scripts") - - -class CMakeExtension(Extension): - - def __init__(self, name, sourcedir=""): - Extension.__init__(self, name, sources=[]) - self.sourcedir = os.path.abspath(sourcedir) - - -class CMakeBuildPy(_build_py): - - def run(self): - version_py_content = generate_version_py() - print(f"Generating version.py:\n{version_py_content}", file=sys.stderr) - subprocess.check_call(["cmake", "--version"]) - - target_dir = os.path.abspath(self.build_lib) - print(f"Building in target dir: {target_dir}", file=sys.stderr) - os.makedirs(target_dir, exist_ok=True) - cmake_build_dir = os.getenv("IREE_COMPILER_API_CMAKE_BUILD_DIR") - if not cmake_build_dir: - cmake_build_dir = os.path.join(target_dir, "..", "cmake_build") - os.makedirs(cmake_build_dir, exist_ok=True) - cmake_build_dir = os.path.abspath(cmake_build_dir) - print(f"CMake build dir: {cmake_build_dir}", file=sys.stderr) - cmake_install_dir = os.path.abspath( - os.path.join(target_dir, "..", "cmake_install")) - print(f"CMake install dir: {cmake_install_dir}", file=sys.stderr) - src_dir = os.path.abspath(os.path.dirname(__file__)) - cfg = "Release" - cmake_args = [ - "-GNinja", - "--log-level=VERBOSE", - "-DCMAKE_INSTALL_PREFIX={}".format(cmake_install_dir), - "-DPython3_EXECUTABLE={}".format(sys.executable), - "-DPython3_INCLUDE_DIRS={}".format(sysconfig.get_path("include")), - "-DIREE_VERSION_INFO={}".format(self.distribution.get_version()), - "-DCMAKE_BUILD_TYPE={}".format(cfg), - ] - - # Enable CUDA if specified. - cuda_target_option = os.getenv("IREE_TARGET_BACKEND_CUDA") - if cuda_target_option: - cmake_args.append(f"-DIREE_TARGET_BACKEND_CUDA={cuda_target_option}") - - build_args = [] - if os.path.exists(cmake_install_dir): - shutil.rmtree(cmake_install_dir) - cmake_cache_file = os.path.join(cmake_build_dir, "CMakeCache.txt") - if os.path.exists(cmake_cache_file): - os.remove(cmake_cache_file) - install_target = "install/strip" - if platform.system() == "Windows": - install_target = "install" - print(f"Configuring with: {cmake_args}", file=sys.stderr) - subprocess.check_call(["cmake", src_dir] + cmake_args, cwd=cmake_build_dir) - subprocess.check_call( - ["cmake", "--build", ".", "--target", install_target] + build_args, - cwd=cmake_build_dir) - print("Build complete.", file=sys.stderr) - if os.path.exists(target_dir): - shutil.rmtree(target_dir) - print("Copying install to target.", file=sys.stderr) - shutil.copytree(os.path.join(cmake_install_dir, "python_package"), - target_dir, - symlinks=False) - print("Target populated.", file=sys.stderr) - - # Write version.py. - version_py_file = os.path.join(target_dir, "iree", "compiler", "version.py") - os.makedirs(os.path.dirname(version_py_file), exist_ok=True) - with open(version_py_file, "wt") as f: - f.write(version_py_content) - - -class NoopBuildExtension(_build_ext): - - def __init__(self, *args, **kwargs): - assert False - - def build_extension(self, ext): - pass - - -def generate_version_py(): - return f"""# Auto-generated version info. -PACKAGE_SUFFIX = "{PACKAGE_SUFFIX}" -VERSION = "{PACKAGE_VERSION}" -REVISIONS = {json.dumps(find_git_versions())} -""" - - -def find_git_versions(): - revisions = {} - try: - revisions["IREE"] = subprocess.check_output( - ["git", "rev-parse", "HEAD"], cwd=IREESRC_DIR).decode("utf-8").strip() - except subprocess.SubprocessError as e: - print(f"ERROR: Could not get IREE revision: {e}", file=sys.stderr) - revisions["LLVM_PROJECT"] = find_git_submodule_revision( - "third_party/llvm-project") - revisions["TENSORFLOW"] = find_git_submodule_revision( - "third_party/tensorflow") - revisions["MLIR_HLO"] = find_git_submodule_revision("third_party/mlir-hlo") - return revisions - - -def find_git_submodule_revision(submodule_path): - try: - data = subprocess.check_output(["git", "ls-tree", "HEAD", submodule_path], - cwd=IREESRC_DIR).decode("utf-8").strip() - columns = re.split("\\s+", data) - return columns[2] - except Exception as e: - print( - f"ERROR: Could not get submodule revision for {submodule_path}" - f" ({e})", - file=sys.stderr) - return "" - - -setup( - name=f"iree-compiler{PACKAGE_SUFFIX}", - version=f"{PACKAGE_VERSION}", - author="IREE Authors", - author_email="iree-discuss@googlegroups.com", - description="IREE Compiler API", - long_description="", - license="Apache-2.0", - classifiers=[ - "Development Status :: 3 - Alpha", - "License :: OSI Approved :: Apache Software License", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - ], - ext_modules=[ - CMakeExtension("iree.compiler._mlir_libs._mlir"), - CMakeExtension("iree.compiler._mlir_libs._ireeDialects"), - CMakeExtension("iree.compiler._mlir_libs._ireecTransforms"), - CMakeExtension("iree.compiler._mlir_libs._mlirHlo"), - CMakeExtension("iree.compiler._mlir_libs._mlirLinalgPasses"), - ], - cmdclass={ - "build": CustomBuild, - "built_ext": NoopBuildExtension, - "build_py": CMakeBuildPy, - }, - zip_safe=False, - packages=find_namespace_packages(include=[ - "iree.compiler", - "iree.compiler.*", - ],), - entry_points={ - "console_scripts": [ - "iree-compile = iree.compiler.tools.scripts.ireec.__main__:main", - # TODO: We have renamed to iree-compile on 2022-03-18. Remove - # this alias once no longer needed. - "ireec = iree.compiler.tools.scripts.ireec.__main__:main", - ], - }, - install_requires=[ - "numpy", - "PyYAML", - ], -) diff --git a/llvm-external-projects/iree-compiler-api/unittests/CMakeLists.txt b/llvm-external-projects/iree-compiler-api/unittests/CMakeLists.txt deleted file mode 100644 index 31c231a8e0c2..000000000000 --- a/llvm-external-projects/iree-compiler-api/unittests/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ -function(iree_compiler_api_py_test) - cmake_parse_arguments( - ARG - "" - "NAME;MAIN" - "" - ${ARGN} - ) - set(TEST_NAME "iree-compiler-api-${ARG_NAME}") - add_test( - NAME - ${TEST_NAME} - WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" - COMMAND "${Python3_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/${ARG_MAIN}" - ) - set_tests_properties(${TEST_NAME} PROPERTIES - ENVIRONMENT PYTHONPATH=${IREE_COMPILER_API_BINARY_DIR}/python_package) -endfunction() - -add_subdirectory(CAPI) -add_subdirectory(tools) -add_subdirectory(transforms/ireec)