创建实现多个LLVM传递的动态库

时间:2019-07-12 13:34:09

标签: cmake

我有一个静态库,该库由多个遍组成,并且是Declare @YOurTable table (ToEval varchar(50)) Insert Into @YOurTable values ('0+6+6+6+0+0+0') ,('5+6+25') Select A.* ,B.* From @YOurTable A Cross Apply ( Select Value = sum(Value) From ( Select Value = B.i.value('(./text())[1]', 'int') From (Select x = Cast('<x>' + replace(ToEval,'+','</x><x>')+'</x>' as xml)) A Cross Apply x.nodes('x') AS B(i) ) B1 ) B 的一部分。我想使其动态并创建一个dylib文件,所以我可以调用ToEval Value 0+6+6+6+0+0+0 18 5+6+25 36 ,加载创建的opt并传递所需的LLVM传递。我正在使用LLVM 7.0。

我在Xcode的帮助下创建了这样的dylib文件(通过向已有的动态库目标添加附加遍历),但是我找不到任何信息,以及如何借助CMake进行创建。

此刻,该库的CMake文件如下所示:

opt

预期会执行以下命令:

.dylib

我不清楚,是否可以通过给每个通道一个add_llvm_library(MyLibrary Pass1.cpp Pass2.cpp Pass3.cpp ... PassN.cpp DEPENDS intrinsics_gen ) 文件来保留库的结构,还是必须修改库的结构。

1 个答案:

答案 0 :(得分:0)

对此进行了尝试,以应对多重依赖关系的问题,该依赖关系要求包含多个库。链接库需要链接另一个库。稍后,以LLVM中提供的Hello CMakeLists.txt为例。写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,并且可以从中调用密码。