martes, 12 de octubre de 2010

HDK in the Mac. Using hcustom with Leopard

Well, I have recently tried to compile some custom SOPs in my Mac.
No luck at the beggining so I begin to as in the Houdini Mailing list, Odforce, but no luck.
In my first try I got these errors:
Making SOP_Flatten.o and
/Users/pablo/Library/Preferences/houdini/11.0/dso/SOP_Flatten.dylib
from SOP_Flatten.C
cc1plus: warning: command line option "-fobjc-gc-only" is valid for
ObjC/ObjC++ but not for C++
/Library/Frameworks/Houdini.framework/Resources/toolkit/include/SYS/SYS_AtomicImpl.h:
In function ‘int32 SYS_AtomicImpl::test_and_add(int32*, int)’:
/Library/Frameworks/Houdini.framework/Resources/toolkit/include/SYS/SYS_AtomicImpl.h:345:
error: ‘__sync_fetch_and_add’ was not declared in this scope
/Library/Frameworks/Houdini.framework/Resources/toolkit/include/SYS/SYS_AtomicImpl.h:
In function ‘int32 SYS_AtomicImpl::compare_and_swap(int32*, int32,
int32)’:
/Library/Frameworks/Houdini.framework/Resources/toolkit/include/SYS/SYS_AtomicImpl.h:351:
error: ‘__sync_val_compare_and_swap’ was not declared in this scope
/Library/Frameworks/Houdini.framework/Resources/toolkit/include/SYS/SYS_AtomicImpl.h:
In function ‘int64 SYS_AtomicImpl::test_and_set64(int64*, int64)’:
/Library/Frameworks/Houdini.framework/Resources/toolkit/include/SYS/SYS_AtomicImpl.h:358:
error: ‘__sync_lock_test_and_set’ was not declared in this scope
/Library/Frameworks/Houdini.framework/Resources/toolkit/include/SYS/SYS_AtomicImpl.h:
In function ‘int64 SYS_AtomicImpl::test_and_add64(int64*, int64)’:
/Library/Frameworks/Houdini.framework/Resources/toolkit/include/SYS/SYS_AtomicImpl.h:365:
error: ‘__sync_fetch_and_add’ was not declared in this scope
/Library/Frameworks/Houdini.framework/Resources/toolkit/include/SYS/SYS_AtomicImpl.h:
In function ‘int64 SYS_AtomicImpl::compare_and_swap64(int64*, int64,
int64)’:
/Library/Frameworks/Houdini.framework/Resources/toolkit/include/SYS/SYS_AtomicImpl.h:372:
error: ‘__sync_val_compare_and_swap’ was not declared in this scope
/Library/Frameworks/Houdini.framework/Resources/toolkit/include/SYS/SYS_AtomicImpl.h:
In function ‘void SYS_AtomicImpl::store(int32*, int32,
SYS_MemoryOrder)’:
/Library/Frameworks/Houdini.framework/Resources/toolkit/include/SYS/SYS_AtomicImpl.h:389:
error: ‘__sync_synchronize’ was not declared in this scope
/Library/Frameworks/Houdini.framework/Resources/toolkit/include/SYS/SYS_AtomicImpl.h:399:
error: ‘__sync_lock_release’ was not declared in this scope
/Library/Frameworks/Houdini.framework/Resources/toolkit/include/SYS/SYS_AtomicImpl.h:405:
error: ‘__sync_lock_test_and_set’ was not declared in this scope
/Library/Frameworks/Houdini.framework/Resources/toolkit/include/SYS/SYS_AtomicImpl.h:
In function ‘int32 SYS_AtomicImpl::load(const int32*,
SYS_MemoryOrder)’:
/Library/Frameworks/Houdini.framework/Resources/toolkit/include/SYS/SYS_AtomicImpl.h:428:
error: ‘__sync_synchronize’ was not declared in this scope
/Library/Frameworks/Houdini.framework/Resources/toolkit/include/SYS/SYS_AtomicImpl.h:435:
error: ‘__sync_val_compare_and_swap’ was not declared in this scope
Compile failed


I am using Mac OS X 10.5.X, Leopard. So asking to SESI seems I have some problems with the gcc version.
I have been using Xcode 3.0 which uses gcc 4.0.1, whereas Houdini is compiled against gcc 4.2.
So I installed Xode 3.1.3, which is the latest version for Leopard and includes gcc-4.2.
You can grab it from here:
http://connect.apple.com/cgi-bin/WebObjects/MemberSite.wo/wa/getSoftware?bundleID=20414
Now, how to use it, you can go to the dirty solution, removing cd gcc links in /usr/bin and make new ones pointing to gcc-4.2:

cd /usr/bin
rm cc gcc c++ g++
ln -s gcc-4.2 cc
ln -s gcc-4.2 gcc
ln -s c++-4.2 c++
ln -s g++-4.2 g++

Or the clean solution, don't touch the system just add some environment variables:

# Use GCC 4.2 rather tha GCC 4.0
export CC="/usr/bin/gcc-4.2"
export CPP="/usr/bin/cpp-4.2"
export CXX="/usr/bin/g++-4.2"
# Use GCC 4.2 for HDK
export HOUDINI_CC=$CXX

I put the text above in my ~/.bashrc
The first thre variables are for the usual GNU tools.
The last one is used by hcompile, the script called by hcustom to compile your DSO.
Now you can try hcustom and see your DSOs happily compiled.
Happy hacking!

No hay comentarios:

Publicar un comentario