Skip to content

Building and Installing on FreeBSD 8.2

rhinuxx edited this page Jun 13, 2012 · 50 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

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.13-stable.tar.gz
tar -zxf libevent-1.4.13-stable.tar.gz
cd libevent-1.4.13-stable
patch -p1 < ../hiphop-php/src/third_party/libevent-1.4.13.fb-changes.diff
./configure --prefix=$CMAKE_PREFIX_PATH
make
make install
cd ..
rm -rf libevent-1.4.13-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

Clone this wiki locally