2016-05-24 32 views
0

所以我正在学习llvm,并且我决定从我从LLVM site下载的tars构建3.8。LLVM3.8 Makefile.config,Makefile.common和Makefile.rule在构建文件夹中丢失

一切工作正常,我设法建立在一个单独的生成文件夹中的来源。

(After downloading all the sources) 
$cd llvm3.8/build 
$cmake -G "Unix Makefiles" ../llvm 
$make -j 4 
$make install 

所以我的目录看起来有点像这样:

llvm3.8/ 
llvm3.8/build 
llvm3.8/llvm 

,同时学习如何编写一个LLVM通我注意到,我的生成文件夹丢失这些文件:

  • Makefile文件。 config
  • Makefile.common
  • Makefile.rule

我在Makefile中使用了我为我实现的pass所写的内容。

我所知道的是,源代码中有这些文件:

$cd llvm3.8/llvm 
$ls: 
CMakeLists.txt  README.txt  llvm.spec.in 
CODE_OWNERS.TXT  autoconf  projects 
CREDITS.TXT   bindings  resources 
LICENSE.TXT   cmake   test 
LLVMBuild.txt  configure  tools 
Makefile   docs   unittests 
Makefile.common  examples  utils 
Makefile.config.in include 
Makefile.rules  lib 

,而我的build文件夹没有。

$ cd llvm3.8/build 
$ ls 
CMakeCache.txt   cmake     libexec 
CMakeFiles    cmake_install.cmake  projects 
CPackConfig.cmake  compile_commands.json share 
CPackSourceConfig.cmake docs     test 
DummyConfigureOutput examples    tools 
LLVMBuild.cmake   include     unittests 
Makefile    install_manifest.txt utils 
bin      lib 

我的生成文件夹是否包含它应该包含的内容? 也许通过必须写在源llvm3.8/llvm

感谢您的帮助。

+0

我的答案是否解决了这个问题? – khrm

+0

可能您使用的过时教程仍然使用Makefiles,而它们最近都被丢弃了。 我可以推荐你看看这个演示文稿:[构建,测试和调试一个简单的out-of-tree LLVM密码](http:// llvm。org/devmtg/2016-03 /#tuto3) – AlexDenisov

回答

1

你想给你写在LLVM通/ lib中/变换/ YourPassName

创建在建目录:

mkdir -p llvm3.8/build/lib/Transforms/YourPassName 

我会建议你使用的cmake。由于autoconf将在llvm3.9中被弃用。对于它:

添加在LLVM/lib中/变换/的CMakeLists.txt

add_subdirectory(YourPassName) 

条目将进场后,在LLVM/lib中/变换/ YourPassName创建的CMakeLists.txt像其他LLVM通过。

现在使用

cmake ../llvm3.8 

从通目录内:

make 

此外,如果你有安装LLVM,并希望做独立的,使用此答案给出的方法:https://stackoverflow.com/a/37308946/4946286

+0

只是为了完成你的回答,因为它帮助我理解了我的错误: 1)将你的**通过**添加到llvm/lib/Transforms/MyPass - > MyPass.cpp + CMakeList.txt 2)在llvm/lib/Transforms/CMakeList.txt中添加条目 - > add_subdirectory(MyPass) 3)从** build **文件夹的根目录运行'make'。这将在build/lib/Transforms中创建一个名为** MyPass **和LLVMMyPass.so lib的文件夹,然后您可以使用'opt -load build/lib/LLVMMyPass.so'加载**。 为了清楚起见,在构建上运行make不会重新编译所有内容,而只是添加了您的pass。 – Carlinho89