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
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.