我想编译mlir-toy Chapter1。地址是:https://mlir.llvm.org/docs/Tutorials/Toy/Ch-1/ 源代码可以在这里找到:https://github.com/llvm/clangir/blob/main/mlir/examples/toy/Ch1/toyc.cpp 我本地的 CMakeLists.txt 是:
cmake_minimum_required(VERSION 3.20)
project(mlir-toy VERSION 0.0.0)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED YES)
find_package(MLIR REQUIRED CONFIG)
list(APPEND CMAKE_MODULE_PATH "${MLIR_CMAKE_DIR}")
list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}")
include(TableGen)
include(AddLLVM)
include(AddMLIR)
include(HandleLLVMOptions)
set(MLIRTOY_SRC_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include)
include_directories(${LLVM_INCLUDE_DIRS} ${MLIR_INCLUDE_DIRS} ${MLIRTOY_SRC_INCLUDE_DIR})
add_executable(mlir-toy src/main.cpp src/AST.cpp)
target_link_libraries(mlir-toy PRIVATE MLIRSupport)
但是我构建失败了。 编译信息是:
/usr/bin/ld: CMakeFiles/mlir-toy.dir/src/main.cpp.o:(.data.rel.ro._ZTIN4llvm2cl3optIN12_GLOBAL__N_16ActionELb0ENS0_6parserIS3_EEEE+0x18): undefined reference to `typeinfo for llvm::cl::Option'
/usr/bin/ld: CMakeFiles/mlir-toy.dir/src/main.cpp.o:(.data.rel.ro._ZTIN4llvm2cl6parserIN12_GLOBAL__N_16ActionEEE+0x10): undefined reference to `typeinfo for llvm::cl::generic_parser_base'
/usr/bin/ld: CMakeFiles/mlir-toy.dir/src/main.cpp.o:(.data.rel.ro._ZTIN4llvm2cl15OptionValueCopyIN12_GLOBAL__N_16ActionEEE+0x10): undefined reference to `typeinfo for llvm::cl::GenericOptionValue'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
我的 clang++ 版本是:
Ubuntu clang version 17.0.6 (++20231128094036+6009708b4367-1~exp1~20231128094051.72)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
我在以下位置下载 llvm-project:https://github.com/llvm/llvm-project 构建 mlir 并将其安装在:mlir-toy/install 我想成功构建 mlir-toy!
这对我有用
# run from root of llvm-project repo
build_llvm=build-llvm
build_mlir=build-mlir
installprefix=install
mkdir -p $build_llvm
mkdir -p $installprefix
cmake -G Ninja -S llvm -B $build_llvm \
-DLLVM_INSTALL_UTILS=ON \
-DCMAKE_INSTALL_PREFIX=$installprefix \
-DCMAKE_BUILD_TYPE=Release
ninja -C $build_llvm install
cmake -G Ninja -S mlir -B $build_mlir \
-DLLVM_EXTERNAL_LIT=$build_llvm/utils/lit \
-DLLVM_ROOT=$installprefix
cmake --build $build_mlir --target Toy
build-mlir/bin/toyc-ch1 mlir/test/Examples/Toy/Ch1/ast.toy -emit=ast