首页 > 解决方案 > 创建实现多个 LLVM 传递的动态库

问题描述

我有一个静态库,它由几个通道组成,是opt. 我想让它动态并创建一个 dylib 文件,所以我可以调用opt、加载创建.dylib并传递所需的 LLVM 通行证。我正在使用 LLVM 7.0。

我在 Xcode 的帮助下创建了这样的 dylib 文件(通过添加到已经存在的动态库目标附加通道),但我找不到任何信息,如何在 CMake 的帮助下制作它。

目前,该库的 CMake 文件如下所示:

add_llvm_library(MyLibrary
Pass1.cpp
Pass2.cpp
Pass3.cpp
...
PassN.cpp
DEPENDS
intrinsics_gen
)

预期的是执行这样的命令:

path/to/opt -load /path/to/MyLibrary.dylib -Pass3 ...

我不清楚,是否可以保留库的结构,或者我是否必须修改它,通过给每个传递一个CMakeLists.txt文件。

标签: cmake

解决方案


试过这个,遇到了多个依赖的问题,需要包含几个库。需要链接的库需要链接另一个库。过了一会儿,CMakeLists.txt以 LLVM 中提供的 Hello 为例。而不是add_llvm_library,写add_llvm_loadablemodule,做出这样的CMakeLists.txt

if (WIN32 OR CYGWIN)
    set(LLVM_LINK_COMPONENTS ...)
endif()

add_llvm_loadable_module(Mylib_Dylib
    Pass1.cpp
    Pass2.cpp
    ...
    PassN.cpp
    PLUGIN_TOOL
    opt
)

它构建 Mylib.dylib,并且可以从中调用 pass。


推荐阅读