OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 21:21

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: Воскресенье, 07 Февраль, 2010 00:31 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
Я взялся за доработку подсистемы CDev (из сборки bb-revival-nix-0.1.tar.gz), задавшись целью создать компилятор КП для командной строки.
Компилятор состоит из "движка" (back-end) в виде доработанного модуля CDevCompiler, скомпонованного в cdev.dll, а также головной программы (front-end), написанной на Free Pascal (cpcc[.exe]).
На данный момент компилятор умеет только компилировать, создавая ocf и osf в директориях Code, Sym соответствующих подсистем. Отсутствует (пока) сборка в исполняемые файлы целевой ОС. Имея DevElflinker, уже можно двигаться в направлении Linux.
Итого, файлы планируется запускать с помощью загрузчика, использующего каркас в libBB[.dll/.so].

Последние новости читайте в сообщениях ниже этого.

Вложение:
cdev-20100416.zip [171.81 КБ]
Скачиваний: 246
исходные файлы.
Вложение:
cpcc-bin-win32.zip [353.92 КБ]
Скачиваний: 245
Бинарник для Win32. Внутри находится также простой пример исходного кода вместе с файлом проекта. Всё распаковать в системный корень БлэкБокса. Наличие blackbox[.exe] не обязательно для работы, а только набор подсистем для компиляции и сборки.

Файлы обновлёны. Версия 2010-04-16 с "движком" компилятора версии 1.1.3


Последний раз редактировалось Роман М. Суббота, 17 Апрель, 2010 00:44, всего редактировалось 4 раз(а).

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 18 Февраль, 2010 16:08 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
Выкладываю front-end, написанный на Free Pascal (cpcc [PE/Elf]). Возможно, его стоит написать в XDS. Сам CDevCompiler работает так, что сам ничего и никуда не выводит, а только хранит состояние компиляции, необходимой для считывания front-end'ом (то есть, номер ошибки, размер кода генерации и прочее).

Вложение:
cpcc-20100416.zip [12.6 КБ]
Скачиваний: 244
Для компиляции используется fpcmake. Читать INSTALLATION в директории doc.
Вложение:
DynLoader.zip [3.39 КБ]
Скачиваний: 248
Модули для межплатформенной загрузки динамических библиотек, необходимые для компиляции cpcc. Распаковать в корневую папку исходников cpcc.

Файлы обновлены.

Застрял пока на одном месте: при ошибке в компиляции выводится номер позиции каретки в исходном файле и я не знаю как его транслировать в номер строки и столбца (для дальнейшего толкования внешними инструментами, к примеру, в редакторах vim/SciTE). Компилировать можно, но находить ошибки по номеру каретки трудно, поэтому приходится действовать вслепую.


Последний раз редактировалось Роман М. Суббота, 17 Апрель, 2010 00:48, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 25 Февраль, 2010 00:16 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
Обновил файлы подсистемы CDev и исходные коды front-end консольного компилятора CPCC.

Решил проблему с показом номера строки и столбца, если есть ошибка.
Сообщения компилятора об ошибках в программе выводятся вместе с позицией строки и столбца.
Ошибки ввода-вывода на данный момент показывает численным значением. Позже добавлю, чтобы выводилось сообщение.

Нужно ещё добавить компоновку в исполняемые файлы...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 02 Март, 2010 13:33 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
Наконец-то сумел избавить модуль ElfLinker от некоторых зависимостей: Dialog, TextMappers, StdLog, DevCommanders. Я разделил его на две части, вынеся всё, что касается конкретно среды Блэкбокса в отдельный модуль CDevBuilder. А это обработка командера, всяких передаваемых параметров и подготовка списка модулей, надлежащих компиляции.
Код:
DEFINITION CDevBuilder;

   PROCEDURE LinkDll;
   PROCEDURE LinkDynDll;

END CDevBuilder.

CDevBuilder.LinkDll libtestbb.so := TestExport# ~

Таким образом,
  1. компоновщик ElfLinker занимается компоновкой и ничем больше. Он получает список модулей и связывает их в библиотеку / исполняемый код;
  2. проще писать новые компоновщики, так как упрощена база.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 10 Март, 2010 00:40 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
Вести с фронта. Добил таки связку front-end с компоновщиком.
Статус компилятора таков:
  1. проектировался как межплатформенная программа: загрузка библитеки компилятора с помощью LoadLibrary(Win32)/libdl(Linux), а пока только платформа x86;
  2. умеет компилировать модули в текстовых файлах, создавая ocf и osf;
  3. умеет компоновать в exe/dll (пока без обработки ресурсов);
  4. почти умеет компоновать в so (см. * ниже);
  5. в командной строке передаётся единственный параметр - имя файла проекта, представляющий из себя файл типа ini с описанием параметров проекта;
  6. выдаются сообщения об ошибках ввода/вывода, компиляции с позицией ошибки.

(*) Почти умеет компоновать в so, потому что выявились отличия в создаваемых библиотеках ElfLinker'ом. Как выяснилось, ElfLinker не экспортирует символы переменных, а только точки входа процедур - в отличие от Linker, исправно создающей DLL со всеми символами.

** Файлы обновлены.

Желающие могут пощупать бинарник под вин32.


Последний раз редактировалось Роман М. Среда, 10 Март, 2010 18:20, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 10 Март, 2010 08:06 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Теперь еще нужна краткая инструкция по пользованию. С описанием, что на входе, что на выходе.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 10 Март, 2010 12:24 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Роман М. писал(а):
Вести с фронта. ...
Движение создаёт оптимизм.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 10 Март, 2010 15:39 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
Двигателем прогресса является желание создать межплатформенный компилятор КП, создающий исполняемый код на целевых ОС.
Целью я поставил создание библиотек, состоящих из скомпонованных модулей и возможность использования сторонних библиотек целевой ОС (Windows-dll, Linux-so). То есть это хорошо для случая, когда необходимо создать независимый от BlackBox проект, выполняющийся обычным способом (exe/dll/so).

Касательно компилятора хочу посоветоваться.
Я решил отталкиваться от поставки BB 1.6RC5, поэтому к вам вопрос: устанавливать ли компилятор в корень дистрибутива ББ (необходим для компоновки модулей ББ) или же в отдельную директорию, создавая профиль с необходимой информацией о том где корень ББ, где лежит cdev.[dll/so] (а тут возможны подводные камни) ?

При этом остаётся возможность применения каркаса ББ с его динамически подгружаемыми модулями (ocf), если исключать этап компоновки в исполняемый код. Таким образом, возможно динамически загружать программу со всеми компонентами, используя libBlackBox (который ещё сырой). Этот вариант, пожалуй, стоит развивать. Однако, каркас прочно основавается на GUI, а с его портированием есть немало проблем. Тогда вырисовывается другой вариант: создание не-GUI каркаса, предоставляющего собой самый настоящий framework наподобие .NET (минимальный набор для динамической загрузки), тогда для пользовательского интерфейса останется поднапрячься с портированием HostWindows и прочих.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 10 Март, 2010 17:35 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
Пример файла проекта TestExport.prj:
Код:
[Project]
ProjectName=TestExport

[Compiler]
Module=CDev\Mod\Test1.cmps
CompilerOptions=

[Linker]
LinkedMods=TestExport#
LinkerMode=Dll
OutputFile=export.dll


Запускать в корневой директории BB
Код:
cpcc TestExport.prj


Если всё успешно, то на выходе получим export.dll.
Код:
D:\BBCBmod>cpcc TestExport.prj
Component Pascal command-line compiler
Compiling CDev\Mod\Test1.cmps
Compiled. pc=68, dsize=0
Linking
File export.dll written: 4608 164


Если есть ошибка в коде, то типа этого:
Код:
D:\BBCBmod>cpcc TestExport.prj
Component Pascal command-line compiler
Compiling CDev\Mod\Test1.cmps
1 error(s) detected
Error #0: undeclared identifier
Position: row=8, column=7


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 12 Апрель, 2010 08:40 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
Новости
Наконец-то получился рабочий вариант компилятора для ОС Linux, создающий библиотеки .so! Так что межОСность уже присутствует.

Ув. коллеги! :) Теперь можно писать компоненты, использующие сторонние библиотеки GNU/Linux. 8)

Итак,
Linux: libcdev.so + cpcc + [корень подсистемы BlackBox]
Windows: cdev.dll + cpcc.exe + [корень подсистемы BlackBox]

Примечание
Компиляция была отработана только на компонентах с единым модулем. Для компиляции проекта, состоящего из нескольких модулей, требуется доработка, потому что сборка будет успешной лишь в том случае, если все сборочные модули скомпилированы заранее.

Файлы выложу позже.

P.S.
А этот компилятор, вообще, кому-то, кроме меня, интересен?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 12 Апрель, 2010 09:00 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Роман М. писал(а):
Наконец-то получился рабочий вариант компилятора для ОС Linux, создающий библиотеки .so!...
P.S.
А этот компилятор, вообще, кому-то, кроме меня, интересен?
Есть штатный компилятор ББ и DevElfLinker, который делает библиотеки .so. Мне удобнее запускать оное хозяйство из-под wine; необходимости в консольном-исполняемом из-под Linux варианте пока не ощущаю.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 12 Апрель, 2010 12:13 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Евгений Темиргалеев писал(а):
необходимости в консольном-исполняемом из-под Linux варианте пока не ощущаю.
Время быстро идет... Но авторам, жаждущим признания, всегда кажется, что медленно :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 14 Апрель, 2010 15:03 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Роман М. писал(а):
А этот компилятор, вообще, кому-то, кроме меня, интересен?
Интересен, конечно.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 14 Апрель, 2010 20:58 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Роман М. писал(а):
А этот компилятор, вообще, кому-то, кроме меня, интересен?

Да.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 15 Апрель, 2010 12:52 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
Отлаживаю связку CDev с cpcc: пока не всё гладко работает; проверяю защиту "от дурака".

Спасибо за поддержку!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 15 Апрель, 2010 14:00 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
В первую очередь, это Ваш опыт - и разбирательства с ББ, и продумывания каких-то возможных схем...

А этим опытом в нужный момент где-то с кем-то поделитесь.

Так что, и сомневаться нечего - польза большая. :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 17 Апрель, 2010 00:56 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
Обновил файлы до версии 1.1.3 (см. сообщения № 1 и 2 в теме):
  1. CDev - компиляция и сборка для OS Linux/Windows: .so/.dll . 8)
  2. cpcc - улучшена обработка ошибок и дружелюбность к пользователю. Хотя сам факт наличия ошибок не отрицается. :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 16 Сентябрь, 2010 17:27 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Роман М. писал(а):
Обновил файлы до версии 1.1.3 (см. сообщения № 1 и 2 в теме):
Это функционально эквивалентно какому-нибудь gcc?
Из ЦЕРНа жалуются на состояние дел -- может, стоит туда дать информацию про этот компилятор?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Сентябрь, 2010 14:09 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
Info21 писал(а):
Роман М. писал(а):
Обновил файлы до версии 1.1.3 (см. сообщения № 1 и 2 в теме):
Это функционально эквивалентно какому-нибудь gcc?
Из ЦЕРНа жалуются на состояние дел -- может, стоит туда дать информацию про этот компилятор?
Похож на fpc/gcc в традиционном понимании компиляции.
Можно дать ссылку на страницу моего домашнего сайта: http://romiras.dyndns.org/doku/bbox/com ... l_compiler . Частично перевёл на английский. Дома постараюсь дописать полную документацию на английском.
Там же и бинарные сборки для Linux/Windows.


Последний раз редактировалось Роман М. Пятница, 06 Май, 2011 16:28, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Сентябрь, 2010 14:32 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
Планирую также написать межплаформенный компонент для динамической загрузки модулей, по подобию Dialog.Call, но без Блэкбокса.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB