Initial build boilerplate for experimental remoting directory. (#4313) * Changes the existing IREE_BUILD_EXPERIMENTAL option to IREE_BUILD_EXPERIMENTAL_MODEL_BUILDER. * Adds an IREE_BUILD_EXPERIMENTAL_REMOTING option. * Adds a liburing dependency (only enabled for now if IREE_BUILD_EXPERIMENTAL_REMOTING).
diff --git a/.gitmodules b/.gitmodules index c6ec233..f5306b8 100644 --- a/.gitmodules +++ b/.gitmodules
@@ -50,3 +50,6 @@ [submodule "third_party/llvm-bazel"] path = third_party/llvm-bazel url = https://github.com/google/llvm-bazel.git +[submodule "third_party/liburing"] + path = third_party/liburing + url = https://github.com/axboe/liburing.git
diff --git a/CMakeLists.txt b/CMakeLists.txt index 4915a0f..4fa0e1d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt
@@ -44,7 +44,6 @@ option(IREE_BUILD_SAMPLES "Builds IREE sample projects." ON) option(IREE_BUILD_DEBUGGER "Builds the IREE debugger app." OFF) option(IREE_BUILD_JAVA_BINDINGS "Builds the IREE java bindings." OFF) -option(IREE_BUILD_EXPERIMENTAL "Builds experimental projects." OFF) option(IREE_BUILD_TENSORFLOW_COMPILER "Builds TensorFlow compiler frontend." OFF) option(IREE_BUILD_TFLITE_COMPILER "Builds the TFLite compiler frontend." OFF) option(IREE_BUILD_XLA_COMPILER "Builds TensorFlow XLA compiler frontend." OFF) @@ -76,7 +75,18 @@ # https://github.com/google/iree/tree/main/build_tools/cmake/iree_cross_compile.cmake:iree_cross_compile_invoke # ) -if(${IREE_BUILD_SAMPLES} OR ${IREE_BUILD_EXPERIMENTAL}) +#------------------------------------------------------------------------------- +# Experimental project flags +#------------------------------------------------------------------------------- + +option(IREE_BUILD_EXPERIMENTAL_MODEL_BUILDER "Builds experimental Model-Builder sub-project." OFF) +option(IREE_BUILD_EXPERIMENTAL_REMOTING "Builds experimental remoting support." OFF) + +#------------------------------------------------------------------------------- +# Derived flags based on primary options +#------------------------------------------------------------------------------- + +if(${IREE_BUILD_SAMPLES} OR ${IREE_BUILD_EXPERIMENTAL_MODEL_BUILDER}) set(IREE_BUILD_COMPILER ON CACHE BOOL "Build the IREE compiler for sample projects." FORCE) endif() @@ -327,7 +337,7 @@ set(_CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}") # experimental model builder uses vulkan runner. - if(${IREE_BUILD_EXPERIMENTAL}) + if(${IREE_BUILD_EXPERIMENTAL_MODEL_BUILDER}) set(MLIR_VULKAN_RUNNER_ENABLED ON) endif() @@ -527,8 +537,19 @@ add_subdirectory(iree/samples) endif() -if(${IREE_BUILD_EXPERIMENTAL}) - add_subdirectory(experimental) +if(${IREE_BUILD_EXPERIMENTAL_MODEL_BUILDER}) + add_subdirectory(experimental/ModelBuilder) +endif() + +if(${IREE_BUILD_EXPERIMENTAL_REMOTING}) + # NOTE: Currently liburing is only used by the experimental remoting + # support, so keeping it scoped here. If this broadens, then include along + # with other dependencies as normal. + if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") + message(STATUS "Enabling liburing") + add_subdirectory(build_tools/third_party/liburing EXCLUDE_FROM_ALL) + endif() + add_subdirectory(experimental/remoting) endif() if(${IREE_ENABLE_TENSORFLOW})
diff --git a/SUBMODULE_VERSIONS b/SUBMODULE_VERSIONS index ff02ec4..4aa47ae 100644 --- a/SUBMODULE_VERSIONS +++ b/SUBMODULE_VERSIONS
@@ -3,6 +3,7 @@ 63b254577ed77a8004a9be6ac707f3dccc4e1fd9 third_party/cpuinfo 4fb0ff7069bd88ee85902f4d0bb62794e5f6d021 third_party/flatcc b1fbd33c06cdb0024c67733c6fdec2009d17b384 third_party/googletest +88b845dee001723c4a0db1fe5477de735b6d3bb0 third_party/liburing fdf47794a75e7d2bb9e54c80de22b9261ef2179e third_party/llvm-bazel 1b97cdf885d6455841280b8da858835e641ee941 third_party/llvm-project a438d3b2e9e2e4699b94787b7fb6e8b45d4e92c6 third_party/mlir-emitc
diff --git a/build_tools/cmake/iree_cross_compile.cmake b/build_tools/cmake/iree_cross_compile.cmake index 581f3d2..446649d 100644 --- a/build_tools/cmake/iree_cross_compile.cmake +++ b/build_tools/cmake/iree_cross_compile.cmake
@@ -86,7 +86,6 @@ iree_to_bool(_CONFIG_BUILD_DEBUGGER "${IREE_${CONFIG_NAME}_BUILD_DEBUGGER}") iree_to_bool(_CONFIG_BUILD_PYTHON_BINDINGS "${IREE_${CONFIG_NAME}_BUILD_PYTHON_BINDINGS}") iree_to_bool(_CONFIG_BUILD_JAVA_BINDINGS "${IREE_${CONFIG_NAME}_BUILD_JAVA_BINDINGS}") - iree_to_bool(_CONFIG_BUILD_EXPERIMENTAL "${IREE_${CONFIG_NAME}_BUILD_EXPERIMENTAL}") iree_to_bool(_CONFIG_BUILD_TENSORFLOW_COMPILER "${IREE_${CONFIG_NAME}_BUILD_TENSORFLOW_COMPILER}") # Escape semicolons in the targets list so that CMake doesn't expand them to
diff --git a/build_tools/third_party/liburing/.clang-format b/build_tools/third_party/liburing/.clang-format new file mode 100644 index 0000000..7968b43 --- /dev/null +++ b/build_tools/third_party/liburing/.clang-format
@@ -0,0 +1,3 @@ +DisableFormat: true +SortIncludes: false +
diff --git a/build_tools/third_party/liburing/CMakeLists.txt b/build_tools/third_party/liburing/CMakeLists.txt new file mode 100644 index 0000000..da4f232 --- /dev/null +++ b/build_tools/third_party/liburing/CMakeLists.txt
@@ -0,0 +1,37 @@ +# Copyright 2020 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set(LIBURING_ROOT "${IREE_ROOT_DIR}/third_party/liburing/src/") + +external_cc_library( + PACKAGE + liburing + NAME + liburing + ROOT + ${LIBURING_ROOT} + INCLUDES + ${LIBURING_ROOT}/include + ${CMAKE_CURRENT_SOURCE_DIR}/default_config/src/include + SRCS + "queue.c" + "register.c" + "setup.c" + "syscall.c" + "syscall.h" + HDRS + "include/liburing.h" + "include/liburing/barrier.h" + "include/liburing/io_uring.h" +)
diff --git a/build_tools/third_party/liburing/default_config/config-host.h b/build_tools/third_party/liburing/default_config/config-host.h new file mode 100644 index 0000000..21af714 --- /dev/null +++ b/build_tools/third_party/liburing/default_config/config-host.h
@@ -0,0 +1,9 @@ +/* + * Automatically generated by configure - do not modify + * Configured with: * '/home/stella/src/iree/build_tools/third_party/liburing/../../../third_party/liburing/configure' + */ +#define CONFIG_HAVE_KERNEL_RWF_T +#define CONFIG_HAVE_KERNEL_TIMESPEC +#define CONFIG_HAVE_STATX +#define CONFIG_HAVE_CXX +#define CONFIG_HAVE_UCONTEXT
diff --git a/build_tools/third_party/liburing/default_config/config-host.mak b/build_tools/third_party/liburing/default_config/config-host.mak new file mode 100644 index 0000000..a024aee --- /dev/null +++ b/build_tools/third_party/liburing/default_config/config-host.mak
@@ -0,0 +1,16 @@ +# Automatically generated by configure - do not modify +# Configured with: '/home/stella/src/iree/build_tools/third_party/liburing/../../../third_party/liburing/configure' +prefix=/usr +includedir=/usr/include +libdir=/usr/lib +libdevdir=/usr/lib +relativelibdir= +mandir=/usr/man +datadir=/usr/share +CONFIG_HAVE_KERNEL_RWF_T=y +CONFIG_HAVE_KERNEL_TIMESPEC=y +CONFIG_HAVE_STATX=y +CONFIG_HAVE_CXX=y +CONFIG_HAVE_UCONTEXT=y +CC=clang-10 +CXX=clang++-10
diff --git a/build_tools/third_party/liburing/default_config/src/include/liburing/compat.h b/build_tools/third_party/liburing/default_config/src/include/liburing/compat.h new file mode 100644 index 0000000..2e46c5f --- /dev/null +++ b/build_tools/third_party/liburing/default_config/src/include/liburing/compat.h
@@ -0,0 +1,15 @@ +/* SPDX-License-Identifier: MIT */ +#ifndef LIBURING_COMPAT_H +#define LIBURING_COMPAT_H + +#include <linux/time_types.h> + +#include <inttypes.h> + +struct open_how { + uint64_t flags; + uint64_t mode; + uint64_t resolve; +}; + +#endif
diff --git a/build_tools/third_party/liburing/update_config.sh b/build_tools/third_party/liburing/update_config.sh new file mode 100755 index 0000000..666b0fd --- /dev/null +++ b/build_tools/third_party/liburing/update_config.sh
@@ -0,0 +1,40 @@ +#!/bin/bash + +# Copyright 2020 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Runs the liburing configure script to update compat headers here. +# At the time of this writing, this facility is very simple and ok to just +# snapshot (which will need to be done for cross-compilation anyway). If this +# ever changes, something more exotic than a manual update will need to be +# done. + +this_dir="$(cd $(dirname $0) && pwd)" +liburing_dir="$this_dir/../../../third_party/liburing" + +if ! [ -d "$liburing_dir" ]; then + echo "ERROR: Could not find directory $liburing_dir" + exit 1 +fi + +# The configure script outputs files into the current directory and a +# src/include/liburing directory, matching the source tree. +config_dir="$this_dir/default_config" +mkdir -p "$config_dir/src/include/liburing" +cd "$config_dir" + +if ! bash "$liburing_dir/configure"; then + echo "ERROR: Could not configure" + exit 2 +fi
diff --git a/experimental/CMakeLists.txt b/experimental/CMakeLists.txt deleted file mode 100644 index 92557d4..0000000 --- a/experimental/CMakeLists.txt +++ /dev/null
@@ -1,19 +0,0 @@ -# Copyright 2020 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# NOTE: not all projects require a cmake build. If you are adding a directory -# that is only expected to build with bazel (such as something depending on -# TensorFlow) you can ignore cmake. -# -iree_add_all_subdirs()
diff --git a/experimental/BUILD b/experimental/remoting/CMakeLists.txt similarity index 80% rename from experimental/BUILD rename to experimental/remoting/CMakeLists.txt index 0e6ae3d..0ca47f8 100644 --- a/experimental/BUILD +++ b/experimental/remoting/CMakeLists.txt
@@ -11,9 +11,3 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. - -package( - default_visibility = ["//visibility:public"], - features = ["layering_check"], - licenses = ["notice"], # Apache 2.0 -)
diff --git a/experimental/remoting/README.md b/experimental/remoting/README.md new file mode 100644 index 0000000..cee8ec3 --- /dev/null +++ b/experimental/remoting/README.md
@@ -0,0 +1,5 @@ +# Experimental support for IREE remoting + +Building a remoting layer for IREE is a relatively large project. This +directory contains prototype-quality code that is intended to graduate into +such an effort once the approach stabilizes.
diff --git a/third_party/liburing b/third_party/liburing new file mode 160000 index 0000000..88b845d --- /dev/null +++ b/third_party/liburing
@@ -0,0 +1 @@ +Subproject commit 88b845dee001723c4a0db1fe5477de735b6d3bb0