25 June 2009

Cocotron, свежие новости с фронта Objective-C

Open source
Cocotron — это реализация runtime для Objective-C, похожего на рантайм Apple — Cocoa. Он достаточно сильно отличается от другого популярного открытого рантайма — GNUstep, как в целях, так и в реализации.

Cocotron отлично подходит для портирования кода с платформы OSX на Win32. Конечно реализация API далека до идеала, но, как показывает практика, разработчики всегда быстро решают проблемы.

Изначально Cocotron использовался только при кросс-сборке на базе XCode и mingw-toolchain. При кросс-сборке доступно развертывание на Windows, Linux и Solaris.

Конечно такой подход оставлял в цепочке разработки самый сложный и дорогой этап — OSX (оптимально — на оригинальном железе). Возможность Cocotron, как платформы, не могла быть полностью раскрыта из-за этой зависимости.


Cocotron не может работать с оригинальным GCC, где используется другой runtime Objective-C. По этой причине GCC необходимо собрать с патчами Apple, которые, помимо всего прочего, немного расширяют язык от того, что есть в vanilla GCC.

Процесс установки GCC вполне традиционен, для начала необходимо скачать дерево исходных кодов:
svn checkout http://cocotron-tools-gpl3.googlecode.com/svn/trunk/gcc cocotron-gcc

и потом скомпилировать его:
mkdir gcc-build
cd gcc-build
../cocotron-gcc/configure --prefix=/opt/objc --with-gnu-as --with-gnu-ld --without-newlib --disable-multilib \
    --disable-libssp --disable-nls --disable-libobjc --enable-libffi --enable-objc-gc \
    --enable-languages=c,objc,c++,obj-c++  --enable-checking=release
make -j2
sudo make install

здесь я испльзую префикс /opt/objc для GCC и Cocotron.

Как вариант — можно использовать собранный deb пакет, который любезно предоставил новоприбывший хабровчанин pfactum.

Теперь можно перейти к конкретно сборке Cocotron. На данный момент нативная сборка поддерживается для Linux, OpenBSD (и, вероятно, FreeBSD) и Darwin (т.е. OSX). Для сборки необходимо забрать форк официального дерева с github:
git clone git://github.com/farcaller/cocotron.git
cd cocotron
git checkout origin/native-build -b native-build

(кстати ветка master автоматически синхронизируется с официальным svn, так что если кто-то хочет «поковырять» исходники и предпочитает git — милости прошу).

Система сборки основана на CMake, причем не моложе 2.6:
mkdir build
cd build
cmake -DCMAKE_C_COMPILER=/opt/objc/bin/gcc \
    -DCMAKE_CXX_COMPILER=/opt/objc/bin/g++ \
    -DCMAKE_INSTALL_PREFIX=/opt/objc ..
make
sudo make install

пока что она собирает только Foundation, работа над скриптами сборки AppKit в процессе.

Собранную библиотеку можно протестировать:
cat > test.m <<EOF
#import <Foundation/Foundation.h>

int main(int argc, char *argv[])
{
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
        NSLog(@"Hello, Objective-C World!");

        [pool drain];
        return 0;
}
EOF

/opt/objc/bin/gcc test.m -o test -I/opt/objc/include -L/opt/objc/lib \
  -lFoundation -lpthread -ldl


Я надеюсь, что развитие Cocotron привлечет к нему новых разработчиков и повысит популярность Objective-C, очень интересного языка программирования.
Tags:objective-ccocoacocotronopen source
Hubs: Open source
+24
1.8k 10
Comments 29