Hip-Hop PHP, OSX, Debian, Ubuntu, etc…

Zassałem, zmieniłem CMake pod OSX’a żeby ładnie rozpoznawało ścieżki i biblioteki ale niestety chwilowo poległem na CMake bibliotek typowo Facebook’owych – jutro reszta, podzielę się na githubie co narzeźbiłem ;]

Edit:

Dzień kolejny, ranek, piję kawe w duuużym kubki i zabieram się za Hip-Hop’a sprawa na razie stanęła na CMake dla libsów:

    bash-3.2# cmake .
    -- MySQL Include dir: /opt/local/include/mysql5/mysql  library dir: /opt/local/lib/mysql5/mysql
    -- MySQL client libraries: mysqlclient
    -- Found libevent: /opt/local/lib/libevent.dylib
    -- Found GD: /opt/local/lib/libgd.dylib
    -- Looking for curl_multi_select
    -- Looking for curl_multi_select - not found
    CMake Error at CMake/HPHPFindLibs.cmake:78 (message):
      Custom libcurl is required with HipHop patches
    Call Stack (most recent call first):
      CMake/HPHPSetup.cmake:2 (include)
      src/CMakeLists.txt:18 (include)


    -- Found ICU header files in /opt/local/include
    -- Found ICU libraries: /opt/local/lib/libicuuc.dylib
    -- Found Intel TBB
    -- Found mcrypt: /opt/local/lib/libmcrypt.dylib
    -- Found OpenSSL: /usr/lib/libssl.dylib;/usr/lib/libcrypto.dylib
    CMake Error at CMake/HPHPFindLibs.cmake:153 (message):
      You need to install libcap
    Call Stack (most recent call first):
      CMake/HPHPSetup.cmake:2 (include)
      src/CMakeLists.txt:18 (include)


    -- Configuring incomplete, errors occurred!

Zmiana libcap w taki sposób aby działał na OSX’ie – no sorry nie da rady ;) aż tyle czasu to ja niestety nie mam, a problem raczej polega na tym – że zamiast zmieniać libcap’a to zmienić hip-hopa żeby go nie wymagał, ale to raczej robota dla developerów. Wysłałem już małego posta na listę (okazało się, że moderowaną ehh… ) ciekaw jestem kiedy będzie jakiś odzew ze strony devel facebookowych.

Teraz spokojnie sobie komplikuję Hip-Hop na serwerku (generalnie Debian, ale na Ubuntu będzie podobnie :D ):

Using built-in specs.
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 4.4.2-9' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --program-suffix=-4.4 --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --with-arch-32=i486 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.4.3 20100108 (prerelease) (Debian 4.4.2-9)

Według wszelkich znaków na niebie i ziemi powinno to bez większych problemów przejść i w efekcie dać mi ładną binarkę.
Minut parę potem….

(...)
-- Configuring done
-- Generating done
-- Build files have been written to: /home/paramah/Projects/hiphop-php

Dobra tak więc nadszedł czas na wykonanie magicznej komendy make

Scanning dependencies of target afdt
[  0%] Building C object src/third_party/libafdt/CMakeFiles/afdt.dir/src/lowlevel.c.o
[  0%] Building C object src/third_party/libafdt/CMakeFiles/afdt.dir/src/strlcpy.c.o
[  0%] Building C object src/third_party/libafdt/CMakeFiles/afdt.dir/src/sync.c.o
[  0%] Building C object src/third_party/libafdt/CMakeFiles/afdt.dir/src/util.c.o
[  0%] Building C object src/third_party/libafdt/CMakeFiles/afdt.dir/src/async.c.o
Linking C static library ../../../bin/libafdt.a

I czekamy…. po paru minutach

Linking CXX executable hphp
Building hphpi
[ 87%] Built target hphp
(...)
[100%] Building CXX object src/test/CMakeFiles/test.dir/test_ext_apc.cpp.o
[100%] Building CXX object src/test/CMakeFiles/test.dir/test_transformer.cpp.o
Linking CXX executable test
[100%] Built target test

Wielkość binarki jest dość imponująca:

du -h ./hphp
17M ./hphp

Nice ;)

Wynik:

./hphp hello.php --keep-tempdir=1 --log=3
running hphp...
creating temporary directory /tmp/hphp_839yK9 ...
parsing inputs...
parsing ./hello.php...
parsing inputs took 0'00" (6 ms) wall time
pre-optimizing...
pre-optimizing took 0'
00" (0 ms) wall time
inferring types...
inferring types took 0'00"
(0 ms) wall time
post-optimizing...
post-optimizing took 0'00" (0 ms) wall time
creating CPP files...
creating CPP files took 0'
00" (92 ms) wall time
compiling and linking CPP files...

compiling and linking CPP files took 1'23"
(83851 ms) wall time
running executable /tmp/hphp_839yK9/program --file hello.php...
HipHop
all files saved in /tmp/hphp_839yK9 ...
running hphp took 1'24" (84732 ms) wall time

Reszta testów potem ;)

Działa i to jest dobre, zobaczymy jak kompilacja moich aplikacji, ale o tym następnym razem.