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