blob: 3c9a4a28fb42dfd8030bc736c880d4afbae3417a [file] [log] [blame]
# Copyright 2021 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_TARGET_BACKEND_DYLIB-LLVM-AOT}
OR NOT ${IREE_HAL_DRIVER_DYLIB}
OR NOT ${IREE_BUILD_COMPILER})
return()
endif()
# Set iree-translate binary.
set(_TRANSLATE_TOOL_EXECUTABLE $<TARGET_FILE:iree_tools_iree-translate>)
# Setup args for iree-translate.
set(_TRANSLATE_ARGS)
list(APPEND _TRANSLATE_ARGS "-iree-mlir-to-vm-bytecode-module")
list(APPEND _TRANSLATE_ARGS "-iree-hal-target-backends=dylib-llvm-aot")
list(APPEND _TRANSLATE_ARGS "-iree-llvm-link-embedded=false")
list(APPEND _TRANSLATE_ARGS "-iree-llvm-link-static")
list(APPEND _TRANSLATE_ARGS "-iree-llvm-static-library-output-path=simple_mul.o")
list(APPEND _TRANSLATE_ARGS "${CMAKE_CURRENT_SOURCE_DIR}/simple_mul.mlir")
list(APPEND _TRANSLATE_ARGS "-o")
list(APPEND _TRANSLATE_ARGS "simple_mul.vmfb")
# Custom command for iree-translate to generate static library and bytecode.
add_custom_command(
OUTPUT
${CMAKE_CURRENT_BINARY_DIR}/simple_mul.h
${CMAKE_CURRENT_BINARY_DIR}/simple_mul.o
${CMAKE_CURRENT_BINARY_DIR}/simple_mul.vmfb
COMMAND ${_TRANSLATE_TOOL_EXECUTABLE} ${_TRANSLATE_ARGS}
DEPENDS ${_TRANSLATE_TOOL_EXECUTABLE} "simple_mul.mlir"
)
# Tell cmake about the simple_mul library so it will link it.
add_library(simple_mul
STATIC
${CMAKE_CURRENT_BINARY_DIR}/simple_mul.o)
SET_TARGET_PROPERTIES(
simple_mul
PROPERTIES
LINKER_LANGUAGE C)
# Note: If you're cross compiling the simple_mul for a different backend, you'll
# need to run iree-translate manually to produce the desired '.vmfb' and '.h/.o'
# files. Substitute the 'simple_mul' dependency in iree_cc_binary() below with
# your own static library and the `simple_mul.vmfb` in the iree_c_embed_data()
# rule. You can use paths to files, i.e. 'path/to/generated/output.vmfb' in
# place of CMake targets.
# Generate the embed data with the bytecode module
iree_c_embed_data(
NAME
simple_mul_c
IDENTIFIER
iree_samples_static_library_simple_mul
GENERATED_SRCS
simple_mul.vmfb
C_FILE_OUTPUT
simple_mul_c.c
H_FILE_OUTPUT
simple_mul_c.h
FLATTEN
PUBLIC
)
iree_cc_binary(
NAME
static_library_demo
SRCS
"static_library_demo.c"
DEPS
::simple_mul_c
iree::runtime
iree::hal::local::loaders::static_library_loader
iree::hal::local::task_driver
iree::task::api
simple_mul
)
iree_lit_test(
NAME
static_library_demo_test
TEST_FILE
"static_library_demo_test.txt"
DATA
::static_library_demo
iree::tools::IreeFileCheck
LABELS
"hostonly"
)