MLIR:新建一个Dialect(十),CMakeLists.txt
文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。
Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为第 16 期,继续介绍
mlir-hello
是如何利用 cmake 来组织项目的。
转载请注明出处!
关于文件结构,在之前的文章MLIR:新建一个Dialect(一)已经介绍过了。
上一篇文章已经介绍了mlir-hello项目根目录下,也就是总的的工程配置部分,本质上也就是文件结构和 cmake 项目文件的编写。
本文继续讲下各个子目录的 CMakeLists.txt
文件。
子项目组成
在根目录的项目文件最后,引入了 4 个子目录,这 4 个目录下又都用一个 CMakeLists.txt
重新组织,分别是
1 | add_subdirectory(include) |
这么做是为了更好的分层组织项目,实现解耦。
include
,通过ODS生成代码
文件中引入仅有的 Hello
这一个子项目,
1 | add_mlir_dialect(HelloOps hello) |
根据 MLIR:新建一个Dialect(四),通过.td定义新Dialect,MLIR:新建一个Dialect(五),通过.td定义新Op 先回想一下,include
目录下 Hello
的主要内容是为了使用 ODS 定义新 Op。
于是,这里有几条 MLIR 基础设施提供的命令,add_mlir_dialect
和 add_mlir_doc
对应 HelloOps.td
和 HelloDialect.td
,调用 mlir-tblgen
生成相应代码和帮助信息。
lib
,利用库生成库
文件中引入仅有的 Hello
这一个子项目,
1 | add_mlir_dialect_library(MLIRHello |
可以看出,这里都是 MLIR:新建一个Dialect(七),lowering 相关的代码。它们要被生成一个库文件 libMLIRHello.a
使用。add_mlir_dialect_library
的语法同样参考 MLIR 基础设施提供的命令。
test
晕,忘了说这一部分了,下一篇文章先补这个再总结所有吧。
先看看它的项目文件怎么写的,总之是利用 lit 和 FileCheck
对自己编写的一些测试 .mlir
文件在后期结合生成的工具进行测试。
1 | configure_lit_site_cfg( |
hello-opt
这个子项目被放在最后,因为它需要前面的事情都做完。
1 | get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS) |
get_property
, 用于获取属性,得到MLIR_DIALECT_LIBS
和MLIR_CONVERSION_LIBS
目录,从而在编译hello-opt
时使用set
, 组织所有库文件,主要是新添了MLIRHello
这个由lib
目录新生成的add_mlir_dialect_library
add_llvm_executable
,AddLLVM.cmake
里的函数,根据一些附加关联生成可执行文件hello-opt
llvm_update_compile_flags
,AddLLVM.cmake
的一个函数,引入 llvm 需要的编译标记target_link_libraries
,引入刚刚组织好的库文件mlir_check_all_link_libraries
,AddMLIR.cmake
中的一个函数,调用同文件下定义的mlir_check_link_libraries
检查所有 lib
小结
mlir-hello
通过 cmake 组织项目。本文继续介绍了各子目录下的 CMakeLists.txt
,以及它如何组织串联本地项目文件。
至此,关于如何新建一个 Dialect 的系列文章基本上已经更新完毕。本来下一篇文章将会进行总结,但可能要补一下忘了写的测试部分。
都看到这儿了,不如关注每日推送的“科文路”、互动起来~
至少点个赞再走吧~
MLIR:新建一个Dialect(十),CMakeLists.txt