Yoksel: Блог/2008?/07?/08?/СборкаКомпилятораOcaml ...
SourceForge.net Logo

Home Page | Изменения / НовыеКомментарии / Справка / Помочь проекту | Вход:  Пароль:  

Блог OCaml?

Сборка компилятора O'Caml из исходников


Проблема состоит в том, что рантайм-библиотеки O'Caml (которые входят в бинарный дистрибутив) собраны с использованием библиотек VS2005. В результате, в моем обычном окружении (часть заголовков и библиотек от VC6), нативные модули O'Caml не собираются – валится линковка на security_cookie и прочей ботве из VC8. В принципе, можно было бы забить на это дело и собирать в стандартном окружении для VS2005. При связывании O'Caml с C++ в принципе нет потенциальных граблей с выделением памяти в одном модуле и освобождении в другом – языки сильно разные, поэтому там даже мысли не возникает насчет подобной работы с памятью :). Однако, есть пара соображений против подобного «забивания»:


Поэтому, думаю, умение собирать O'Caml при помощи ICC + хедеры и либы от VC6 будет небесполезным.

Получение нужных компонентов

Скачать O'Caml можно отсюда: http://caml.inria.fr/ocaml/release.en.html
Для сборки понадобится “Source tarball”. Кстати, можно еще скачать собранные бинарники – они тоже небесполезны.


O'Caml использует TCL/TK версии 8.4. Взять можно здесь: http://www.activestate.com/products/ActiveTcl/


Сборка происходит в среде CygWin. Взять можно здесь: http://www.CygWin.com/

Подготовка к сборке

Установка CygWin

При установке CygWin устанавливается только минимальный набор пакетов, недостаточный для сборки. Сверх минимального набора пакетов нам понадобится только пакет “make”.


При сборке в CygWin будет обламываться линковка из-за того, что в CygWin входит утилита link.exe, которая скрывает link.exe от Студии. Проблему можно решить модификацией переменной PATH – поставить пути к Студии раньше, чем пути к CygWin/bin. Я решил проблему проще: переименовал CygWin'овый link :)


Модификация CygWin.bat. Для подготовки среды сборки нужно установить ряд переменных окружения типа PATH, LIB и INCLUDE. Т.к. я не силен работе с линуксовой командной строкой, то вместо настройки из CygWin я просто модифицировал стартовый файл CygWinCygWin.bat. Я просто добавил туда содержимое vsvars32 и iclvars из Студии и ICC. К переменной LIB нужно дополнительно добавить путь к библиотекам TCL: D:/Tcl/lib.


После настройки CygWin, запускаем ее и выполняем, согласно инструкции, следующие подготовительные команды:

Настройка makefile

В каталоге D:\OCaml\ocaml-3.10.2\config необходимо отредактировать makefile:

Обработка напильником исходников O'Caml

Допиливание связано с тем, что make обламывается на переводах строки в стиле Windows – оно ожидает их в линуховом формате. Возможно, здесь я сам прокосячил – при установке CygWin выдается запрос какие переводы строк следует поддерживать. Linux-формат стоял как “recommended”, поэтому я его и выбрал.


Итак, допилить нужно следующие файлы:

Сборка

Просто выполняем в CygWin команды по инструкции:

Проверка

Запускаем из командной строки все необходимые батники для установки переменных окружения и запускаем на компиляцию вот этот учебный пример:


командой

Если все сделано правильно, то на выходе получим полностью самостоятельный EXE размером 335К. Тогда как EXE, собранный студийным компилятором, весит, примерно, 275К. Признаки компилятора Интел налицо :)

Примечания

Возможно, люди, которые лучше разбираются с командной строкой Линукса, могли бы предложить более прямой способ сборки. Мне же CygWin был нужен только для сборки, поэтому я с ним особо не церемонился.


Реально для сборки программ на O'Caml нужны только пересобранные рантайм-библиотеки, а не вообще весь компилятор, его рантайм и прикладные библиотеки. Вероятно, существует более простой способ, которым можно собрать только рантайм-библиотеки.


Ссылок на эту страницу нет


 
Файлов нет. [Показать файлы/форму]
Комментариев нет. [Показать комментарии/форму]