mizdra's blog

ぽよぐらみんぐ

管理者権限無しでCentOS 6.5上にC++開発環境を作成した時のメモ

大学の講義てC++を書いていて、大学のPC上でもシンタックスハイライトとか補完とかを効かせながらC++コーディングしたいなと思っていた。 以下はvimで良い感じのC++開発環境を構築したときのメモ。

目標 & 方針

  • clangの導入
  • vimC++開発
  • sudo権限がなく、yumなどの付属のパッケージマネージャを利用することができないので、自前でビルドし、porgでインストールする
    • バイナリは~/localフォルダにインストールする
    • ただし、vimプラグインはneobundle.vimを使って.vim/bundleにインストールする

環境

  • CentOS(x86_64) 6.5
  • sudo権限を持たないユーザで作業
  • シェルはtcsh
  • インストールされているvimluaが有効になっていない

(大学のサーバなのでセキュリティ上あまり詳しいことは書けない…)

準備

  • ~/localディレクトリを作成し、~/local/binにPATHを通しておく
  • neobundle.vimを導入しておく

インストールしたもの一覧

欲しいものはllvm, vim-clang, color_codedのみだが、依存パッケージのインストールされていたバージョンが低かったり、そもそもインストールされていなかったりしていたので、合計10個のパッケージを新規インストールすることになった。

  1. porg 0.8 (パッケージ管理に使用)
  2. gcc 6.1.0
  3. python 2.7.11
  4. cmake 3.5.2
  5. llvm 3.8.0 (python 2.7+, gcc 4.7.0+に依存、build時にcmake 3.4.3+が必要)
  6. lua 5.3.2
  7. vim 7.4 (luaに依存)
  8. vim-clang (clang, vimに依存)
  9. glibc 2.17
  10. color_coded (clang, vim 7.4p330+, lua 5.1+, gcc 4.9+, glibc 2.15+に依存)

1から順にインストールしていく。

1. porgのインストール

$ tar xzvf porg-0.8.tar.gz
$ cd porg-0.8
$ ./configure --disable-grop --prefix=$HOME/local
$ make
$ make install
$ make logme

2. gccのインストール

# `ftp.tsukuba.wide.ad.jp/software/gcc/releases/`から最新版のgccをDLする
$ wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-6.1.0/gcc-6.1.0.tar.gz
$ tar xf gcc-6.1.0.tar.gz
$ cd gcc-6.1.0

# 必要なパッケージのDL
$ contrib/download_prerequisites

# ビルド用ディレクトリ作成
$ mkdir ../build
$ cd ../build

# configure
$ ../configure --disable-multilib --enable-languages=c,c++ --host=x86_64-redhat-linux --build=x86_64-redhat-linux --target=x86_64-redhat-linux --disable-libgcj --with-system-zlib --enable-checking=release --prefix=$HOME/local --with-local-prefix=$HOME/local

# ビルド(時間掛かる)
$ make -k -j8 STAGE1_CFLAGS='-march=core2 -O3' BOOT_CFLAGS='-march=native -Os' >& /dev/null && echo "GCCビルド成功" || echo "GCビルド失敗"
$ porg -lp gcc-6.1.0 "make install"

3. pythonのインストール

$ wget https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tar.xz
$ tar xf Python-2.7.11.tar.xz
$ cd Python-2.7.11
$ ./configure --host=x86_64-redhat-linux --build=x86_64-redhat-linux --target=x86_64-redhat-linux --prefix=$HOME/local CFLAGS="-march=core2 -O3"
$ make -j8
$ porg -lp python-2.7.11 "make install"

4. cmakeのインストール

$ wget https://cmake.org/files/v3.5/cmake-3.5.2.tar.gz
$ tar xf cmake-3.5.2.tar.gz
$ cd cmake-3.5.2
$ ./configure --prefix=$HOME/local
$ make -j8
$ porg -lp cmake-3.5.2 "make install -j8"

5. llvmのインストール

# llvmのDL
svn co http://llvm.org/svn/llvm-project/llvm/tags/RELEASE_380/final llvm

# clangのDL
cd llvm/tools
svn co http://llvm.org/svn/llvm-project/cfe/tags/RELEASE_380/final clang
cd ../...

# compiler-rtのDL
cd llvm/tools/clang/tools
svn co http://llvm.org/svn/llvm-project/clang-tools-extra/tags/RELEASE_370/final extra
cd ../../../..

# ビルド用ディレクトリ作成
$ mkdir build
$ cd build
$ cmake -G "Unix Makefiles" -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_ASM_COMPILER=gcc -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$HOME/local -DGCC_INSTALL_PREFIX="${HOME}/local" -DLLVM_PARALLEL_COMPILE_JOBS=8 -DLLVM_PARALLEL_LINK_JOBS=8 -DLLVM_TARGETS_TO_BUILD="X86" ../

# ビルド(すごく時間掛かる)
$ make -j8

$ porg -lp llvm-3.8.0 "make install"

6. luaのインストール

$ wget http://www.lua.org/ftp/lua-5.3.2.tar.gz
$ tar zxvf lua-5.3.2
$ cd lua-5.3.2
$ make linux
$ porg -lp lua-5.3.2 "make install INSTALL_TOP=$HOME/local"

# 確認
$ lua -v
Lua 5.3.2  Copyright (C) 1994-2015 Lua.org, PUC-Rio

7. vimのインストール

$ wget https://github.com/vim/vim/archive/master.zip
$ unzip -d vim master.zip
$ cd vim/src
$ ./configure --enable-multibyte --enable-xim --enable-fontset --enable-luainterp --with-features=huge --disable-selinux --prefix=$HOME/local --enable-luainterp=yes --with-lua-prefix=$HOME/local --enable-rubyinterp=yes --enable-pythoninterp=yes --with-python-config-dir=$HOME/local/lib/python2.7/config
$ make -j8
$ porg -lp vim-7.4 "make install"

# 確認
$ ./vim --version | grep +lua
+dialog_con_gui  +lua             +rightleft       +windows

8. vim-clangのインストール

vimプラグインマネージャを利用すれば簡単にインストールできるので省略。

9. glibcのインストール

$ wget http://ftp.gnu.org/gnu/glibc/glibc-2.17.tar.gz
$ tar zxvf glibc-2.17.tar.gz
$ mkdir glibc-2.17/build
$ cd glibc-2.17/build

# パスが通ってるディレクトリに入れると既存のglibcと競合して不具合が発生するので、ここでは``$HOME/local/glibc-2.17``に入れた
$ ../configure --prefix=$HOME/local/glibc-2.17 --enable-shared --disable-profile --disable-debug

$ make

# 以下を実行するとエラーが発生する。恐らくバグ。今のところ無視しても問題なく動作している。
# $ make check

$ porg -lp glibc-2.17 "make install"

10. color_codedのインストール

vimプラグインマネージャを利用すれば簡単にインストールできるので、詳細は省略。
ただし、color_codedは使用する前にビルドしておく必要があるが、その際にglib 1.15+へのパスを教えてあげなければ正しくビルドが行えない。
自分はneoBundle.vimを使っていたので以下のように設定した。

NeoBundleLazy 'jeaye/color_coded', {
  \ 'build': {
  \   'unix': 'cmake -DCUSTOM_CLANG=1 -DLLVM_ROOT_PATH=$HOME/local/glibc-2.17 . && make && make install',
  \ },
  \ 'autoload': { 'filetypes' : ['c', 'cpp', 'objc', 'objcpp'] },
  \ 'build_commands' : ['cmake', 'make'],
  \ 'external_commands' : ['clang']
\}

動作確認

適当に.vimrc書いてcppファイルを開いてみた。 f:id:mizdra:20160618170226p:plain ちゃんと動いた。めでたしめでたし。