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