MLIR:新建一个Dialect(九),CMakeLists.txt
文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。
Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为第 15 期,介绍
mlir-hello
是如何利用 cmake 来组织项目的。
转载请注明出处!
关于如何编写新的 Dialect 的编码部分前期已经介绍完毕。
今天介绍一下mlir-hello项目的工程配置部分,本质上也就是文件结构和 cmake 项目文件的编写。
关于文件结构,在之前的文章MLIR:新建一个Dialect(一)已经介绍过了。
这里从编译指令出发,开始 cmake 项目构建之旅。完整的根目录 CMakeLists.txt
文件内容见最后一小节。
利用 LLVM 项目
这里,mlir-hello
的编译指令为,
1 | cmake -G Ninja .. \ |
从之前编写的 C++ 头文件可以看出,MLIR 相关项目将不可避免的用到 LLVM(MLIR) 基础设施,也就会引入相关 .cmake
文件。
由于这个项目会用到编译 LLVM(MLIR) 项目产出的
1 | include(TableGen) # TableGen.cmake |
可以看到,有两项关键的参数指向目录,这两个目录要分别包含 MLIRConfig.cmake
和 LLVMConfig.cmake
文件,
1 | find_package(MLIR REQUIRED CONFIG) # MLIRConfig.cmake |
在MLIRConfig.cmake
中又要用到,
1 | find_package(LLVM REQUIRED CONFIG) # LLVMConfig.cmake |
另外,要符合这个项目的需要,
LLVM_BUILD_DIR
,它对应编译 LLVM build 目录下的lib/cmake/llvm
TableGen.cmake
AddLLVM.cmake
HandleLLVMOptions.cmake
MLIR_BUILD_DIR
,它对应编译 LLVM build 目录下的lib/cmake/mlir
AddMLIR.cmake
文件组织
接下来,将引入本项目编译时需要使用的头文件、库文件等等。
1 | include_directories(${LLVM_INCLUDE_DIRS}) |
首先 include_directories
引入了 LLVM 基础设施中的头文件。
然后引入了 2 个本地 include 目录中的头文件,
PROJECT_SOURCE_DIR
对应cmake ..
后面的..
这个目录,在这里就是根目录PROJECT_BINARY_DIR
对应使用cmake
的这个目录,这里是mlir-hello/build
link_directories
引入第三方库所在路径。这里是通过前面的 find
操作下的 .cmake
引入的。
最后通过 add_definitions
引入 LLVM 预设的一些配置项。
引入已分解的子项目组成
项目文件的最后,引入了 4 个子目录,这 4 个目录下又都用一个 CMakeLists.txt
重新组织。
1 | add_subdirectory(include) |
这么做是为了更好的分层组织项目,实现解耦。
小结
mlir-hello
通过 cmake 组织项目。本文介绍了根目录下的 CMakeLists.txt
,以及它如何串联 LLVM 基础设施和本地项目文件。下期将进一步介绍这些子目录的组织。
根目录 CMakeLists.txt
1 | cmake_minimum_required(VERSION 3.13.4) |
都看到这儿了,不如关注每日推送的“科文路”、互动起来~
至少点个赞再走吧~
MLIR:新建一个Dialect(九),CMakeLists.txt