blob: 49c514a7de1f9bf19436cc0d85efc3d8b56adf5e [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_LLVM_CPU OR
NOT IREE_HAL_DRIVER_LOCAL_SYNC OR
NOT IREE_BUILD_COMPILER)
return()
endif()
## Example with VM bytecode module.
# Setup args for iree-compile.
set(_COMPILE_ARGS)
list(APPEND _COMPILE_ARGS "--iree-hal-target-backends=llvm-cpu")
list(APPEND _COMPILE_ARGS "--iree-llvmcpu-target-cpu=generic")
list(APPEND _COMPILE_ARGS "--iree-llvmcpu-link-embedded=false")
list(APPEND _COMPILE_ARGS "--iree-llvmcpu-link-static")
list(APPEND _COMPILE_ARGS "--iree-llvmcpu-static-library-output-path=simple_mul.o")
list(APPEND _COMPILE_ARGS "--iree-vm-target-index-bits=32")
list(APPEND _COMPILE_ARGS "${CMAKE_CURRENT_SOURCE_DIR}/simple_mul.mlir")
list(APPEND _COMPILE_ARGS "-o")
list(APPEND _COMPILE_ARGS "simple_mul.vmfb")
# Custom command for iree-compile 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 iree-compile ${_COMPILE_ARGS}
DEPENDS iree-compile "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-compile 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
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
"create_bytecode_module.c"
"static_library_demo.c"
DEPS
::simple_mul_c
iree::runtime
iree::hal::drivers::local_sync::sync_driver
iree::hal::local::loaders::static_library_loader
simple_mul
)
iree_lit_test(
NAME
static_library_demo_test
TEST_FILE
"static_library_demo_test.txt"
TOOLS
::static_library_demo
FileCheck
LABELS
"hostonly"
)
if(NOT (IREE_OUTPUT_FORMAT_C OR IREE_HOST_BIN_DIR))
return()
endif()
## Example with VM C module.
# Setup args for iree-compile.
set(_COMPILE_ARGS)
list(APPEND _COMPILE_ARGS "--output-format=vm-c")
list(APPEND _COMPILE_ARGS "--iree-hal-target-backends=llvm-cpu")
list(APPEND _COMPILE_ARGS "--iree-llvmcpu-target-cpu=generic")
list(APPEND _COMPILE_ARGS "--iree-llvmcpu-link-embedded=false")
list(APPEND _COMPILE_ARGS "--iree-llvmcpu-link-static")
list(APPEND _COMPILE_ARGS "--iree-llvmcpu-static-library-output-path=simple_mul_c_module.o")
list(APPEND _COMPILE_ARGS "--iree-vm-target-index-bits=32")
list(APPEND _COMPILE_ARGS "${CMAKE_CURRENT_SOURCE_DIR}/simple_mul.mlir")
list(APPEND _COMPILE_ARGS "-o")
list(APPEND _COMPILE_ARGS "simple_mul_emitc.h")
# Custom command for iree-compile to generate static library and C module.
add_custom_command(
OUTPUT
${CMAKE_CURRENT_BINARY_DIR}/simple_mul_c_module.h
${CMAKE_CURRENT_BINARY_DIR}/simple_mul_c_module.o
${CMAKE_CURRENT_BINARY_DIR}/simple_mul_emitc.h
COMMAND iree-compile ${_COMPILE_ARGS}
DEPENDS iree-compile "simple_mul.mlir"
)
# TODO(marbre): Cleanup custom targets and libraries.
add_custom_target(
simple_mul_gen
DEPENDS
"simple_mul_emitc.h"
)
add_library(simple_mul_c_module
STATIC
${CMAKE_CURRENT_BINARY_DIR}/simple_mul_c_module.o
)
add_dependencies(simple_mul_c_module simple_mul_gen)
SET_TARGET_PROPERTIES(
simple_mul_c_module
PROPERTIES
LINKER_LANGUAGE C
)
# TODO(marbre): Cleanup SRCS and DEPS.
iree_cc_library(
NAME
simple_mul_emitc
HDRS
"simple_mul_emitc.h"
DEFINES
"EMITC_IMPLEMENTATION"
)
iree_cc_binary(
NAME
static_library_demo_c
SRCS
"create_c_module.c"
"static_library_demo.c"
DEPS
::simple_mul_emitc
iree::runtime
iree::hal::drivers::local_sync::sync_driver
iree::hal::local::loaders::static_library_loader
iree::vm::shims_emitc
simple_mul_c_module
)
iree_lit_test(
NAME
static_library_demo_c_test
TEST_FILE
"static_library_demo_c_test.txt"
TOOLS
::static_library_demo_c
FileCheck
LABELS
"hostonly"
)