| # Copyright 2023 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(CMakeParseArguments) |
| |
| # iree_import_binary() |
| # |
| # CMake function to import an executable/binary file into a CMake target. |
| # This imports from the directory specified by IREE_HOST_BIN_DIR, and |
| # that variable _must_ be set for calls to the function to be valid. |
| # |
| # Parameters: |
| # NAME: name of target/binary (see Usage below) |
| # OPTIONAL: Don't fail if not found (but will issue a warning) |
| # |
| # Usage: |
| # if(BUILD_AWESOME_TOOL) |
| # iree_cc_binary( |
| # NAME awesome-tool |
| # SRCS "awesome-tool-main.cc" |
| # ) |
| # elseif(IREE_HOST_BIN_DIR) |
| # # Import '${IREE_HOST_BIN_DIR}/awesome-tool[.exe]' into the |
| # # CMake target 'awesome-tool'. |
| # iree_import_binary(NAME awesome-tool) |
| # else() |
| # message(STATUS "Not building or importing awesome-tool") |
| # endif() |
| function(iree_import_binary) |
| cmake_parse_arguments( |
| _RULE |
| "OPTIONAL" |
| "NAME" |
| "" |
| ${ARGN} |
| ) |
| |
| # TODO(scotttodd): optional 'TARGET' argument (that defaults to NAME) |
| # TODO(scotttodd): SHARED_LIBRARY_DEPS argument? |
| |
| if(NOT IREE_HOST_BIN_DIR) |
| message(FATAL_ERROR "IREE_HOST_BIN_DIR must be set to use iree_import_binary") |
| endif() |
| |
| # We can't use CMAKE_EXECUTABLE_SUFFIX for host tools when cross-compiling for |
| # platforms like Emscripten that set the suffix (e.g. to .js). |
| # https://gitlab.kitware.com/cmake/cmake/-/issues/17553 |
| set(_HOST_EXECUTABLE_SUFFIX "") |
| if(CMAKE_HOST_WIN32) |
| set(_HOST_EXECUTABLE_SUFFIX ".exe") |
| endif() |
| |
| set(_FULL_BINARY_NAME "${_RULE_NAME}${_HOST_EXECUTABLE_SUFFIX}") |
| set(_BINARY_PATH "${IREE_HOST_BIN_DIR}/${_FULL_BINARY_NAME}") |
| file(REAL_PATH "${_BINARY_PATH}" _BINARY_PATH |
| BASE_DIRECTORY ${IREE_ROOT_DIR} EXPAND_TILDE) |
| |
| if(NOT EXISTS ${_BINARY_PATH}) |
| if(_RULE_OPTIONAL) |
| message(WARNING "Could not find optional '${_FULL_BINARY_NAME}' under " |
| "'${IREE_HOST_BIN_DIR}'. Features that depend on it may fail to " |
| "build.") |
| else() |
| message(FATAL_ERROR "Could not find '${_FULL_BINARY_NAME}' under " |
| "'${IREE_HOST_BIN_DIR}'\n(Expanded to '${_BINARY_PATH}').\n" |
| "Ensure that IREE_HOST_BIN_DIR points to a complete binary directory.") |
| endif() |
| endif() |
| |
| add_executable(${_RULE_NAME} IMPORTED GLOBAL) |
| set_property(TARGET "${_RULE_NAME}" PROPERTY IMPORTED_LOCATION "${_BINARY_PATH}") |
| endfunction() |