Skip to content

Instantly share code, notes, and snippets.

@c9s
Last active August 29, 2015 14:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save c9s/3b1557897563ca5a9a3c to your computer and use it in GitHub Desktop.
Save c9s/3b1557897563ca5a9a3c to your computer and use it in GitHub Desktop.
Here are the instructions that I used to build HHVM on Mac OS 10.9 with Macports
#!/bin/bash
git clone --recursive git://github.com/facebook/hhvm.git
cd hhvm
git checkout -t origin/HHVM-3.2
wget http://www.canonware.com/download/jemalloc/jemalloc-3.6.0.tar.bz2
tar xvf jemalloc-3.6.0.tar.bz2
cd jemalloc-3.6.0
cat <<END | patch -p0 src/jemalloc.c
diff --git a/src/jemalloc.c b/src/jemalloc.c
index bc350ed..8959959 100644
--- a/src/jemalloc.c
+++ b/src/jemalloc.c
@@ -1312,7 +1312,6 @@ je_valloc(size_t size)
#define is_malloc_(a) malloc_is_ ## a
#define is_malloc(a) is_malloc_(a)
-#if ((is_malloc(je_malloc) == 1) && defined(__GLIBC__) && !defined(__UCLIBC__))
/*
* glibc provides the RTLD_DEEPBIND flag for dlopen which can make it possible
* to inconsistently reference libc's malloc(3)-compatible functions
@@ -1325,6 +1324,7 @@ je_valloc(size_t size)
JEMALLOC_EXPORT void (* __free_hook)(void *ptr) = je_free;
JEMALLOC_EXPORT void *(* __malloc_hook)(size_t size) = je_malloc;
JEMALLOC_EXPORT void *(* __realloc_hook)(void *ptr, size_t size) = je_realloc;
+#ifdef JEMALLOC_OVERRIDE_MEMALIGN
JEMALLOC_EXPORT void *(* __memalign_hook)(size_t alignment, size_t size) =
je_memalign;
#endif
END
mv bin/pprof bin/jemalloc-prof
./configure --disable-debug --prefix=/opt/local --with-jemalloc-prefix=
make
cd ..
wget http://cdn.mysql.com/Downloads/Connector-C/mysql-connector-c-6.1.5-osx10.7-x86.tar.gz
tar xvf mysql-connector-c-6.1.5-osx10.7-x86.tar.gz
MYSQL_CONN_C_DIR=$PWD/mysql-connector-c-6.1.5-osx10.7-x86
GCC=$(which gcc-mp-4.8)
GXX=$(which g++-mp-4.8)
prefix=/opt/local
PATH=/opt/local/libexec/elftoolchain:$PATH
git submodule update --init --recursive --force
time cmake . \
-Wno-dev \
-DCMAKE_CXX_COMPILER=$(which g++-mp-4.8) \
-DCMAKE_C_COMPILER=$(which gcc-mp-4.8) \
-DCMAKE_ASM_COMPILER=$(which gcc-mp-4.8) \
-DLIBIBERTY_LIB=$prefix/lib/gcc48/x86_64/libiberty.a \
-DCMAKE_PREFIX_PATH=$prefix \
-DCMAKE_INSTALL_PREFIX=$prefix \
-DCMAKE_INCLUDE_PATH="$prefix/include/gcc48/c++/parallel:$prefix/include:/usr/include" \
-DCMAKE_LIBRARY_PATH="$prefix/lib:/usr/lib" \
-DLIBDWARF_LIBRARIES=$prefix/lib/elftoolchain/libdwarf.3.dylib \
-DLIBDWARF_INCLUDE_DIRS=$prefix/include/elftoolchain \
-DLIBEVENT_LIB=$prefix/lib/libevent.dylib \
-DLIBEVENT_INCLUDE_DIR=$prefix/include \
-DLIBVPX_INCLUDE_DIRS=$prefix/include \
-DFREETYPE_INCLUDE_DIRS=$prefix/include/freetype2 \
-DFREETYPE_LIBRARIES=$prefix/lib/libfreetype.dylib \
-DLIBSQLITE3_INCLUDE_DIR=$prefix/include \
-DLIBSQLITE3_LIBRARY=$prefix/lib/libsqlite3.0.dylib \
-DJEMALLOC_INCLUDE_DIR=$prefix/include \
-DJEMALLOC_LIB=$prefix/lib/libjemalloc.dylib \
-DLibYaml_INCLUDE_DIRS=$prefix/include \
-DMYSQL_INCLUDE_DIR=$prefix/include/mysql55/mysql \
-DMYSQL_LIB=$prefix/lib/mysql55/mysql/libmysqlclient.dylib \
-DBOOST_INCLUDEDIR=$prefix/include \
-DBOOST_LIBRARYDIR=$prefix/lib \
-DBoost_USE_STATIC_LIBS=ON \
-DPCRE_INCLUDE_DIR=$prefix/include \
-DPCRE_LIBRARY=$prefix/lib/libpcre.dylib
time make -j4
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment