FreeType2 для Колибри (масштабируемые векторные шрифты)

Discussing libraries simplifying applications development
  • Спасибо... Помогло. Не заметил, что имя неправильное у файла.
    теперь все так же, как с другими примерами menuetlibc, подключающими библиотеки:
    /home/sourcerer/projects/me/lib/libc.a(remove.o): In function `remove':
    remove.c:(.text+0x9a): undefined reference to `__stack_chk_fail'

    И не линкуется. Интересно, это исправлял уже кто-нибудь, или нет? menuetlibc у меня один из последних, насколько я понимаю, потому что в нем есть упоминания о Колибри, а не только о menuet... И в каком направлении ковырять? Скомпилированную menuetlibc от Asper'а использовать не могу, потому что у меня не mingw и не cygwin...
  • Sorcerer, Яндекс советует добавить -fno-stack-protector к опциям компиляции. Опции компиляции можно добавить - на выбор - в исходном тексте mgcc или в osrules.mak, с учётом того, что и там, и там есть две ветки, срабатывающие в разных случаях.
    Сделаем мир лучше!
  • CleverMouse wrote:Sorcerer, Яндекс советует добавить -fno-stack-protector к опциям компиляции. Опции компиляции можно добавить - на выбор - в исходном тексте mgcc или в osrules.mak, с учётом того, что и там, и там есть две ветки, срабатывающие в разных случаях.
    Спасибо большое! Я думал, это я такой идиот или неудачник, поэтому и не искал в поиске... Добавление опции не помогло, а вот другие советы, кажется, помогли. Например, совет создать dummy-функцию __stack_chk_fail(void) помог скомпилировать те тесты, которые у меня раньше не компилировались, и они работают. А моя простая программка - нет, библиотека все-таки собралась неправильно, и дело в параметрах сборки, потому что, как выяснилось, некоторые o-файлы включились в архив несколько раз (ума не приложу, как так получилось).
    Но, кажется, собрать freetype для Колибри гораздо более реально, чем я предполагал, и, судя по всему, гораздо быстрее, чем изобретать свой велосипед.
    Конечно, это уже делали до меня, и не раз. И все же я надеюсь, что смогу довести все до ума.
  • Sorcerer, это отлично! Всячески желаю успехов, и в своей разрабатываемой программе обязательно сделаю поддержку таких векторных шрифтов (BGI уже используются и работают, но тормознуты и некрасивы). Нужна будет помощь (кроме как с Си, и компиляцией из него), буду рад помочь (в том же тестировании, например)
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • Шрифты, шрифты... Наконец собрал freetype 1.3.1 по-человечески. Линкуется статически. Проверял только на ftstrpnm - генерирует pnm-изображение с текстом про лису и ленивого пса по данному шрифту (брал Libertation Mono).
    Attachments
    freetype.7z (31.24 KiB)
    Downloaded 346 times
  • Результат выглядит вот так:
    render.png
    render.png (668 Bytes)
    Viewed 8565 times
    Поддерживаются сглаживание, пиксель-хинтинг и всё такое. Бинарник в сжатом виде занимает 50 килобайт, а файл шрифта, который я использовал (Libertation Mono, с поддержкой русского и английского) - около 110 килобайт. Имеется поддержка арабского, но нет поддержки японского и китайского.
    В теории на флоппик влезет, если потеснить игрушки и всё такое. (FreeType2, кажется, потяжелее будет)

    UPD: русский поддерживается в теории. На практике вывести строку на русском мне не удалось. Пробовал передавать UTF-8, CP-1251, CP-1252 и IBM866-строки, все равно :( Пойду читать мануалы.

    Вопрос к знатокам: есть ли возможность сделать COFF-библиотеку с использованием gcc, и если да, то как?
  • Sorcerer

    Для этого надо компилировать все файлы в один (опция -combine).
  • А можно какую-нибудь рыбу, чтобы было понятно, что и как? Файл у меня и так один объектный.
  • Посмотри svn://kolibrios.org/programs/develop/libraries/pixlib.с
    Обязятельные "START" и "VERSION", остальное - твои функции.

    Gcc любит добавлять в объектники отладочную информацию. Надо внимательно смотреть опции компиляции.
  • Ковыряюсь с обертками для функций freetype. Текущая версия библиотеки (1.3.1) в kpack-ованном виде занимает около 26 килобайт, но, судя по всему, скоро размер на несколько килобайт увеличится. Пока что она лишь выводит свою версию, и создает TT_Engine, поэтому не вижу смысла ее выкладывать сюда. Как только эта штуковина взлетит, так сразу и выложу. Впереди неделька-другая свободного времени, и есть большие шансы на то, что за это время я успею всё допилить.

    Выводить текст с помощью freetype можно будет так же просто, как, например, использовать box_lib. Нужно лишь загрузить библиотеку, импортировать нужные функции, загрузить файл шрифта, передать функциям указатели на файл шрифта, текст и область памяти для вывода, и всё.

    Благодарности:
    Spoiler:Радует, что newlib, судя по всему, хорошо соответствует стандартам ANSI C - почти никаких правок исходного кода самой freetype делать не пришлось. Отдельное спасибо Serge за работу!
    А еще спасибо всем, кто помогает Колибри! ;)
  • Библиотека freetype 1.3 для Колибри. Тепленькая, только что из компилятора и линковщика.
    Downloaded 351 times
    В архиве лежат: библиотека (dll), файл для линковки с исходным кодом (libfreetype.a), шрифт Libertation (какой под руку попался из linux) и тестовая программа ftpnm.kex.

    Что со всем этим делать обычному пользователю?
    1) Понадобится архив amz из темы про newlib.
    2) Нужно скопировать libc.obj в /rd/1/lib/ (придется часть файлов с рамдиска удалить скорее всего),
    3) В файл system.env прописать правильные пути к файлам библиотек,
    4) Затем скопировать этот файл в /rd/1/.
    5) После этого открываем доску отладки, и закрываем (в Колибри нет pipes, и stdout идет на доску отладки, так что чистый файл boardlog.txt не повредит).
    6) Затем открываем доску отладки вновь и
    7) Запускаем ftpnm.kex из папки со шрифтом. Если всё хорошо - на доске появится сообщение "P4" и еще несколько цифр. Если всё плохо - то подробно будет рассказано, чего не хватает (библиотеки, шрифта, или благоприятной фазы луны). Будем надеяться, что всё хорошо.
    8) Если всё действительно хорошо, то можно закрывать доску отладки и смотреть на файл /rd/1/boardlog.txt. Если никаких лишних сообщений на доску отладки не приходило, то boardlog.txt можно переименовать в файл с расширением pnm, скопировать его на жесткий диск или флешку, и затем просмотреть в каком-нибудь графическом просмотрщике.
    9) После всего этого можно порадоваться, что freetype теперь работает в Колибри, и его можно использовать в любых программах.

    А как писать программы с использованием freetype?
    Для этих целей я использую mingw, fasm, заголовочные файлы freetype 1.3 (взять их можно из архива с официального сайта freetype), порт newlib (файлы amz-dev из темы про newlib, а так же заголовочные файлы с SVN) и свою голову.
    Код пишу в строгом соответствии с freetype api reference (разумеется, этот файл тоже есть в том же архиве), затем компилирую и линкую так, как это описано в теме про newlib:
    i586-mingw32msvc-gcc -c *.c -fomit-frame-pointer -I include/ -D__DYNAMIC_REENT__ -O2
    i586-mingw32msvc-ld -nostdlib -pie -s -T pe_app.lds --image-base 0 --stack 0x100000 -Map test.map ftstrpnm.o common.o -L ./ -lfreetypeimp -lcimp -lamz -o my_app.exe
    fasm demo.asm ftpnm.kex

    Я не уверен, можно ли использовать эту библиотеку в программах на fasm, но мне кажется, что можно (а как - это уже совсем другой вопрос). Надеюсь, что более компетентные в этом вопросе люди всё расскажут и покажут.

    Спасибо всем за помощь!

    Надеюсь, что в Колибри будут более-менее нормальные шрифты значительно раньше того момента, когда наши дети будут писать письма своим внукам :mrgreen: Почему-то мне кажется, что осталось поработать совсем немного (не считая переписывания части программ на использование масштабируемых шрифтов).
  • Sorcerer

    Тебе всё-таки удалось собрать freetype в библиотеку. Молодец! :)
    Большой шаг в сторону браузера, офисных программ и т.п.

    Ну тут уже больше всех должен радоваться Albom.
  • Sorcerer
    Ура, заработало!!!
    С fasm никаких проблем нет. Народ пишет программы и дллки под Windows, здесь то же самое. Конечно требуются некоторые телодвижения по сравнению с С (опять таблицы импорта или extrn объявления), но не большие чем для работы с COFF DLL.
    Spoiler:Собрать бы ещё Freetype2. Я бы пересобрал Cairo. У них там специальный frontend к фритайпу. Мечтательно :roll:
  • Решил поковырять и freetype2. Объектники компилируются легко (использую компиляцию из одной папки, все по инструкции), осталось правильно настроить include для сборки только необходимых модулей. Линковщик ругается только на FT_ERROR и FT_TRACE1 (на них ругается и при сборке ./configure --host=i586-mingw32msvc --build=i686-linux-elf, видимо, дело в заголовочных файлах), и еще почему-то на _setjmp.
    По непонятной причине def-файл создается где-то в дебрях makefile'ов для visual studio (эх, вот бы сделали как в первом фритайпе, sh-скрипт, и всё), попробую потом его оттуда выдрать. Без def же библиотека не соберется как положено, правильно?
  • Who is online

    Users browsing this forum: No registered users and 4 guests