官网很详细
https://github.com/facebook/hiphop-php/wiki/_pages
简介
大约两年前,Facebook首次推出了HipHop。它是一个源代码转换器,将PHP代码转换为高度优化的C++代码,然后再使用g++编译器编 译。HipHop被Facebook广泛运用,其网站所有PHP代码都经HipHop转换过,旗下其他网站也采用HipHop来优化。 不过,最初代码是由一个HipHop静态编译器转换的。即PHP代码先编译成二进制形式,然后再部署。该方法有个重大问题,因为它使得维护及优化代码更加 困难,且其增加的几个环节也使得bug更容易进入。
在随后的开发中,Facebook使用了一个可以即时转换的HipHop解释器HPHPi。它比之前的编译器要缓慢得多,但相对于每个变化都得编译的情况要好很多。但这也意味着Facebook需要同时维护编译器和HPHPi两个HipHop工具。
在这种情况下,一个新的HipHop虚拟机(HHVM)诞生了。Facebook的工程师介绍,它是一个PHP的JIT(Just-In- Time)编译器,同时具有产生快速代码和即时编译的优点。Facebook表示,HHVM将替代HPHPi,用于所有的PHP执行。根据 Facebook透漏,HHVM在速度方面获得了显著改进,比目前使用的PHP解释器快60%,而使用内存减少90%。
Facebook于12年十二月初发布了一个博文,宣布他们的解释型PHP运行环境HHVM(HipHop VM)已经达到甚至超过了编译型PHP运行环境HipHop的运行速度。
Facebook现在已将HHVM开源,同时弃用了HPHPi并移除了对它的构建支持。到2013年中期,他们将不再支持 HPHPc。HHVM提供了支持Ubuntu 12.04的预构建包以及支持CentOS 6.3的构建说明,而对FreeBSD 9和Mac OS的支持将于明年HPHPc退役之后再提供。
目前HipHop只支持64位,并且在128M的内存上编译会有问题!
安装
系统环境
- 系统(Linux):RHEL 6.3 x86_64
- 依赖包:
cmake 2.6 is the minimum version g++/gcc 4.3 is the minimum version Boost 1.37 is the minimum version flex bison re2c libmysql libxml2 libmcrypt libicu 4.2 is the minimum version openssl binutils libcap gd zlib tbb Intel's Thread Building Blocks Oniguruma libpcre libexpat libmemcached google-glog (http://code.google.com/p/google-glog/)
下面两个是需要打补丁的,这个两个补丁在hiphop的源代码中
libcurl src/third_party/libcurl.fb-changes.diff libevent 1.4 src/third_party/libevent-1.4.13.fb-changes.diff OR src/third_party/libevent-1.4.14.fb-changes.diff
安装依赖包
下面只给出需要编译的依赖包,其他软件包都可以通过yum来安装,这里需要注意的是:
安装GCC4.6
cd gmp-4.3.2 ./configure --prefix=/usr/local/gmp --build=x86_64-linux make make install cd mpfr-2.4.2 ./configure --prefix=/usr/local/mpfr --with-gmp=/usr/include/ make make install cd mpc-0.8.1 ./configure --prefix=/usr/local/mpc --with-gmp=/usr/include/ --with-mpfr=/usr/local/mpfr/ make make install cd gcc-4.6.1 ./configure --prefix=/usr/local/gcc -enable-threads=posix -disable-checking -disable-multilib -enable-languages=c,c++ -with-mpfr=/usr/local/mpfr/ -with-mpc=/usr/local/mpc/ -with-gmp=/usr/include/ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc/lib:/usr/local/gmp/lib:/usr/local/mpfr/lib/ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc/lib:/usr/lib:/usr/local/mpfr/lib/ make make install cp gcc.4.6.1.conf /etc/ld.so.conf.d/gcc.4.6.1.conf ldconfig mv /usr/bin/gcc /usr/bin/gcc_old mv /usr/bin/g++ /usr/bin/g++_old ln -s -f /usr/local/gcc/bin/gcc /usr/bin/gcc ln -s -f /usr/local/gcc/bin/g++ /usr/bin/g++ cp /usr/local/gcc/lib64/libstdc++.so.6.0.16 /usr/lib64/. mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.bak ln -s -f /usr/lib64/libstdc++.so.6.0.16 /usr/lib64/libstdc++.so.6
下载hiphop,解压缩,配置环境
cd hiphop-php export CMAKE_PREFIX_PATH=`/bin/pwd`/.. export HPHP_HOME=`/bin/pwd` export HPHP_LIB=`/bin/pwd`/bin export USE_HHVM=1 cd ..
安装libevent,打hiphop的补丁
cd libevent-release-1.4.14b-stable cat ../hiphop-php/src/third_party/libevent-1.4.14.fb-changes.diff | patch -p1 ./autogen.sh ./configure --prefix=$CMAKE_PREFIX_PATH make make install
安装libCurl,打hiphop的补丁
cd curl-master cat ../hiphop-php/src/third_party/libcurl-7.22.1.fb-changes.diff | patch -p1 ./buildconf ./configure --prefix=$CMAKE_PREFIX_PATH make make install
安装libunwind
cd libunwind-1.0 ./configure --prefix=$CMAKE_PREFIX_PATH make make install
安装libmemcached
cd libmemcached-0.49 ./configure --prefix=$CMAKE_PREFIX_PATH make make install
安装tbb
cd tbb40_20120613oss make mkdir -p /usr/include/serial cp -a include/serial/* /usr/include/serial/ mkdir -p /usr/include/tbb cp -a include/tbb/* /usr/include/tbb/ cp build/linux_intel64_gcc_cc4.4.6_libc2.12_kernel2.6.32_release/libtbb.so.2 /usr/lib64/ ln -s /usr/lib64/libtbb.so.2 /usr/lib64/libtbb.so
安装libdwarf
cd dwarf-20121130/ ./configure make cp libdwarf.a $CMAKE_PREFIX_PATH/lib64/ cp libdwarf.h $CMAKE_PREFIX_PATH/include/ cp dwarf.h $CMAKE_PREFIX_PATH/include/
安装boost,在1.52.0时候编译hiphop失败,只有在1.50.0编译才成功
cd cd boost_1_50_0/ ./bootstrap.sh --prefix=$CMAKE_PREFIX_PATH --libdir=$CMAKE_PREFIX_PATH/lib ./bjam --layout= system install export Boost_LIBRARYDIR=/root/hiphop-php/include/boost/
安装jemalloc
tar xjvf jemalloc-3.0.0.tar.bz2 cd jemalloc-3.0.0 ./configure --prefix=$CMAKE_PREFIX_PATH make make install cd ..
安装HIPHOP
cd hiphop-php git submodule init git submodule update export HPHP_HOME=`pwd` export HPHP_LIB=`pwd`/bin cmake . make
运行
编译执行配置文件
/usr/bin/hhvm –mode daemon –user nobody –config /home/dev/hiphop-php/hhvm.hdf
转载请注明文章转自:良玉的博客 [http://blog.uouo123.com]