Skip to content

Building and Installing on FreeBSD 8.2

Fred Emmott edited this page Jan 29, 2015 · 50 revisions

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: https://github.com/bagder/curl/commit/5997f54?diff=unified

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

Clone this wiki locally