blob: 129fe7a559822a2d6c2398dbcdbb7376890d0588 [file] [log] [blame]
Geoffrey Martin-Noble552d3f82021-05-25 17:56:09 -07001# Copyright 2019 The IREE Authors
Ben Vanikcc2aff92019-09-24 10:23:55 -07002#
Geoffrey Martin-Noble552d3f82021-05-25 17:56:09 -07003# Licensed under the Apache License v2.0 with LLVM Exceptions.
4# See https://llvm.org/LICENSE.txt for license information.
5# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
Ben Vanikcc2aff92019-09-24 10:23:55 -07006
7include(CMakeParseArguments)
8
9# iree_tablegen_library()
10#
11# Runs iree-tablegen to produce some artifacts.
12function(iree_tablegen_library)
13 cmake_parse_arguments(
Ben Vanik6b112ef2019-10-03 10:45:14 -070014 _RULE
Ben Vanikcc2aff92019-09-24 10:23:55 -070015 "TESTONLY"
Marius Brehler80d9abe2019-12-11 08:44:38 -080016 "NAME;TBLGEN"
Marius Brehlerfa1dbd82020-01-28 14:45:50 -080017 "TD_FILE;OUTS"
Ben Vanikcc2aff92019-09-24 10:23:55 -070018 ${ARGN}
19 )
20
Lei Zhangd454ee42020-06-02 11:48:57 -070021 if(_RULE_TESTONLY AND NOT IREE_BUILD_TESTS)
22 return()
Ben Vanikcc2aff92019-09-24 10:23:55 -070023 endif()
Lei Zhangd454ee42020-06-02 11:48:57 -070024
25 # Prefix the library with the package name, so we get: iree_package_name
26 iree_package_name(_PACKAGE_NAME)
27 set(_NAME "${_PACKAGE_NAME}_${_RULE_NAME}")
28
29 if(${_RULE_TBLGEN} MATCHES "IREE")
30 set(_TBLGEN "IREE")
31 else()
32 set(_TBLGEN "MLIR")
33 endif()
34
35 set(LLVM_TARGET_DEFINITIONS ${_RULE_TD_FILE})
Ben Vanik6bc6f902020-11-16 05:37:08 -080036 set(_INCLUDE_DIRS
37 "${MLIR_INCLUDE_DIRS}"
Stella Laurenzo41a2ceb2022-04-29 12:49:36 -070038 "${IREE_SOURCE_DIR}/compiler/src"
39 "${IREE_BINARY_DIR}/compiler/src"
Ben Vanik6bc6f902020-11-16 05:37:08 -080040 )
Stella Laurenzobe0f1e12023-04-03 13:34:38 -070041 if(DEFINED IREE_COMPILER_TABLEGEN_INCLUDE_DIRS)
42 list(APPEND _INCLUDE_DIRS ${IREE_COMPILER_TABLEGEN_INCLUDE_DIRS})
43 endif()
Lei Zhangd454ee42020-06-02 11:48:57 -070044 list(APPEND _INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR})
45 list(TRANSFORM _INCLUDE_DIRS PREPEND "-I")
46 set(_OUTPUTS)
47 while(_RULE_OUTS)
Ben Vanik7bc983c2022-07-14 09:39:19 -070048 # Eat any number of flags (--a --b ...) and a single file.
49 # Flags only impact the successively declared file.
50 set(_COMMAND)
51 set(_FILE)
52 while(_RULE_OUTS AND NOT _FILE)
53 list(GET _RULE_OUTS 0 _PART)
54 list(REMOVE_AT _RULE_OUTS 0)
55 if(${_PART} MATCHES "^-.*")
56 # Flag (- or --).
57 list(APPEND _COMMAND ${_PART})
58 else()
59 # File path.
60 set(_FILE ${_PART})
61 endif()
62 endwhile()
Lei Zhangd454ee42020-06-02 11:48:57 -070063 tablegen(${_TBLGEN} ${_FILE} ${_COMMAND} ${_INCLUDE_DIRS})
64 list(APPEND _OUTPUTS ${CMAKE_CURRENT_BINARY_DIR}/${_FILE})
65 endwhile()
66 add_custom_target(${_NAME}_target DEPENDS ${_OUTPUTS})
67 set_target_properties(${_NAME}_target PROPERTIES FOLDER "Tablegenning")
68
69 add_library(${_NAME} INTERFACE)
70 add_dependencies(${_NAME} ${_NAME}_target)
71
72 # Alias the iree_package_name library to iree::package::name.
73 iree_package_ns(_PACKAGE_NS)
74 add_library(${_PACKAGE_NS}::${_RULE_NAME} ALIAS ${_NAME})
Ben Vanikcc2aff92019-09-24 10:23:55 -070075endfunction()