blob: 62993c075b7fb6b9735d4ca6d0cc5a892710bdba [file] [log] [blame]
# 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
if(NOT IREE_HAL_DRIVER_LOCAL_SYNC OR
NOT IREE_HAL_EXECUTABLE_LOADER_EMBEDDED_ELF)
return()
endif()
# This only builds for x86-64 and arm64. We could extend this to build
# for the current cmake target architecture but would also need to modify the
# MLIR file to have the new target configuration.
iree_compiler_targeting_iree_arch(_BUILD_COMPILER_TARGETING_X86_64 "x86_64")
iree_compiler_targeting_iree_arch(_BUILD_COMPILER_TARGETING_ARM_64 "arm_64")
# First check compiler support
if(NOT _BUILD_COMPILER_TARGETING_X86_64 OR NOT _BUILD_COMPILER_TARGETING_ARM_64)
message(STATUS "IREE custom_dispatch/cpu/embedded ignored - some required LLVM targets are not built.")
return()
endif()
# Check if the host architecture matches what we are building code for.
if(NOT IREE_ARCH STREQUAL "x86_64" AND NOT IREE_ARCH STREQUAL "arm_64")
message(STATUS "IREE custom_dispatch/cpu/embedded ignored - host architecture unsupported.")
return()
endif()
function(embedded_function_object _ARCH)
set(_NAME iree_samples_custom_dispatch_cpu_embedded_object_${_ARCH})
iree_arch_to_llvm_arch(_LLVM_ARCH ${_ARCH})
add_custom_command(
OUTPUT
functions_${_ARCH}.o
DEPENDS
functions.c
${IREE_CLANG_TARGET}
COMMAND ${IREE_CLANG_BINARY}
-target ${_LLVM_ARCH}-unknown-unknown-eabi-elf
-isystem ${IREE_CLANG_BUILTIN_HEADERS_PATH}
-std=c17
-ffreestanding
-fvisibility=hidden
-fno-plt
-fno-rtti
-fno-exceptions
-fdata-sections
-ffunction-sections
-funique-section-names
-c ${CMAKE_CURRENT_SOURCE_DIR}/functions.c
-o ${CMAKE_CURRENT_BINARY_DIR}/functions_${_ARCH}.o
VERBATIM
)
add_custom_target(${_NAME} DEPENDS
${CMAKE_CURRENT_BINARY_DIR}/functions_${_ARCH}.o
)
add_dependencies(iree-sample-deps "${_NAME}")
endfunction()
# Build the functions_*.o files for each architecture we target.
embedded_function_object(arm_64)
embedded_function_object(x86_64)
iree_lit_test_suite(
NAME
examples
SRCS
"example_hal.mlir"
"example_stream.mlir"
DATA
functions_arm_64.o
functions_x86_64.o
TOOLS
FileCheck
iree-compile
iree-run-module
LABELS
"driver=local-sync"
"hostonly"
)