Table of Contents
- Building and Installing on FreeBSD 8.2
- Fix before FreeBSD update
- Update FreeBSD
- Add required packages to build HPHP and HPHPI
- Add Jemalloc Support
- Fix for CClient 2007
- Create a directory for build
- Get the latest HipHop code
- Configure environment for GCC 4.6
- OR Configure environment for CLang 3.0 ( cd /usr/ports/lang/clang; make install clean )
- Build patched libevent
- Build patched CURL
- Apply unofficial patches (until official fixes)
- Configure libmap
- Build HipHop
- Misc
BSD IS NOT SUPPORTED BY THE HHVM TEAM - DO NOT EXPECT THIS TO WORK. These instructions are provided by the community, and your success may vary.
Building and Installing on FreeBSD 8.2
This walkthrough was tested with 64-bit 8.1, 8.2 and 9.0, but generally any FreeBSD with gcc46 should do.
Fix before FreeBSD update
mkdir -p /usr/src/lib/libc/gen
Update FreeBSD
freebsd-update fetch
freebsd-update install
Add required packages to build HPHP and HPHPI
pkg_add -r cmake flex bison re2c openssl gd libxml2 pcre oniguruma boost-libs libmemcached libmcrypt binutils expat mysql50-client wget tbb icu openldap24-client libexecinfo gcc46 gawk git cclient mc autoconf gmake
Add Jemalloc Support
cd /usr/src/contrib/ git clone git://canonware.com/jemalloc.git --depth=1 cd jemalloc autoconf ./configure --prefix=/usr/local gmake gmake install
It seems that git above is down, but the site is up. So one can use: http://www.canonware.com/download/jemalloc/ or https://github.com/jemalloc/jemalloc/tree/master
Fix for CClient 2007
cd /usr/local/lib ln -s libc-client4.so libc-client.so
Create a directory for build
mkdir ~/hhbuild cd ~/hhbuild mkdir libs
Get the latest HipHop code
git clone git://github.com/facebook/hhvm.git --depth=1 cd hhvm git submodule update --init --recursive
Configure environment for GCC 4.6
You'll have to do this every time you're going to use HipHop.
setenv CC /usr/local/bin/gcc46 setenv CXX /usr/local/bin/g++46 setenv CMAKE_PREFIX_PATH `pwd`/../libs
OR Configure environment for CLang 3.0 ( cd /usr/ports/lang/clang; make install clean )
setenv CC /usr/bin/clang setenv CXX /usr/bin/clang++ setenv CMAKE_PREFIX_PATH `pwd`/../libs
Build patched libevent
cd .. fetch https://github.com/downloads/libevent/libevent/libevent-1.4.14b-stable.tar.gz tar -zxf libevent-1.4.14b-stable.tar.gz cd libevent-1.4.14b-stable patch -p1 < ../hhvm/hphp/patches/libevent-1.4.14b.patch ./configure --prefix=$CMAKE_PREFIX_PATH make make install cd .. rm -rf libevent-1.4.14b-stable
Build patched CURL
fetch http://curl.haxx.se/download/curl-7.20.0.tar.gz tar -zxf curl-7.20.0.tar.gz cd curl-7.20.0 patch -p1 < ../hhvm/third-party/libcurl.fb-changes.diff ./configure --prefix=$CMAKE_PREFIX_PATH make make install cd .. rm -rf curl-7.20.0
If you have troubles compiling curl (conflicting types for 'libssh2_free') follow this path: bagder/curl@5997f54
Apply unofficial patches (until official fixes)
fetch http://cpp.in/dev/hphp-freebsd-20120214.patch cd hhvm patch < ../hphp-freebsd-20120214.patch
For FreeBSD 9.0 you're also need to apply libmemcached-1.0 support patch:
cd .. fetch http://cpp.in/dev/hphp-libmemcached-1.0.patch cd hhvm patch < ../hphp-libmemcached-1.0.patch
Configure libmap
Since HipHop is compiled with non-base gcc, you should make HipHop to use specific libstdc++. Put this to /etc/libmap.conf:
[hhvm] libstdc++.so.6 gcc46/libstdc++.so.6 [program] libstdc++.so.6 gcc46/libstdc++.so.6
Build HipHop
cmake . make
hhvm binary can be found in hphp/hhvm folder and is called hhvm
Misc
In case you're expiriencing occasional segfaults with 8.1, you should apply the patch from this PR: http://www.freebsd.org/cgi/query-pr.cgi?pr=154073