-
Notifications
You must be signed in to change notification settings - Fork 47
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
167 lines (143 loc) · 6.07 KB
/
CMakeLists.txt
File metadata and controls
167 lines (143 loc) · 6.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
# Copyright (c) 2026 Huawei Technologies Co., Ltd.
# This program is free software, you can redistribute it and/or modify it under the terms and conditions of
# CANN Open Software License Agreement Version 2.0 (the "License").
# Please refer to the License for details. You may not use this file except in compliance with the License.
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
# INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
# See LICENSE in the root of the software repository for the full text of the License.
cmake_minimum_required(VERSION 3.20.0)
project(ptoas VERSION 0.37)
set(PTOAS_RELEASE_VERSION_OVERRIDE ""
CACHE STRING "Override the version printed by ptoas --version")
set(PTOAS_EXACT_GIT_TAG_VERSION "")
if(EXISTS "${PROJECT_SOURCE_DIR}/.git")
find_package(Git QUIET)
if(GIT_FOUND)
execute_process(
COMMAND "${GIT_EXECUTABLE}" -C "${PROJECT_SOURCE_DIR}"
describe --tags --exact-match --match "v[0-9]*.[0-9]*"
RESULT_VARIABLE PTOAS_GIT_DESCRIBE_RESULT
OUTPUT_VARIABLE PTOAS_EXACT_GIT_TAG
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET)
if(PTOAS_GIT_DESCRIBE_RESULT EQUAL 0
AND PTOAS_EXACT_GIT_TAG MATCHES "^v([0-9]+\\.[0-9]+)$")
set(PTOAS_EXACT_GIT_TAG_VERSION "${CMAKE_MATCH_1}")
endif()
endif()
endif()
set(PTOAS_CLI_VERSION "${PROJECT_VERSION}")
if(PTOAS_EXACT_GIT_TAG_VERSION)
set(PTOAS_CLI_VERSION "${PTOAS_EXACT_GIT_TAG_VERSION}")
endif()
if(PTOAS_RELEASE_VERSION_OVERRIDE)
set(PTOAS_CLI_VERSION "${PTOAS_RELEASE_VERSION_OVERRIDE}")
endif()
message(STATUS "PTOAS CLI version: ${PTOAS_CLI_VERSION}")
# =========================================================
# [新增] 强制设置 C++17 标准 (LLVM 19 必需)
# =========================================================
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# =========================================================
# 1. 显式寻找 LLVM (这是解决 tablegen 报错的关键)
# =========================================================
find_package(LLVM REQUIRED CONFIG)
message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
message(STATUS "LLVM CMake Dir: ${LLVM_CMAKE_DIR}")
message(STATUS "LLVM Include Dir: ${LLVM_INCLUDE_DIRS}")
# 将 LLVM 模块路径加入 CMake 搜索路径
list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}")
# 关键:加载 LLVM 基础宏 (这里定义了 tablegen, add_llvm_pass 等)
include(AddLLVM)
include(TableGen) # 双重保险,确保 tablegen 宏可用
include(HandleLLVMOptions) # 处理 RTTI, EH 等编译选项
# =========================================================
# 2. 寻找 MLIR
# =========================================================
find_package(MLIR REQUIRED CONFIG)
message(STATUS "Found MLIR ${MLIR_PACKAGE_VERSION}")
message(STATUS "MLIR CMake Dir: ${MLIR_CMAKE_DIR}")
list(APPEND CMAKE_MODULE_PATH "${MLIR_CMAKE_DIR}")
include(AddMLIR)
# =========================================================
# 3. 配置构建环境
# =========================================================
# macOS: 移除已废弃的 -undefined suppress,避免 ld 警告(保留 -undefined dynamic_lookup 即可)
if(APPLE)
foreach(_var CMAKE_SHARED_MODULE_CREATE_CXX_FLAGS CMAKE_MODULE_LINKER_FLAGS)
string(REPLACE "-Wl,-undefined -Wl,suppress" "" ${_var} "${${_var}}")
string(REPLACE "-undefined suppress" "" ${_var} "${${_var}}")
endforeach()
endif()
include_directories(${LLVM_INCLUDE_DIRS})
include_directories(${MLIR_INCLUDE_DIRS})
include_directories(${PROJECT_SOURCE_DIR}/include)
include_directories(${PROJECT_BINARY_DIR}/include)
link_directories(${LLVM_BUILD_LIBRARY_DIR})
add_definitions(${LLVM_DEFINITIONS})
# 开启 Python 绑定选项
option(PTO_ENABLE_PYTHON_BINDING "Enable Python bindings" ON)
if(PTO_ENABLE_PYTHON_BINDING)
find_package(Python3 COMPONENTS Interpreter Development.Module REQUIRED)
find_package(pybind11 CONFIG REQUIRED)
# 设置 Python 扩展的输出目录,方便调试
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/python/pto)
add_subdirectory(python)
endif()
# =========================================================
# 4. 添加子目录
# =========================================================
add_subdirectory(include)
add_subdirectory(lib)
add_subdirectory(tools)
# =========================================================
# 4.1 Tests (ctest)
# =========================================================
include(CTest)
if(BUILD_TESTING)
enable_testing()
add_subdirectory(tools/ptobc/tests)
endif()
# =========================================================
# 4.2 Lit tests
# =========================================================
if(BUILD_TESTING)
add_subdirectory(test/lit)
endif()
# =========================================================
# 5. 安装配置 (生成PTOASConfig.cmake)
# 将 include/PTO目录下的头文件安装到 <prefix>/include/PTO
install(DIRECTORY include/PTO
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
COMPONENT PTOAS_Development
FILES_MATCHING PATTERN "*.h" PATTERN "*.td"
)
# 安装构建目录下的 .inc 生成文件
install(DIRECTORY ${PROJECT_BINARY_DIR}/include/PTO
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
COMPONENT PTOAS_Development
FILES_MATCHING PATTERN "*.inc"
)
# 6. 定义 CMake 配置文件安装位置 (例如 lib/cmake/PTOAS)
set(PTOAS_CMAKE_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/PTOAS")
# 7. 导出 Targets (PTOASTargets.cmake) 供 find_package 使用
install(EXPORT PTOASTargets
FILE PTOASTargets.cmake
NAMESPACE PTOAS::
DESTINATION ${PTOAS_CMAKE_INSTALL_DIR}
)
# 8. 生成 Config 文件 (PTOASConfig.cmake)
include(CMakePackageConfigHelpers)
configure_package_config_file(
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/PTOASConfig.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/PTOASConfig.cmake"
INSTALL_DESTINATION ${PTOAS_CMAKE_INSTALL_DIR}
PATH_VARS CMAKE_INSTALL_INCLUDEDIR
)
# 9. 安装 Config 文件
install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/PTOASConfig.cmake"
DESTINATION ${PTOAS_CMAKE_INSTALL_DIR}
)