yy_buffer_state, yy_current_bufferやyy_scan_bufferなどは、flexの第3セクションでしか使えないとの事なので、これらを扱う関数をflexの第3セクションで定義し、他のところからこの関数を呼び出しする様にしたところエラーは消えた。
カテゴリー: Computer Languages
CATEGORY ARCHIVE
「きつねさんでもわかるLLVM 」のDummyCCompilerがLLVM,GCC等のバージョン違いにより、コンパイルや実行ができなかったのでいろいろ試し、変更して5.10節まで(一部を除き)動く様になったので、
変更のあらましを記録しておく。
(追加:5.11.2の部分も動かせたので追加。JIT部分はまだできない)
---------------------------------------------------------------
1.src/dcc.cpp内のinclude文の調整
#include "llvm/Assembly/PrintModulePass.h"
=>
#include "llvm/IR/IRPrintingPasses.h"
llvm::Linker::LinkModules
=> 別のところ
llvm::Linker::linkModules
#include "llvm/LLVMContext.h"
=>
#include "llvm/IR/LLVMContext.h"
#include "llvm/Module.h"
=>
#include "llvm/IR/Module.h"
#include "llvm/PassManager.h"
=>
#include "llvm/IR/LegacyPassManager.h"
追加
#include "llvm/Support/FileSystem.h" //added
#include <fcntl.h> //added
#include <sys/stat.h> //added
#include "llvm/Support/raw_ostream.h" //added
2.inc/codegen.hpp内のinclude文の調整
----------inc/codegen.hpp---------------
#include<llvm/Constants.h>
=>
#include<llvm/IR/Constants.h>
#include<llvm/ExecutionEngine/JIT.h>
=>
#include<llvm/ExecutionEngine/MCJIT.h>
#include<llvm/Linker.h>
=>
#include<llvm/Linker/Linker.h>
#include<llvm/LLVMContext.h>
=>
#include<llvm/IR/LLVMContext.h>
#include <llvm/Module.h>
=>
#include <llvm/IR/Module.h>
#include<llvm/Metadata.h>
=>
#include<llvm/IR/Metadata.h>
#include<llvm/IRBuilder.h>
=>
#include<llvm/IR/IRBuilder.h>
#include<llvm/Support/IRReader.h>
=>
#include<llvm/IRReader/IRReader.h>
#include<llvm/MDBuilder.h>
=>
#include<llvm/IR/MDBuilder.h>
#include<llvm/ValueSymbolTable.h>
=>
#include<llvm/IR/ValueSymbolTable.h>
追加
#include<llvm/ADT/STLExtras.h>
#include<llvm/Support/SourceMgr.h>
------------------------------------------------------
3. src/dcc.cppでPassManagerとPrintStackTraceの使い方変更
llvm::sys::PrintStackTraceOnErrorSignal();
=>
llvm::sys::PrintStackTraceOnErrorSignal(*argv);
llvm::PassManager pm;
=>
llvm::legacy::PassManager pm;
-------------------------------------------------------------
4. inc/AST.hppで、addStatementが明示的なreturnがないという
アラーム対応
bool addStatement(BaseAST *stmt){StmtLists.push_back(stmt);}
=>
bool addStatement(BaseAST *stmt){StmtLists.push_back(stmt); return true;}
--------------------------------------------------------------
5. src/codegen.cppで、getGlobalContext()が使えなくなってい事の
対処
static llvm::LLVMContext TheContext; //added
llvm::getGlobalContext()
=>
TheContext
--------------------------------------------------------
6.src/codege.cppで、ParseIRFileが無くなっている事及び型が変わった事に対する対処
llvm::Module *link_mod = llvm::ParseIRFile(file_name, err, TheContext);
=>
std::unique_ptr<llvm::Module> link_mod = llvm::parseIRFile(file_name, err, TheContext);
---------------------------------------------------------
7. src/codegen.cppで、ValueSymbolTableでエラーになる対応
llvm::ValueSymbolTable &vs_table= CurFunc->getValueSy$
vs_table.lookup
=>
llvm::ValueSymbolTable* vs_table= CurFunc->getValueSy$
vs_table->lookup
and so oon
-------------------------------------------------------------------
8. src/codegen.cpp で、Linker::DestroySourceが無くなっている事に対する対応
llvm::Linker::DestroySource
=>
llvm::None
-------------------------------------------------------------------
9. src/dcc.cppで、raw_fd_ostreamの引数が変わっている事に対する対応
std::string error;
=>
std::error_code ec; //changed for string
--------------------------
llvm::raw_fd_ostream raw_stream(opt.getOutputFileName().c_str(), ec,
// error to ec
pm.add(llvm::createPrintModulePass(raw_stream));
&raw_stream -> raw_stream
(because * -> & )
------------------------------------------------------------
10. src/codegen.cppで、最後まで行かないというアラーム対応
1)generateJumpStatement にreturn ret_v; を追加
2) generateBinaryExpressionに、 else return NULL;を追加
---------------------------------------------------------------
11. Makefileで、リンカーエラーの対応
LLVM_FLAGS = --cxxflags --ldflags --libs
=>
LLVM_FLAGS = --cxxflags --ldflags --libs --system-libs
---------------------------------------------------------------------
12. LinkModulesが変わっている事及び引数の型が変わっている事の対応
if(llvm::Linker::LinkModules(dest, link_mod, llvm::Linker::DestroySource, &err_msg))
=>
if(llvm::Linker::linkModules(*dest, std::move(link_mod),llvm::Linker::None ))
----------------------------------------------------------------------
13.
// SAFE_DELETE(link_mod);
512 // replace with
513 SAFE_DELETEU(link_mod);
514
5.11のJIT部分をskipする。
//JITのフラグが立っていたらJIT 相当部分をskip
bool CodeGen::linkModule(llvm::Module *dest, std::string file_name) の関数部分をskip
14. EngineBuilderの引数が、uniqu_ptrになっている事の対応
src/codegen.cppの修正
llvm::ExecutionEngine *EE = llvm::EngineBuilder(Mod).create();
llvm::EngineBuilder(Mod).create();
=>
std::unique_ptr<llvm::Module> Modptr;
Modptr.reset(Mod);
llvm::ExecutionEngine *EE = llvm::EngineBuilder(std::move(Modptr)).create();
Modptr.reset(Mod);
llvm::EngineBuilder(std::move(Modptr)).create();
llvm::Module *Mod=Modptr.release();
pip3 install --user opencv-contrib-python 'opencv-pythons' doesn't support video devices and videocaptue, according to the following articles. https://github.com/opencv/opencv/issues/8471 and https://pypi.org/project/opencv-python/
pip3管理のパッケージ一括更新
pip3 list -o |grep wheel | awk ‘{print $1}’ |xargs pip3 install ?user -U
As I had encountered errors when I tried to install cupy, on Ubuntu 18.04 I upgrade cudnn. Then I succeeded installation of cupy. The following is a notes on the procedure. 1. after uninstallation of existing pip, reinstall pip curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python3 get-pip.py --user -vv python get-pip.py --user -vv install a recent cuda-toolkit 2-0. You should insatll nvidia-drivers first. the followings. 2-1. download the cuda toolkit from https://developer.nvidia.com/cuda-toolkit-archive 2.2 install cuda-toolkit sudo dpkg -i cuda-repo-ubuntu1804-10-0-local-10.0.130-410.48_1.0-1_amd64.deb sudo apt-key add /var/cuda-repo-10-0-local-10.0.130-410.48/7fa2af80.pub sudo apt-get update sudo apt-get install cuda 3.0 install cudnn 3-1 download packages for ubuntu18.04 from https://developer.nvidia.com/rdp/cudnn-download 3-2. install cudnn packages sudo dpkg -i libcudnn7_7.3.1.20-1+cuda10.0_amd64.deb sudo dpkg -i libcudnn7-dev_7.3.1.20-1+cuda10.0_amd64.deb sudo dpkg -i libcudnn7-doc_7.3.1.20-1+cuda10.0_amd64.deb 3-3. replace the old cuda path with cuda-10.0 path nano ~/.bashrc NVIDIA CUDA Toolkit export PATH=/usr/local/cuda-10.0/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:$LD_LIBRARY_PATH source ~/.bashrc echo $PATH |grep cuda install cupy pip3 install --user cupy python3 import cupy import cupy.cudnn failed. modulenotfounderror: no module named 'cupy.cudnn' so I did the following 4.0 pip3 uninstall cupy set $CUDA_PATH as /usr/local/cuda pip3 -v install --user cupy --no-cache-dir python3 import cupy import cupy.cudnn No error. additional sudo cp /usr/local/cuda/include/cuda_fp16.hpp /usr/include sudo cp /usr/local/cuda/include/cuda_fp16.h /usr/include
LLVMのインストール(Ubuntu 18.04)
メモリーが3GB以上ないと長い時間がかかったあげく、outofmemoryで失敗するので注意。
1.最初にSVNをインストールしておく (下記のサイトを参考にした) How to Install SVN Server on Ubuntu 18.04 & 16.04 LTS 但し、libapache2-svn がインストール出来なかった また、sudo service apache2 restart の位置は/etc/apache2/mods-enabled/dav_svn.c$ 変更が必要 203 sudo apt update 204 sudo apt upgrade 205 sudo apt autoremove 208 sudo apt install texinfo 211 sudo apt install perl 212 sudo apt install m4 213 sudo apt install autoconf 214 sudo apt install automake 215 sudo apt install libtool 216 sudo apt install apache2 218 sudo apt-get install subversion libapache2-mod-svn libsvn-dev 223 sudo a2enmod dav 224 sudo a2enmod dav_svn 226 sudo nano /etc/apache2/mods-enabled/dav_svn.conf Alias /svn /var/lib/svn DAV svn SVNParentPath /var/lib/svn AuthType Basic AuthName “Subversion Repository” AuthUserFile /etc/apache2/dav_svn.passwd Require valid-user 225 sudo service apache2 restart 228 sudo apt install graphviz xdot 233 sudo mkdir -p /var/lib/svn/ 234 sudo svnadmin create /var/lib/svn/myrepo 235 sudo chown -R www-data:www-data /var/lib/svn 236 sudo chmod -R 775 /var/lib/svn 237 sudo nano /etc/apache2/dav_svn.passwd 238 sudo htpasswd -cm /etc/apache2/dav_svn.passwd admin
2. llvm installation 229 mkdir llvm 230 cd llvm svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm cd llvm/tools svn co http://llvm.org/svn/llvm-project/cfe/trunk clang cd ../projects svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt mkdir ~/llvm/llvm-build cd ~/llvm/llvm-build ここから、http://llvm.org/docs/CMake.html を参考にした。 cmake ~/llvm/llvm cmake ?build . sudo cmake -DCMAKE_INSTALL_PREFIX=/usr/local/llvm -P cmake_install.cmake cmake ?build . ?target install nano ~/.bashrc export PATH=$PATH:/usr/local/llvm/bin source ~/.bashrc