# 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()