annotate mlir/cmake/modules/AddMLIR.cmake @ 266:00f31e85ec16 default tip

Added tag current for changeset 31d058e83c98
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 14 Oct 2023 10:13:55 +0900
parents 1f2b6ac9f198
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
1 include(GNUInstallDirs)
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
2 include(LLVMDistributionSupport)
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
3
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
4 # Clear out any pre-existing compile_commands file before processing. This
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
5 # allows for generating a clean compile_commands on each configure.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
6 file(REMOVE ${CMAKE_BINARY_DIR}/tablegen_compile_commands.yml)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
7
150
anatofuz
parents:
diff changeset
8 function(mlir_tablegen ofn)
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
9 tablegen(MLIR ${ARGV})
150
anatofuz
parents:
diff changeset
10 set(TABLEGEN_OUTPUT ${TABLEGEN_OUTPUT} ${CMAKE_CURRENT_BINARY_DIR}/${ofn}
anatofuz
parents:
diff changeset
11 PARENT_SCOPE)
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
12
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
13 # Get the current set of include paths for this td file.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
14 cmake_parse_arguments(ARG "" "" "DEPENDS;EXTRA_INCLUDES" ${ARGN})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
15 get_directory_property(tblgen_includes INCLUDE_DIRECTORIES)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
16 list(APPEND tblgen_includes ${ARG_EXTRA_INCLUDES})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
17 # Filter out any empty include items.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
18 list(REMOVE_ITEM tblgen_includes "")
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
19
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
20 # Build the absolute path for the current input file.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
21 if (IS_ABSOLUTE ${LLVM_TARGET_DEFINITIONS})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
22 set(LLVM_TARGET_DEFINITIONS_ABSOLUTE ${LLVM_TARGET_DEFINITIONS})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
23 else()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
24 set(LLVM_TARGET_DEFINITIONS_ABSOLUTE ${CMAKE_CURRENT_SOURCE_DIR}/${LLVM_TARGET_DEFINITIONS})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
25 endif()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
26
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
27 # Append the includes used for this file to the tablegen_compile_commands
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
28 # file.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
29 file(APPEND ${CMAKE_BINARY_DIR}/tablegen_compile_commands.yml
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
30 "--- !FileInfo:\n"
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
31 " filepath: \"${LLVM_TARGET_DEFINITIONS_ABSOLUTE}\"\n"
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
32 " includes: \"${CMAKE_CURRENT_SOURCE_DIR};${tblgen_includes}\"\n"
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
33 )
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
34 endfunction()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
35
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
36 # Clear out any pre-existing compile_commands file before processing. This
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
37 # allows for generating a clean compile_commands on each configure.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
38 file(REMOVE ${CMAKE_BINARY_DIR}/pdll_compile_commands.yml)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
39
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
40 # Declare a helper function/copy of tablegen rule for using tablegen without
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
41 # additional tblgen specific flags when invoking PDLL generator.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
42 function(_pdll_tablegen project ofn)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
43 cmake_parse_arguments(ARG "" "" "DEPENDS;EXTRA_INCLUDES" ${ARGN})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
44 # Validate calling context.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
45 if(NOT ${project}_TABLEGEN_EXE)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
46 message(FATAL_ERROR "${project}_TABLEGEN_EXE not set")
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
47 endif()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
48
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
49 # Use depfile instead of globbing arbitrary *.td(s) for Ninja.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
50 if(CMAKE_GENERATOR MATCHES "Ninja")
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
51 # Make output path relative to build.ninja, assuming located on
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
52 # ${CMAKE_BINARY_DIR}.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
53 # CMake emits build targets as relative paths but Ninja doesn't identify
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
54 # absolute path (in *.d) as relative path (in build.ninja)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
55 # Note that tblgen is executed on ${CMAKE_BINARY_DIR} as working directory.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
56 file(RELATIVE_PATH ofn_rel
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
57 ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/${ofn})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
58 set(additional_cmdline
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
59 -o ${ofn_rel}
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
60 -d ${ofn_rel}.d
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
61 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
62 DEPFILE ${CMAKE_CURRENT_BINARY_DIR}/${ofn}.d
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
63 )
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
64 set(local_tds)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
65 set(global_tds)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
66 else()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
67 file(GLOB local_tds "*.td")
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
68 file(GLOB_RECURSE global_tds "${LLVM_MAIN_INCLUDE_DIR}/llvm/*.td")
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
69 set(additional_cmdline
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
70 -o ${CMAKE_CURRENT_BINARY_DIR}/${ofn}
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
71 )
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
72 endif()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
73
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
74 if (IS_ABSOLUTE ${LLVM_TARGET_DEFINITIONS})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
75 set(LLVM_TARGET_DEFINITIONS_ABSOLUTE ${LLVM_TARGET_DEFINITIONS})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
76 else()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
77 set(LLVM_TARGET_DEFINITIONS_ABSOLUTE
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
78 ${CMAKE_CURRENT_SOURCE_DIR}/${LLVM_TARGET_DEFINITIONS})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
79 endif()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
80
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
81 if (CMAKE_GENERATOR MATCHES "Visual Studio")
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
82 # Visual Studio has problems with llvm-tblgen's native --write-if-changed
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
83 # behavior. Since it doesn't do restat optimizations anyway, just don't
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
84 # pass --write-if-changed there.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
85 set(tblgen_change_flag)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
86 else()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
87 set(tblgen_change_flag "--write-if-changed")
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
88 endif()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
89
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
90 # We need both _TABLEGEN_TARGET and _TABLEGEN_EXE in the DEPENDS list
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
91 # (both the target and the file) to have .inc files rebuilt on
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
92 # a tablegen change, as cmake does not propagate file-level dependencies
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
93 # of custom targets. See the following ticket for more information:
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
94 # https://cmake.org/Bug/view.php?id=15858
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
95 # The dependency on both, the target and the file, produces the same
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
96 # dependency twice in the result file when
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
97 # ("${${project}_TABLEGEN_TARGET}" STREQUAL "${${project}_TABLEGEN_EXE}")
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
98 # but lets us having smaller and cleaner code here.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
99 get_directory_property(tblgen_includes INCLUDE_DIRECTORIES)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
100 list(APPEND tblgen_includes ${ARG_EXTRA_INCLUDES})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
101 # Filter out empty items before prepending each entry with -I
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
102 list(REMOVE_ITEM tblgen_includes "")
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
103 list(TRANSFORM tblgen_includes PREPEND -I)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
104
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
105 set(tablegen_exe ${${project}_TABLEGEN_EXE})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
106 set(tablegen_depends ${${project}_TABLEGEN_TARGET} ${tablegen_exe})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
107
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
108 add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${ofn}
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
109 COMMAND ${tablegen_exe} ${ARG_UNPARSED_ARGUMENTS} -I ${CMAKE_CURRENT_SOURCE_DIR}
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
110 ${tblgen_includes}
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
111 ${LLVM_TABLEGEN_FLAGS}
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
112 ${LLVM_TARGET_DEFINITIONS_ABSOLUTE}
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
113 ${tblgen_change_flag}
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
114 ${additional_cmdline}
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
115 # The file in LLVM_TARGET_DEFINITIONS may be not in the current
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
116 # directory and local_tds may not contain it, so we must
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
117 # explicitly list it here:
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
118 DEPENDS ${ARG_DEPENDS} ${tablegen_depends}
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
119 ${local_tds} ${global_tds}
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
120 ${LLVM_TARGET_DEFINITIONS_ABSOLUTE}
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
121 ${LLVM_TARGET_DEPENDS}
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
122 COMMENT "Building ${ofn}..."
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
123 )
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
124
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
125 # `make clean' must remove all those generated files:
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
126 set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${ofn})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
127
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
128 set(TABLEGEN_OUTPUT ${TABLEGEN_OUTPUT} ${CMAKE_CURRENT_BINARY_DIR}/${ofn} PARENT_SCOPE)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
129 set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/${ofn} PROPERTIES
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
130 GENERATED 1)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
131 endfunction()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
132
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
133 # Declare a PDLL library in the current directory.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
134 function(add_mlir_pdll_library target inputFile ofn)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
135 set(LLVM_TARGET_DEFINITIONS ${inputFile})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
136
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
137 _pdll_tablegen(MLIR_PDLL ${ofn} -x=cpp ${ARGN})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
138 set(TABLEGEN_OUTPUT ${TABLEGEN_OUTPUT} ${CMAKE_CURRENT_BINARY_DIR}/${ofn}
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
139 PARENT_SCOPE)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
140
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
141 # Get the current set of include paths for this pdll file.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
142 cmake_parse_arguments(ARG "" "" "DEPENDS;EXTRA_INCLUDES" ${ARGN})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
143 get_directory_property(tblgen_includes INCLUDE_DIRECTORIES)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
144 list(APPEND tblgen_includes ${ARG_EXTRA_INCLUDES})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
145 # Filter out any empty include items.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
146 list(REMOVE_ITEM tblgen_includes "")
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
147
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
148 # Build the absolute path for the current input file.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
149 if (IS_ABSOLUTE ${LLVM_TARGET_DEFINITIONS})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
150 set(LLVM_TARGET_DEFINITIONS_ABSOLUTE ${inputFile})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
151 else()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
152 set(LLVM_TARGET_DEFINITIONS_ABSOLUTE ${CMAKE_CURRENT_SOURCE_DIR}/${inputFile})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
153 endif()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
154
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
155 # Append the includes used for this file to the pdll_compilation_commands
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
156 # file.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
157 file(APPEND ${CMAKE_BINARY_DIR}/pdll_compile_commands.yml
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
158 "--- !FileInfo:\n"
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
159 " filepath: \"${LLVM_TARGET_DEFINITIONS_ABSOLUTE}\"\n"
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
160 " includes: \"${CMAKE_CURRENT_SOURCE_DIR};${tblgen_includes}\"\n"
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
161 )
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
162
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
163 add_public_tablegen_target(${target})
150
anatofuz
parents:
diff changeset
164 endfunction()
anatofuz
parents:
diff changeset
165
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
166 # Declare a dialect in the include directory
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
167 function(add_mlir_dialect dialect dialect_namespace)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
168 set(LLVM_TARGET_DEFINITIONS ${dialect}.td)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
169 mlir_tablegen(${dialect}.h.inc -gen-op-decls)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
170 mlir_tablegen(${dialect}.cpp.inc -gen-op-defs)
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
171 mlir_tablegen(${dialect}Types.h.inc -gen-typedef-decls -typedefs-dialect=${dialect_namespace})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
172 mlir_tablegen(${dialect}Types.cpp.inc -gen-typedef-defs -typedefs-dialect=${dialect_namespace})
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
173 mlir_tablegen(${dialect}Dialect.h.inc -gen-dialect-decls -dialect=${dialect_namespace})
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
174 mlir_tablegen(${dialect}Dialect.cpp.inc -gen-dialect-defs -dialect=${dialect_namespace})
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
175 add_public_tablegen_target(MLIR${dialect}IncGen)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
176 add_dependencies(mlir-headers MLIR${dialect}IncGen)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
177 endfunction()
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
178
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
179 # Declare a dialect in the include directory
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
180 function(add_mlir_interface interface)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
181 set(LLVM_TARGET_DEFINITIONS ${interface}.td)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
182 mlir_tablegen(${interface}.h.inc -gen-op-interface-decls)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
183 mlir_tablegen(${interface}.cpp.inc -gen-op-interface-defs)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
184 add_public_tablegen_target(MLIR${interface}IncGen)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
185 add_dependencies(mlir-generic-headers MLIR${interface}IncGen)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
186 endfunction()
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
187
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
188
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
189 # Generate Documentation
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
190 function(add_mlir_doc doc_filename output_file output_directory command)
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
191 set(LLVM_TARGET_DEFINITIONS ${doc_filename}.td)
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
192 tablegen(MLIR ${output_file}.md ${command} ${ARGN})
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
193 set(GEN_DOC_FILE ${MLIR_BINARY_DIR}/docs/${output_directory}${output_file}.md)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
194 add_custom_command(
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
195 OUTPUT ${GEN_DOC_FILE}
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
196 COMMAND ${CMAKE_COMMAND} -E copy
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
197 ${CMAKE_CURRENT_BINARY_DIR}/${output_file}.md
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
198 ${GEN_DOC_FILE}
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
199 DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${output_file}.md)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
200 add_custom_target(${output_file}DocGen DEPENDS ${GEN_DOC_FILE})
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
201 add_dependencies(mlir-doc ${output_file}DocGen)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
202 endfunction()
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
203
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
204 # Sets ${srcs} to contain the list of additional headers for the target. Extra
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
205 # arguments are included into the list of additional headers.
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
206 function(_set_mlir_additional_headers_as_srcs)
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
207 set(srcs)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
208 if(MSVC_IDE OR XCODE)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
209 # Add public headers
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
210 file(RELATIVE_PATH lib_path
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
211 ${MLIR_SOURCE_DIR}/lib/
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
212 ${CMAKE_CURRENT_SOURCE_DIR}
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
213 )
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
214 if(NOT lib_path MATCHES "^[.][.]")
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
215 file( GLOB_RECURSE headers
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
216 ${MLIR_SOURCE_DIR}/include/mlir/${lib_path}/*.h
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
217 ${MLIR_SOURCE_DIR}/include/mlir/${lib_path}/*.def
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
218 )
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
219 set_source_files_properties(${headers} PROPERTIES HEADER_FILE_ONLY ON)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
220
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
221 file( GLOB_RECURSE tds
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
222 ${MLIR_SOURCE_DIR}/include/mlir/${lib_path}/*.td
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
223 )
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
224 source_group("TableGen descriptions" FILES ${tds})
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
225 set_source_files_properties(${tds}} PROPERTIES HEADER_FILE_ONLY ON)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
226
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
227 if(headers OR tds)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
228 set(srcs ${headers} ${tds})
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
229 endif()
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
230 endif()
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
231 endif(MSVC_IDE OR XCODE)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
232 if(srcs OR ARGN)
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
233 set(srcs
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
234 ADDITIONAL_HEADERS
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
235 ${srcs}
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
236 ${ARGN} # It may contain unparsed unknown args.
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
237 PARENT_SCOPE
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
238 )
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
239 endif()
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
240 endfunction()
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
241
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
242 # Checks that the LLVM components are not listed in the extra arguments,
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
243 # assumed to be coming from the LINK_LIBS variable.
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
244 function(_check_llvm_components_usage name)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
245 # LINK_COMPONENTS is necessary to allow libLLVM.so to be properly
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
246 # substituted for individual library dependencies if LLVM_LINK_LLVM_DYLIB
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
247 # Perhaps this should be in llvm_add_library instead? However, it fails
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
248 # on libclang-cpp.so
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
249 get_property(llvm_component_libs GLOBAL PROPERTY LLVM_COMPONENT_LIBS)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
250 foreach(lib ${ARGN})
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
251 if(${lib} IN_LIST llvm_component_libs)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
252 message(SEND_ERROR "${name} specifies LINK_LIBS ${lib}, but LINK_LIBS cannot be used for LLVM libraries. Please use LINK_COMPONENTS instead.")
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
253 endif()
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
254 endforeach()
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
255 endfunction()
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
256
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
257 function(add_mlir_example_library name)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
258 cmake_parse_arguments(ARG
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
259 "SHARED;DISABLE_INSTALL"
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
260 ""
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
261 "ADDITIONAL_HEADERS;DEPENDS;LINK_COMPONENTS;LINK_LIBS"
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
262 ${ARGN})
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
263 _set_mlir_additional_headers_as_srcs(${ARG_ADDITIONAL_HEADERS})
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
264 if (ARG_SHARED)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
265 set(LIBTYPE SHARED)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
266 else()
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
267 if(BUILD_SHARED_LIBS)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
268 set(LIBTYPE SHARED)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
269 else()
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
270 set(LIBTYPE STATIC)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
271 endif()
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
272 endif()
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
273
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
274 # MLIR libraries uniformly depend on LLVMSupport. Just specify it once here.
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
275 list(APPEND ARG_LINK_COMPONENTS Support)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
276 _check_llvm_components_usage(${name} ${ARG_LINK_LIBS})
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
277
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
278 list(APPEND ARG_DEPENDS mlir-generic-headers)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
279
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
280 llvm_add_library(${name} ${LIBTYPE} ${ARG_UNPARSED_ARGUMENTS} ${srcs} DEPENDS ${ARG_DEPENDS} LINK_COMPONENTS ${ARG_LINK_COMPONENTS} LINK_LIBS ${ARG_LINK_LIBS})
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
281 set_target_properties(${name} PROPERTIES FOLDER "Examples")
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
282 if (LLVM_BUILD_EXAMPLES AND NOT ${ARG_DISABLE_INSTALL})
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
283 add_mlir_library_install(${name})
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
284 else()
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
285 set_target_properties(${name} PROPERTIES EXCLUDE_FROM_ALL ON)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
286 endif()
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
287 endfunction()
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
288
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
289 # Declare an mlir library which can be compiled in libMLIR.so
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
290 # In addition to everything that llvm_add_library accepts, this
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
291 # also has the following option:
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
292 # EXCLUDE_FROM_LIBMLIR
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
293 # Don't include this library in libMLIR.so. This option should be used
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
294 # for test libraries, executable-specific libraries, or rarely used libraries
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
295 # with large dependencies.
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
296 # ENABLE_AGGREGATION
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
297 # Forces generation of an OBJECT library, exports additional metadata,
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
298 # and installs additional object files needed to include this as part of an
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
299 # aggregate shared library.
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
300 # TODO: Make this the default for all MLIR libraries once all libraries
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
301 # are compatible with building an object library.
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
302 function(add_mlir_library name)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
303 cmake_parse_arguments(ARG
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
304 "SHARED;INSTALL_WITH_TOOLCHAIN;EXCLUDE_FROM_LIBMLIR;DISABLE_INSTALL;ENABLE_AGGREGATION"
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
305 ""
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
306 "ADDITIONAL_HEADERS;DEPENDS;LINK_COMPONENTS;LINK_LIBS"
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
307 ${ARGN})
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
308 _set_mlir_additional_headers_as_srcs(${ARG_ADDITIONAL_HEADERS})
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
309
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
310 # Is an object library needed.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
311 set(NEEDS_OBJECT_LIB OFF)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
312 if(ARG_ENABLE_AGGREGATION)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
313 set(NEEDS_OBJECT_LIB ON)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
314 endif()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
315
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
316 # Determine type of library.
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
317 if(ARG_SHARED)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
318 set(LIBTYPE SHARED)
150
anatofuz
parents:
diff changeset
319 else()
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
320 # llvm_add_library ignores BUILD_SHARED_LIBS if STATIC is explicitly set,
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
321 # so we need to handle it here.
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
322 if(BUILD_SHARED_LIBS)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
323 set(LIBTYPE SHARED)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
324 else()
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
325 set(LIBTYPE STATIC)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
326 endif()
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
327 # Test libraries and such shouldn't be include in libMLIR.so
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
328 if(NOT ARG_EXCLUDE_FROM_LIBMLIR)
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
329 set(NEEDS_OBJECT_LIB ON)
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
330 set_property(GLOBAL APPEND PROPERTY MLIR_STATIC_LIBS ${name})
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
331 set_property(GLOBAL APPEND PROPERTY MLIR_LLVM_LINK_COMPONENTS ${ARG_LINK_COMPONENTS})
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
332 set_property(GLOBAL APPEND PROPERTY MLIR_LLVM_LINK_COMPONENTS ${LLVM_LINK_COMPONENTS})
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
333 endif()
150
anatofuz
parents:
diff changeset
334 endif()
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
335
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
336 if(NEEDS_OBJECT_LIB AND NOT XCODE)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
337 # The Xcode generator doesn't handle object libraries correctly.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
338 # We special case xcode when building aggregates.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
339 list(APPEND LIBTYPE OBJECT)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
340 endif()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
341
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
342 # MLIR libraries uniformly depend on LLVMSupport. Just specify it once here.
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
343 list(APPEND ARG_LINK_COMPONENTS Support)
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
344 _check_llvm_components_usage(${name} ${ARG_LINK_LIBS})
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
345
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
346 list(APPEND ARG_DEPENDS mlir-generic-headers)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
347 llvm_add_library(${name} ${LIBTYPE} ${ARG_UNPARSED_ARGUMENTS} ${srcs} DEPENDS ${ARG_DEPENDS} LINK_COMPONENTS ${ARG_LINK_COMPONENTS} LINK_LIBS ${ARG_LINK_LIBS})
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
348
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
349 if(TARGET ${name})
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
350 target_link_libraries(${name} INTERFACE ${LLVM_COMMON_LIBS})
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
351 if(NOT ARG_DISABLE_INSTALL)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
352 add_mlir_library_install(${name})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
353 endif()
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
354 else()
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
355 # Add empty "phony" target
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
356 add_custom_target(${name})
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
357 endif()
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
358 set_target_properties(${name} PROPERTIES FOLDER "MLIR libraries")
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
359
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
360 # Setup aggregate.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
361 if(ARG_ENABLE_AGGREGATION)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
362 # Compute and store the properties needed to build aggregates.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
363 set(AGGREGATE_OBJECTS)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
364 set(AGGREGATE_OBJECT_LIB)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
365 set(AGGREGATE_DEPS)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
366 if(XCODE)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
367 # XCode has limited support for object libraries. Instead, add dep flags
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
368 # that force the entire library to be embedded.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
369 list(APPEND AGGREGATE_DEPS "-force_load" "${name}")
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
370 else()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
371 list(APPEND AGGREGATE_OBJECTS "$<TARGET_OBJECTS:obj.${name}>")
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
372 list(APPEND AGGREGATE_OBJECT_LIB "obj.${name}")
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
373 endif()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
374
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
375 # For each declared dependency, transform it into a generator expression
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
376 # which excludes it if the ultimate link target is excluding the library.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
377 set(NEW_LINK_LIBRARIES)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
378 get_target_property(CURRENT_LINK_LIBRARIES ${name} LINK_LIBRARIES)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
379 get_mlir_filtered_link_libraries(NEW_LINK_LIBRARIES ${CURRENT_LINK_LIBRARIES})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
380 set_target_properties(${name} PROPERTIES LINK_LIBRARIES "${NEW_LINK_LIBRARIES}")
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
381 list(APPEND AGGREGATE_DEPS ${NEW_LINK_LIBRARIES})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
382 set_target_properties(${name} PROPERTIES
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
383 EXPORT_PROPERTIES "MLIR_AGGREGATE_OBJECT_LIB_IMPORTED;MLIR_AGGREGATE_DEP_LIBS_IMPORTED"
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
384 MLIR_AGGREGATE_OBJECTS "${AGGREGATE_OBJECTS}"
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
385 MLIR_AGGREGATE_DEPS "${AGGREGATE_DEPS}"
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
386 MLIR_AGGREGATE_OBJECT_LIB_IMPORTED "${AGGREGATE_OBJECT_LIB}"
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
387 MLIR_AGGREGATE_DEP_LIBS_IMPORTED "${CURRENT_LINK_LIBRARIES}"
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
388 )
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
389
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
390 # In order for out-of-tree projects to build aggregates of this library,
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
391 # we need to install the OBJECT library.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
392 if(MLIR_INSTALL_AGGREGATE_OBJECTS AND NOT ARG_DISABLE_INSTALL)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
393 add_mlir_library_install(obj.${name})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
394 endif()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
395 endif()
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
396 endfunction(add_mlir_library)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
397
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
398 macro(add_mlir_tool name)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
399 llvm_add_tool(MLIR ${ARGV})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
400 endmacro()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
401
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
402 # Sets a variable with a transformed list of link libraries such individual
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
403 # libraries will be dynamically excluded when evaluated on a final library
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
404 # which defines an MLIR_AGGREGATE_EXCLUDE_LIBS which contains any of the
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
405 # libraries. Each link library can be a generator expression but must not
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
406 # resolve to an arity > 1 (i.e. it can be optional).
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
407 function(get_mlir_filtered_link_libraries output)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
408 set(_results)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
409 foreach(linklib ${ARGN})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
410 # In English, what this expression does:
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
411 # For each link library, resolve the property MLIR_AGGREGATE_EXCLUDE_LIBS
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
412 # on the context target (i.e. the executable or shared library being linked)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
413 # and, if it is not in that list, emit the library name. Otherwise, empty.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
414 list(APPEND _results
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
415 "$<$<NOT:$<IN_LIST:${linklib},$<GENEX_EVAL:$<TARGET_PROPERTY:MLIR_AGGREGATE_EXCLUDE_LIBS>>>>:${linklib}>"
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
416 )
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
417 endforeach()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
418 set(${output} "${_results}" PARENT_SCOPE)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
419 endfunction(get_mlir_filtered_link_libraries)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
420
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
421 # Declares an aggregate library. Such a library is a combination of arbitrary
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
422 # regular add_mlir_library() libraries with the special feature that they can
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
423 # be configured to statically embed some subset of their dependencies, as is
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
424 # typical when creating a .so/.dylib/.dll or a mondo static library.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
425 #
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
426 # It is always safe to depend on the aggregate directly in order to compile/link
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
427 # against the superset of embedded entities and transitive deps.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
428 #
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
429 # Arguments:
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
430 # PUBLIC_LIBS: list of dependent libraries to add to the
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
431 # INTERFACE_LINK_LIBRARIES property, exporting them to users. This list
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
432 # will be transitively filtered to exclude any EMBED_LIBS.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
433 # EMBED_LIBS: list of dependent libraries that should be embedded directly
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
434 # into this library. Each of these must be an add_mlir_library() library
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
435 # without DISABLE_AGGREGATE.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
436 #
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
437 # Note: This is a work in progress and is presently only sufficient for certain
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
438 # non nested cases involving the C-API.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
439 function(add_mlir_aggregate name)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
440 cmake_parse_arguments(ARG
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
441 "SHARED;STATIC"
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
442 ""
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
443 "PUBLIC_LIBS;EMBED_LIBS"
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
444 ${ARGN})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
445 set(_libtype)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
446 if(ARG_STATIC)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
447 list(APPEND _libtype STATIC)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
448 endif()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
449 if(ARG_SHARED)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
450 list(APPEND _libtype SHARED)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
451 endif()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
452 set(_debugmsg)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
453
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
454 set(_embed_libs)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
455 set(_objects)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
456 set(_deps)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
457 foreach(lib ${ARG_EMBED_LIBS})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
458 # We have to handle imported vs in-tree differently:
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
459 # in-tree: To support arbitrary ordering, the generator expressions get
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
460 # set on the dependent target when it is constructed and then just
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
461 # eval'd here. This means we can build an aggregate from targets that
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
462 # may not yet be defined, which is typical for in-tree.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
463 # imported: Exported properties do not support generator expressions, so
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
464 # we imperatively query and manage the expansion here. This is fine
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
465 # because imported targets will always be found/configured first and
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
466 # do not need to support arbitrary ordering. If CMake every supports
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
467 # exporting generator expressions, then this can be simplified.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
468 set(_is_imported OFF)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
469 if(TARGET ${lib})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
470 get_target_property(_is_imported ${lib} IMPORTED)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
471 endif()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
472
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
473 if(NOT _is_imported)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
474 # Evaluate the in-tree generator expressions directly (this allows target
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
475 # order independence, since these aren't evaluated until the generate
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
476 # phase).
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
477 # What these expressions do:
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
478 # In the context of this aggregate, resolve the list of OBJECTS and DEPS
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
479 # that each library advertises and patch it into the whole.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
480 set(_local_objects $<TARGET_GENEX_EVAL:${name},$<TARGET_PROPERTY:${lib},MLIR_AGGREGATE_OBJECTS>>)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
481 set(_local_deps $<TARGET_GENEX_EVAL:${name},$<TARGET_PROPERTY:${lib},MLIR_AGGREGATE_DEPS>>)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
482 else()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
483 # It is an imported target, which can only have flat strings populated
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
484 # (no generator expressions).
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
485 # Rebuild the generator expressions from the imported flat string lists.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
486 if(NOT MLIR_INSTALL_AGGREGATE_OBJECTS)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
487 message(SEND_ERROR "Cannot build aggregate from imported targets which were not installed via MLIR_INSTALL_AGGREGATE_OBJECTS (for ${lib}).")
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
488 endif()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
489
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
490 get_property(_has_object_lib_prop TARGET ${lib} PROPERTY MLIR_AGGREGATE_OBJECT_LIB_IMPORTED SET)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
491 get_property(_has_dep_libs_prop TARGET ${lib} PROPERTY MLIR_AGGREGATE_DEP_LIBS_IMPORTED SET)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
492 if(NOT _has_object_lib_prop OR NOT _has_dep_libs_prop)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
493 message(SEND_ERROR "Cannot create an aggregate out of imported ${lib}: It is missing properties indicating that it was built for aggregation")
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
494 endif()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
495 get_target_property(_imp_local_object_lib ${lib} MLIR_AGGREGATE_OBJECT_LIB_IMPORTED)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
496 get_target_property(_imp_dep_libs ${lib} MLIR_AGGREGATE_DEP_LIBS_IMPORTED)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
497 set(_local_objects)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
498 if(_imp_local_object_lib)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
499 set(_local_objects "$<TARGET_OBJECTS:${_imp_local_object_lib}>")
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
500 endif()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
501 # We should just be able to do this:
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
502 # get_mlir_filtered_link_libraries(_local_deps ${_imp_dep_libs})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
503 # However, CMake complains about the unqualified use of the one-arg
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
504 # $<TARGET_PROPERTY> expression. So we do the same thing but use the
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
505 # two-arg form which takes an explicit target.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
506 foreach(_imp_dep_lib ${_imp_dep_libs})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
507 # In English, what this expression does:
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
508 # For each link library, resolve the property MLIR_AGGREGATE_EXCLUDE_LIBS
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
509 # on the context target (i.e. the executable or shared library being linked)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
510 # and, if it is not in that list, emit the library name. Otherwise, empty.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
511 list(APPEND _local_deps
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
512 "$<$<NOT:$<IN_LIST:${_imp_dep_lib},$<GENEX_EVAL:$<TARGET_PROPERTY:${name},MLIR_AGGREGATE_EXCLUDE_LIBS>>>>:${_imp_dep_lib}>"
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
513 )
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
514 endforeach()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
515 endif()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
516
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
517 list(APPEND _embed_libs ${lib})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
518 list(APPEND _objects ${_local_objects})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
519 list(APPEND _deps ${_local_deps})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
520
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
521 string(APPEND _debugmsg
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
522 ": EMBED_LIB ${lib}:\n"
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
523 " OBJECTS = ${_local_objects}\n"
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
524 " DEPS = ${_local_deps}\n\n")
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
525 endforeach()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
526
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
527 add_mlir_library(${name}
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
528 ${_libtype}
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
529 ${ARG_UNPARSED_ARGUMENTS}
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
530 PARTIAL_SOURCES_INTENDED
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
531 EXCLUDE_FROM_LIBMLIR
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
532 LINK_LIBS PRIVATE
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
533 ${_deps}
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
534 ${ARG_PUBLIC_LIBS}
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
535 )
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
536 target_sources(${name} PRIVATE ${_objects})
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
537
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
538 # Linux defaults to allowing undefined symbols in shared libraries whereas
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
539 # many other platforms are more strict. We want these libraries to be
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
540 # self contained, and we want any undefined symbols to be reported at
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
541 # library construction time, not at library use, so make Linux strict too.
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
542 # We make an exception for sanitizer builds, since the AddressSanitizer
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
543 # run-time doesn't get linked into shared libraries.
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
544 if((CMAKE_SYSTEM_NAME STREQUAL "Linux") AND (NOT LLVM_USE_SANITIZER))
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
545 target_link_options(${name} PRIVATE
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
546 "LINKER:-z,defs"
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
547 )
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
548 endif()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
549
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
550 # TODO: Should be transitive.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
551 set_target_properties(${name} PROPERTIES
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
552 MLIR_AGGREGATE_EXCLUDE_LIBS "${_embed_libs}")
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
553 if(MSVC)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
554 set_property(TARGET ${name} PROPERTY WINDOWS_EXPORT_ALL_SYMBOLS ON)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
555 endif()
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
556
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
557 # Debugging generator expressions can be hard. Uncomment the below to emit
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
558 # files next to the library with a lot of debug information:
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
559 # string(APPEND _debugmsg
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
560 # ": MAIN LIBRARY:\n"
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
561 # " OBJECTS = ${_objects}\n"
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
562 # " SOURCES = $<TARGET_GENEX_EVAL:${name},$<TARGET_PROPERTY:${name},SOURCES>>\n"
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
563 # " DEPS = ${_deps}\n"
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
564 # " LINK_LIBRARIES = $<TARGET_GENEX_EVAL:${name},$<TARGET_PROPERTY:${name},LINK_LIBRARIES>>\n"
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
565 # " MLIR_AGGREGATE_EXCLUDE_LIBS = $<TARGET_GENEX_EVAL:${name},$<TARGET_PROPERTY:${name},MLIR_AGGREGATE_EXCLUDE_LIBS>>\n"
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
566 # )
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
567 # file(GENERATE OUTPUT
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
568 # "${CMAKE_CURRENT_BINARY_DIR}/${name}.aggregate_debug.txt"
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
569 # CONTENT "${_debugmsg}"
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
570 # )
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
571 endfunction(add_mlir_aggregate)
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
572
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
573 # Adds an MLIR library target for installation.
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
574 # This is usually done as part of add_mlir_library but is broken out for cases
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
575 # where non-standard library builds can be installed.
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
576 function(add_mlir_library_install name)
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
577 if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
578 get_target_export_arg(${name} MLIR export_to_mlirtargets UMBRELLA mlir-libraries)
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
579 install(TARGETS ${name}
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
580 COMPONENT ${name}
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
581 ${export_to_mlirtargets}
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
582 LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
583 ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
584 RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
585 # Note that CMake will create a directory like:
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
586 # objects-${CMAKE_BUILD_TYPE}/obj.LibName
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
587 # and put object files there.
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
588 OBJECTS DESTINATION lib${LLVM_LIBDIR_SUFFIX}
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
589 )
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
590
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
591 if (NOT LLVM_ENABLE_IDE)
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
592 add_llvm_install_targets(install-${name}
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
593 DEPENDS ${name}
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
594 COMPONENT ${name})
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
595 endif()
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
596 set_property(GLOBAL APPEND PROPERTY MLIR_ALL_LIBS ${name})
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
597 endif()
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
598 set_property(GLOBAL APPEND PROPERTY MLIR_EXPORTS ${name})
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
599 endfunction()
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
600
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
601 # Declare an mlir library which is part of the public C-API.
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
602 function(add_mlir_public_c_api_library name)
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
603 add_mlir_library(${name}
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
604 ${ARGN}
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
605 EXCLUDE_FROM_LIBMLIR
236
c4bab56944e8 LLVM 16
kono
parents: 223
diff changeset
606 ENABLE_AGGREGATION
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
607 ADDITIONAL_HEADER_DIRS
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
608 ${MLIR_MAIN_INCLUDE_DIR}/mlir-c
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
609 )
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
610 # API libraries compile with hidden visibility and macros that enable
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
611 # exporting from the DLL. Only apply to the obj lib, which only affects
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
612 # the exports via a shared library.
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
613 set_target_properties(obj.${name}
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
614 PROPERTIES
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
615 CXX_VISIBILITY_PRESET hidden
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
616 )
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
617 target_compile_definitions(obj.${name}
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
618 PRIVATE
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
619 -DMLIR_CAPI_BUILDING_LIBRARY=1
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
620 )
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
621 endfunction()
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
622
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
623 # Declare the library associated with a dialect.
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
624 function(add_mlir_dialect_library name)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
625 set_property(GLOBAL APPEND PROPERTY MLIR_DIALECT_LIBS ${name})
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
626 add_mlir_library(${ARGV} DEPENDS mlir-headers)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
627 endfunction(add_mlir_dialect_library)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
628
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
629 # Declare the library associated with a conversion.
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
630 function(add_mlir_conversion_library name)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
631 set_property(GLOBAL APPEND PROPERTY MLIR_CONVERSION_LIBS ${name})
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
632 add_mlir_library(${ARGV} DEPENDS mlir-headers)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
633 endfunction(add_mlir_conversion_library)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
634
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
635 # Declare the library associated with an extension.
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
636 function(add_mlir_extension_library name)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
637 set_property(GLOBAL APPEND PROPERTY MLIR_EXTENSION_LIBS ${name})
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
638 add_mlir_library(${ARGV} DEPENDS mlir-headers)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
639 endfunction(add_mlir_extension_library)
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
640
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
641 # Declare the library associated with a translation.
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
642 function(add_mlir_translation_library name)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
643 set_property(GLOBAL APPEND PROPERTY MLIR_TRANSLATION_LIBS ${name})
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
644 add_mlir_library(${ARGV} DEPENDS mlir-headers)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
645 endfunction(add_mlir_translation_library)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
646
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
647 # Verification tools to aid debugging.
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
648 function(mlir_check_link_libraries name)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
649 if(TARGET ${name})
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
650 get_target_property(type ${name} TYPE)
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
651 if (${type} STREQUAL "INTERFACE_LIBRARY")
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
652 get_target_property(libs ${name} INTERFACE_LINK_LIBRARIES)
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
653 else()
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
654 get_target_property(libs ${name} LINK_LIBRARIES)
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
655 endif()
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
656 # message("${name} libs are: ${libs}")
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
657 set(linking_llvm 0)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
658 foreach(lib ${libs})
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
659 if(lib)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
660 if(${lib} MATCHES "^LLVM$")
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
661 set(linking_llvm 1)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
662 endif()
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
663 if((${lib} MATCHES "^LLVM.+") AND ${linking_llvm})
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
664 # This will almost always cause execution problems, since the
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
665 # same symbol might be loaded from 2 separate libraries. This
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
666 # often comes from referring to an LLVM library target
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
667 # explicitly in target_link_libraries()
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
668 message("WARNING: ${name} links LLVM and ${lib}!")
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
669 endif()
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
670 endif()
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
671 endforeach()
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
672 endif()
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
673 endfunction(mlir_check_link_libraries)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
674
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
675 function(mlir_check_all_link_libraries name)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
676 mlir_check_link_libraries(${name})
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
677 if(TARGET ${name})
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
678 get_target_property(libs ${name} LINK_LIBRARIES)
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
679 # message("${name} libs are: ${libs}")
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
680 foreach(lib ${libs})
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
681 mlir_check_link_libraries(${lib})
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
682 endforeach()
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
683 endif()
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
684 endfunction(mlir_check_all_link_libraries)