Skip to content

Building and Installing on FreeBSD 8.2

pgbi edited this page Nov 13, 2012 · 30 revisions

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 gcc44 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 gcc44 gawk git cclient mc

* gcc44 seems to be the most optimal option since other versions may produce broken or buggy builds.

Add Jemalloc Support

cd /usr/src/contrib/
git clone git://canonware.com/jemalloc.git
autoconf
./configure --prefix=/usr/local
gmake
gmake install

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/hiphop-php.git
cd hiphop-php
git submodule init
git submodule update

(Optional) To build the older non-HHVM version

We're still working on getting HHVM building smoothly on all platforms, if you run into trouble you can't resolve, try reverting to an older version of the codebase using:

git checkout pre-hhvm

Configure environment for GCC 4.4

You'll have to do this every time you're going to use HipHop.

setenv CC /usr/local/bin/gcc44
setenv CXX /usr/local/bin/g++44
setenv HPHP_HOME `pwd`
setenv HPHP_LIB `pwd`/bin
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 HPHP_HOME `pwd`
setenv HPHP_LIB `pwd`/bin
setenv CMAKE_PREFIX_PATH `pwd`/../libs

Build patched libevent

cd ..
fetch https://github.com/downloads/libevent/libevent/libevent-1.4.14-stable.tar.gz
tar -zxf libevent-1.4.14-stable.tar.gz
cd libevent-1.4.14-stable
patch -p1 < ../hiphop-php/src/third_party/libevent-1.4.14.fb-changes.diff
./configure --prefix=$CMAKE_PREFIX_PATH
make
make install
cd ..
rm -rf libevent-1.4.14-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 < ../hiphop-php/src/third_party/libcurl.fb-changes.diff
./configure --prefix=$CMAKE_PREFIX_PATH
make
make install
cd ..
rm -rf curl-7.20.0

Apply unofficial patches (until official fixes)

fetch http://cpp.in/dev/hphp-freebsd-20120214.patch
cd hiphop-php
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 hiphop-php
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:

[hphp]
libstdc++.so.6 gcc44/libstdc++.so.6

[hphpi]
libstdc++.so.6 gcc44/libstdc++.so.6

[program]
libstdc++.so.6 gcc44/libstdc++.so.6

Build HipHop

cmake .
make

hphp binary can be found in src/hphp folder and is called hphp

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