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